Wai Yew CHAY | 8cc7236 | 2009-05-14 08:05:58 +0200 | [diff] [blame] | 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 */ |
Harry Butterworth | 5530921 | 2011-06-11 16:02:06 +0800 | [diff] [blame] | 36 | MIC, /* Dedicated mic on Titanium HD */ |
Wai Yew CHAY | 8cc7236 | 2009-05-14 08:05:58 +0200 | [diff] [blame] | 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 */ |