ASoC: twl4030: disable 256fs clock on shutdown
[pandora-kernel.git] / sound / soc / codecs / twl4030.c
1 /*
2  * ALSA SoC TWL4030 codec driver
3  *
4  * Author:      Steve Sakoman, <steve@sakoman.com>
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * version 2 as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18  * 02110-1301 USA
19  *
20  */
21
22 #include <linux/module.h>
23 #include <linux/moduleparam.h>
24 #include <linux/init.h>
25 #include <linux/delay.h>
26 #include <linux/pm.h>
27 #include <linux/i2c.h>
28 #include <linux/platform_device.h>
29 #include <linux/i2c/twl.h>
30 #include <linux/slab.h>
31 #include <sound/core.h>
32 #include <sound/pcm.h>
33 #include <sound/pcm_params.h>
34 #include <sound/soc.h>
35 #include <sound/initval.h>
36 #include <sound/tlv.h>
37
38 /* Register descriptions are here */
39 #include <linux/mfd/twl4030-audio.h>
40
41 /* Shadow register used by the audio driver */
42 #define TWL4030_REG_SW_SHADOW           0x4A
43 #define TWL4030_CACHEREGNUM     (TWL4030_REG_SW_SHADOW + 1)
44
45 /* TWL4030_REG_SW_SHADOW (0x4A) Fields */
46 #define TWL4030_HFL_EN                  0x01
47 #define TWL4030_HFR_EN                  0x02
48
49 /*
50  * twl4030 register cache & default register settings
51  */
52 static const u8 twl4030_reg[TWL4030_CACHEREGNUM] = {
53         0x00, /* this register not used         */
54         0x00, /* REG_CODEC_MODE         (0x1)   */
55         0x00, /* REG_OPTION             (0x2)   */
56         0x00, /* REG_UNKNOWN            (0x3)   */
57         0x00, /* REG_MICBIAS_CTL        (0x4)   */
58         0x01, /* REG_ANAMICL            (0x5)   */
59         0x00, /* REG_ANAMICR            (0x6)   */
60         0x00, /* REG_AVADC_CTL          (0x7)   */
61         0x00, /* REG_ADCMICSEL          (0x8)   */
62         0x00, /* REG_DIGMIXING          (0x9)   */
63         0x0f, /* REG_ATXL1PGA           (0xA)   */
64         0x0f, /* REG_ATXR1PGA           (0xB)   */
65         0x0f, /* REG_AVTXL2PGA          (0xC)   */
66         0x0f, /* REG_AVTXR2PGA          (0xD)   */
67         0x00, /* REG_AUDIO_IF           (0xE)   */
68         0x00, /* REG_VOICE_IF           (0xF)   */
69         0x3f, /* REG_ARXR1PGA           (0x10)  */
70         0x3f, /* REG_ARXL1PGA           (0x11)  */
71         0x3f, /* REG_ARXR2PGA           (0x12)  */
72         0x3f, /* REG_ARXL2PGA           (0x13)  */
73         0x25, /* REG_VRXPGA             (0x14)  */
74         0x00, /* REG_VSTPGA             (0x15)  */
75         0x00, /* REG_VRX2ARXPGA         (0x16)  */
76         0x00, /* REG_AVDAC_CTL          (0x17)  */
77         0x00, /* REG_ARX2VTXPGA         (0x18)  */
78         0x32, /* REG_ARXL1_APGA_CTL     (0x19)  */
79         0x32, /* REG_ARXR1_APGA_CTL     (0x1A)  */
80         0x32, /* REG_ARXL2_APGA_CTL     (0x1B)  */
81         0x32, /* REG_ARXR2_APGA_CTL     (0x1C)  */
82         0x00, /* REG_ATX2ARXPGA         (0x1D)  */
83         0x00, /* REG_BT_IF              (0x1E)  */
84         0x55, /* REG_BTPGA              (0x1F)  */
85         0x00, /* REG_BTSTPGA            (0x20)  */
86         0x00, /* REG_EAR_CTL            (0x21)  */
87         0x00, /* REG_HS_SEL             (0x22)  */
88         0x00, /* REG_HS_GAIN_SET        (0x23)  */
89         0x00, /* REG_HS_POPN_SET        (0x24)  */
90         0x00, /* REG_PREDL_CTL          (0x25)  */
91         0x00, /* REG_PREDR_CTL          (0x26)  */
92         0x00, /* REG_PRECKL_CTL         (0x27)  */
93         0x00, /* REG_PRECKR_CTL         (0x28)  */
94         0x00, /* REG_HFL_CTL            (0x29)  */
95         0x00, /* REG_HFR_CTL            (0x2A)  */
96         0x05, /* REG_ALC_CTL            (0x2B)  */
97         0x00, /* REG_ALC_SET1           (0x2C)  */
98         0x00, /* REG_ALC_SET2           (0x2D)  */
99         0x00, /* REG_BOOST_CTL          (0x2E)  */
100         0x00, /* REG_SOFTVOL_CTL        (0x2F)  */
101         0x13, /* REG_DTMF_FREQSEL       (0x30)  */
102         0x00, /* REG_DTMF_TONEXT1H      (0x31)  */
103         0x00, /* REG_DTMF_TONEXT1L      (0x32)  */
104         0x00, /* REG_DTMF_TONEXT2H      (0x33)  */
105         0x00, /* REG_DTMF_TONEXT2L      (0x34)  */
106         0x79, /* REG_DTMF_TONOFF        (0x35)  */
107         0x11, /* REG_DTMF_WANONOFF      (0x36)  */
108         0x00, /* REG_I2S_RX_SCRAMBLE_H  (0x37)  */
109         0x00, /* REG_I2S_RX_SCRAMBLE_M  (0x38)  */
110         0x00, /* REG_I2S_RX_SCRAMBLE_L  (0x39)  */
111         0x06, /* REG_APLL_CTL           (0x3A)  */
112         0x00, /* REG_DTMF_CTL           (0x3B)  */
113         0x44, /* REG_DTMF_PGA_CTL2      (0x3C)  */
114         0x69, /* REG_DTMF_PGA_CTL1      (0x3D)  */
115         0x00, /* REG_MISC_SET_1         (0x3E)  */
116         0x00, /* REG_PCMBTMUX           (0x3F)  */
117         0x00, /* not used               (0x40)  */
118         0x00, /* not used               (0x41)  */
119         0x00, /* not used               (0x42)  */
120         0x00, /* REG_RX_PATH_SEL        (0x43)  */
121         0x32, /* REG_VDL_APGA_CTL       (0x44)  */
122         0x00, /* REG_VIBRA_CTL          (0x45)  */
123         0x00, /* REG_VIBRA_SET          (0x46)  */
124         0x00, /* REG_VIBRA_PWM_SET      (0x47)  */
125         0x00, /* REG_ANAMIC_GAIN        (0x48)  */
126         0x00, /* REG_MISC_SET_2         (0x49)  */
127         0x00, /* REG_SW_SHADOW          (0x4A)  - Shadow, non HW register */
128 };
129
130 /* codec private data */
131 struct twl4030_priv {
132         struct snd_soc_codec codec;
133
134         unsigned int codec_powered;
135
136         /* reference counts of AIF/APLL users */
137         unsigned int apll_enabled;
138
139         unsigned int using_256fs;
140
141         struct snd_pcm_substream *master_substream;
142         struct snd_pcm_substream *slave_substream;
143
144         unsigned int configured;
145         unsigned int rate;
146         unsigned int sample_bits;
147         unsigned int channels;
148
149         unsigned int sysclk;
150
151         /* Output (with associated amp) states */
152         u8 hsl_enabled, hsr_enabled;
153         u8 earpiece_enabled;
154         u8 predrivel_enabled, predriver_enabled;
155         u8 carkitl_enabled, carkitr_enabled;
156
157         /* Delay needed after enabling the digimic interface */
158         unsigned int digimic_delay;
159 };
160
161 /*
162  * read twl4030 register cache
163  */
164 static inline unsigned int twl4030_read_reg_cache(struct snd_soc_codec *codec,
165         unsigned int reg)
166 {
167         u8 *cache = codec->reg_cache;
168
169         if (reg >= TWL4030_CACHEREGNUM)
170                 return -EIO;
171
172         return cache[reg];
173 }
174
175 /*
176  * write twl4030 register cache
177  */
178 static inline void twl4030_write_reg_cache(struct snd_soc_codec *codec,
179                                                 u8 reg, u8 value)
180 {
181         u8 *cache = codec->reg_cache;
182
183         if (reg >= TWL4030_CACHEREGNUM)
184                 return;
185         cache[reg] = value;
186 }
187
188 /*
189  * write to the twl4030 register space
190  */
191 static int twl4030_write(struct snd_soc_codec *codec,
192                         unsigned int reg, unsigned int value)
193 {
194         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
195         int write_to_reg = 0;
196
197         twl4030_write_reg_cache(codec, reg, value);
198         if (likely(reg < TWL4030_REG_SW_SHADOW)) {
199                 /* Decide if the given register can be written */
200                 switch (reg) {
201                 case TWL4030_REG_EAR_CTL:
202                         if (twl4030->earpiece_enabled)
203                                 write_to_reg = 1;
204                         break;
205                 case TWL4030_REG_PREDL_CTL:
206                         if (twl4030->predrivel_enabled)
207                                 write_to_reg = 1;
208                         break;
209                 case TWL4030_REG_PREDR_CTL:
210                         if (twl4030->predriver_enabled)
211                                 write_to_reg = 1;
212                         break;
213                 case TWL4030_REG_PRECKL_CTL:
214                         if (twl4030->carkitl_enabled)
215                                 write_to_reg = 1;
216                         break;
217                 case TWL4030_REG_PRECKR_CTL:
218                         if (twl4030->carkitr_enabled)
219                                 write_to_reg = 1;
220                         break;
221                 case TWL4030_REG_HS_GAIN_SET:
222                         if (twl4030->hsl_enabled || twl4030->hsr_enabled)
223                                 write_to_reg = 1;
224                         break;
225                 default:
226                         /* All other register can be written */
227                         write_to_reg = 1;
228                         break;
229                 }
230                 if (write_to_reg)
231                         return twl_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE,
232                                                     value, reg);
233         }
234         return 0;
235 }
236
237 static inline void twl4030_wait_ms(int time)
238 {
239         if (time < 60) {
240                 time *= 1000;
241                 usleep_range(time, time + 500);
242         } else {
243                 msleep(time);
244         }
245 }
246
247 static void twl4030_codec_enable(struct snd_soc_codec *codec, int enable)
248 {
249         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
250         int mode;
251
252         if (enable == twl4030->codec_powered)
253                 return;
254
255         if (enable)
256                 mode = twl4030_audio_enable_resource(TWL4030_AUDIO_RES_POWER);
257         else
258                 mode = twl4030_audio_disable_resource(TWL4030_AUDIO_RES_POWER);
259
260         if (mode >= 0) {
261                 twl4030_write_reg_cache(codec, TWL4030_REG_CODEC_MODE, mode);
262                 twl4030->codec_powered = enable;
263         }
264
265         /* REVISIT: this delay is present in TI sample drivers */
266         /* but there seems to be no TRM requirement for it     */
267         udelay(10);
268 }
269
270 static inline void twl4030_check_defaults(struct snd_soc_codec *codec)
271 {
272         int i, difference = 0;
273         u8 val;
274
275         dev_dbg(codec->dev, "Checking TWL audio default configuration\n");
276         for (i = 1; i <= TWL4030_REG_MISC_SET_2; i++) {
277                 twl_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, &val, i);
278                 if (val != twl4030_reg[i]) {
279                         difference++;
280                         dev_dbg(codec->dev,
281                                  "Reg 0x%02x: chip: 0x%02x driver: 0x%02x\n",
282                                  i, val, twl4030_reg[i]);
283                 }
284         }
285         dev_dbg(codec->dev, "Found %d non-matching registers. %s\n",
286                  difference, difference ? "Not OK" : "OK");
287 }
288
289 static inline void twl4030_reset_registers(struct snd_soc_codec *codec)
290 {
291         int i;
292
293         /* set all audio section registers to reasonable defaults */
294         for (i = TWL4030_REG_OPTION; i <= TWL4030_REG_MISC_SET_2; i++)
295                 if (i != TWL4030_REG_APLL_CTL)
296                         twl4030_write(codec, i, twl4030_reg[i]);
297
298 }
299
300 static void twl4030_init_chip(struct snd_soc_codec *codec)
301 {
302         struct twl4030_codec_data *pdata = dev_get_platdata(codec->dev);
303         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
304         u8 reg, byte;
305         int i = 0;
306
307         /* Check defaults, if instructed before anything else */
308         if (pdata && pdata->check_defaults)
309                 twl4030_check_defaults(codec);
310
311         /* Reset registers, if no setup data or if instructed to do so */
312         if (!pdata || (pdata && pdata->reset_registers))
313                 twl4030_reset_registers(codec);
314
315         /* Refresh APLL_CTL register from HW */
316         twl_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, &byte,
317                             TWL4030_REG_APLL_CTL);
318         twl4030_write_reg_cache(codec, TWL4030_REG_APLL_CTL, byte);
319
320         /* anti-pop when changing analog gain */
321         reg = twl4030_read_reg_cache(codec, TWL4030_REG_MISC_SET_1);
322         twl4030_write(codec, TWL4030_REG_MISC_SET_1,
323                 reg | TWL4030_SMOOTH_ANAVOL_EN);
324
325         twl4030_write(codec, TWL4030_REG_OPTION,
326                 TWL4030_ATXL1_EN | TWL4030_ATXR1_EN |
327                 TWL4030_ARXL2_EN | TWL4030_ARXR2_EN);
328
329         /* REG_ARXR2_APGA_CTL reset according to the TRM: 0dB, DA_EN */
330         twl4030_write(codec, TWL4030_REG_ARXR2_APGA_CTL, 0x32);
331
332         /* Machine dependent setup */
333         if (!pdata)
334                 return;
335
336         twl4030->digimic_delay = pdata->digimic_delay;
337
338         reg = twl4030_read_reg_cache(codec, TWL4030_REG_HS_POPN_SET);
339         reg &= ~TWL4030_RAMP_DELAY;
340         reg |= (pdata->ramp_delay_value << 2);
341         twl4030_write_reg_cache(codec, TWL4030_REG_HS_POPN_SET, reg);
342
343         /* initiate offset cancellation */
344         twl4030_codec_enable(codec, 1);
345
346         reg = twl4030_read_reg_cache(codec, TWL4030_REG_ANAMICL);
347         reg &= ~TWL4030_OFFSET_CNCL_SEL;
348         reg |= pdata->offset_cncl_path;
349         twl4030_write(codec, TWL4030_REG_ANAMICL,
350                 reg | TWL4030_CNCL_OFFSET_START);
351
352         /*
353          * Wait for offset cancellation to complete.
354          * Since this takes a while, do not slam the i2c.
355          * Start polling the status after ~20ms.
356          */
357         msleep(20);
358         do {
359                 usleep_range(1000, 2000);
360                 twl_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, &byte,
361                                     TWL4030_REG_ANAMICL);
362         } while ((i++ < 100) &&
363                  ((byte & TWL4030_CNCL_OFFSET_START) ==
364                   TWL4030_CNCL_OFFSET_START));
365
366         /* Make sure that the reg_cache has the same value as the HW */
367         twl4030_write_reg_cache(codec, TWL4030_REG_ANAMICL, byte);
368
369         twl4030_codec_enable(codec, 0);
370 }
371
372 static void twl4030_apll_enable(struct snd_soc_codec *codec, int enable)
373 {
374         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
375         int status = -1;
376
377         if (enable) {
378                 twl4030->apll_enabled++;
379                 if (twl4030->apll_enabled == 1)
380                         status = twl4030_audio_enable_resource(
381                                                         TWL4030_AUDIO_RES_APLL);
382         } else {
383                 twl4030->apll_enabled--;
384                 if (!twl4030->apll_enabled)
385                         status = twl4030_audio_disable_resource(
386                                                         TWL4030_AUDIO_RES_APLL);
387         }
388
389         if (status >= 0)
390                 twl4030_write_reg_cache(codec, TWL4030_REG_APLL_CTL, status);
391 }
392
393 /* Earpiece */
394 static const struct snd_kcontrol_new twl4030_dapm_earpiece_controls[] = {
395         SOC_DAPM_SINGLE("Voice", TWL4030_REG_EAR_CTL, 0, 1, 0),
396         SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_EAR_CTL, 1, 1, 0),
397         SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_EAR_CTL, 2, 1, 0),
398         SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_EAR_CTL, 3, 1, 0),
399 };
400
401 /* PreDrive Left */
402 static const struct snd_kcontrol_new twl4030_dapm_predrivel_controls[] = {
403         SOC_DAPM_SINGLE("Voice", TWL4030_REG_PREDL_CTL, 0, 1, 0),
404         SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_PREDL_CTL, 1, 1, 0),
405         SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_PREDL_CTL, 2, 1, 0),
406         SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_PREDL_CTL, 3, 1, 0),
407 };
408
409 /* PreDrive Right */
410 static const struct snd_kcontrol_new twl4030_dapm_predriver_controls[] = {
411         SOC_DAPM_SINGLE("Voice", TWL4030_REG_PREDR_CTL, 0, 1, 0),
412         SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_PREDR_CTL, 1, 1, 0),
413         SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_PREDR_CTL, 2, 1, 0),
414         SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_PREDR_CTL, 3, 1, 0),
415 };
416
417 /* Headset Left */
418 static const struct snd_kcontrol_new twl4030_dapm_hsol_controls[] = {
419         SOC_DAPM_SINGLE("Voice", TWL4030_REG_HS_SEL, 0, 1, 0),
420         SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_HS_SEL, 1, 1, 0),
421         SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_HS_SEL, 2, 1, 0),
422 };
423
424 /* Headset Right */
425 static const struct snd_kcontrol_new twl4030_dapm_hsor_controls[] = {
426         SOC_DAPM_SINGLE("Voice", TWL4030_REG_HS_SEL, 3, 1, 0),
427         SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_HS_SEL, 4, 1, 0),
428         SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_HS_SEL, 5, 1, 0),
429 };
430
431 /* Carkit Left */
432 static const struct snd_kcontrol_new twl4030_dapm_carkitl_controls[] = {
433         SOC_DAPM_SINGLE("Voice", TWL4030_REG_PRECKL_CTL, 0, 1, 0),
434         SOC_DAPM_SINGLE("AudioL1", TWL4030_REG_PRECKL_CTL, 1, 1, 0),
435         SOC_DAPM_SINGLE("AudioL2", TWL4030_REG_PRECKL_CTL, 2, 1, 0),
436 };
437
438 /* Carkit Right */
439 static const struct snd_kcontrol_new twl4030_dapm_carkitr_controls[] = {
440         SOC_DAPM_SINGLE("Voice", TWL4030_REG_PRECKR_CTL, 0, 1, 0),
441         SOC_DAPM_SINGLE("AudioR1", TWL4030_REG_PRECKR_CTL, 1, 1, 0),
442         SOC_DAPM_SINGLE("AudioR2", TWL4030_REG_PRECKR_CTL, 2, 1, 0),
443 };
444
445 /* Handsfree Left */
446 static const char *twl4030_handsfreel_texts[] =
447                 {"Voice", "AudioL1", "AudioL2", "AudioR2"};
448
449 static const struct soc_enum twl4030_handsfreel_enum =
450         SOC_ENUM_SINGLE(TWL4030_REG_HFL_CTL, 0,
451                         ARRAY_SIZE(twl4030_handsfreel_texts),
452                         twl4030_handsfreel_texts);
453
454 static const struct snd_kcontrol_new twl4030_dapm_handsfreel_control =
455 SOC_DAPM_ENUM("Route", twl4030_handsfreel_enum);
456
457 /* Handsfree Left virtual mute */
458 static const struct snd_kcontrol_new twl4030_dapm_handsfreelmute_control =
459         SOC_DAPM_SINGLE("Switch", TWL4030_REG_SW_SHADOW, 0, 1, 0);
460
461 /* Handsfree Right */
462 static const char *twl4030_handsfreer_texts[] =
463                 {"Voice", "AudioR1", "AudioR2", "AudioL2"};
464
465 static const struct soc_enum twl4030_handsfreer_enum =
466         SOC_ENUM_SINGLE(TWL4030_REG_HFR_CTL, 0,
467                         ARRAY_SIZE(twl4030_handsfreer_texts),
468                         twl4030_handsfreer_texts);
469
470 static const struct snd_kcontrol_new twl4030_dapm_handsfreer_control =
471 SOC_DAPM_ENUM("Route", twl4030_handsfreer_enum);
472
473 /* Handsfree Right virtual mute */
474 static const struct snd_kcontrol_new twl4030_dapm_handsfreermute_control =
475         SOC_DAPM_SINGLE("Switch", TWL4030_REG_SW_SHADOW, 1, 1, 0);
476
477 /* Vibra */
478 /* Vibra audio path selection */
479 static const char *twl4030_vibra_texts[] =
480                 {"AudioL1", "AudioR1", "AudioL2", "AudioR2"};
481
482 static const struct soc_enum twl4030_vibra_enum =
483         SOC_ENUM_SINGLE(TWL4030_REG_VIBRA_CTL, 2,
484                         ARRAY_SIZE(twl4030_vibra_texts),
485                         twl4030_vibra_texts);
486
487 static const struct snd_kcontrol_new twl4030_dapm_vibra_control =
488 SOC_DAPM_ENUM("Route", twl4030_vibra_enum);
489
490 /* Vibra path selection: local vibrator (PWM) or audio driven */
491 static const char *twl4030_vibrapath_texts[] =
492                 {"Local vibrator", "Audio"};
493
494 static const struct soc_enum twl4030_vibrapath_enum =
495         SOC_ENUM_SINGLE(TWL4030_REG_VIBRA_CTL, 4,
496                         ARRAY_SIZE(twl4030_vibrapath_texts),
497                         twl4030_vibrapath_texts);
498
499 static const struct snd_kcontrol_new twl4030_dapm_vibrapath_control =
500 SOC_DAPM_ENUM("Route", twl4030_vibrapath_enum);
501
502 /* Left analog microphone selection */
503 static const struct snd_kcontrol_new twl4030_dapm_analoglmic_controls[] = {
504         SOC_DAPM_SINGLE("Main Mic Capture Switch",
505                         TWL4030_REG_ANAMICL, 0, 1, 0),
506 #if 0
507         SOC_DAPM_SINGLE("Headset Mic Capture Switch",
508                         TWL4030_REG_ANAMICL, 1, 1, 0),
509 #endif
510         SOC_DAPM_SINGLE("AUXL Capture Switch",
511                         TWL4030_REG_ANAMICL, 2, 1, 0),
512 #if 0
513         SOC_DAPM_SINGLE("Carkit Mic Capture Switch",
514                         TWL4030_REG_ANAMICL, 3, 1, 0),
515 #endif
516 };
517
518 /* Right analog microphone selection */
519 static const struct snd_kcontrol_new twl4030_dapm_analogrmic_controls[] = {
520         SOC_DAPM_SINGLE("Sub Mic Capture Switch", TWL4030_REG_ANAMICR, 0, 1, 0),
521         SOC_DAPM_SINGLE("AUXR Capture Switch", TWL4030_REG_ANAMICR, 2, 1, 0),
522 };
523
524 /* TX1 L/R Analog/Digital microphone selection */
525 static const char *twl4030_micpathtx1_texts[] =
526                 {"Analog", "Digimic0"};
527
528 static const struct soc_enum twl4030_micpathtx1_enum =
529         SOC_ENUM_SINGLE(TWL4030_REG_ADCMICSEL, 0,
530                         ARRAY_SIZE(twl4030_micpathtx1_texts),
531                         twl4030_micpathtx1_texts);
532
533 static const struct snd_kcontrol_new twl4030_dapm_micpathtx1_control =
534 SOC_DAPM_ENUM("Route", twl4030_micpathtx1_enum);
535
536 /* TX2 L/R Analog/Digital microphone selection */
537 static const char *twl4030_micpathtx2_texts[] =
538                 {"Analog", "Digimic1"};
539
540 static const struct soc_enum twl4030_micpathtx2_enum =
541         SOC_ENUM_SINGLE(TWL4030_REG_ADCMICSEL, 2,
542                         ARRAY_SIZE(twl4030_micpathtx2_texts),
543                         twl4030_micpathtx2_texts);
544
545 static const struct snd_kcontrol_new twl4030_dapm_micpathtx2_control =
546 SOC_DAPM_ENUM("Route", twl4030_micpathtx2_enum);
547
548 /* Analog bypass for AudioR1 */
549 static const struct snd_kcontrol_new twl4030_dapm_abypassr1_control =
550         SOC_DAPM_SINGLE("Switch", TWL4030_REG_ARXR1_APGA_CTL, 2, 1, 0);
551
552 /* Analog bypass for AudioL1 */
553 static const struct snd_kcontrol_new twl4030_dapm_abypassl1_control =
554         SOC_DAPM_SINGLE("Switch", TWL4030_REG_ARXL1_APGA_CTL, 2, 1, 0);
555
556 /* Analog bypass for AudioR2 */
557 static const struct snd_kcontrol_new twl4030_dapm_abypassr2_control =
558         SOC_DAPM_SINGLE("Switch", TWL4030_REG_ARXR2_APGA_CTL, 2, 1, 0);
559
560 /* Analog bypass for AudioL2 */
561 static const struct snd_kcontrol_new twl4030_dapm_abypassl2_control =
562         SOC_DAPM_SINGLE("Switch", TWL4030_REG_ARXL2_APGA_CTL, 2, 1, 0);
563
564 /* Analog bypass for Voice */
565 static const struct snd_kcontrol_new twl4030_dapm_abypassv_control =
566         SOC_DAPM_SINGLE("Switch", TWL4030_REG_VDL_APGA_CTL, 2, 1, 0);
567
568 /* Digital bypass gain, mute instead of -30dB */
569 static const unsigned int twl4030_dapm_dbypass_tlv[] = {
570         TLV_DB_RANGE_HEAD(3),
571         0, 1, TLV_DB_SCALE_ITEM(-3000, 600, 1),
572         2, 3, TLV_DB_SCALE_ITEM(-2400, 0, 0),
573         4, 7, TLV_DB_SCALE_ITEM(-1800, 600, 0),
574 };
575
576 /* Digital bypass left (TX1L -> RX2L) */
577 static const struct snd_kcontrol_new twl4030_dapm_dbypassl_control =
578         SOC_DAPM_SINGLE_TLV("Volume",
579                         TWL4030_REG_ATX2ARXPGA, 3, 7, 0,
580                         twl4030_dapm_dbypass_tlv);
581
582 /* Digital bypass right (TX1R -> RX2R) */
583 static const struct snd_kcontrol_new twl4030_dapm_dbypassr_control =
584         SOC_DAPM_SINGLE_TLV("Volume",
585                         TWL4030_REG_ATX2ARXPGA, 0, 7, 0,
586                         twl4030_dapm_dbypass_tlv);
587
588 /*
589  * Voice Sidetone GAIN volume control:
590  * from -51 to -10 dB in 1 dB steps (mute instead of -51 dB)
591  */
592 static DECLARE_TLV_DB_SCALE(twl4030_dapm_dbypassv_tlv, -5100, 100, 1);
593
594 /* Digital bypass voice: sidetone (VUL -> VDL)*/
595 static const struct snd_kcontrol_new twl4030_dapm_dbypassv_control =
596         SOC_DAPM_SINGLE_TLV("Volume",
597                         TWL4030_REG_VSTPGA, 0, 0x29, 0,
598                         twl4030_dapm_dbypassv_tlv);
599
600 /*
601  * Output PGA builder:
602  * Handle the muting and unmuting of the given output (turning off the
603  * amplifier associated with the output pin)
604  * On mute bypass the reg_cache and write 0 to the register
605  * On unmute: restore the register content from the reg_cache
606  * Outputs handled in this way:  Earpiece, PreDrivL/R, CarkitL/R
607  */
608 #define TWL4030_OUTPUT_PGA(pin_name, reg, mask)                         \
609 static int pin_name##pga_event(struct snd_soc_dapm_widget *w,           \
610                 struct snd_kcontrol *kcontrol, int event)               \
611 {                                                                       \
612         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(w->codec); \
613                                                                         \
614         switch (event) {                                                \
615         case SND_SOC_DAPM_POST_PMU:                                     \
616                 twl4030->pin_name##_enabled = 1;                        \
617                 twl4030_write(w->codec, reg,                            \
618                         twl4030_read_reg_cache(w->codec, reg));         \
619                 break;                                                  \
620         case SND_SOC_DAPM_POST_PMD:                                     \
621                 twl4030->pin_name##_enabled = 0;                        \
622                 twl_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE,            \
623                                         0, reg);                        \
624                 break;                                                  \
625         }                                                               \
626         return 0;                                                       \
627 }
628
629 TWL4030_OUTPUT_PGA(earpiece, TWL4030_REG_EAR_CTL, TWL4030_EAR_GAIN);
630 TWL4030_OUTPUT_PGA(predrivel, TWL4030_REG_PREDL_CTL, TWL4030_PREDL_GAIN);
631 TWL4030_OUTPUT_PGA(predriver, TWL4030_REG_PREDR_CTL, TWL4030_PREDR_GAIN);
632 TWL4030_OUTPUT_PGA(carkitl, TWL4030_REG_PRECKL_CTL, TWL4030_PRECKL_GAIN);
633 TWL4030_OUTPUT_PGA(carkitr, TWL4030_REG_PRECKR_CTL, TWL4030_PRECKR_GAIN);
634
635 static void handsfree_ramp(struct snd_soc_codec *codec, int reg, int ramp)
636 {
637         unsigned char hs_ctl;
638
639         hs_ctl = twl4030_read_reg_cache(codec, reg);
640
641         if (ramp) {
642                 /* HF ramp-up */
643                 hs_ctl |= TWL4030_HF_CTL_REF_EN;
644                 twl4030_write(codec, reg, hs_ctl);
645                 udelay(10);
646                 hs_ctl |= TWL4030_HF_CTL_RAMP_EN;
647                 twl4030_write(codec, reg, hs_ctl);
648                 udelay(40);
649                 hs_ctl |= TWL4030_HF_CTL_LOOP_EN;
650                 hs_ctl |= TWL4030_HF_CTL_HB_EN;
651                 twl4030_write(codec, reg, hs_ctl);
652         } else {
653                 /* HF ramp-down */
654                 hs_ctl &= ~TWL4030_HF_CTL_LOOP_EN;
655                 hs_ctl &= ~TWL4030_HF_CTL_HB_EN;
656                 twl4030_write(codec, reg, hs_ctl);
657                 hs_ctl &= ~TWL4030_HF_CTL_RAMP_EN;
658                 twl4030_write(codec, reg, hs_ctl);
659                 udelay(40);
660                 hs_ctl &= ~TWL4030_HF_CTL_REF_EN;
661                 twl4030_write(codec, reg, hs_ctl);
662         }
663 }
664
665 static int handsfreelpga_event(struct snd_soc_dapm_widget *w,
666                 struct snd_kcontrol *kcontrol, int event)
667 {
668         switch (event) {
669         case SND_SOC_DAPM_POST_PMU:
670                 handsfree_ramp(w->codec, TWL4030_REG_HFL_CTL, 1);
671                 break;
672         case SND_SOC_DAPM_POST_PMD:
673                 handsfree_ramp(w->codec, TWL4030_REG_HFL_CTL, 0);
674                 break;
675         }
676         return 0;
677 }
678
679 static int handsfreerpga_event(struct snd_soc_dapm_widget *w,
680                 struct snd_kcontrol *kcontrol, int event)
681 {
682         switch (event) {
683         case SND_SOC_DAPM_POST_PMU:
684                 handsfree_ramp(w->codec, TWL4030_REG_HFR_CTL, 1);
685                 break;
686         case SND_SOC_DAPM_POST_PMD:
687                 handsfree_ramp(w->codec, TWL4030_REG_HFR_CTL, 0);
688                 break;
689         }
690         return 0;
691 }
692
693 static int vibramux_event(struct snd_soc_dapm_widget *w,
694                 struct snd_kcontrol *kcontrol, int event)
695 {
696         twl4030_write(w->codec, TWL4030_REG_VIBRA_SET, 0xff);
697         return 0;
698 }
699
700 static int apll_event(struct snd_soc_dapm_widget *w,
701                 struct snd_kcontrol *kcontrol, int event)
702 {
703         switch (event) {
704         case SND_SOC_DAPM_PRE_PMU:
705                 twl4030_apll_enable(w->codec, 1);
706                 break;
707         case SND_SOC_DAPM_POST_PMD:
708                 twl4030_apll_enable(w->codec, 0);
709                 break;
710         }
711         return 0;
712 }
713
714 static int aif_event(struct snd_soc_dapm_widget *w,
715                 struct snd_kcontrol *kcontrol, int event)
716 {
717         u8 audio_if;
718
719         audio_if = twl4030_read_reg_cache(w->codec, TWL4030_REG_AUDIO_IF);
720         switch (event) {
721         case SND_SOC_DAPM_PRE_PMU:
722                 /* Enable AIF */
723                 /* enable the PLL before we use it to clock the DAI */
724                 twl4030_apll_enable(w->codec, 1);
725
726                 twl4030_write(w->codec, TWL4030_REG_AUDIO_IF,
727                                                 audio_if | TWL4030_AIF_EN);
728                 break;
729         case SND_SOC_DAPM_POST_PMD:
730                 /* disable the DAI before we stop it's source PLL */
731                 twl4030_write(w->codec, TWL4030_REG_AUDIO_IF,
732                                                 audio_if &  ~TWL4030_AIF_EN);
733                 twl4030_apll_enable(w->codec, 0);
734                 break;
735         }
736         return 0;
737 }
738
739 static void headset_ramp(struct snd_soc_codec *codec, int ramp)
740 {
741         struct twl4030_codec_data *pdata = codec->dev->platform_data;
742         unsigned char hs_gain, hs_pop;
743         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
744         /* Base values for ramp delay calculation: 2^19 - 2^26 */
745         unsigned int ramp_base[] = {524288, 1048576, 2097152, 4194304,
746                                     8388608, 16777216, 33554432, 67108864};
747         unsigned int delay;
748
749         hs_gain = twl4030_read_reg_cache(codec, TWL4030_REG_HS_GAIN_SET);
750         hs_pop = twl4030_read_reg_cache(codec, TWL4030_REG_HS_POPN_SET);
751         delay = (ramp_base[(hs_pop & TWL4030_RAMP_DELAY) >> 2] /
752                 twl4030->sysclk) + 1;
753
754         /* Enable external mute control, this dramatically reduces
755          * the pop-noise */
756         if (pdata && pdata->hs_extmute) {
757                 if (pdata->set_hs_extmute) {
758                         pdata->set_hs_extmute(1);
759                 } else {
760                         hs_pop |= TWL4030_EXTMUTE;
761                         twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
762                 }
763         }
764
765         if (ramp) {
766                 /* Headset ramp-up according to the TRM */
767                 hs_pop |= TWL4030_VMID_EN;
768                 twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
769                 /* Actually write to the register */
770                 twl_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE,
771                                         hs_gain,
772                                         TWL4030_REG_HS_GAIN_SET);
773                 hs_pop |= TWL4030_RAMP_EN;
774                 twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
775                 /* Wait ramp delay time + 1, so the VMID can settle */
776                 twl4030_wait_ms(delay);
777         } else {
778                 /* Headset ramp-down _not_ according to
779                  * the TRM, but in a way that it is working */
780                 hs_pop &= ~TWL4030_RAMP_EN;
781                 twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
782                 /* Wait ramp delay time + 1, so the VMID can settle */
783                 twl4030_wait_ms(delay);
784                 /* Bypass the reg_cache to mute the headset */
785                 twl_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE,
786                                         hs_gain & (~0x0f),
787                                         TWL4030_REG_HS_GAIN_SET);
788
789                 hs_pop &= ~TWL4030_VMID_EN;
790                 twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
791         }
792
793         /* Disable external mute */
794         if (pdata && pdata->hs_extmute) {
795                 if (pdata->set_hs_extmute) {
796                         pdata->set_hs_extmute(0);
797                 } else {
798                         hs_pop &= ~TWL4030_EXTMUTE;
799                         twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
800                 }
801         }
802 }
803
804 static int headsetlpga_event(struct snd_soc_dapm_widget *w,
805                 struct snd_kcontrol *kcontrol, int event)
806 {
807         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(w->codec);
808
809         switch (event) {
810         case SND_SOC_DAPM_POST_PMU:
811                 /* Do the ramp-up only once */
812                 if (!twl4030->hsr_enabled)
813                         headset_ramp(w->codec, 1);
814
815                 twl4030->hsl_enabled = 1;
816                 break;
817         case SND_SOC_DAPM_POST_PMD:
818                 /* Do the ramp-down only if both headsetL/R is disabled */
819                 if (!twl4030->hsr_enabled)
820                         headset_ramp(w->codec, 0);
821
822                 twl4030->hsl_enabled = 0;
823                 break;
824         }
825         return 0;
826 }
827
828 static int headsetrpga_event(struct snd_soc_dapm_widget *w,
829                 struct snd_kcontrol *kcontrol, int event)
830 {
831         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(w->codec);
832
833         switch (event) {
834         case SND_SOC_DAPM_POST_PMU:
835                 /* Do the ramp-up only once */
836                 if (!twl4030->hsl_enabled)
837                         headset_ramp(w->codec, 1);
838
839                 twl4030->hsr_enabled = 1;
840                 break;
841         case SND_SOC_DAPM_POST_PMD:
842                 /* Do the ramp-down only if both headsetL/R is disabled */
843                 if (!twl4030->hsl_enabled)
844                         headset_ramp(w->codec, 0);
845
846                 twl4030->hsr_enabled = 0;
847                 break;
848         }
849         return 0;
850 }
851
852 static int digimic_event(struct snd_soc_dapm_widget *w,
853                 struct snd_kcontrol *kcontrol, int event)
854 {
855         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(w->codec);
856
857         if (twl4030->digimic_delay)
858                 twl4030_wait_ms(twl4030->digimic_delay);
859         return 0;
860 }
861
862 /*
863  * Some of the gain controls in TWL (mostly those which are associated with
864  * the outputs) are implemented in an interesting way:
865  * 0x0 : Power down (mute)
866  * 0x1 : 6dB
867  * 0x2 : 0 dB
868  * 0x3 : -6 dB
869  * Inverting not going to help with these.
870  * Custom volsw and volsw_2r get/put functions to handle these gain bits.
871  */
872 static int snd_soc_get_volsw_twl4030(struct snd_kcontrol *kcontrol,
873         struct snd_ctl_elem_value *ucontrol)
874 {
875         struct soc_mixer_control *mc =
876                 (struct soc_mixer_control *)kcontrol->private_value;
877         struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
878         unsigned int reg = mc->reg;
879         unsigned int shift = mc->shift;
880         unsigned int rshift = mc->rshift;
881         int max = mc->max;
882         int mask = (1 << fls(max)) - 1;
883
884         ucontrol->value.integer.value[0] =
885                 (snd_soc_read(codec, reg) >> shift) & mask;
886         if (ucontrol->value.integer.value[0])
887                 ucontrol->value.integer.value[0] =
888                         max + 1 - ucontrol->value.integer.value[0];
889
890         if (shift != rshift) {
891                 ucontrol->value.integer.value[1] =
892                         (snd_soc_read(codec, reg) >> rshift) & mask;
893                 if (ucontrol->value.integer.value[1])
894                         ucontrol->value.integer.value[1] =
895                                 max + 1 - ucontrol->value.integer.value[1];
896         }
897
898         return 0;
899 }
900
901 static int snd_soc_put_volsw_twl4030(struct snd_kcontrol *kcontrol,
902         struct snd_ctl_elem_value *ucontrol)
903 {
904         struct soc_mixer_control *mc =
905                 (struct soc_mixer_control *)kcontrol->private_value;
906         struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
907         unsigned int reg = mc->reg;
908         unsigned int shift = mc->shift;
909         unsigned int rshift = mc->rshift;
910         int max = mc->max;
911         int mask = (1 << fls(max)) - 1;
912         unsigned short val, val2, val_mask;
913
914         val = (ucontrol->value.integer.value[0] & mask);
915
916         val_mask = mask << shift;
917         if (val)
918                 val = max + 1 - val;
919         val = val << shift;
920         if (shift != rshift) {
921                 val2 = (ucontrol->value.integer.value[1] & mask);
922                 val_mask |= mask << rshift;
923                 if (val2)
924                         val2 = max + 1 - val2;
925                 val |= val2 << rshift;
926         }
927         return snd_soc_update_bits(codec, reg, val_mask, val);
928 }
929
930 static int snd_soc_get_volsw_r2_twl4030(struct snd_kcontrol *kcontrol,
931         struct snd_ctl_elem_value *ucontrol)
932 {
933         struct soc_mixer_control *mc =
934                 (struct soc_mixer_control *)kcontrol->private_value;
935         struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
936         unsigned int reg = mc->reg;
937         unsigned int reg2 = mc->rreg;
938         unsigned int shift = mc->shift;
939         int max = mc->max;
940         int mask = (1<<fls(max))-1;
941
942         ucontrol->value.integer.value[0] =
943                 (snd_soc_read(codec, reg) >> shift) & mask;
944         ucontrol->value.integer.value[1] =
945                 (snd_soc_read(codec, reg2) >> shift) & mask;
946
947         if (ucontrol->value.integer.value[0])
948                 ucontrol->value.integer.value[0] =
949                         max + 1 - ucontrol->value.integer.value[0];
950         if (ucontrol->value.integer.value[1])
951                 ucontrol->value.integer.value[1] =
952                         max + 1 - ucontrol->value.integer.value[1];
953
954         return 0;
955 }
956
957 static int snd_soc_put_volsw_r2_twl4030(struct snd_kcontrol *kcontrol,
958         struct snd_ctl_elem_value *ucontrol)
959 {
960         struct soc_mixer_control *mc =
961                 (struct soc_mixer_control *)kcontrol->private_value;
962         struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
963         unsigned int reg = mc->reg;
964         unsigned int reg2 = mc->rreg;
965         unsigned int shift = mc->shift;
966         int max = mc->max;
967         int mask = (1 << fls(max)) - 1;
968         int err;
969         unsigned short val, val2, val_mask;
970
971         val_mask = mask << shift;
972         val = (ucontrol->value.integer.value[0] & mask);
973         val2 = (ucontrol->value.integer.value[1] & mask);
974
975         if (val)
976                 val = max + 1 - val;
977         if (val2)
978                 val2 = max + 1 - val2;
979
980         val = val << shift;
981         val2 = val2 << shift;
982
983         err = snd_soc_update_bits(codec, reg, val_mask, val);
984         if (err < 0)
985                 return err;
986
987         err = snd_soc_update_bits(codec, reg2, val_mask, val2);
988         return err;
989 }
990
991 /* Codec operation modes */
992 static const char *twl4030_op_modes_texts[] = {
993         "Option 2 (voice/audio)", "Option 1 (audio)"
994 };
995
996 static const struct soc_enum twl4030_op_modes_enum =
997         SOC_ENUM_SINGLE(TWL4030_REG_CODEC_MODE, 0,
998                         ARRAY_SIZE(twl4030_op_modes_texts),
999                         twl4030_op_modes_texts);
1000
1001 static int snd_soc_put_twl4030_opmode_enum_double(struct snd_kcontrol *kcontrol,
1002         struct snd_ctl_elem_value *ucontrol)
1003 {
1004         struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
1005         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
1006         struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
1007         unsigned short val;
1008         unsigned short mask, bitmask;
1009
1010         if (twl4030->configured) {
1011                 printk(KERN_ERR "twl4030 operation mode cannot be "
1012                         "changed on-the-fly\n");
1013                 return -EBUSY;
1014         }
1015
1016         for (bitmask = 1; bitmask < e->max; bitmask <<= 1)
1017                 ;
1018         if (ucontrol->value.enumerated.item[0] > e->max - 1)
1019                 return -EINVAL;
1020
1021         val = ucontrol->value.enumerated.item[0] << e->shift_l;
1022         mask = (bitmask - 1) << e->shift_l;
1023         if (e->shift_l != e->shift_r) {
1024                 if (ucontrol->value.enumerated.item[1] > e->max - 1)
1025                         return -EINVAL;
1026                 val |= ucontrol->value.enumerated.item[1] << e->shift_r;
1027                 mask |= (bitmask - 1) << e->shift_r;
1028         }
1029
1030         return snd_soc_update_bits(codec, e->reg, mask, val);
1031 }
1032
1033 /*
1034  * FGAIN volume control:
1035  * from -62 to 0 dB in 1 dB steps (mute instead of -63 dB)
1036  */
1037 static DECLARE_TLV_DB_SCALE(digital_fine_tlv, -6300, 100, 1);
1038
1039 /*
1040  * CGAIN volume control:
1041  * 0 dB to 12 dB in 6 dB steps
1042  * value 2 and 3 means 12 dB
1043  */
1044 static DECLARE_TLV_DB_SCALE(digital_coarse_tlv, 0, 600, 0);
1045
1046 /*
1047  * Voice Downlink GAIN volume control:
1048  * from -37 to 12 dB in 1 dB steps (mute instead of -37 dB)
1049  */
1050 static DECLARE_TLV_DB_SCALE(digital_voice_downlink_tlv, -3700, 100, 1);
1051
1052 /*
1053  * Analog playback gain
1054  * -24 dB to 12 dB in 2 dB steps
1055  */
1056 static DECLARE_TLV_DB_SCALE(analog_tlv, -2400, 200, 0);
1057
1058 /*
1059  * Gain controls tied to outputs
1060  * -6 dB to 6 dB in 6 dB steps (mute instead of -12)
1061  */
1062 static DECLARE_TLV_DB_SCALE(output_tvl, -1200, 600, 1);
1063
1064 /*
1065  * Gain control for earpiece amplifier
1066  * 0 dB to 12 dB in 6 dB steps (mute instead of -6)
1067  */
1068 static DECLARE_TLV_DB_SCALE(output_ear_tvl, -600, 600, 1);
1069
1070 /*
1071  * Capture gain after the ADCs
1072  * from 0 dB to 31 dB in 1 dB steps
1073  */
1074 static DECLARE_TLV_DB_SCALE(digital_capture_tlv, 0, 100, 0);
1075
1076 /*
1077  * Gain control for input amplifiers
1078  * 0 dB to 30 dB in 6 dB steps
1079  */
1080 static DECLARE_TLV_DB_SCALE(input_gain_tlv, 0, 600, 0);
1081
1082 /* AVADC clock priority */
1083 static const char *twl4030_avadc_clk_priority_texts[] = {
1084         "Voice high priority", "HiFi high priority"
1085 };
1086
1087 static const struct soc_enum twl4030_avadc_clk_priority_enum =
1088         SOC_ENUM_SINGLE(TWL4030_REG_AVADC_CTL, 2,
1089                         ARRAY_SIZE(twl4030_avadc_clk_priority_texts),
1090                         twl4030_avadc_clk_priority_texts);
1091
1092 static const char *twl4030_rampdelay_texts[] = {
1093         "27/20/14 ms", "55/40/27 ms", "109/81/55 ms", "218/161/109 ms",
1094         "437/323/218 ms", "874/645/437 ms", "1748/1291/874 ms",
1095         "3495/2581/1748 ms"
1096 };
1097
1098 static const struct soc_enum twl4030_rampdelay_enum =
1099         SOC_ENUM_SINGLE(TWL4030_REG_HS_POPN_SET, 2,
1100                         ARRAY_SIZE(twl4030_rampdelay_texts),
1101                         twl4030_rampdelay_texts);
1102
1103 /* Vibra H-bridge direction mode */
1104 static const char *twl4030_vibradirmode_texts[] = {
1105         "Vibra H-bridge direction", "Audio data MSB",
1106 };
1107
1108 static const struct soc_enum twl4030_vibradirmode_enum =
1109         SOC_ENUM_SINGLE(TWL4030_REG_VIBRA_CTL, 5,
1110                         ARRAY_SIZE(twl4030_vibradirmode_texts),
1111                         twl4030_vibradirmode_texts);
1112
1113 /* Vibra H-bridge direction */
1114 static const char *twl4030_vibradir_texts[] = {
1115         "Positive polarity", "Negative polarity",
1116 };
1117
1118 static const struct soc_enum twl4030_vibradir_enum =
1119         SOC_ENUM_SINGLE(TWL4030_REG_VIBRA_CTL, 1,
1120                         ARRAY_SIZE(twl4030_vibradir_texts),
1121                         twl4030_vibradir_texts);
1122
1123 /* Digimic Left and right swapping */
1124 static const char *twl4030_digimicswap_texts[] = {
1125         "Not swapped", "Swapped",
1126 };
1127
1128 static const struct soc_enum twl4030_digimicswap_enum =
1129         SOC_ENUM_SINGLE(TWL4030_REG_MISC_SET_1, 0,
1130                         ARRAY_SIZE(twl4030_digimicswap_texts),
1131                         twl4030_digimicswap_texts);
1132
1133 static const struct snd_kcontrol_new twl4030_snd_controls[] = {
1134 #if 0
1135         /* Codec operation mode control */
1136         SOC_ENUM_EXT("Codec Operation Mode", twl4030_op_modes_enum,
1137                 snd_soc_get_enum_double,
1138                 snd_soc_put_twl4030_opmode_enum_double),
1139
1140         /* Common playback gain controls */
1141         SOC_DOUBLE_R_TLV("DAC1 Digital Fine Playback Volume",
1142                 TWL4030_REG_ARXL1PGA, TWL4030_REG_ARXR1PGA,
1143                 0, 0x3f, 0, digital_fine_tlv),
1144         SOC_DOUBLE_R_TLV("DAC2 Digital Fine Playback Volume",
1145                 TWL4030_REG_ARXL2PGA, TWL4030_REG_ARXR2PGA,
1146                 0, 0x3f, 0, digital_fine_tlv),
1147
1148         SOC_DOUBLE_R_TLV("DAC1 Digital Coarse Playback Volume",
1149                 TWL4030_REG_ARXL1PGA, TWL4030_REG_ARXR1PGA,
1150                 6, 0x2, 0, digital_coarse_tlv),
1151         SOC_DOUBLE_R_TLV("DAC2 Digital Coarse Playback Volume",
1152                 TWL4030_REG_ARXL2PGA, TWL4030_REG_ARXR2PGA,
1153                 6, 0x2, 0, digital_coarse_tlv),
1154
1155         SOC_DOUBLE_R_TLV("DAC1 Analog Playback Volume",
1156                 TWL4030_REG_ARXL1_APGA_CTL, TWL4030_REG_ARXR1_APGA_CTL,
1157                 3, 0x12, 1, analog_tlv),
1158         SOC_DOUBLE_R_TLV("DAC2 Analog Playback Volume",
1159                 TWL4030_REG_ARXL2_APGA_CTL, TWL4030_REG_ARXR2_APGA_CTL,
1160                 3, 0x12, 1, analog_tlv),
1161         SOC_DOUBLE_R("DAC1 Analog Playback Switch",
1162                 TWL4030_REG_ARXL1_APGA_CTL, TWL4030_REG_ARXR1_APGA_CTL,
1163                 1, 1, 0),
1164         SOC_DOUBLE_R("DAC2 Analog Playback Switch",
1165                 TWL4030_REG_ARXL2_APGA_CTL, TWL4030_REG_ARXR2_APGA_CTL,
1166                 1, 1, 0),
1167
1168         /* Common voice downlink gain controls */
1169         SOC_SINGLE_TLV("DAC Voice Digital Downlink Volume",
1170                 TWL4030_REG_VRXPGA, 0, 0x31, 0, digital_voice_downlink_tlv),
1171
1172         SOC_SINGLE_TLV("DAC Voice Analog Downlink Volume",
1173                 TWL4030_REG_VDL_APGA_CTL, 3, 0x12, 1, analog_tlv),
1174
1175         SOC_SINGLE("DAC Voice Analog Downlink Switch",
1176                 TWL4030_REG_VDL_APGA_CTL, 1, 1, 0),
1177
1178         /* Separate output gain controls */
1179         SOC_DOUBLE_R_EXT_TLV("PreDriv Playback Volume",
1180                 TWL4030_REG_PREDL_CTL, TWL4030_REG_PREDR_CTL,
1181                 4, 3, 0, snd_soc_get_volsw_r2_twl4030,
1182                 snd_soc_put_volsw_r2_twl4030, output_tvl),
1183
1184         SOC_DOUBLE_EXT_TLV("Headset Playback Volume",
1185                 TWL4030_REG_HS_GAIN_SET, 0, 2, 3, 0, snd_soc_get_volsw_twl4030,
1186                 snd_soc_put_volsw_twl4030, output_tvl),
1187
1188         SOC_DOUBLE_R_EXT_TLV("Carkit Playback Volume",
1189                 TWL4030_REG_PRECKL_CTL, TWL4030_REG_PRECKR_CTL,
1190                 4, 3, 0, snd_soc_get_volsw_r2_twl4030,
1191                 snd_soc_put_volsw_r2_twl4030, output_tvl),
1192
1193         SOC_SINGLE_EXT_TLV("Earpiece Playback Volume",
1194                 TWL4030_REG_EAR_CTL, 4, 3, 0, snd_soc_get_volsw_twl4030,
1195                 snd_soc_put_volsw_twl4030, output_ear_tvl),
1196
1197         /* Common capture gain controls */
1198         SOC_DOUBLE_R_TLV("TX1 Digital Capture Volume",
1199                 TWL4030_REG_ATXL1PGA, TWL4030_REG_ATXR1PGA,
1200                 0, 0x1f, 0, digital_capture_tlv),
1201         SOC_DOUBLE_R_TLV("TX2 Digital Capture Volume",
1202                 TWL4030_REG_AVTXL2PGA, TWL4030_REG_AVTXR2PGA,
1203                 0, 0x1f, 0, digital_capture_tlv),
1204 #endif
1205         SOC_DOUBLE_TLV("Analog Capture Volume", TWL4030_REG_ANAMIC_GAIN,
1206                 0, 3, 5, 0, input_gain_tlv),
1207 #if 0
1208         SOC_ENUM("AVADC Clock Priority", twl4030_avadc_clk_priority_enum),
1209
1210         SOC_ENUM("HS ramp delay", twl4030_rampdelay_enum),
1211
1212         SOC_ENUM("Vibra H-bridge mode", twl4030_vibradirmode_enum),
1213         SOC_ENUM("Vibra H-bridge direction", twl4030_vibradir_enum),
1214
1215         SOC_ENUM("Digimic LR Swap", twl4030_digimicswap_enum),
1216 #endif
1217 };
1218
1219 static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = {
1220         /* Left channel inputs */
1221         SND_SOC_DAPM_INPUT("MAINMIC"),
1222         SND_SOC_DAPM_INPUT("HSMIC"),
1223         SND_SOC_DAPM_INPUT("AUXL"),
1224         SND_SOC_DAPM_INPUT("CARKITMIC"),
1225         /* Right channel inputs */
1226         SND_SOC_DAPM_INPUT("SUBMIC"),
1227         SND_SOC_DAPM_INPUT("AUXR"),
1228         /* Digital microphones (Stereo) */
1229         SND_SOC_DAPM_INPUT("DIGIMIC0"),
1230         SND_SOC_DAPM_INPUT("DIGIMIC1"),
1231
1232         /* Outputs */
1233         SND_SOC_DAPM_OUTPUT("EARPIECE"),
1234         SND_SOC_DAPM_OUTPUT("PREDRIVEL"),
1235         SND_SOC_DAPM_OUTPUT("PREDRIVER"),
1236         SND_SOC_DAPM_OUTPUT("HSOL"),
1237         SND_SOC_DAPM_OUTPUT("HSOR"),
1238         SND_SOC_DAPM_OUTPUT("CARKITL"),
1239         SND_SOC_DAPM_OUTPUT("CARKITR"),
1240         SND_SOC_DAPM_OUTPUT("HFL"),
1241         SND_SOC_DAPM_OUTPUT("HFR"),
1242         SND_SOC_DAPM_OUTPUT("VIBRA"),
1243
1244         /* AIF and APLL clocks for running DAIs (including loopback) */
1245         SND_SOC_DAPM_INPUT("Virtual HiFi IN"),
1246 #if 0
1247         SND_SOC_DAPM_OUTPUT("Virtual HiFi OUT"),
1248         SND_SOC_DAPM_OUTPUT("Virtual Voice OUT"),
1249
1250         /* DACs */
1251         SND_SOC_DAPM_DAC("DAC Right1", "Right Front HiFi Playback",
1252                         SND_SOC_NOPM, 0, 0),
1253         SND_SOC_DAPM_DAC("DAC Left1", "Left Front HiFi Playback",
1254                         SND_SOC_NOPM, 0, 0),
1255         SND_SOC_DAPM_DAC("DAC Right2", "Right Rear HiFi Playback",
1256                         SND_SOC_NOPM, 0, 0),
1257         SND_SOC_DAPM_DAC("DAC Left2", "Left Rear HiFi Playback",
1258                         SND_SOC_NOPM, 0, 0),
1259         SND_SOC_DAPM_DAC("DAC Voice", "Voice Playback",
1260                         SND_SOC_NOPM, 0, 0),
1261
1262         /* Analog bypasses */
1263         SND_SOC_DAPM_SWITCH("Right1 Analog Loopback", SND_SOC_NOPM, 0, 0,
1264                         &twl4030_dapm_abypassr1_control),
1265         SND_SOC_DAPM_SWITCH("Left1 Analog Loopback", SND_SOC_NOPM, 0, 0,
1266                         &twl4030_dapm_abypassl1_control),
1267         SND_SOC_DAPM_SWITCH("Right2 Analog Loopback", SND_SOC_NOPM, 0, 0,
1268                         &twl4030_dapm_abypassr2_control),
1269         SND_SOC_DAPM_SWITCH("Left2 Analog Loopback", SND_SOC_NOPM, 0, 0,
1270                         &twl4030_dapm_abypassl2_control),
1271         SND_SOC_DAPM_SWITCH("Voice Analog Loopback", SND_SOC_NOPM, 0, 0,
1272                         &twl4030_dapm_abypassv_control),
1273
1274         /* Master analog loopback switch */
1275         SND_SOC_DAPM_SUPPLY("FM Loop Enable", TWL4030_REG_MISC_SET_1, 5, 0,
1276                             NULL, 0),
1277
1278         /* Digital bypasses */
1279         SND_SOC_DAPM_SWITCH("Left Digital Loopback", SND_SOC_NOPM, 0, 0,
1280                         &twl4030_dapm_dbypassl_control),
1281         SND_SOC_DAPM_SWITCH("Right Digital Loopback", SND_SOC_NOPM, 0, 0,
1282                         &twl4030_dapm_dbypassr_control),
1283         SND_SOC_DAPM_SWITCH("Voice Digital Loopback", SND_SOC_NOPM, 0, 0,
1284                         &twl4030_dapm_dbypassv_control),
1285
1286         /* Digital mixers, power control for the physical DACs */
1287         SND_SOC_DAPM_MIXER("Digital R1 Playback Mixer",
1288                         TWL4030_REG_AVDAC_CTL, 0, 0, NULL, 0),
1289         SND_SOC_DAPM_MIXER("Digital L1 Playback Mixer",
1290                         TWL4030_REG_AVDAC_CTL, 1, 0, NULL, 0),
1291         SND_SOC_DAPM_MIXER("Digital R2 Playback Mixer",
1292                         TWL4030_REG_AVDAC_CTL, 2, 0, NULL, 0),
1293         SND_SOC_DAPM_MIXER("Digital L2 Playback Mixer",
1294                         TWL4030_REG_AVDAC_CTL, 3, 0, NULL, 0),
1295         SND_SOC_DAPM_MIXER("Digital Voice Playback Mixer",
1296                         TWL4030_REG_AVDAC_CTL, 4, 0, NULL, 0),
1297
1298         /* Analog mixers, power control for the physical PGAs */
1299         SND_SOC_DAPM_MIXER("Analog R1 Playback Mixer",
1300                         TWL4030_REG_ARXR1_APGA_CTL, 0, 0, NULL, 0),
1301         SND_SOC_DAPM_MIXER("Analog L1 Playback Mixer",
1302                         TWL4030_REG_ARXL1_APGA_CTL, 0, 0, NULL, 0),
1303         SND_SOC_DAPM_MIXER("Analog R2 Playback Mixer",
1304                         TWL4030_REG_ARXR2_APGA_CTL, 0, 0, NULL, 0),
1305         SND_SOC_DAPM_MIXER("Analog L2 Playback Mixer",
1306                         TWL4030_REG_ARXL2_APGA_CTL, 0, 0, NULL, 0),
1307         SND_SOC_DAPM_MIXER("Analog Voice Playback Mixer",
1308                         TWL4030_REG_VDL_APGA_CTL, 0, 0, NULL, 0),
1309 #endif
1310         SND_SOC_DAPM_SUPPLY("APLL Enable", SND_SOC_NOPM, 0, 0, apll_event,
1311                             SND_SOC_DAPM_PRE_PMU|SND_SOC_DAPM_POST_PMD),
1312
1313         SND_SOC_DAPM_SUPPLY("AIF Enable", SND_SOC_NOPM, 0, 0, aif_event,
1314                             SND_SOC_DAPM_PRE_PMU|SND_SOC_DAPM_POST_PMD),
1315 #if 0
1316         /* Output MIXER controls */
1317         /* Earpiece */
1318         SND_SOC_DAPM_MIXER("Earpiece Mixer", SND_SOC_NOPM, 0, 0,
1319                         &twl4030_dapm_earpiece_controls[0],
1320                         ARRAY_SIZE(twl4030_dapm_earpiece_controls)),
1321         SND_SOC_DAPM_PGA_E("Earpiece PGA", SND_SOC_NOPM,
1322                         0, 0, NULL, 0, earpiecepga_event,
1323                         SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
1324         /* PreDrivL/R */
1325         SND_SOC_DAPM_MIXER("PredriveL Mixer", SND_SOC_NOPM, 0, 0,
1326                         &twl4030_dapm_predrivel_controls[0],
1327                         ARRAY_SIZE(twl4030_dapm_predrivel_controls)),
1328         SND_SOC_DAPM_PGA_E("PredriveL PGA", SND_SOC_NOPM,
1329                         0, 0, NULL, 0, predrivelpga_event,
1330                         SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
1331         SND_SOC_DAPM_MIXER("PredriveR Mixer", SND_SOC_NOPM, 0, 0,
1332                         &twl4030_dapm_predriver_controls[0],
1333                         ARRAY_SIZE(twl4030_dapm_predriver_controls)),
1334         SND_SOC_DAPM_PGA_E("PredriveR PGA", SND_SOC_NOPM,
1335                         0, 0, NULL, 0, predriverpga_event,
1336                         SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
1337         /* HeadsetL/R */
1338         SND_SOC_DAPM_MIXER("HeadsetL Mixer", SND_SOC_NOPM, 0, 0,
1339                         &twl4030_dapm_hsol_controls[0],
1340                         ARRAY_SIZE(twl4030_dapm_hsol_controls)),
1341         SND_SOC_DAPM_PGA_E("HeadsetL PGA", SND_SOC_NOPM,
1342                         0, 0, NULL, 0, headsetlpga_event,
1343                         SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
1344         SND_SOC_DAPM_MIXER("HeadsetR Mixer", SND_SOC_NOPM, 0, 0,
1345                         &twl4030_dapm_hsor_controls[0],
1346                         ARRAY_SIZE(twl4030_dapm_hsor_controls)),
1347         SND_SOC_DAPM_PGA_E("HeadsetR PGA", SND_SOC_NOPM,
1348                         0, 0, NULL, 0, headsetrpga_event,
1349                         SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
1350         /* CarkitL/R */
1351         SND_SOC_DAPM_MIXER("CarkitL Mixer", SND_SOC_NOPM, 0, 0,
1352                         &twl4030_dapm_carkitl_controls[0],
1353                         ARRAY_SIZE(twl4030_dapm_carkitl_controls)),
1354         SND_SOC_DAPM_PGA_E("CarkitL PGA", SND_SOC_NOPM,
1355                         0, 0, NULL, 0, carkitlpga_event,
1356                         SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
1357         SND_SOC_DAPM_MIXER("CarkitR Mixer", SND_SOC_NOPM, 0, 0,
1358                         &twl4030_dapm_carkitr_controls[0],
1359                         ARRAY_SIZE(twl4030_dapm_carkitr_controls)),
1360         SND_SOC_DAPM_PGA_E("CarkitR PGA", SND_SOC_NOPM,
1361                         0, 0, NULL, 0, carkitrpga_event,
1362                         SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
1363
1364         /* Output MUX controls */
1365         /* HandsfreeL/R */
1366         SND_SOC_DAPM_MUX("HandsfreeL Mux", SND_SOC_NOPM, 0, 0,
1367                 &twl4030_dapm_handsfreel_control),
1368         SND_SOC_DAPM_SWITCH("HandsfreeL", SND_SOC_NOPM, 0, 0,
1369                         &twl4030_dapm_handsfreelmute_control),
1370         SND_SOC_DAPM_PGA_E("HandsfreeL PGA", SND_SOC_NOPM,
1371                         0, 0, NULL, 0, handsfreelpga_event,
1372                         SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
1373         SND_SOC_DAPM_MUX("HandsfreeR Mux", SND_SOC_NOPM, 5, 0,
1374                 &twl4030_dapm_handsfreer_control),
1375         SND_SOC_DAPM_SWITCH("HandsfreeR", SND_SOC_NOPM, 0, 0,
1376                         &twl4030_dapm_handsfreermute_control),
1377         SND_SOC_DAPM_PGA_E("HandsfreeR PGA", SND_SOC_NOPM,
1378                         0, 0, NULL, 0, handsfreerpga_event,
1379                         SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD),
1380         /* Vibra */
1381         SND_SOC_DAPM_MUX_E("Vibra Mux", TWL4030_REG_VIBRA_CTL, 0, 0,
1382                            &twl4030_dapm_vibra_control, vibramux_event,
1383                            SND_SOC_DAPM_PRE_PMU),
1384         SND_SOC_DAPM_MUX("Vibra Route", SND_SOC_NOPM, 0, 0,
1385                 &twl4030_dapm_vibrapath_control),
1386 #endif
1387         /* Introducing four virtual ADC, since TWL4030 have four channel for
1388            capture */
1389         SND_SOC_DAPM_ADC("ADC Virtual Left1", "Left Front Capture",
1390                 SND_SOC_NOPM, 0, 0),
1391         SND_SOC_DAPM_ADC("ADC Virtual Right1", "Right Front Capture",
1392                 SND_SOC_NOPM, 0, 0),
1393 #if 0
1394         SND_SOC_DAPM_ADC("ADC Virtual Left2", "Left Rear Capture",
1395                 SND_SOC_NOPM, 0, 0),
1396         SND_SOC_DAPM_ADC("ADC Virtual Right2", "Right Rear Capture",
1397                 SND_SOC_NOPM, 0, 0),
1398
1399         /* Analog/Digital mic path selection.
1400            TX1 Left/Right: either analog Left/Right or Digimic0
1401            TX2 Left/Right: either analog Left/Right or Digimic1 */
1402         SND_SOC_DAPM_MUX("TX1 Capture Route", SND_SOC_NOPM, 0, 0,
1403                 &twl4030_dapm_micpathtx1_control),
1404         SND_SOC_DAPM_MUX("TX2 Capture Route", SND_SOC_NOPM, 0, 0,
1405                 &twl4030_dapm_micpathtx2_control),
1406 #endif
1407         /* Analog input mixers for the capture amplifiers */
1408         SND_SOC_DAPM_MIXER("Analog Left",
1409                 TWL4030_REG_ANAMICL, 4, 0,
1410                 &twl4030_dapm_analoglmic_controls[0],
1411                 ARRAY_SIZE(twl4030_dapm_analoglmic_controls)),
1412         SND_SOC_DAPM_MIXER("Analog Right",
1413                 TWL4030_REG_ANAMICR, 4, 0,
1414                 &twl4030_dapm_analogrmic_controls[0],
1415                 ARRAY_SIZE(twl4030_dapm_analogrmic_controls)),
1416
1417         SND_SOC_DAPM_PGA("ADC Physical Left",
1418                 TWL4030_REG_AVADC_CTL, 3, 0, NULL, 0),
1419         SND_SOC_DAPM_PGA("ADC Physical Right",
1420                 TWL4030_REG_AVADC_CTL, 1, 0, NULL, 0),
1421 #if 0
1422         SND_SOC_DAPM_PGA_E("Digimic0 Enable",
1423                 TWL4030_REG_ADCMICSEL, 1, 0, NULL, 0,
1424                 digimic_event, SND_SOC_DAPM_POST_PMU),
1425         SND_SOC_DAPM_PGA_E("Digimic1 Enable",
1426                 TWL4030_REG_ADCMICSEL, 3, 0, NULL, 0,
1427                 digimic_event, SND_SOC_DAPM_POST_PMU),
1428
1429         SND_SOC_DAPM_SUPPLY("micbias1 select", TWL4030_REG_MICBIAS_CTL, 5, 0,
1430                             NULL, 0),
1431         SND_SOC_DAPM_SUPPLY("micbias2 select", TWL4030_REG_MICBIAS_CTL, 6, 0,
1432                             NULL, 0),
1433 #endif
1434         SND_SOC_DAPM_MICBIAS("Mic Bias 1", TWL4030_REG_MICBIAS_CTL, 0, 0),
1435         SND_SOC_DAPM_MICBIAS("Mic Bias 2", TWL4030_REG_MICBIAS_CTL, 1, 0),
1436 #if 0
1437         SND_SOC_DAPM_MICBIAS("Headset Mic Bias", TWL4030_REG_MICBIAS_CTL, 2, 0),
1438 #endif
1439 };
1440
1441 static const struct snd_soc_dapm_route intercon[] = {
1442 #if 0
1443         {"Digital L1 Playback Mixer", NULL, "DAC Left1"},
1444         {"Digital R1 Playback Mixer", NULL, "DAC Right1"},
1445         {"Digital L2 Playback Mixer", NULL, "DAC Left2"},
1446         {"Digital R2 Playback Mixer", NULL, "DAC Right2"},
1447         {"Digital Voice Playback Mixer", NULL, "DAC Voice"},
1448
1449         /* Supply for the digital part (APLL) */
1450         {"Digital Voice Playback Mixer", NULL, "APLL Enable"},
1451
1452         {"DAC Left1", NULL, "AIF Enable"},
1453         {"DAC Right1", NULL, "AIF Enable"},
1454         {"DAC Left2", NULL, "AIF Enable"},
1455         {"DAC Right1", NULL, "AIF Enable"},
1456
1457         {"Digital R2 Playback Mixer", NULL, "AIF Enable"},
1458         {"Digital L2 Playback Mixer", NULL, "AIF Enable"},
1459
1460         {"Analog L1 Playback Mixer", NULL, "Digital L1 Playback Mixer"},
1461         {"Analog R1 Playback Mixer", NULL, "Digital R1 Playback Mixer"},
1462         {"Analog L2 Playback Mixer", NULL, "Digital L2 Playback Mixer"},
1463         {"Analog R2 Playback Mixer", NULL, "Digital R2 Playback Mixer"},
1464         {"Analog Voice Playback Mixer", NULL, "Digital Voice Playback Mixer"},
1465
1466         /* Internal playback routings */
1467         /* Earpiece */
1468         {"Earpiece Mixer", "Voice", "Analog Voice Playback Mixer"},
1469         {"Earpiece Mixer", "AudioL1", "Analog L1 Playback Mixer"},
1470         {"Earpiece Mixer", "AudioL2", "Analog L2 Playback Mixer"},
1471         {"Earpiece Mixer", "AudioR1", "Analog R1 Playback Mixer"},
1472         {"Earpiece PGA", NULL, "Earpiece Mixer"},
1473         /* PreDrivL */
1474         {"PredriveL Mixer", "Voice", "Analog Voice Playback Mixer"},
1475         {"PredriveL Mixer", "AudioL1", "Analog L1 Playback Mixer"},
1476         {"PredriveL Mixer", "AudioL2", "Analog L2 Playback Mixer"},
1477         {"PredriveL Mixer", "AudioR2", "Analog R2 Playback Mixer"},
1478         {"PredriveL PGA", NULL, "PredriveL Mixer"},
1479         /* PreDrivR */
1480         {"PredriveR Mixer", "Voice", "Analog Voice Playback Mixer"},
1481         {"PredriveR Mixer", "AudioR1", "Analog R1 Playback Mixer"},
1482         {"PredriveR Mixer", "AudioR2", "Analog R2 Playback Mixer"},
1483         {"PredriveR Mixer", "AudioL2", "Analog L2 Playback Mixer"},
1484         {"PredriveR PGA", NULL, "PredriveR Mixer"},
1485         /* HeadsetL */
1486         {"HeadsetL Mixer", "Voice", "Analog Voice Playback Mixer"},
1487         {"HeadsetL Mixer", "AudioL1", "Analog L1 Playback Mixer"},
1488         {"HeadsetL Mixer", "AudioL2", "Analog L2 Playback Mixer"},
1489         {"HeadsetL PGA", NULL, "HeadsetL Mixer"},
1490         /* HeadsetR */
1491         {"HeadsetR Mixer", "Voice", "Analog Voice Playback Mixer"},
1492         {"HeadsetR Mixer", "AudioR1", "Analog R1 Playback Mixer"},
1493         {"HeadsetR Mixer", "AudioR2", "Analog R2 Playback Mixer"},
1494         {"HeadsetR PGA", NULL, "HeadsetR Mixer"},
1495         /* CarkitL */
1496         {"CarkitL Mixer", "Voice", "Analog Voice Playback Mixer"},
1497         {"CarkitL Mixer", "AudioL1", "Analog L1 Playback Mixer"},
1498         {"CarkitL Mixer", "AudioL2", "Analog L2 Playback Mixer"},
1499         {"CarkitL PGA", NULL, "CarkitL Mixer"},
1500         /* CarkitR */
1501         {"CarkitR Mixer", "Voice", "Analog Voice Playback Mixer"},
1502         {"CarkitR Mixer", "AudioR1", "Analog R1 Playback Mixer"},
1503         {"CarkitR Mixer", "AudioR2", "Analog R2 Playback Mixer"},
1504         {"CarkitR PGA", NULL, "CarkitR Mixer"},
1505         /* HandsfreeL */
1506         {"HandsfreeL Mux", "Voice", "Analog Voice Playback Mixer"},
1507         {"HandsfreeL Mux", "AudioL1", "Analog L1 Playback Mixer"},
1508         {"HandsfreeL Mux", "AudioL2", "Analog L2 Playback Mixer"},
1509         {"HandsfreeL Mux", "AudioR2", "Analog R2 Playback Mixer"},
1510         {"HandsfreeL", "Switch", "HandsfreeL Mux"},
1511         {"HandsfreeL PGA", NULL, "HandsfreeL"},
1512         /* HandsfreeR */
1513         {"HandsfreeR Mux", "Voice", "Analog Voice Playback Mixer"},
1514         {"HandsfreeR Mux", "AudioR1", "Analog R1 Playback Mixer"},
1515         {"HandsfreeR Mux", "AudioR2", "Analog R2 Playback Mixer"},
1516         {"HandsfreeR Mux", "AudioL2", "Analog L2 Playback Mixer"},
1517         {"HandsfreeR", "Switch", "HandsfreeR Mux"},
1518         {"HandsfreeR PGA", NULL, "HandsfreeR"},
1519         /* Vibra */
1520         {"Vibra Mux", "AudioL1", "DAC Left1"},
1521         {"Vibra Mux", "AudioR1", "DAC Right1"},
1522         {"Vibra Mux", "AudioL2", "DAC Left2"},
1523         {"Vibra Mux", "AudioR2", "DAC Right2"},
1524
1525         /* outputs */
1526         /* Must be always connected (for AIF and APLL) */
1527         {"Virtual HiFi OUT", NULL, "DAC Left1"},
1528         {"Virtual HiFi OUT", NULL, "DAC Right1"},
1529         {"Virtual HiFi OUT", NULL, "DAC Left2"},
1530         {"Virtual HiFi OUT", NULL, "DAC Right2"},
1531         /* Must be always connected (for APLL) */
1532         {"Virtual Voice OUT", NULL, "Digital Voice Playback Mixer"},
1533         /* Physical outputs */
1534         {"EARPIECE", NULL, "Earpiece PGA"},
1535         {"PREDRIVEL", NULL, "PredriveL PGA"},
1536         {"PREDRIVER", NULL, "PredriveR PGA"},
1537         {"HSOL", NULL, "HeadsetL PGA"},
1538         {"HSOR", NULL, "HeadsetR PGA"},
1539         {"CARKITL", NULL, "CarkitL PGA"},
1540         {"CARKITR", NULL, "CarkitR PGA"},
1541         {"HFL", NULL, "HandsfreeL PGA"},
1542         {"HFR", NULL, "HandsfreeR PGA"},
1543         {"Vibra Route", "Audio", "Vibra Mux"},
1544         {"VIBRA", NULL, "Vibra Route"},
1545 #endif
1546         /* Capture path */
1547         /* Must be always connected (for AIF and APLL) */
1548         {"ADC Virtual Left1", NULL, "Virtual HiFi IN"},
1549         {"ADC Virtual Right1", NULL, "Virtual HiFi IN"},
1550 //      {"ADC Virtual Left2", NULL, "Virtual HiFi IN"},
1551 //      {"ADC Virtual Right2", NULL, "Virtual HiFi IN"},
1552         /* Physical inputs */
1553         {"Analog Left", "Main Mic Capture Switch", "MAINMIC"},
1554 //      {"Analog Left", "Headset Mic Capture Switch", "HSMIC"},
1555         {"Analog Left", "AUXL Capture Switch", "AUXL"},
1556 //      {"Analog Left", "Carkit Mic Capture Switch", "CARKITMIC"},
1557
1558         {"Analog Right", "Sub Mic Capture Switch", "SUBMIC"},
1559         {"Analog Right", "AUXR Capture Switch", "AUXR"},
1560
1561         {"ADC Physical Left", NULL, "Analog Left"},
1562         {"ADC Physical Right", NULL, "Analog Right"},
1563 #if 0
1564         {"Digimic0 Enable", NULL, "DIGIMIC0"},
1565         {"Digimic1 Enable", NULL, "DIGIMIC1"},
1566
1567         {"DIGIMIC0", NULL, "micbias1 select"},
1568         {"DIGIMIC1", NULL, "micbias2 select"},
1569
1570         /* TX1 Left capture path */
1571         {"TX1 Capture Route", "Analog", "ADC Physical Left"},
1572         {"TX1 Capture Route", "Digimic0", "Digimic0 Enable"},
1573         /* TX1 Right capture path */
1574         {"TX1 Capture Route", "Analog", "ADC Physical Right"},
1575         {"TX1 Capture Route", "Digimic0", "Digimic0 Enable"},
1576         /* TX2 Left capture path */
1577         {"TX2 Capture Route", "Analog", "ADC Physical Left"},
1578         {"TX2 Capture Route", "Digimic1", "Digimic1 Enable"},
1579         /* TX2 Right capture path */
1580         {"TX2 Capture Route", "Analog", "ADC Physical Right"},
1581         {"TX2 Capture Route", "Digimic1", "Digimic1 Enable"},
1582 #endif
1583         {"ADC Virtual Left1", NULL, "ADC Physical Left"},
1584         {"ADC Virtual Right1", NULL, "ADC Physical Right"},
1585 //      {"ADC Virtual Left2", NULL, "TX2 Capture Route"},
1586 //      {"ADC Virtual Right2", NULL, "TX2 Capture Route"},
1587
1588         {"ADC Virtual Left1", NULL, "AIF Enable"},
1589         {"ADC Virtual Right1", NULL, "AIF Enable"},
1590 #if 0
1591         {"ADC Virtual Left2", NULL, "AIF Enable"},
1592         {"ADC Virtual Right2", NULL, "AIF Enable"},
1593
1594         /* Analog bypass routes */
1595         {"Right1 Analog Loopback", "Switch", "Analog Right"},
1596         {"Left1 Analog Loopback", "Switch", "Analog Left"},
1597         {"Right2 Analog Loopback", "Switch", "Analog Right"},
1598         {"Left2 Analog Loopback", "Switch", "Analog Left"},
1599         {"Voice Analog Loopback", "Switch", "Analog Left"},
1600
1601         /* Supply for the Analog loopbacks */
1602         {"Right1 Analog Loopback", NULL, "FM Loop Enable"},
1603         {"Left1 Analog Loopback", NULL, "FM Loop Enable"},
1604         {"Right2 Analog Loopback", NULL, "FM Loop Enable"},
1605         {"Left2 Analog Loopback", NULL, "FM Loop Enable"},
1606         {"Voice Analog Loopback", NULL, "FM Loop Enable"},
1607
1608         {"Analog R1 Playback Mixer", NULL, "Right1 Analog Loopback"},
1609         {"Analog L1 Playback Mixer", NULL, "Left1 Analog Loopback"},
1610         {"Analog R2 Playback Mixer", NULL, "Right2 Analog Loopback"},
1611         {"Analog L2 Playback Mixer", NULL, "Left2 Analog Loopback"},
1612         {"Analog Voice Playback Mixer", NULL, "Voice Analog Loopback"},
1613
1614         /* Digital bypass routes */
1615         {"Right Digital Loopback", "Volume", "TX1 Capture Route"},
1616         {"Left Digital Loopback", "Volume", "TX1 Capture Route"},
1617         {"Voice Digital Loopback", "Volume", "TX2 Capture Route"},
1618
1619         {"Digital R2 Playback Mixer", NULL, "Right Digital Loopback"},
1620         {"Digital L2 Playback Mixer", NULL, "Left Digital Loopback"},
1621         {"Digital Voice Playback Mixer", NULL, "Voice Digital Loopback"},
1622 #endif
1623 };
1624
1625 static int twl4030_set_bias_level(struct snd_soc_codec *codec,
1626                                   enum snd_soc_bias_level level)
1627 {
1628         switch (level) {
1629         case SND_SOC_BIAS_ON:
1630                 break;
1631         case SND_SOC_BIAS_PREPARE:
1632                 break;
1633         case SND_SOC_BIAS_STANDBY:
1634                 if (codec->dapm.bias_level == SND_SOC_BIAS_OFF)
1635                         twl4030_codec_enable(codec, 1);
1636                 break;
1637         case SND_SOC_BIAS_OFF:
1638                 twl4030_codec_enable(codec, 0);
1639                 break;
1640         }
1641         codec->dapm.bias_level = level;
1642
1643         return 0;
1644 }
1645
1646 static void twl4030_constraints(struct twl4030_priv *twl4030,
1647                                 struct snd_pcm_substream *mst_substream)
1648 {
1649         struct snd_pcm_substream *slv_substream;
1650
1651         /* Pick the stream, which need to be constrained */
1652         if (mst_substream == twl4030->master_substream)
1653                 slv_substream = twl4030->slave_substream;
1654         else if (mst_substream == twl4030->slave_substream)
1655                 slv_substream = twl4030->master_substream;
1656         else /* This should not happen.. */
1657                 return;
1658
1659         /* Set the constraints according to the already configured stream */
1660         snd_pcm_hw_constraint_minmax(slv_substream->runtime,
1661                                 SNDRV_PCM_HW_PARAM_RATE,
1662                                 twl4030->rate,
1663                                 twl4030->rate);
1664
1665         snd_pcm_hw_constraint_minmax(slv_substream->runtime,
1666                                 SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
1667                                 twl4030->sample_bits,
1668                                 twl4030->sample_bits);
1669
1670         snd_pcm_hw_constraint_minmax(slv_substream->runtime,
1671                                 SNDRV_PCM_HW_PARAM_CHANNELS,
1672                                 twl4030->channels,
1673                                 twl4030->channels);
1674 }
1675
1676 /* In case of 4 channel mode, the RX1 L/R for playback and the TX2 L/R for
1677  * capture has to be enabled/disabled. */
1678 static void twl4030_tdm_enable(struct snd_soc_codec *codec, int direction,
1679                                 int enable)
1680 {
1681         u8 reg, mask;
1682
1683         reg = twl4030_read_reg_cache(codec, TWL4030_REG_OPTION);
1684
1685         if (direction == SNDRV_PCM_STREAM_PLAYBACK)
1686                 mask = TWL4030_ARXL1_VRX_EN | TWL4030_ARXR1_EN;
1687         else
1688                 mask = TWL4030_ATXL2_VTXL_EN | TWL4030_ATXR2_VTXR_EN;
1689
1690         if (enable)
1691                 reg |= mask;
1692         else
1693                 reg &= ~mask;
1694
1695         twl4030_write(codec, TWL4030_REG_OPTION, reg);
1696 }
1697
1698 static int twl4030_startup(struct snd_pcm_substream *substream,
1699                            struct snd_soc_dai *dai)
1700 {
1701         struct snd_soc_pcm_runtime *rtd = substream->private_data;
1702         struct snd_soc_codec *codec = rtd->codec;
1703         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
1704         u8 format;
1705
1706         snd_pcm_hw_constraint_msbits(substream->runtime, 0, 32, 24);
1707         if (twl4030->master_substream) {
1708                 twl4030->slave_substream = substream;
1709                 /* The DAI has one configuration for playback and capture, so
1710                  * if the DAI has been already configured then constrain this
1711                  * substream to match it. */
1712                 if (twl4030->configured)
1713                         twl4030_constraints(twl4030, twl4030->master_substream);
1714         } else {
1715                 if (!(twl4030_read_reg_cache(codec, TWL4030_REG_CODEC_MODE) &
1716                         TWL4030_OPTION_1)) {
1717                         /* In option2 4 channel is not supported, set the
1718                          * constraint for the first stream for channels, the
1719                          * second stream will 'inherit' this cosntraint */
1720                         snd_pcm_hw_constraint_minmax(substream->runtime,
1721                                                 SNDRV_PCM_HW_PARAM_CHANNELS,
1722                                                 2, 2);
1723                 }
1724                 twl4030->master_substream = substream;
1725         }
1726
1727         format = twl4030_read_reg_cache(codec, TWL4030_REG_AUDIO_IF);
1728         if (twl4030->using_256fs && !(format & TWL4030_CLK256FS_EN)) {
1729                 format |= TWL4030_CLK256FS_EN;
1730                 twl4030_write(codec, TWL4030_REG_AUDIO_IF, format);
1731         }
1732
1733         return 0;
1734 }
1735
1736 static void twl4030_shutdown(struct snd_pcm_substream *substream,
1737                              struct snd_soc_dai *dai)
1738 {
1739         struct snd_soc_pcm_runtime *rtd = substream->private_data;
1740         struct snd_soc_codec *codec = rtd->codec;
1741         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
1742         u8 format;
1743
1744         if (twl4030->master_substream == substream)
1745                 twl4030->master_substream = twl4030->slave_substream;
1746
1747         twl4030->slave_substream = NULL;
1748
1749         /* If all streams are closed, or the remaining stream has not yet
1750          * been configured than set the DAI as not configured. */
1751         if (!twl4030->master_substream)
1752                 twl4030->configured = 0;
1753          else if (!twl4030->master_substream->runtime->channels)
1754                 twl4030->configured = 0;
1755
1756          /* If the closing substream had 4 channel, do the necessary cleanup */
1757         if (substream->runtime->channels == 4)
1758                 twl4030_tdm_enable(codec, substream->stream, 0);
1759
1760         /* Disable 256fs clock to avoid noisy output in power save modes */
1761         format = twl4030_read_reg_cache(codec, TWL4030_REG_AUDIO_IF);
1762         if (format & TWL4030_CLK256FS_EN) {
1763                 format &= ~TWL4030_CLK256FS_EN;
1764                 twl4030_write(codec, TWL4030_REG_AUDIO_IF, format);
1765         }
1766 }
1767
1768 static int twl4030_hw_params(struct snd_pcm_substream *substream,
1769                            struct snd_pcm_hw_params *params,
1770                            struct snd_soc_dai *dai)
1771 {
1772         struct snd_soc_pcm_runtime *rtd = substream->private_data;
1773         struct snd_soc_codec *codec = rtd->codec;
1774         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
1775         u8 mode, old_mode, format, old_format;
1776
1777          /* If the substream has 4 channel, do the necessary setup */
1778         if (params_channels(params) == 4) {
1779                 format = twl4030_read_reg_cache(codec, TWL4030_REG_AUDIO_IF);
1780                 mode = twl4030_read_reg_cache(codec, TWL4030_REG_CODEC_MODE);
1781
1782                 /* Safety check: are we in the correct operating mode and
1783                  * the interface is in TDM mode? */
1784                 if ((mode & TWL4030_OPTION_1) &&
1785                     ((format & TWL4030_AIF_FORMAT) == TWL4030_AIF_FORMAT_TDM))
1786                         twl4030_tdm_enable(codec, substream->stream, 1);
1787                 else
1788                         return -EINVAL;
1789         }
1790
1791 #if 0
1792         if (twl4030->configured)
1793                 /* Ignoring hw_params for already configured DAI */
1794                 return 0;
1795 #endif
1796
1797         /* bit rate */
1798         old_mode = twl4030_read_reg_cache(codec,
1799                         TWL4030_REG_CODEC_MODE) & ~TWL4030_CODECPDZ;
1800         mode = old_mode & ~TWL4030_APLL_RATE;
1801
1802         switch (params_rate(params)) {
1803         case 8000:
1804                 mode |= TWL4030_APLL_RATE_8000;
1805                 break;
1806         case 11025:
1807                 mode |= TWL4030_APLL_RATE_11025;
1808                 break;
1809         case 12000:
1810                 mode |= TWL4030_APLL_RATE_12000;
1811                 break;
1812         case 16000:
1813                 mode |= TWL4030_APLL_RATE_16000;
1814                 break;
1815         case 22050:
1816                 mode |= TWL4030_APLL_RATE_22050;
1817                 break;
1818         case 24000:
1819                 mode |= TWL4030_APLL_RATE_24000;
1820                 break;
1821         case 32000:
1822                 mode |= TWL4030_APLL_RATE_32000;
1823                 break;
1824         case 44100:
1825                 mode |= TWL4030_APLL_RATE_44100;
1826                 break;
1827         case 48000:
1828                 mode |= TWL4030_APLL_RATE_48000;
1829                 break;
1830         case 96000:
1831                 mode |= TWL4030_APLL_RATE_96000;
1832                 break;
1833         default:
1834                 printk(KERN_ERR "TWL4030 hw params: unknown rate %d\n",
1835                         params_rate(params));
1836                 return -EINVAL;
1837         }
1838
1839         /* sample size */
1840         old_format = twl4030_read_reg_cache(codec, TWL4030_REG_AUDIO_IF);
1841         format = old_format;
1842         format &= ~TWL4030_DATA_WIDTH;
1843         switch (params_format(params)) {
1844         case SNDRV_PCM_FORMAT_S16_LE:
1845                 format |= TWL4030_DATA_WIDTH_16S_16W;
1846                 break;
1847         case SNDRV_PCM_FORMAT_S32_LE:
1848                 format |= TWL4030_DATA_WIDTH_32S_24W;
1849                 break;
1850         default:
1851                 printk(KERN_ERR "TWL4030 hw params: unknown format %d\n",
1852                         params_format(params));
1853                 return -EINVAL;
1854         }
1855
1856         if (format != old_format || mode != old_mode) {
1857                 if (twl4030->codec_powered) {
1858                         /*
1859                          * If the codec is powered, than we need to toggle the
1860                          * codec power.
1861                          */
1862                         twl4030_codec_enable(codec, 0);
1863                         twl4030_write(codec, TWL4030_REG_CODEC_MODE, mode);
1864                         twl4030_write(codec, TWL4030_REG_AUDIO_IF, format);
1865                         twl4030_codec_enable(codec, 1);
1866                 } else {
1867                         twl4030_write(codec, TWL4030_REG_CODEC_MODE, mode);
1868                         twl4030_write(codec, TWL4030_REG_AUDIO_IF, format);
1869                 }
1870         }
1871
1872         /* Store the important parameters for the DAI configuration and set
1873          * the DAI as configured */
1874         twl4030->configured = 1;
1875         twl4030->rate = params_rate(params);
1876         twl4030->sample_bits = hw_param_interval(params,
1877                                         SNDRV_PCM_HW_PARAM_SAMPLE_BITS)->min;
1878         twl4030->channels = params_channels(params);
1879
1880         /* If both playback and capture streams are open, and one of them
1881          * is setting the hw parameters right now (since we are here), set
1882          * constraints to the other stream to match the current one. */
1883         if (twl4030->slave_substream)
1884                 twl4030_constraints(twl4030, substream);
1885
1886         return 0;
1887 }
1888
1889 static int twl4030_set_dai_sysclk(struct snd_soc_dai *codec_dai,
1890                 int clk_id, unsigned int freq, int dir)
1891 {
1892         struct snd_soc_codec *codec = codec_dai->codec;
1893         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
1894
1895         switch (freq) {
1896         case 19200000:
1897         case 26000000:
1898         case 38400000:
1899                 break;
1900         default:
1901                 dev_err(codec->dev, "Unsupported APLL mclk: %u\n", freq);
1902                 return -EINVAL;
1903         }
1904
1905         if ((freq / 1000) != twl4030->sysclk) {
1906                 dev_err(codec->dev,
1907                         "Mismatch in APLL mclk: %u (configured: %u)\n",
1908                         freq, twl4030->sysclk * 1000);
1909                 return -EINVAL;
1910         }
1911
1912         return 0;
1913 }
1914
1915 static int twl4030_set_dai_fmt(struct snd_soc_dai *codec_dai,
1916                              unsigned int fmt)
1917 {
1918         struct snd_soc_codec *codec = codec_dai->codec;
1919         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
1920         u8 old_format, format;
1921
1922         /* get format */
1923         old_format = twl4030_read_reg_cache(codec, TWL4030_REG_AUDIO_IF);
1924         format = old_format;
1925
1926         /* set master/slave audio interface */
1927         switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
1928         case SND_SOC_DAIFMT_CBM_CFM:
1929                 format &= ~(TWL4030_AIF_SLAVE_EN);
1930                 format &= ~(TWL4030_CLK256FS_EN);
1931                 twl4030->using_256fs = 0;
1932                 break;
1933         case SND_SOC_DAIFMT_CBS_CFS:
1934                 format |= TWL4030_AIF_SLAVE_EN;
1935                 format |= TWL4030_CLK256FS_EN;
1936                 twl4030->using_256fs = 1;
1937                 break;
1938         default:
1939                 return -EINVAL;
1940         }
1941
1942         /* interface format */
1943         format &= ~TWL4030_AIF_FORMAT;
1944         switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
1945         case SND_SOC_DAIFMT_I2S:
1946                 format |= TWL4030_AIF_FORMAT_CODEC;
1947                 break;
1948         case SND_SOC_DAIFMT_DSP_A:
1949                 format |= TWL4030_AIF_FORMAT_TDM;
1950                 break;
1951         default:
1952                 return -EINVAL;
1953         }
1954
1955         if (format != old_format) {
1956                 if (twl4030->codec_powered) {
1957                         /*
1958                          * If the codec is powered, than we need to toggle the
1959                          * codec power.
1960                          */
1961                         twl4030_codec_enable(codec, 0);
1962                         twl4030_write(codec, TWL4030_REG_AUDIO_IF, format);
1963                         twl4030_codec_enable(codec, 1);
1964                 } else {
1965                         twl4030_write(codec, TWL4030_REG_AUDIO_IF, format);
1966                 }
1967         }
1968
1969         return 0;
1970 }
1971
1972 static int twl4030_set_tristate(struct snd_soc_dai *dai, int tristate)
1973 {
1974         struct snd_soc_codec *codec = dai->codec;
1975         u8 reg = twl4030_read_reg_cache(codec, TWL4030_REG_AUDIO_IF);
1976
1977         if (tristate)
1978                 reg |= TWL4030_AIF_TRI_EN;
1979         else
1980                 reg &= ~TWL4030_AIF_TRI_EN;
1981
1982         return twl4030_write(codec, TWL4030_REG_AUDIO_IF, reg);
1983 }
1984
1985 /* In case of voice mode, the RX1 L(VRX) for downlink and the TX2 L/R
1986  * (VTXL, VTXR) for uplink has to be enabled/disabled. */
1987 static void twl4030_voice_enable(struct snd_soc_codec *codec, int direction,
1988                                 int enable)
1989 {
1990         u8 reg, mask;
1991
1992         reg = twl4030_read_reg_cache(codec, TWL4030_REG_OPTION);
1993
1994         if (direction == SNDRV_PCM_STREAM_PLAYBACK)
1995                 mask = TWL4030_ARXL1_VRX_EN;
1996         else
1997                 mask = TWL4030_ATXL2_VTXL_EN | TWL4030_ATXR2_VTXR_EN;
1998
1999         if (enable)
2000                 reg |= mask;
2001         else
2002                 reg &= ~mask;
2003
2004         twl4030_write(codec, TWL4030_REG_OPTION, reg);
2005 }
2006
2007 static int twl4030_voice_startup(struct snd_pcm_substream *substream,
2008                 struct snd_soc_dai *dai)
2009 {
2010         struct snd_soc_pcm_runtime *rtd = substream->private_data;
2011         struct snd_soc_codec *codec = rtd->codec;
2012         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
2013         u8 mode;
2014
2015         /* If the system master clock is not 26MHz, the voice PCM interface is
2016          * not available.
2017          */
2018         if (twl4030->sysclk != 26000) {
2019                 dev_err(codec->dev, "The board is configured for %u Hz, while"
2020                         "the Voice interface needs 26MHz APLL mclk\n",
2021                         twl4030->sysclk * 1000);
2022                 return -EINVAL;
2023         }
2024
2025         /* If the codec mode is not option2, the voice PCM interface is not
2026          * available.
2027          */
2028         mode = twl4030_read_reg_cache(codec, TWL4030_REG_CODEC_MODE)
2029                 & TWL4030_OPT_MODE;
2030
2031         if (mode != TWL4030_OPTION_2) {
2032                 printk(KERN_ERR "TWL4030 voice startup: "
2033                         "the codec mode is not option2\n");
2034                 return -EINVAL;
2035         }
2036
2037         return 0;
2038 }
2039
2040 static void twl4030_voice_shutdown(struct snd_pcm_substream *substream,
2041                                 struct snd_soc_dai *dai)
2042 {
2043         struct snd_soc_pcm_runtime *rtd = substream->private_data;
2044         struct snd_soc_codec *codec = rtd->codec;
2045
2046         /* Enable voice digital filters */
2047         twl4030_voice_enable(codec, substream->stream, 0);
2048 }
2049
2050 static int twl4030_voice_hw_params(struct snd_pcm_substream *substream,
2051                 struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
2052 {
2053         struct snd_soc_pcm_runtime *rtd = substream->private_data;
2054         struct snd_soc_codec *codec = rtd->codec;
2055         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
2056         u8 old_mode, mode;
2057
2058         /* Enable voice digital filters */
2059         twl4030_voice_enable(codec, substream->stream, 1);
2060
2061         /* bit rate */
2062         old_mode = twl4030_read_reg_cache(codec, TWL4030_REG_CODEC_MODE)
2063                 & ~(TWL4030_CODECPDZ);
2064         mode = old_mode;
2065
2066         switch (params_rate(params)) {
2067         case 8000:
2068                 mode &= ~(TWL4030_SEL_16K);
2069                 break;
2070         case 16000:
2071                 mode |= TWL4030_SEL_16K;
2072                 break;
2073         default:
2074                 printk(KERN_ERR "TWL4030 voice hw params: unknown rate %d\n",
2075                         params_rate(params));
2076                 return -EINVAL;
2077         }
2078
2079         if (mode != old_mode) {
2080                 if (twl4030->codec_powered) {
2081                         /*
2082                          * If the codec is powered, than we need to toggle the
2083                          * codec power.
2084                          */
2085                         twl4030_codec_enable(codec, 0);
2086                         twl4030_write(codec, TWL4030_REG_CODEC_MODE, mode);
2087                         twl4030_codec_enable(codec, 1);
2088                 } else {
2089                         twl4030_write(codec, TWL4030_REG_CODEC_MODE, mode);
2090                 }
2091         }
2092
2093         return 0;
2094 }
2095
2096 static int twl4030_voice_set_dai_sysclk(struct snd_soc_dai *codec_dai,
2097                 int clk_id, unsigned int freq, int dir)
2098 {
2099         struct snd_soc_codec *codec = codec_dai->codec;
2100         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
2101
2102         if (freq != 26000000) {
2103                 dev_err(codec->dev, "Unsupported APLL mclk: %u, the Voice"
2104                         "interface needs 26MHz APLL mclk\n", freq);
2105                 return -EINVAL;
2106         }
2107         if ((freq / 1000) != twl4030->sysclk) {
2108                 dev_err(codec->dev,
2109                         "Mismatch in APLL mclk: %u (configured: %u)\n",
2110                         freq, twl4030->sysclk * 1000);
2111                 return -EINVAL;
2112         }
2113         return 0;
2114 }
2115
2116 static int twl4030_voice_set_dai_fmt(struct snd_soc_dai *codec_dai,
2117                 unsigned int fmt)
2118 {
2119         struct snd_soc_codec *codec = codec_dai->codec;
2120         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
2121         u8 old_format, format;
2122
2123         /* get format */
2124         old_format = twl4030_read_reg_cache(codec, TWL4030_REG_VOICE_IF);
2125         format = old_format;
2126
2127         /* set master/slave audio interface */
2128         switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
2129         case SND_SOC_DAIFMT_CBM_CFM:
2130                 format &= ~(TWL4030_VIF_SLAVE_EN);
2131                 break;
2132         case SND_SOC_DAIFMT_CBS_CFS:
2133                 format |= TWL4030_VIF_SLAVE_EN;
2134                 break;
2135         default:
2136                 return -EINVAL;
2137         }
2138
2139         /* clock inversion */
2140         switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
2141         case SND_SOC_DAIFMT_IB_NF:
2142                 format &= ~(TWL4030_VIF_FORMAT);
2143                 break;
2144         case SND_SOC_DAIFMT_NB_IF:
2145                 format |= TWL4030_VIF_FORMAT;
2146                 break;
2147         default:
2148                 return -EINVAL;
2149         }
2150
2151         if (format != old_format) {
2152                 if (twl4030->codec_powered) {
2153                         /*
2154                          * If the codec is powered, than we need to toggle the
2155                          * codec power.
2156                          */
2157                         twl4030_codec_enable(codec, 0);
2158                         twl4030_write(codec, TWL4030_REG_VOICE_IF, format);
2159                         twl4030_codec_enable(codec, 1);
2160                 } else {
2161                         twl4030_write(codec, TWL4030_REG_VOICE_IF, format);
2162                 }
2163         }
2164
2165         return 0;
2166 }
2167
2168 static int twl4030_voice_set_tristate(struct snd_soc_dai *dai, int tristate)
2169 {
2170         struct snd_soc_codec *codec = dai->codec;
2171         u8 reg = twl4030_read_reg_cache(codec, TWL4030_REG_VOICE_IF);
2172
2173         if (tristate)
2174                 reg |= TWL4030_VIF_TRI_EN;
2175         else
2176                 reg &= ~TWL4030_VIF_TRI_EN;
2177
2178         return twl4030_write(codec, TWL4030_REG_VOICE_IF, reg);
2179 }
2180
2181 #define TWL4030_RATES    (SNDRV_PCM_RATE_8000_48000)
2182 #define TWL4030_FORMATS  (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE)
2183
2184 static struct snd_soc_dai_ops twl4030_dai_hifi_ops = {
2185         .startup        = twl4030_startup,
2186         .shutdown       = twl4030_shutdown,
2187         .hw_params      = twl4030_hw_params,
2188         .set_sysclk     = twl4030_set_dai_sysclk,
2189         .set_fmt        = twl4030_set_dai_fmt,
2190         .set_tristate   = twl4030_set_tristate,
2191 };
2192
2193 static struct snd_soc_dai_ops twl4030_dai_voice_ops = {
2194         .startup        = twl4030_voice_startup,
2195         .shutdown       = twl4030_voice_shutdown,
2196         .hw_params      = twl4030_voice_hw_params,
2197         .set_sysclk     = twl4030_voice_set_dai_sysclk,
2198         .set_fmt        = twl4030_voice_set_dai_fmt,
2199         .set_tristate   = twl4030_voice_set_tristate,
2200 };
2201
2202 static struct snd_soc_dai_driver twl4030_dai[] = {
2203 {
2204         .name = "twl4030-hifi",
2205         .playback = {
2206                 .stream_name = "HiFi Playback",
2207                 .channels_min = 2,
2208                 .channels_max = 4,
2209                 .rates = TWL4030_RATES, // | SNDRV_PCM_RATE_96000,
2210                 .formats = TWL4030_FORMATS,},
2211         .capture = {
2212                 .stream_name = "Capture",
2213                 .channels_min = 2,
2214                 .channels_max = 4,
2215                 .rates = TWL4030_RATES,
2216                 .formats = TWL4030_FORMATS,},
2217         .ops = &twl4030_dai_hifi_ops,
2218 },
2219 {
2220         .name = "twl4030-voice",
2221         .playback = {
2222                 .stream_name = "Voice Playback",
2223                 .channels_min = 1,
2224                 .channels_max = 1,
2225                 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
2226                 .formats = SNDRV_PCM_FMTBIT_S16_LE,},
2227         .capture = {
2228                 .stream_name = "Capture",
2229                 .channels_min = 1,
2230                 .channels_max = 2,
2231                 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
2232                 .formats = SNDRV_PCM_FMTBIT_S16_LE,},
2233         .ops = &twl4030_dai_voice_ops,
2234 },
2235 };
2236
2237 static int twl4030_soc_suspend(struct snd_soc_codec *codec, pm_message_t state)
2238 {
2239         twl4030_set_bias_level(codec, SND_SOC_BIAS_OFF);
2240         return 0;
2241 }
2242
2243 static int twl4030_soc_resume(struct snd_soc_codec *codec)
2244 {
2245         twl4030_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
2246         return 0;
2247 }
2248
2249 static int twl4030_soc_probe(struct snd_soc_codec *codec)
2250 {
2251         struct twl4030_priv *twl4030;
2252
2253         twl4030 = kzalloc(sizeof(struct twl4030_priv), GFP_KERNEL);
2254         if (twl4030 == NULL) {
2255                 printk("Can not allocate memroy\n");
2256                 return -ENOMEM;
2257         }
2258         snd_soc_codec_set_drvdata(codec, twl4030);
2259         /* Set the defaults, and power up the codec */
2260         twl4030->sysclk = twl4030_audio_get_mclk() / 1000;
2261         codec->dapm.idle_bias_off = 1;
2262
2263         twl4030_init_chip(codec);
2264
2265         return 0;
2266 }
2267
2268 static int twl4030_soc_remove(struct snd_soc_codec *codec)
2269 {
2270         struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
2271
2272         /* Reset registers to their chip default before leaving */
2273         twl4030_reset_registers(codec);
2274         twl4030_set_bias_level(codec, SND_SOC_BIAS_OFF);
2275         kfree(twl4030);
2276         return 0;
2277 }
2278
2279 static struct snd_soc_codec_driver soc_codec_dev_twl4030 = {
2280         .probe = twl4030_soc_probe,
2281         .remove = twl4030_soc_remove,
2282         .suspend = twl4030_soc_suspend,
2283         .resume = twl4030_soc_resume,
2284         .read = twl4030_read_reg_cache,
2285         .write = twl4030_write,
2286         .set_bias_level = twl4030_set_bias_level,
2287         .reg_cache_size = sizeof(twl4030_reg),
2288         .reg_word_size = sizeof(u8),
2289         .reg_cache_default = twl4030_reg,
2290
2291         .controls = twl4030_snd_controls,
2292         .num_controls = ARRAY_SIZE(twl4030_snd_controls),
2293         .dapm_widgets = twl4030_dapm_widgets,
2294         .num_dapm_widgets = ARRAY_SIZE(twl4030_dapm_widgets),
2295         .dapm_routes = intercon,
2296         .num_dapm_routes = ARRAY_SIZE(intercon),
2297 };
2298
2299 static int __devinit twl4030_codec_probe(struct platform_device *pdev)
2300 {
2301         struct twl4030_codec_data *pdata = pdev->dev.platform_data;
2302
2303         if (!pdata) {
2304                 dev_err(&pdev->dev, "platform_data is missing\n");
2305                 return -EINVAL;
2306         }
2307
2308         return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_twl4030,
2309                         twl4030_dai, ARRAY_SIZE(twl4030_dai));
2310 }
2311
2312 static int __devexit twl4030_codec_remove(struct platform_device *pdev)
2313 {
2314         snd_soc_unregister_codec(&pdev->dev);
2315         return 0;
2316 }
2317
2318 MODULE_ALIAS("platform:twl4030-codec");
2319
2320 static struct platform_driver twl4030_codec_driver = {
2321         .probe          = twl4030_codec_probe,
2322         .remove         = __devexit_p(twl4030_codec_remove),
2323         .driver         = {
2324                 .name   = "twl4030-codec",
2325                 .owner  = THIS_MODULE,
2326         },
2327 };
2328
2329 static int __init twl4030_modinit(void)
2330 {
2331         return platform_driver_register(&twl4030_codec_driver);
2332 }
2333 module_init(twl4030_modinit);
2334
2335 static void __exit twl4030_exit(void)
2336 {
2337         platform_driver_unregister(&twl4030_codec_driver);
2338 }
2339 module_exit(twl4030_exit);
2340
2341 MODULE_DESCRIPTION("ASoC TWL4030 codec driver");
2342 MODULE_AUTHOR("Steve Sakoman");
2343 MODULE_LICENSE("GPL");