ctdaio.h (3274B)
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 */