kernel: sound: Adding TI codec support
[linux-2.6.git] / sound / soc / codecs / tlv320aic326x.h
1 /*
2  * linux/sound/soc/codecs/tlv320aic3262.h
3  *
4  *
5  * Copyright (C) 2011 Mistral Solutions Pvt Ltd.
6  *
7  * This package is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  *
11  * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
12  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
13  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
14  *
15  * History:
16  *  Rev 0.1   ASoC driver support    Mistral         20-01-2011
17  *
18  * The AIC3262 ASoC driver is ported for the codec AIC3262.
19  *
20  */
21
22 #ifndef _TLV320AIC3262_H
23 #define _TLV320AIC3262_H
24
25 #define AUDIO_NAME "aic3262"
26 #define AIC3262_VERSION "1.1"
27
28 /* Enable this macro allow for different ASI formats */
29 /*#define ASI_MULTI_FMT*/
30 #undef ASI_MULTI_FMT
31 /* Enable register caching on write */
32 #define EN_REG_CACHE
33
34 #define MULTIBYTE_CONFIG_SUPPORT
35
36
37 /* Macro enables or disables support for miniDSP in the driver */
38 /* Enable the AIC3262_TiLoad macro first before enabling these macros */
39 #define CONFIG_MINI_DSP
40 /*#undef CONFIG_MINI_DSP*/
41
42 /* Enable or disable controls to have Input routing*/
43 /*#define FULL_IN_CNTL */
44 #undef FULL_IN_CNTL
45 /* AIC3262 supported sample rate are 8k to 192k */
46 #define AIC3262_RATES   SNDRV_PCM_RATE_8000_192000
47
48 /* AIC3262 supports the word formats 16bits, 20bits, 24bits and 32 bits */
49 #define AIC3262_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE \
50                          | SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S32_LE)
51
52 #define AIC3262_FREQ_12000000 12000000
53 #define AIC3262_FREQ_12288000 12288000
54 #define AIC3262_FREQ_24000000 24000000
55
56 /* Macro for enabling the Multi_I2S Support in Driver */
57 #define AIC3262_MULTI_I2S       1
58
59 /* Driver Debug Messages Enabled */
60 #define DEBUG
61
62 #ifdef DEBUG
63         #define DBG(x...)       printk(x)
64 #else
65         #define DBG(x...)
66 #endif
67
68 /*Select the below macro to decide on the DAC master volume controls.
69  *2 independent or one combined
70  */
71 /*#define DAC_INDEPENDENT_VOL*/
72 #undef DAC_INDEPENDENT_VOL
73
74 /* Audio data word length = 16-bits (default setting) */
75 #define AIC3262_WORD_LEN_16BITS         0x00
76 #define AIC3262_WORD_LEN_20BITS         0x01
77 #define AIC3262_WORD_LEN_24BITS         0x02
78 #define AIC3262_WORD_LEN_32BITS         0x03
79
80 /* sink: name of target widget */
81 #define AIC3262_WIDGET_NAME     0
82 /* control: mixer control name */
83 #define AIC3262_CONTROL_NAME
84 /* source: name of source name */
85 #define AIC3262_SOURCE_NAME     2
86
87 /* D15..D8 aic3262 register offset */
88 #define AIC3262_REG_OFFSET_INDEX    0
89 /* D7...D0 register data */
90 #define AIC3262_REG_DATA_INDEX      1
91
92 /* Serial data bus uses I2S mode (Default mode) */
93 #define AIC3262_I2S_MODE                0x00
94 #define AIC3262_DSP_MODE                0x01
95 #define AIC3262_RIGHT_JUSTIFIED_MODE    0x02
96 #define AIC3262_LEFT_JUSTIFIED_MODE     0x03
97
98 /* 8 bit mask value */
99 #define AIC3262_8BITS_MASK           0xFF
100
101 /* shift value for CLK_REG_3 register */
102 #define CLK_REG_3_SHIFT                 6
103 /* shift value for DAC_OSR_MSB register */
104 #define DAC_OSR_MSB_SHIFT               4
105
106 /* number of codec specific register for configuration */
107 #define NO_FEATURE_REGS                 2
108
109 /* Total number of ASI Ports */
110 #define MAX_ASI_COUNT                   3
111
112 /* AIC3262 register space */
113 /* Updated from 256 to support Page 3 registers */
114 #define AIC3262_CACHEREGNUM             1024
115 #define BIT7             (0x01 << 7)
116 #define BIT6             (0x01 << 6)
117 #define BIT5             (0x01 << 5)
118 #define BIT4             (0x01 << 4)
119 #define BIT3             (0x01 << 3)
120 #define BIT2             (0x01 << 2)
121 #define BIT1             (0x01 << 1)
122 #define BIT0             (0x01 << 0)
123
124 #define DAC_FLAG_MIC_MASKBITS   0x30
125 #define DAC_FLAG_HS_MASKBITS    0x03
126 #define DAC_FLAG_R1_NOJACK      0
127 #define DAC_FLAG_R1_NOMIC       (0x1 << 4)
128 #define DAC_FLAG_R1_MIC         (0x3 << 4)
129 #define DAC_FLAG_R1_NOHS        0
130 #define DAC_FLAG_R1_MONOHS      1
131 #define DAC_FLAG_R1_STEREOHS    2
132 /* ****************** Book 0 Registers **************************************/
133
134 /* ****************** Page 0 Registers **************************************/
135
136 #define PAGE_SEL_REG            0
137 #define RESET_REG               1
138 #define DAC_ADC_CLKIN_REG       4
139 #define PLL_CLKIN_REG           5
140 #define PLL_CLK_RANGE_REG       5
141 #define PLL_PR_POW_REG          6
142 #define PLL_J_REG               7
143 #define PLL_D_MSB               8
144 #define PLL_D_LSB               9
145 #define PLL_CKIN_DIV            10
146
147 #define NDAC_DIV_POW_REG        11
148 #define MDAC_DIV_POW_REG        12
149 #define DOSR_MSB_REG            13
150 #define DOSR_LSB_REG            14
151
152 #define NADC_DIV_POW_REG        18
153 #define MADC_DIV_POW_REG        19
154 #define AOSR_REG                20
155 #define CLKOUT_MUX              21
156 #define CLKOUT_MDIV_VAL         22
157 #define TIMER_REG               23
158
159 #define LF_CLK_CNTL             24
160 #define HF_CLK_CNTL_R1          25
161 #define HF_CLK_CNTL_R2          26
162 #define HF_CLK_CNTL_R3          27
163 #define HF_CLK_CNTL_R4          28
164 #define HF_CLK_TRIM_R1          29
165 #define HF_CLK_TRIM_R2          30
166 #define HF_CLK_TRIM_R3          31
167 #define HF_CLK_TRIM_R4          32
168 #define DAC_FLAG_R1             37
169 #define DAC_FLAG_R2             38
170
171 #define STICKY_FLAG1            42
172 #define INT_FLAG1               43
173 #define STICKY_FLAG2            44
174 #define INT_FLAG2               46
175 #define INT1_CNTL               48
176 #define INT2_CNTL               49
177 #define INT_FMT                 51
178
179 #define DAC_PRB                 60
180 #define ADC_PRB                 61
181 #define PASI_DAC_DP_SETUP       63
182 #define DAC_MVOL_CONF           64
183 #define DAC_LVOL                65
184 #define DAC_RVOL                66
185 #define HP_DETECT               67
186 #define DRC_CNTL_R1             68
187 #define DRC_CNTL_R2             69
188 #define DRC_CNTL_R3             70
189 #define BEEP_CNTL_R1            71
190 #define BEEP_CNTL_R2            72
191
192 #define ADC_CHANNEL_POW         81
193 #define ADC_FINE_GAIN           82
194 #define LADC_VOL                83
195 #define RADC_VOL                84
196 #define ADC_PHASE               85
197
198 #define LAGC_CNTL               86
199 #define LAGC_CNTL_R2            87
200 #define LAGC_CNTL_R3            88
201 #define LAGC_CNTL_R4            89
202 #define LAGC_CNTL_R5            90
203 #define LAGC_CNTL_R6            91
204 #define LAGC_CNTL_R7            92
205 #define LAGC_CNTL_R8            93
206
207 #define RAGC_CNTL               94
208 #define RAGC_CNTL_R2            95
209 #define RAGC_CNTL_R3            96
210 #define RAGC_CNTL_R4            97
211 #define RAGC_CNTL_R5            98
212 #define RAGC_CNTL_R6            99
213 #define RAGC_CNTL_R7            100
214 #define RAGC_CNTL_R8            101
215 #define MINIDSP_ACCESS_CTRL     121
216 /* ****************** Page 1 Registers **************************************/
217 #define PAGE_1                  128
218
219 #define POWER_CONF              (PAGE_1 + 1)
220 #define LDAC_PTM                (PAGE_1 + 3)
221 #define RDAC_PTM                (PAGE_1 + 4)
222 #define CM_REG                  (PAGE_1 + 8)
223 #define HP_CTL                  (PAGE_1 + 9)
224 #define HP_DEPOP                (PAGE_1 + 11)
225 #define RECV_DEPOP              (PAGE_1 + 12)
226 #define MA_CNTL                 (PAGE_1 + 17)
227 #define LADC_PGA_MAL_VOL        (PAGE_1 + 18)
228 #define RADC_PGA_MAR_VOL        (PAGE_1 + 19)
229
230
231 #define LINE_AMP_CNTL_R1        (PAGE_1 + 22)
232 #define LINE_AMP_CNTL_R2        (PAGE_1 + 23)
233
234 #define HP_AMP_CNTL_R1          (PAGE_1 + 27)
235 #define HP_AMP_CNTL_R2          (PAGE_1 + 28)
236 #define HP_AMP_CNTL_R3          (PAGE_1 + 29)
237
238 #define HPL_VOL                 (PAGE_1 + 31)
239 #define HPR_VOL                 (PAGE_1 + 32)
240 #define INT1_SEL_L              (PAGE_1 + 34)
241 #define RAMP_CNTL_R1            (PAGE_1 + 36)
242 #define RAMP_CNTL_R2            (PAGE_1 + 37)
243 #define INT1_SEL_RM             (PAGE_1 + 39)
244 #define REC_AMP_CNTL_R5         (PAGE_1 + 40)
245 #define RAMPR_VOL               (PAGE_1 + 41)
246 #define RAMP_TIME_CNTL          (PAGE_1 + 42)
247 #define SPK_AMP_CNTL_R1         (PAGE_1 + 45)
248 #define SPK_AMP_CNTL_R2         (PAGE_1 + 46)
249 #define SPK_AMP_CNTL_R3         (PAGE_1 + 47)
250 #define SPK_AMP_CNTL_R4         (PAGE_1 + 48)
251 #define MIC_BIAS_CNTL           (PAGE_1 + 51)
252
253 #define LMIC_PGA_PIN            (PAGE_1 + 52)
254 #define LMIC_PGA_PM_IN4         (PAGE_1 + 53)
255 #define LMIC_PGA_MIN            (PAGE_1 + 54)
256 #define RMIC_PGA_PIN            (PAGE_1 + 55)
257 #define RMIC_PGA_PM_IN4         (PAGE_1 + 56)
258 #define RMIC_PGA_MIN            (PAGE_1 + 57)
259 /* MIC PGA Gain Registers */
260 #define MICL_PGA                (PAGE_1 + 59)
261 #define MICR_PGA                (PAGE_1 + 60)
262 #define HEADSET_TUNING1_REG     (PAGE_1 + 119)
263 #define HEADSET_TUNING2_REG     (PAGE_1 + 120)
264 #define MIC_PWR_DLY             (PAGE_1 + 121)
265 #define REF_PWR_DLY             (PAGE_1 + 122)
266
267 /* ****************** Page 4 Registers **************************************/
268 #define PAGE_4                  512
269 #define ASI1_BUS_FMT            (PAGE_4 + 1)
270 #define ASI1_LCH_OFFSET         (PAGE_4 + 2)
271 #define ASI1_RCH_OFFSET         (PAGE_4 + 3)
272 #define ASI1_CHNL_SETUP         (PAGE_4 + 4)
273 #define ASI1_MULTI_CH_SETUP_R1  (PAGE_4 + 5)
274 #define ASI1_MULTI_CH_SETUP_R2  (PAGE_4 + 6)
275 #define ASI1_ADC_INPUT_CNTL     (PAGE_4 + 7)
276 #define ASI1_DAC_OUT_CNTL       (PAGE_4 + 8)
277 #define ASI1_ADC_OUT_TRISTATE   (PAGE_4 + 9)
278 #define ASI1_BWCLK_CNTL_REG     (PAGE_4 + 10)
279 #define ASI1_BCLK_N_CNTL        (PAGE_4 + 11)
280 #define ASI1_BCLK_N             (PAGE_4 + 12)
281 #define ASI1_WCLK_N             (PAGE_4 + 13)
282 #define ASI1_BWCLK_OUT_CNTL     (PAGE_4 + 14)
283 #define ASI1_DATA_OUT           (PAGE_4 + 15)
284 #define ASI2_BUS_FMT            (PAGE_4 + 17)
285 #define ASI2_LCH_OFFSET         (PAGE_4 + 18)
286 #define ASI2_RCH_OFFSET         (PAGE_4 + 19)
287 #define ASI2_ADC_INPUT_CNTL     (PAGE_4 + 23)
288 #define ASI2_DAC_OUT_CNTL       (PAGE_4 + 24)
289 #define ASI2_BWCLK_CNTL_REG     (PAGE_4 + 26)
290 #define ASI2_BCLK_N_CNTL        (PAGE_4 + 27)
291 #define ASI2_BCLK_N             (PAGE_4 + 28)
292 #define ASI2_WCLK_N             (PAGE_4 + 29)
293 #define ASI2_BWCLK_OUT_CNTL     (PAGE_4 + 30)
294 #define ASI2_DATA_OUT           (PAGE_4 + 31)
295 #define ASI3_BUS_FMT            (PAGE_4 + 33)
296 #define ASI3_LCH_OFFSET         (PAGE_4 + 34)
297 #define ASI3_RCH_OFFSET         (PAGE_4 + 35)
298 #define ASI3_ADC_INPUT_CNTL     (PAGE_4 + 39)
299 #define ASI3_DAC_OUT_CNTL       (PAGE_4 + 40)
300 #define ASI3_BWCLK_CNTL_REG     (PAGE_4 + 42)
301 #define ASI3_BCLK_N             (PAGE_4 + 44)
302 #define ASI3_WCLK_N             (PAGE_4 + 45)
303 #define ASI3_BWCLK_OUT_CNTL     (PAGE_4 + 46)
304 #define ASI3_DATA_OUT           (PAGE_4 + 47)
305 #define WCLK1_PIN_CNTL_REG      (PAGE_4 + 65)
306 #define DOUT1_PIN_CNTL_REG      (PAGE_4 + 67)
307 #define DIN1_PIN_CNTL_REG       (PAGE_4 + 68)
308 #define WCLK2_PIN_CNTL_REG      (PAGE_4 + 69)
309 #define BCLK2_PIN_CNTL_REG      (PAGE_4 + 70)
310 #define DOUT2_PIN_CNTL_REG      (PAGE_4 + 71)
311 #define DIN2_PIN_CNTL_REG       (PAGE_4 + 72)
312 #define WCLK3_PIN_CNTL_REG      (PAGE_4 + 73)
313 #define BCLK3_PIN_CNTL_REG      (PAGE_4 + 74)
314 #define DOUT3_PIN_CNTL_REG      (PAGE_4 + 75)
315 #define DIN3_PIN_CNTL_REG       (PAGE_4 + 76)
316 #define MCLK2_PIN_CNTL_REG      (PAGE_4 + 82)
317 #define GPIO1_IO_CNTL           (PAGE_4 + 86)
318 #define GPIO2_IO_CNTL           (PAGE_4 + 87)
319 #define GPI1_EN                 (PAGE_4 + 91)
320 #define GPO2_EN                 (PAGE_4 + 92)
321 #define GPO1_PIN_CNTL           (PAGE_4 + 96)
322 #define MINIDSP_PORT_CNTL_REG   (PAGE_4 + 118)
323
324 /****************************************************************************
325 * Mixer control  related #defines
326 ***************************************************************************
327 */
328 #define WCLK1_ENUM            0
329 #define DOUT1_ENUM            1
330 #define DIN1_ENUM             2
331 #define WCLK2_ENUM            3
332 #define BCLK2_ENUM            4
333 #define DOUT2_ENUM            5
334 #define DIN2_ENUM             6
335 #define WCLK3_ENUM            7
336 #define BCLK3_ENUM            8
337 #define DOUT3_ENUM            9
338 #define DIN3_ENUM             10
339 #define CLKIN_ENUM            11
340 /*
341 *****************************************************************************
342 * Enumeration Definitions
343 *****************************************************************************
344 */
345 /* The below enumeration lists down all the possible inputs to the
346 * the PLL of the AIC3262. The Private structure will hold a member
347 * of this Enumeration Type.
348 */
349 enum AIC3262_PLL_OPTION {
350         PLL_CLKIN_MCLK1 = 0,    /* 0000: (Device Pin) */
351         PLL_CLKIN_BLKC1,        /* 0001: (Device Pin) */
352         PLL_CLKIN_GPIO1,        /* 0010: (Device Pin)*/
353         PLL_CLKIN_DIN1,         /* 0011: (Device Pin)*/
354         PLL_CLKIN_BCLK2,        /* 0100: (Device Pin)*/
355         PLL_CLKIN_GPI1,         /* 0101: (Device Pin)*/
356         PLL_CLKIN_HF_REF_CLK,   /* 0110: (Device Pin)*/
357         PLL_CLKIN_GPIO2,        /* 0111: (Device Pin)*/
358         PLL_CLKIN_GPI2,         /* 1000: (Device Pin)*/
359         PLL_CLKIN_MCLK2         /* 1001: (Device Pin)*/
360 };
361
362 /* ASI Specific Bit Clock Divider Input Options.
363 * Please refer to Page 4 Reg 11, Reg 27 and Reg 43
364 */
365 enum ASI_BDIV_CLKIN_OPTION {
366         BDIV_CLKIN_DAC_CLK = 0,         /* 00 DAC_CLK     */
367         BDIV_CLKIN_DAC_MOD_CLK,         /* 01 DAC_MOD_CLK */
368         BDIV_CLKIN_ADC_CLK,             /* 02 ADC_CLK     */
369         BDIV_CLKIN_ADC_MOD_CLK          /* 03 ADC_MOD_CLK */
370 };
371
372 /* ASI Specific Bit Clock Output Mux Options.
373 * Please refer to Page 4 Reg 14, Reg 30 and Reg 46
374 * Please note that we are not handling the Reserved
375 * cases here.
376 */
377 enum ASI_BCLK_OPTION {
378         ASI1_BCLK_DIVIDER_OUTPUT = 0,   /* 00 ASI1 Bit Clock Divider Output */
379         ASI1_BCLK_INPUT,                /* 01 ASI1 Bit Clock Input */
380         ASI2_BCLK_DIVIDER_OUTPUT,       /* 02 ASI2 Bit Clock Divider Output  */
381         ASI2_BCLK_INPUT,                /* 03 ASI2 Bit Clock Input */
382         ASI3_BCLK_DIVIDER_OUTPUT,       /* 04 ASI3 Bit Clock Divider Output  */
383         ASI3_BBCLK_INPUT                /* 05 ASi3 Bit Clock Input */
384 };
385
386 /* Above bits are to be configured after Shifting 4 bits */
387 #define AIC3262_ASI_BCLK_MUX_SHIFT      4
388 #define AIC3262_ASI_BCLK_MUX_MASK       (BIT6 | BIT5 | BIT4)
389 #define AIC3262_ASI_WCLK_MUX_MASK       (BIT2 | BIT1 | BIT0)
390
391 /* ASI Specific Word Clock Output Mux Options */
392 enum ASI_WCLK_OPTION {
393         GENERATED_DAC_FS = 0,           /* 00 WCLK = DAC_FS */
394         GENERATED_ADC_FS = 1,           /* 01 WCLK = ADC_FS */
395         ASI1_WCLK_DIV_OUTPUT = 2,       /* 02 WCLK = ASI1 WCLK_DIV_OUT */
396         ASI1_WCLK_INPUT      = 3,       /* 03 WCLK = ASI1 WCLK Input   */
397         ASI2_WCLK_DIV_OUTPUT = 4,       /* 04 WCLK = ASI2 WCLK_DIV_OUT */
398         ASI2_WCLK_INPUT      = 5,       /* 05 WCLK = ASI2 WCLK Input   */
399         ASI3_WCLK_DIV_OUTPUT = 6,       /* 06 WCLK = ASI3 WCLK_DIV_OUT */
400         ASI3_WCLK_INPUT      = 7        /* 07 WCLK = ASI3 WCLK Input   */
401 };
402
403 /* ASI DAC Output Control Options */
404 enum ASI_DAC_OUTPUT_OPTION {
405         DAC_PATH_OFF = 0,       /* 00 DAC Datapath Off */
406         DAC_PATH_LEFT,          /* 01 DAC Datapath left Data */
407         DAC_PATH_RIGHT,         /* 02 DAC Datapath Right Data */
408 };
409
410 /* Shift the above options by so many bits */
411 #define AIC3262_ASI_LDAC_PATH_SHIFT     6
412 #define AIC3262_ASI_LDAC_PATH_MASK      (BIT5 | BIT4)
413 #define AIC3262_ASI_RDAC_PATH_SHIFT     4
414 #define AIC3262_ASI_RDAC_PATH_MASK      (BIT7 | BIT6)
415
416 /* ASI specific ADC Input Control Options */
417 enum ASI_ADC_INPUT_OPTION {
418         ADC_PATH_OFF = 0,       /* 00 ASI Digital Output Disabled */
419         ADC_PATH_MINIDSP_1,     /* 01 ASI Digital O/P from miniDSP_A(L1,R1) */
420         ADC_PATH_ASI1,          /* 02 ASI Digital Output from ASI1 */
421         ADC_PATH_ASI2,          /* 03 ASI Digital Output from ASI2 */
422         ADC_PATH_ASI3,          /* 04 ASI Digital Output from ASI3 */
423         ADC_PATH_MINIDSP_2,     /* 05 ASI Digital O/P from miniDSP_A(L2,R2) */
424         ADC_PATH_MINIDSP_3      /* 05 ASI Digital O/P from miniDSP_A(L3,R3) */
425 };
426
427 /* ASI Specific DOUT Pin Options */
428 enum ASI_DOUT_OPTION {
429         ASI_OUTPUT = 0,         /* 00 Default ASI Output */
430         ASI1_INPUT,             /* 01 ASI1 Data Input    */
431         ASI2_INPUT,             /* 02 ASI2 Data Input    */
432         ASI3_INPUT              /* 03 ASI3 Data Input    */
433 };
434
435 #define AIC3262_ASI_DOUT_MASK   (BIT1 | BIT0)
436
437 /*
438  *****************************************************************************
439  * Structures Definitions
440  *****************************************************************************
441  */
442 #define AIC3262_MULTI_ASI_ACTIVE(x) (((x)->asiCtxt[0].asi_active) || \
443                         ((x)->asiCtxt[1].asi_active) || \
444                         ((x)->asiCtxt[2].asi_active))
445
446 /*
447 *----------------------------------------------------------------------------
448 * @struct  aic3262_setup_data |
449 *          i2c specific data setup for AIC3262.
450 * @field   unsigned short |i2c_address |
451 *          Unsigned short for i2c address.
452 *----------------------------------------------------------------------------
453 */
454         struct aic3262_setup_data {
455         unsigned short i2c_address;
456 };
457
458 /*
459 *----------------------------------------------------------------------------
460 * @struct aic3262_asi_data
461 *       ASI specific data stored for each ASI Interface
462 *
463 *
464 *---------------------------------------------------------------------------
465 */
466 struct aic3262_asi_data {
467         u8 asi_active;                                  /* ASI Active Flag */
468         u8 master;                                      /* Frame Master */
469         u32 sampling_rate;                              /* Sampling Rate */
470         enum ASI_BDIV_CLKIN_OPTION bclk_div_option;     /* BCLK DIV Mux Option*/
471         enum ASI_BCLK_OPTION    bclk_output;            /* BCLK Output Option*/
472         enum ASI_WCLK_OPTION    wclk_output;            /* WCLK Output Option*/
473         u8                      bclk_div;               /* BCLK Divider */
474         u8                      wclk_div;               /* WCLK Divider */
475         enum ASI_DAC_OUTPUT_OPTION left_dac_output;     /* LDAC Path */
476         enum ASI_DAC_OUTPUT_OPTION right_dac_output;    /* RDAC Path */
477         enum ASI_ADC_INPUT_OPTION  adc_input;           /* ADC Input Control */
478         enum ASI_DOUT_OPTION    dout_option;            /* DOUT Option */
479         u8                      playback_mode;          /* Playback Selected */
480         u8                      capture_mode;           /* Record Selected */
481         u8                      port_muted;             /* ASI Muted */
482         u8                      pcm_format;             /* PCM Format */
483         u8                      word_len;               /* Word Length */
484         u8                      offset1;                /* Left Ch offset */
485         u8                      offset2;                /* Right Ch Offset */
486 };
487
488 /*
489 *----------------------------------------------------------------------------
490 * @struct  aic3262_priv |
491 *          AIC3262 priviate data structure to set the system clock, mode and
492 *          page number.
493 * @field   u32 | sysclk |
494 *          system clock
495 * @field   s32 | master |
496 *          master/slave mode setting for AIC3262
497 * @field   u8 | book_no |
498 *          book number.
499 * @field   u8 | page_no |
500 *          page number. Here, page 0 and page 1 are used.
501 *----------------------------------------------------------------------------
502 */
503 struct aic3262_priv {
504         enum snd_soc_control_type control_type;
505         struct aic326x_pdata *pdata;
506         u32 sysclk;
507         s32 master;
508         u8 book_no;
509         u8 page_no;
510         u8 process_flow;
511         u8 mute_codec;
512         u8 stream_status;
513         u32 active_count;
514         int current_dac_config[MAX_ASI_COUNT];
515         int current_adc_config[MAX_ASI_COUNT];
516         struct aic3262_asi_data asiCtxt[MAX_ASI_COUNT];
517         enum AIC3262_PLL_OPTION aic3262_pllclkin_option;
518         u8 dac_clkin_option;
519         u8 adc_clkin_option;
520         int irq;
521         struct snd_soc_jack *headset_jack;
522 };
523
524 /*
525  *----------------------------------------------------------------------------
526  * @struct  aic3262_configs |
527  *          AIC3262 initialization data which has register offset and register
528  *          value.
529  * @field   u8 | book_no |
530  *          AIC3262 Book Number Offsets required for initialization..
531  * @field   u16 | reg_offset |
532  *          AIC3262 Register offsets required for initialization..
533  * @field   u8 | reg_val |
534  *          value to set the AIC3262 register to initialize the AIC3262.
535  *----------------------------------------------------------------------------
536  */
537 struct aic3262_configs {
538         u8 book_no;
539         u16 reg_offset;
540         u8  reg_val;
541 };
542
543 /*
544  *----------------------------------------------------------------------------
545  * @struct  aic3262_rate_divs |
546  *          Setting up the values to get different freqencies
547  * @field   u32 | mclk |
548  *          Master clock
549  * @field   u32 | rate |
550  *          sample rate
551  * @field   u8 | p_val |
552  *          value of p in PLL
553  * @field   u32 | pll_j |
554  *          value for pll_j
555  * @field   u32 | pll_d |
556  *          value for pll_d
557  * @field   u32 | dosr |
558  *          value to store dosr
559  * @field   u32 | ndac |
560  *          value for ndac
561  * @field   u32 | mdac |
562  *          value for mdac
563  * @field   u32 | aosr |
564  *          value for aosr
565  * @field   u32 | nadc |
566  *          value for nadc
567  * @field   u32 | madc |
568  *          value for madc
569  * @field   u32 | blck_N |
570  *          value for block N
571  * @field   u32 | aic3262_configs |
572  *          configurations for aic3262 register value
573  *----------------------------------------------------------------------------
574  */
575 struct aic3262_rate_divs {
576         u32 mclk;
577         u32 rate;
578         u8 p_val;
579         u8 pll_j;
580         u16 pll_d;
581         u16 dosr;
582         u8 ndac;
583         u8 mdac;
584         u8 aosr;
585         u8 nadc;
586         u8 madc;
587         u8 blck_N;
588         struct aic3262_configs codec_specific_regs[NO_FEATURE_REGS];
589 };
590
591 /*
592 *****************************************************************************
593 * EXTERN DECLARATIONS
594 *****************************************************************************
595 */
596 /*
597  *----------------------------------------------------------------------------
598  * @func  aic326x_headset_detect
599  *      This function help to setup the needed registers to
600  *      enable the headset detection
601  *
602  */
603 extern int aic326x_headset_detect(struct snd_soc_codec *codec,
604         struct snd_soc_jack *jack, int jack_type);
605
606
607 extern u8 aic3262_read(struct snd_soc_codec *codec, u16 reg);
608 extern u16 aic3262_read_2byte(struct snd_soc_codec *codec, u16 reg);
609 extern int aic3262_reset_cache(struct snd_soc_codec *codec);
610 extern int aic3262_change_page(struct snd_soc_codec *codec, u8 new_page);
611 extern int aic3262_write(struct snd_soc_codec *codec, u16 reg, u8 value);
612 extern void aic3262_write_reg_cache(struct snd_soc_codec *codec,
613                                     u16 reg, u8 value);
614 extern int aic3262_change_book(struct snd_soc_codec *codec, u8 new_book);
615 extern int reg_def_conf(struct snd_soc_codec *codec);
616 extern int i2c_verify_book0(struct snd_soc_codec *codec);
617
618 #ifdef CONFIG_MINI_DSP
619 extern int aic3262_minidsp_program(struct snd_soc_codec *codec);
620 extern int aic3262_add_minidsp_controls(struct snd_soc_codec *codec);
621 #endif
622
623
624 #ifdef MULTIBYTE_CONFIG_SUPPORT
625 extern int aic3262_add_multiconfig_controls(struct snd_soc_codec *codec);
626 #endif
627
628 #endif                          /* _TLV320AIC3262_H */
629