linux/sound/pci/ctxfi/ctdaio.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/**
   3 * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.
   4 *
   5 * @File        ctdaio.h
   6 *
   7 * @Brief
   8 * This file contains the definition of Digital Audio Input Output
   9 * resource management object.
  10 *
  11 * @Author      Liu Chun
  12 * @Date        May 23 2008
  13 */
  14
  15#ifndef CTDAIO_H
  16#define CTDAIO_H
  17
  18#include "ctresource.h"
  19#include "ctimap.h"
  20#include <linux/spinlock.h>
  21#include <linux/list.h>
  22#include <sound/core.h>
  23
  24/* Define the descriptor of a daio resource */
  25enum DAIOTYP {
  26        LINEO1,
  27        LINEO2,
  28        LINEO3,
  29        LINEO4,
  30        SPDIFOO,        /* S/PDIF Out (Flexijack/Optical) */
  31        LINEIM,
  32        SPDIFIO,        /* S/PDIF In (Flexijack/Optical) on the card */
  33        MIC,            /* Dedicated mic on Titanium HD */
  34        SPDIFI1,        /* S/PDIF In on internal Drive Bay */
  35        NUM_DAIOTYP
  36};
  37
  38struct dao_rsc_ops;
  39struct dai_rsc_ops;
  40struct daio_mgr;
  41
  42struct daio {
  43        struct rsc rscl;        /* Basic resource info for left TX/RX */
  44        struct rsc rscr;        /* Basic resource info for right TX/RX */
  45        enum DAIOTYP type;
  46};
  47
  48struct dao {
  49        struct daio daio;
  50        const struct dao_rsc_ops *ops;  /* DAO specific operations */
  51        struct imapper **imappers;
  52        struct daio_mgr *mgr;
  53        struct hw *hw;
  54        void *ctrl_blk;
  55};
  56
  57struct dai {
  58        struct daio daio;
  59        const struct dai_rsc_ops *ops;  /* DAI specific operations */
  60        struct hw *hw;
  61        void *ctrl_blk;
  62};
  63
  64struct dao_desc {
  65        unsigned int msr:4;
  66        unsigned int passthru:1;
  67};
  68
  69struct dao_rsc_ops {
  70        int (*set_spos)(struct dao *dao, unsigned int spos);
  71        int (*commit_write)(struct dao *dao);
  72        int (*get_spos)(struct dao *dao, unsigned int *spos);
  73        int (*reinit)(struct dao *dao, const struct dao_desc *desc);
  74        int (*set_left_input)(struct dao *dao, struct rsc *input);
  75        int (*set_right_input)(struct dao *dao, struct rsc *input);
  76        int (*clear_left_input)(struct dao *dao);
  77        int (*clear_right_input)(struct dao *dao);
  78};
  79
  80struct dai_rsc_ops {
  81        int (*set_srt_srcl)(struct dai *dai, struct rsc *src);
  82        int (*set_srt_srcr)(struct dai *dai, struct rsc *src);
  83        int (*set_srt_msr)(struct dai *dai, unsigned int msr);
  84        int (*set_enb_src)(struct dai *dai, unsigned int enb);
  85        int (*set_enb_srt)(struct dai *dai, unsigned int enb);
  86        int (*commit_write)(struct dai *dai);
  87};
  88
  89/* Define daio resource request description info */
  90struct daio_desc {
  91        unsigned int type:4;
  92        unsigned int msr:4;
  93        unsigned int passthru:1;
  94};
  95
  96struct daio_mgr {
  97        struct rsc_mgr mgr;     /* Basic resource manager info */
  98        struct snd_card *card;  /* pointer to this card */
  99        spinlock_t mgr_lock;
 100        spinlock_t imap_lock;
 101        struct list_head imappers;
 102        struct imapper *init_imap;
 103        unsigned int init_imap_added;
 104
 105         /* request one daio resource */
 106        int (*get_daio)(struct daio_mgr *mgr,
 107                        const struct daio_desc *desc, struct daio **rdaio);
 108        /* return one daio resource */
 109        int (*put_daio)(struct daio_mgr *mgr, struct daio *daio);
 110        int (*daio_enable)(struct daio_mgr *mgr, struct daio *daio);
 111        int (*daio_disable)(struct daio_mgr *mgr, struct daio *daio);
 112        int (*imap_add)(struct daio_mgr *mgr, struct imapper *entry);
 113        int (*imap_delete)(struct daio_mgr *mgr, struct imapper *entry);
 114        int (*commit_write)(struct daio_mgr *mgr);
 115};
 116
 117/* Constructor and destructor of daio resource manager */
 118int daio_mgr_create(struct hw *hw, struct daio_mgr **rdaio_mgr);
 119int daio_mgr_destroy(struct daio_mgr *daio_mgr);
 120
 121#endif /* CTDAIO_H */
 122