Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cthardware.h
Go to the documentation of this file.
1 
18 #ifndef CTHARDWARE_H
19 #define CTHARDWARE_H
20 
21 #include <linux/types.h>
22 #include <linux/pci.h>
23 
24 enum CHIPTYP {
28 };
29 
30 enum CTCARDS {
31  /* 20k1 models */
37  /* 20k2 models */
44  NUM_CTCARDS /* This should always be the last */
45 };
46 
47 /* Type of input source for ADC */
48 enum ADCSRC{
53  ADC_NONE /* Switch to digital input */
54 };
55 
56 struct card_conf {
57  /* device virtual mem page table page physical addr
58  * (supporting one page table page now) */
59  unsigned long vm_pgt_phys;
60  unsigned int rsr; /* reference sample rate in Hzs*/
61  unsigned int msr; /* master sample rate in rsrs */
62 };
63 
64 struct capabilities {
65  unsigned int digit_io_switch:1;
66  unsigned int dedicated_mic:1;
67  unsigned int output_switch:1;
68  unsigned int mic_source_switch:1;
69 };
70 
71 struct hw {
72  int (*card_init)(struct hw *hw, struct card_conf *info);
73  int (*card_stop)(struct hw *hw);
74  int (*pll_init)(struct hw *hw, unsigned int rsr);
75 #ifdef CONFIG_PM_SLEEP
76  int (*suspend)(struct hw *hw);
77  int (*resume)(struct hw *hw, struct card_conf *info);
78 #endif
80  int (*select_adc_source)(struct hw *hw, enum ADCSRC source);
81  struct capabilities (*capabilities)(struct hw *hw);
82  int (*output_switch_get)(struct hw *hw);
83  int (*output_switch_put)(struct hw *hw, int position);
84  int (*mic_source_switch_get)(struct hw *hw);
85  int (*mic_source_switch_put)(struct hw *hw, int position);
86 
87  /* SRC operations */
88  int (*src_rsc_get_ctrl_blk)(void **rblk);
90  int (*src_set_state)(void *blk, unsigned int state);
91  int (*src_set_bm)(void *blk, unsigned int bm);
92  int (*src_set_rsr)(void *blk, unsigned int rsr);
93  int (*src_set_sf)(void *blk, unsigned int sf);
94  int (*src_set_wr)(void *blk, unsigned int wr);
95  int (*src_set_pm)(void *blk, unsigned int pm);
96  int (*src_set_rom)(void *blk, unsigned int rom);
97  int (*src_set_vo)(void *blk, unsigned int vo);
98  int (*src_set_st)(void *blk, unsigned int st);
99  int (*src_set_ie)(void *blk, unsigned int ie);
100  int (*src_set_ilsz)(void *blk, unsigned int ilsz);
101  int (*src_set_bp)(void *blk, unsigned int bp);
102  int (*src_set_cisz)(void *blk, unsigned int cisz);
103  int (*src_set_ca)(void *blk, unsigned int ca);
104  int (*src_set_sa)(void *blk, unsigned int sa);
105  int (*src_set_la)(void *blk, unsigned int la);
106  int (*src_set_pitch)(void *blk, unsigned int pitch);
107  int (*src_set_clear_zbufs)(void *blk, unsigned int clear);
108  int (*src_set_dirty)(void *blk, unsigned int flags);
110  int (*src_commit_write)(struct hw *hw, unsigned int idx, void *blk);
111  int (*src_get_ca)(struct hw *hw, unsigned int idx, void *blk);
112  unsigned int (*src_get_dirty)(void *blk);
114  int (*src_mgr_get_ctrl_blk)(void **rblk);
116  /* syncly enable src @idx */
117  int (*src_mgr_enbs_src)(void *blk, unsigned int idx);
118  /* enable src @idx */
119  int (*src_mgr_enb_src)(void *blk, unsigned int idx);
120  /* disable src @idx */
121  int (*src_mgr_dsb_src)(void *blk, unsigned int idx);
122  int (*src_mgr_commit_write)(struct hw *hw, void *blk);
123 
124  /* SRC Input Mapper operations */
125  int (*srcimp_mgr_get_ctrl_blk)(void **rblk);
127  int (*srcimp_mgr_set_imaparc)(void *blk, unsigned int slot);
128  int (*srcimp_mgr_set_imapuser)(void *blk, unsigned int user);
129  int (*srcimp_mgr_set_imapnxt)(void *blk, unsigned int next);
130  int (*srcimp_mgr_set_imapaddr)(void *blk, unsigned int addr);
131  int (*srcimp_mgr_commit_write)(struct hw *hw, void *blk);
132 
133  /* AMIXER operations */
134  int (*amixer_rsc_get_ctrl_blk)(void **rblk);
136  int (*amixer_mgr_get_ctrl_blk)(void **rblk);
138  int (*amixer_set_mode)(void *blk, unsigned int mode);
139  int (*amixer_set_iv)(void *blk, unsigned int iv);
140  int (*amixer_set_x)(void *blk, unsigned int x);
141  int (*amixer_set_y)(void *blk, unsigned int y);
142  int (*amixer_set_sadr)(void *blk, unsigned int sadr);
143  int (*amixer_set_se)(void *blk, unsigned int se);
144  int (*amixer_set_dirty)(void *blk, unsigned int flags);
146  int (*amixer_commit_write)(struct hw *hw, unsigned int idx, void *blk);
147  int (*amixer_get_y)(void *blk);
148  unsigned int (*amixer_get_dirty)(void *blk);
149 
150  /* DAIO operations */
151  int (*dai_get_ctrl_blk)(void **rblk);
153  int (*dai_srt_set_srco)(void *blk, unsigned int src);
154  int (*dai_srt_set_srcm)(void *blk, unsigned int src);
155  int (*dai_srt_set_rsr)(void *blk, unsigned int rsr);
156  int (*dai_srt_set_drat)(void *blk, unsigned int drat);
157  int (*dai_srt_set_ec)(void *blk, unsigned int ec);
158  int (*dai_srt_set_et)(void *blk, unsigned int et);
159  int (*dai_commit_write)(struct hw *hw, unsigned int idx, void *blk);
160  int (*dao_get_ctrl_blk)(void **rblk);
162  int (*dao_set_spos)(void *blk, unsigned int spos);
163  int (*dao_commit_write)(struct hw *hw, unsigned int idx, void *blk);
164  int (*dao_get_spos)(void *blk, unsigned int *spos);
165 
166  int (*daio_mgr_get_ctrl_blk)(struct hw *hw, void **rblk);
168  int (*daio_mgr_enb_dai)(void *blk, unsigned int idx);
169  int (*daio_mgr_dsb_dai)(void *blk, unsigned int idx);
170  int (*daio_mgr_enb_dao)(void *blk, unsigned int idx);
171  int (*daio_mgr_dsb_dao)(void *blk, unsigned int idx);
172  int (*daio_mgr_dao_init)(void *blk, unsigned int idx,
173  unsigned int conf);
174  int (*daio_mgr_set_imaparc)(void *blk, unsigned int slot);
175  int (*daio_mgr_set_imapnxt)(void *blk, unsigned int next);
176  int (*daio_mgr_set_imapaddr)(void *blk, unsigned int addr);
177  int (*daio_mgr_commit_write)(struct hw *hw, void *blk);
178 
179  int (*set_timer_irq)(struct hw *hw, int enable);
180  int (*set_timer_tick)(struct hw *hw, unsigned int tick);
181  unsigned int (*get_wc)(struct hw *hw);
182 
183  void (*irq_callback)(void *data, unsigned int bit);
185 
186  struct pci_dev *pci; /* the pci kernel structure of this card */
187  int irq;
188  unsigned long io_base;
189  unsigned long mem_base;
190 
193 };
194 
195 int create_hw_obj(struct pci_dev *pci, enum CHIPTYP chip_type,
196  enum CTCARDS model, struct hw **rhw);
197 int destroy_hw_obj(struct hw *hw);
198 
199 unsigned int get_field(unsigned int data, unsigned int field);
200 void set_field(unsigned int *data, unsigned int field, unsigned int value);
201 
202 /* IRQ bits */
203 #define PLL_INT (1 << 10) /* PLL input-clock out-of-range */
204 #define FI_INT (1 << 9) /* forced interrupt */
205 #define IT_INT (1 << 8) /* timer interrupt */
206 #define PCI_INT (1 << 7) /* PCI bus error pending */
207 #define URT_INT (1 << 6) /* UART Tx/Rx */
208 #define GPI_INT (1 << 5) /* GPI pin */
209 #define MIX_INT (1 << 4) /* mixer parameter segment FIFO channels */
210 #define DAI_INT (1 << 3) /* DAI (SR-tracker or SPDIF-receiver) */
211 #define TP_INT (1 << 2) /* transport priority queue */
212 #define DSP_INT (1 << 1) /* DSP */
213 #define SRC_INT (1 << 0) /* SRC channels */
214 
215 #endif /* CTHARDWARE_H */