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> |
Sudip Mukherjee | 3d0fdc8 | 2014-09-29 14:33:23 +0530 | [diff] [blame] | 26 | #include <sound/core.h> |
Wai Yew CHAY | 8cc7236 | 2009-05-14 08:05:58 +0200 | [diff] [blame] | 27 | |
| 28 | /* Define the descriptor of a daio resource */ |
| 29 | enum DAIOTYP { |
| 30 | LINEO1, |
| 31 | LINEO2, |
| 32 | LINEO3, |
| 33 | LINEO4, |
| 34 | SPDIFOO, /* S/PDIF Out (Flexijack/Optical) */ |
| 35 | LINEIM, |
| 36 | SPDIFIO, /* S/PDIF In (Flexijack/Optical) on the card */ |
Harry Butterworth | 5530921 | 2011-06-11 16:02:06 +0800 | [diff] [blame] | 37 | MIC, /* Dedicated mic on Titanium HD */ |
Wai Yew CHAY | 8cc7236 | 2009-05-14 08:05:58 +0200 | [diff] [blame] | 38 | SPDIFI1, /* S/PDIF In on internal Drive Bay */ |
| 39 | NUM_DAIOTYP |
| 40 | }; |
| 41 | |
| 42 | struct dao_rsc_ops; |
| 43 | struct dai_rsc_ops; |
| 44 | struct daio_mgr; |
| 45 | |
| 46 | struct daio { |
| 47 | struct rsc rscl; /* Basic resource info for left TX/RX */ |
| 48 | struct rsc rscr; /* Basic resource info for right TX/RX */ |
| 49 | enum DAIOTYP type; |
| 50 | }; |
| 51 | |
| 52 | struct dao { |
| 53 | struct daio daio; |
Julia Lawall | 43f2cde | 2015-11-08 23:40:41 +0100 | [diff] [blame] | 54 | const struct dao_rsc_ops *ops; /* DAO specific operations */ |
Wai Yew CHAY | 8cc7236 | 2009-05-14 08:05:58 +0200 | [diff] [blame] | 55 | struct imapper **imappers; |
| 56 | struct daio_mgr *mgr; |
Sudip Mukherjee | 6664089 | 2014-09-29 14:33:21 +0530 | [diff] [blame] | 57 | struct hw *hw; |
Wai Yew CHAY | 8cc7236 | 2009-05-14 08:05:58 +0200 | [diff] [blame] | 58 | void *ctrl_blk; |
| 59 | }; |
| 60 | |
| 61 | struct dai { |
| 62 | struct daio daio; |
Julia Lawall | 43f2cde | 2015-11-08 23:40:41 +0100 | [diff] [blame] | 63 | const struct dai_rsc_ops *ops; /* DAI specific operations */ |
Sudip Mukherjee | 6664089 | 2014-09-29 14:33:21 +0530 | [diff] [blame] | 64 | struct hw *hw; |
Wai Yew CHAY | 8cc7236 | 2009-05-14 08:05:58 +0200 | [diff] [blame] | 65 | void *ctrl_blk; |
| 66 | }; |
| 67 | |
| 68 | struct dao_desc { |
| 69 | unsigned int msr:4; |
| 70 | unsigned int passthru:1; |
| 71 | }; |
| 72 | |
| 73 | struct dao_rsc_ops { |
| 74 | int (*set_spos)(struct dao *dao, unsigned int spos); |
| 75 | int (*commit_write)(struct dao *dao); |
| 76 | int (*get_spos)(struct dao *dao, unsigned int *spos); |
| 77 | int (*reinit)(struct dao *dao, const struct dao_desc *desc); |
| 78 | int (*set_left_input)(struct dao *dao, struct rsc *input); |
| 79 | int (*set_right_input)(struct dao *dao, struct rsc *input); |
| 80 | int (*clear_left_input)(struct dao *dao); |
| 81 | int (*clear_right_input)(struct dao *dao); |
| 82 | }; |
| 83 | |
| 84 | struct dai_rsc_ops { |
| 85 | int (*set_srt_srcl)(struct dai *dai, struct rsc *src); |
| 86 | int (*set_srt_srcr)(struct dai *dai, struct rsc *src); |
| 87 | int (*set_srt_msr)(struct dai *dai, unsigned int msr); |
| 88 | int (*set_enb_src)(struct dai *dai, unsigned int enb); |
| 89 | int (*set_enb_srt)(struct dai *dai, unsigned int enb); |
| 90 | int (*commit_write)(struct dai *dai); |
| 91 | }; |
| 92 | |
| 93 | /* Define daio resource request description info */ |
| 94 | struct daio_desc { |
| 95 | unsigned int type:4; |
| 96 | unsigned int msr:4; |
| 97 | unsigned int passthru:1; |
| 98 | }; |
| 99 | |
| 100 | struct daio_mgr { |
| 101 | struct rsc_mgr mgr; /* Basic resource manager info */ |
Sudip Mukherjee | 3d0fdc8 | 2014-09-29 14:33:23 +0530 | [diff] [blame] | 102 | struct snd_card *card; /* pointer to this card */ |
Wai Yew CHAY | 8cc7236 | 2009-05-14 08:05:58 +0200 | [diff] [blame] | 103 | spinlock_t mgr_lock; |
| 104 | spinlock_t imap_lock; |
| 105 | struct list_head imappers; |
| 106 | struct imapper *init_imap; |
| 107 | unsigned int init_imap_added; |
| 108 | |
| 109 | /* request one daio resource */ |
| 110 | int (*get_daio)(struct daio_mgr *mgr, |
| 111 | const struct daio_desc *desc, struct daio **rdaio); |
| 112 | /* return one daio resource */ |
| 113 | int (*put_daio)(struct daio_mgr *mgr, struct daio *daio); |
| 114 | int (*daio_enable)(struct daio_mgr *mgr, struct daio *daio); |
| 115 | int (*daio_disable)(struct daio_mgr *mgr, struct daio *daio); |
| 116 | int (*imap_add)(struct daio_mgr *mgr, struct imapper *entry); |
| 117 | int (*imap_delete)(struct daio_mgr *mgr, struct imapper *entry); |
| 118 | int (*commit_write)(struct daio_mgr *mgr); |
| 119 | }; |
| 120 | |
| 121 | /* Constructor and destructor of daio resource manager */ |
Sudip Mukherjee | 6664089 | 2014-09-29 14:33:21 +0530 | [diff] [blame] | 122 | int daio_mgr_create(struct hw *hw, struct daio_mgr **rdaio_mgr); |
Wai Yew CHAY | 8cc7236 | 2009-05-14 08:05:58 +0200 | [diff] [blame] | 123 | int daio_mgr_destroy(struct daio_mgr *daio_mgr); |
| 124 | |
| 125 | #endif /* CTDAIO_H */ |