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