ASoC: add support for TAS5805M digital amplifier
[sfrench/cifs-2.6.git] / sound / soc / codecs / ab8500-codec.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) ST-Ericsson SA 2012
4  *
5  * Author: Ola Lilja <ola.o.lilja@stericsson.com>,
6  *         Kristoffer Karlsson <kristoffer.karlsson@stericsson.com>,
7  *         Roger Nilsson <roger.xr.nilsson@stericsson.com>,
8  *         for ST-Ericsson.
9  *
10  *         Based on the early work done by:
11  *         Mikko J. Lehto <mikko.lehto@symbio.com>,
12  *         Mikko Sarmanne <mikko.sarmanne@symbio.com>,
13  *         Jarmo K. Kuronen <jarmo.kuronen@symbio.com>,
14  *         for ST-Ericsson.
15  *
16  * License terms:
17  */
18
19 #include <linux/kernel.h>
20 #include <linux/module.h>
21 #include <linux/device.h>
22 #include <linux/slab.h>
23 #include <linux/moduleparam.h>
24 #include <linux/init.h>
25 #include <linux/delay.h>
26 #include <linux/pm.h>
27 #include <linux/platform_device.h>
28 #include <linux/mutex.h>
29 #include <linux/mfd/abx500/ab8500.h>
30 #include <linux/mfd/abx500.h>
31 #include <linux/mfd/abx500/ab8500-sysctrl.h>
32 #include <linux/mfd/abx500/ab8500-codec.h>
33 #include <linux/regulator/consumer.h>
34 #include <linux/of.h>
35
36 #include <sound/core.h>
37 #include <sound/pcm.h>
38 #include <sound/pcm_params.h>
39 #include <sound/initval.h>
40 #include <sound/soc.h>
41 #include <sound/soc-dapm.h>
42 #include <sound/tlv.h>
43
44 #include "ab8500-codec.h"
45
46 /* Macrocell value definitions */
47 #define CLK_32K_OUT2_DISABLE                    0x01
48 #define INACTIVE_RESET_AUDIO                    0x02
49 #define ENABLE_AUDIO_CLK_TO_AUDIO_BLK           0x10
50 #define ENABLE_VINTCORE12_SUPPLY                0x04
51 #define GPIO27_DIR_OUTPUT                       0x04
52 #define GPIO29_DIR_OUTPUT                       0x10
53 #define GPIO31_DIR_OUTPUT                       0x40
54
55 /* Macrocell register definitions */
56 #define AB8500_GPIO_DIR4_REG                    0x13 /* Bank AB8500_MISC */
57
58 /* Nr of FIR/IIR-coeff banks in ANC-block */
59 #define AB8500_NR_OF_ANC_COEFF_BANKS            2
60
61 /* Minimum duration to keep ANC IIR Init bit high or
62 low before proceeding with the configuration sequence */
63 #define AB8500_ANC_SM_DELAY                     2000
64
65 #define AB8500_FILTER_CONTROL(xname, xcount, xmin, xmax) \
66 {       .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
67         .info = filter_control_info, \
68         .get = filter_control_get, .put = filter_control_put, \
69         .private_value = (unsigned long)&(struct filter_control) \
70                 {.count = xcount, .min = xmin, .max = xmax} }
71
72 struct filter_control {
73         long min, max;
74         unsigned int count;
75         long value[128];
76 };
77
78 /* Sidetone states */
79 static const char * const enum_sid_state[] = {
80         "Unconfigured",
81         "Apply FIR",
82         "FIR is configured",
83 };
84 enum sid_state {
85         SID_UNCONFIGURED = 0,
86         SID_APPLY_FIR = 1,
87         SID_FIR_CONFIGURED = 2,
88 };
89
90 static const char * const enum_anc_state[] = {
91         "Unconfigured",
92         "Apply FIR and IIR",
93         "FIR and IIR are configured",
94         "Apply FIR",
95         "FIR is configured",
96         "Apply IIR",
97         "IIR is configured"
98 };
99 enum anc_state {
100         ANC_UNCONFIGURED = 0,
101         ANC_APPLY_FIR_IIR = 1,
102         ANC_FIR_IIR_CONFIGURED = 2,
103         ANC_APPLY_FIR = 3,
104         ANC_FIR_CONFIGURED = 4,
105         ANC_APPLY_IIR = 5,
106         ANC_IIR_CONFIGURED = 6
107 };
108
109 /* Analog microphones */
110 enum amic_idx {
111         AMIC_IDX_1A,
112         AMIC_IDX_1B,
113         AMIC_IDX_2
114 };
115
116 /* Private data for AB8500 device-driver */
117 struct ab8500_codec_drvdata {
118         struct regmap *regmap;
119         struct mutex ctrl_lock;
120
121         /* Sidetone */
122         long *sid_fir_values;
123         enum sid_state sid_status;
124
125         /* ANC */
126         long *anc_fir_values;
127         long *anc_iir_values;
128         enum anc_state anc_status;
129 };
130
131 static inline const char *amic_micbias_str(enum amic_micbias micbias)
132 {
133         switch (micbias) {
134         case AMIC_MICBIAS_VAMIC1:
135                 return "VAMIC1";
136         case AMIC_MICBIAS_VAMIC2:
137                 return "VAMIC2";
138         default:
139                 return "Unknown";
140         }
141 }
142
143 static inline const char *amic_type_str(enum amic_type type)
144 {
145         switch (type) {
146         case AMIC_TYPE_DIFFERENTIAL:
147                 return "DIFFERENTIAL";
148         case AMIC_TYPE_SINGLE_ENDED:
149                 return "SINGLE ENDED";
150         default:
151                 return "Unknown";
152         }
153 }
154
155 /*
156  * Read'n'write functions
157  */
158
159 /* Read a register from the audio-bank of AB8500 */
160 static int ab8500_codec_read_reg(void *context, unsigned int reg,
161                                  unsigned int *value)
162 {
163         struct device *dev = context;
164         int status;
165
166         u8 value8;
167         status = abx500_get_register_interruptible(dev, AB8500_AUDIO,
168                                                    reg, &value8);
169         *value = (unsigned int)value8;
170
171         return status;
172 }
173
174 /* Write to a register in the audio-bank of AB8500 */
175 static int ab8500_codec_write_reg(void *context, unsigned int reg,
176                                   unsigned int value)
177 {
178         struct device *dev = context;
179
180         return abx500_set_register_interruptible(dev, AB8500_AUDIO,
181                                                  reg, value);
182 }
183
184 static const struct regmap_config ab8500_codec_regmap = {
185         .reg_read = ab8500_codec_read_reg,
186         .reg_write = ab8500_codec_write_reg,
187 };
188
189 /*
190  * Controls - DAPM
191  */
192
193 /* Earpiece */
194
195 /* Earpiece source selector */
196 static const char * const enum_ear_lineout_source[] = {"Headset Left",
197                                                 "Speaker Left"};
198 static SOC_ENUM_SINGLE_DECL(dapm_enum_ear_lineout_source, AB8500_DMICFILTCONF,
199                         AB8500_DMICFILTCONF_DA3TOEAR, enum_ear_lineout_source);
200 static const struct snd_kcontrol_new dapm_ear_lineout_source =
201         SOC_DAPM_ENUM("Earpiece or LineOut Mono Source",
202                 dapm_enum_ear_lineout_source);
203
204 /* LineOut */
205
206 /* LineOut source selector */
207 static const char * const enum_lineout_source[] = {"Mono Path", "Stereo Path"};
208 static SOC_ENUM_DOUBLE_DECL(dapm_enum_lineout_source, AB8500_ANACONF5,
209                         AB8500_ANACONF5_HSLDACTOLOL,
210                         AB8500_ANACONF5_HSRDACTOLOR, enum_lineout_source);
211 static const struct snd_kcontrol_new dapm_lineout_source[] = {
212         SOC_DAPM_ENUM("LineOut Source", dapm_enum_lineout_source),
213 };
214
215 /* Handsfree */
216
217 /* Speaker Left - ANC selector */
218 static const char * const enum_HFx_sel[] = {"Audio Path", "ANC"};
219 static SOC_ENUM_SINGLE_DECL(dapm_enum_HFl_sel, AB8500_DIGMULTCONF2,
220                         AB8500_DIGMULTCONF2_HFLSEL, enum_HFx_sel);
221 static const struct snd_kcontrol_new dapm_HFl_select[] = {
222         SOC_DAPM_ENUM("Speaker Left Source", dapm_enum_HFl_sel),
223 };
224
225 /* Speaker Right - ANC selector */
226 static SOC_ENUM_SINGLE_DECL(dapm_enum_HFr_sel, AB8500_DIGMULTCONF2,
227                         AB8500_DIGMULTCONF2_HFRSEL, enum_HFx_sel);
228 static const struct snd_kcontrol_new dapm_HFr_select[] = {
229         SOC_DAPM_ENUM("Speaker Right Source", dapm_enum_HFr_sel),
230 };
231
232 /* Mic 1 */
233
234 /* Mic 1 - Mic 1a or 1b selector */
235 static const char * const enum_mic1ab_sel[] = {"Mic 1b", "Mic 1a"};
236 static SOC_ENUM_SINGLE_DECL(dapm_enum_mic1ab_sel, AB8500_ANACONF3,
237                         AB8500_ANACONF3_MIC1SEL, enum_mic1ab_sel);
238 static const struct snd_kcontrol_new dapm_mic1ab_mux[] = {
239         SOC_DAPM_ENUM("Mic 1a or 1b Select", dapm_enum_mic1ab_sel),
240 };
241
242 /* Mic 1 - AD3 - Mic 1 or DMic 3 selector */
243 static const char * const enum_ad3_sel[] = {"Mic 1", "DMic 3"};
244 static SOC_ENUM_SINGLE_DECL(dapm_enum_ad3_sel, AB8500_DIGMULTCONF1,
245                         AB8500_DIGMULTCONF1_AD3SEL, enum_ad3_sel);
246 static const struct snd_kcontrol_new dapm_ad3_select[] = {
247         SOC_DAPM_ENUM("AD3 Source Select", dapm_enum_ad3_sel),
248 };
249
250 /* Mic 1 - AD6 - Mic 1 or DMic 6 selector */
251 static const char * const enum_ad6_sel[] = {"Mic 1", "DMic 6"};
252 static SOC_ENUM_SINGLE_DECL(dapm_enum_ad6_sel, AB8500_DIGMULTCONF1,
253                         AB8500_DIGMULTCONF1_AD6SEL, enum_ad6_sel);
254 static const struct snd_kcontrol_new dapm_ad6_select[] = {
255         SOC_DAPM_ENUM("AD6 Source Select", dapm_enum_ad6_sel),
256 };
257
258 /* Mic 2 */
259
260 /* Mic 2 - AD5 - Mic 2 or DMic 5 selector */
261 static const char * const enum_ad5_sel[] = {"Mic 2", "DMic 5"};
262 static SOC_ENUM_SINGLE_DECL(dapm_enum_ad5_sel, AB8500_DIGMULTCONF1,
263                         AB8500_DIGMULTCONF1_AD5SEL, enum_ad5_sel);
264 static const struct snd_kcontrol_new dapm_ad5_select[] = {
265         SOC_DAPM_ENUM("AD5 Source Select", dapm_enum_ad5_sel),
266 };
267
268 /* LineIn */
269
270 /* LineIn left - AD1 - LineIn Left or DMic 1 selector */
271 static const char * const enum_ad1_sel[] = {"LineIn Left", "DMic 1"};
272 static SOC_ENUM_SINGLE_DECL(dapm_enum_ad1_sel, AB8500_DIGMULTCONF1,
273                         AB8500_DIGMULTCONF1_AD1SEL, enum_ad1_sel);
274 static const struct snd_kcontrol_new dapm_ad1_select[] = {
275         SOC_DAPM_ENUM("AD1 Source Select", dapm_enum_ad1_sel),
276 };
277
278 /* LineIn right - Mic 2 or LineIn Right selector */
279 static const char * const enum_mic2lr_sel[] = {"Mic 2", "LineIn Right"};
280 static SOC_ENUM_SINGLE_DECL(dapm_enum_mic2lr_sel, AB8500_ANACONF3,
281                         AB8500_ANACONF3_LINRSEL, enum_mic2lr_sel);
282 static const struct snd_kcontrol_new dapm_mic2lr_select[] = {
283         SOC_DAPM_ENUM("Mic 2 or LINR Select", dapm_enum_mic2lr_sel),
284 };
285
286 /* LineIn right - AD2 - LineIn Right or DMic2 selector */
287 static const char * const enum_ad2_sel[] = {"LineIn Right", "DMic 2"};
288 static SOC_ENUM_SINGLE_DECL(dapm_enum_ad2_sel, AB8500_DIGMULTCONF1,
289                         AB8500_DIGMULTCONF1_AD2SEL, enum_ad2_sel);
290 static const struct snd_kcontrol_new dapm_ad2_select[] = {
291         SOC_DAPM_ENUM("AD2 Source Select", dapm_enum_ad2_sel),
292 };
293
294
295 /* ANC */
296
297 static const char * const enum_anc_in_sel[] = {"Mic 1 / DMic 6",
298                                         "Mic 2 / DMic 5"};
299 static SOC_ENUM_SINGLE_DECL(dapm_enum_anc_in_sel, AB8500_DMICFILTCONF,
300                         AB8500_DMICFILTCONF_ANCINSEL, enum_anc_in_sel);
301 static const struct snd_kcontrol_new dapm_anc_in_select[] = {
302         SOC_DAPM_ENUM("ANC Source", dapm_enum_anc_in_sel),
303 };
304
305 /* ANC - Enable/Disable */
306 static const struct snd_kcontrol_new dapm_anc_enable[] = {
307         SOC_DAPM_SINGLE("Switch", AB8500_ANCCONF1,
308                         AB8500_ANCCONF1_ENANC, 0, 0),
309 };
310
311 /* ANC to Earpiece - Mute */
312 static const struct snd_kcontrol_new dapm_anc_ear_mute[] = {
313         SOC_DAPM_SINGLE("Switch", AB8500_DIGMULTCONF1,
314                         AB8500_DIGMULTCONF1_ANCSEL, 1, 0),
315 };
316
317
318
319 /* Sidetone left */
320
321 /* Sidetone left - Input selector */
322 static const char * const enum_stfir1_in_sel[] = {
323         "LineIn Left", "LineIn Right", "Mic 1", "Headset Left"
324 };
325 static SOC_ENUM_SINGLE_DECL(dapm_enum_stfir1_in_sel, AB8500_DIGMULTCONF2,
326                         AB8500_DIGMULTCONF2_FIRSID1SEL, enum_stfir1_in_sel);
327 static const struct snd_kcontrol_new dapm_stfir1_in_select[] = {
328         SOC_DAPM_ENUM("Sidetone Left Source", dapm_enum_stfir1_in_sel),
329 };
330
331 /* Sidetone right path */
332
333 /* Sidetone right - Input selector */
334 static const char * const enum_stfir2_in_sel[] = {
335         "LineIn Right", "Mic 1", "DMic 4", "Headset Right"
336 };
337 static SOC_ENUM_SINGLE_DECL(dapm_enum_stfir2_in_sel, AB8500_DIGMULTCONF2,
338                         AB8500_DIGMULTCONF2_FIRSID2SEL, enum_stfir2_in_sel);
339 static const struct snd_kcontrol_new dapm_stfir2_in_select[] = {
340         SOC_DAPM_ENUM("Sidetone Right Source", dapm_enum_stfir2_in_sel),
341 };
342
343 /* Vibra */
344
345 static const char * const enum_pwm2vibx[] = {"Audio Path", "PWM Generator"};
346
347 static SOC_ENUM_SINGLE_DECL(dapm_enum_pwm2vib1, AB8500_PWMGENCONF1,
348                         AB8500_PWMGENCONF1_PWMTOVIB1, enum_pwm2vibx);
349
350 static const struct snd_kcontrol_new dapm_pwm2vib1[] = {
351         SOC_DAPM_ENUM("Vibra 1 Controller", dapm_enum_pwm2vib1),
352 };
353
354 static SOC_ENUM_SINGLE_DECL(dapm_enum_pwm2vib2, AB8500_PWMGENCONF1,
355                         AB8500_PWMGENCONF1_PWMTOVIB2, enum_pwm2vibx);
356
357 static const struct snd_kcontrol_new dapm_pwm2vib2[] = {
358         SOC_DAPM_ENUM("Vibra 2 Controller", dapm_enum_pwm2vib2),
359 };
360
361 /*
362  * DAPM-widgets
363  */
364
365 static const struct snd_soc_dapm_widget ab8500_dapm_widgets[] = {
366
367         /* Clocks */
368         SND_SOC_DAPM_CLOCK_SUPPLY("audioclk"),
369
370         /* Regulators */
371         SND_SOC_DAPM_REGULATOR_SUPPLY("V-AUD", 0, 0),
372         SND_SOC_DAPM_REGULATOR_SUPPLY("V-AMIC1", 0, 0),
373         SND_SOC_DAPM_REGULATOR_SUPPLY("V-AMIC2", 0, 0),
374         SND_SOC_DAPM_REGULATOR_SUPPLY("V-DMIC", 0, 0),
375
376         /* Power */
377         SND_SOC_DAPM_SUPPLY("Audio Power",
378                         AB8500_POWERUP, AB8500_POWERUP_POWERUP, 0,
379                         NULL, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
380         SND_SOC_DAPM_SUPPLY("Audio Analog Power",
381                         AB8500_POWERUP, AB8500_POWERUP_ENANA, 0,
382                         NULL, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
383
384         /* Main supply node */
385         SND_SOC_DAPM_SUPPLY("Main Supply", SND_SOC_NOPM, 0, 0,
386                         NULL, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
387
388         /* DA/AD */
389
390         SND_SOC_DAPM_INPUT("ADC Input"),
391         SND_SOC_DAPM_ADC("ADC", "ab8500_0c", SND_SOC_NOPM, 0, 0),
392
393         SND_SOC_DAPM_DAC("DAC", NULL, SND_SOC_NOPM, 0, 0),
394         SND_SOC_DAPM_OUTPUT("DAC Output"),
395
396         SND_SOC_DAPM_AIF_IN("DA_IN1", NULL, 0, SND_SOC_NOPM, 0, 0),
397         SND_SOC_DAPM_AIF_IN("DA_IN2", NULL, 0, SND_SOC_NOPM, 0, 0),
398         SND_SOC_DAPM_AIF_IN("DA_IN3", NULL, 0, SND_SOC_NOPM, 0, 0),
399         SND_SOC_DAPM_AIF_IN("DA_IN4", NULL, 0, SND_SOC_NOPM, 0, 0),
400         SND_SOC_DAPM_AIF_IN("DA_IN5", NULL, 0, SND_SOC_NOPM, 0, 0),
401         SND_SOC_DAPM_AIF_IN("DA_IN6", NULL, 0, SND_SOC_NOPM, 0, 0),
402         SND_SOC_DAPM_AIF_OUT("AD_OUT1", NULL, 0, SND_SOC_NOPM, 0, 0),
403         SND_SOC_DAPM_AIF_OUT("AD_OUT2", NULL, 0, SND_SOC_NOPM, 0, 0),
404         SND_SOC_DAPM_AIF_OUT("AD_OUT3", NULL, 0, SND_SOC_NOPM, 0, 0),
405         SND_SOC_DAPM_AIF_OUT("AD_OUT4", NULL, 0, SND_SOC_NOPM, 0, 0),
406         SND_SOC_DAPM_AIF_OUT("AD_OUT57", NULL, 0, SND_SOC_NOPM, 0, 0),
407         SND_SOC_DAPM_AIF_OUT("AD_OUT68", NULL, 0, SND_SOC_NOPM, 0, 0),
408
409         /* Headset path */
410
411         SND_SOC_DAPM_SUPPLY("Charge Pump", AB8500_ANACONF5,
412                         AB8500_ANACONF5_ENCPHS, 0, NULL, 0),
413
414         SND_SOC_DAPM_DAC("DA1 Enable", "ab8500_0p",
415                         AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA1, 0),
416         SND_SOC_DAPM_DAC("DA2 Enable", "ab8500_0p",
417                         AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA2, 0),
418
419         SND_SOC_DAPM_PGA("HSL Digital Volume", SND_SOC_NOPM, 0, 0,
420                         NULL, 0),
421         SND_SOC_DAPM_PGA("HSR Digital Volume", SND_SOC_NOPM, 0, 0,
422                         NULL, 0),
423
424         SND_SOC_DAPM_DAC("HSL DAC", "ab8500_0p",
425                         AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACHSL, 0),
426         SND_SOC_DAPM_DAC("HSR DAC", "ab8500_0p",
427                         AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACHSR, 0),
428         SND_SOC_DAPM_MIXER("HSL DAC Mute", AB8500_MUTECONF,
429                         AB8500_MUTECONF_MUTDACHSL, 1,
430                         NULL, 0),
431         SND_SOC_DAPM_MIXER("HSR DAC Mute", AB8500_MUTECONF,
432                         AB8500_MUTECONF_MUTDACHSR, 1,
433                         NULL, 0),
434         SND_SOC_DAPM_DAC("HSL DAC Driver", "ab8500_0p",
435                         AB8500_ANACONF3, AB8500_ANACONF3_ENDRVHSL, 0),
436         SND_SOC_DAPM_DAC("HSR DAC Driver", "ab8500_0p",
437                         AB8500_ANACONF3, AB8500_ANACONF3_ENDRVHSR, 0),
438
439         SND_SOC_DAPM_MIXER("HSL Mute",
440                         AB8500_MUTECONF, AB8500_MUTECONF_MUTHSL, 1,
441                         NULL, 0),
442         SND_SOC_DAPM_MIXER("HSR Mute",
443                         AB8500_MUTECONF, AB8500_MUTECONF_MUTHSR, 1,
444                         NULL, 0),
445         SND_SOC_DAPM_MIXER("HSL Enable",
446                         AB8500_ANACONF4, AB8500_ANACONF4_ENHSL, 0,
447                         NULL, 0),
448         SND_SOC_DAPM_MIXER("HSR Enable",
449                         AB8500_ANACONF4, AB8500_ANACONF4_ENHSR, 0,
450                         NULL, 0),
451         SND_SOC_DAPM_PGA("HSL Volume",
452                         SND_SOC_NOPM, 0, 0,
453                         NULL, 0),
454         SND_SOC_DAPM_PGA("HSR Volume",
455                         SND_SOC_NOPM, 0, 0,
456                         NULL, 0),
457
458         SND_SOC_DAPM_OUTPUT("Headset Left"),
459         SND_SOC_DAPM_OUTPUT("Headset Right"),
460
461         /* LineOut path */
462
463         SND_SOC_DAPM_MUX("LineOut Source",
464                         SND_SOC_NOPM, 0, 0, dapm_lineout_source),
465
466         SND_SOC_DAPM_MIXER("LOL Disable HFL",
467                         AB8500_ANACONF4, AB8500_ANACONF4_ENHFL, 1,
468                         NULL, 0),
469         SND_SOC_DAPM_MIXER("LOR Disable HFR",
470                         AB8500_ANACONF4, AB8500_ANACONF4_ENHFR, 1,
471                         NULL, 0),
472
473         SND_SOC_DAPM_MIXER("LOL Enable",
474                         AB8500_ANACONF5, AB8500_ANACONF5_ENLOL, 0,
475                         NULL, 0),
476         SND_SOC_DAPM_MIXER("LOR Enable",
477                         AB8500_ANACONF5, AB8500_ANACONF5_ENLOR, 0,
478                         NULL, 0),
479
480         SND_SOC_DAPM_OUTPUT("LineOut Left"),
481         SND_SOC_DAPM_OUTPUT("LineOut Right"),
482
483         /* Earpiece path */
484
485         SND_SOC_DAPM_MUX("Earpiece or LineOut Mono Source",
486                         SND_SOC_NOPM, 0, 0, &dapm_ear_lineout_source),
487         SND_SOC_DAPM_MIXER("EAR DAC",
488                         AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACEAR, 0,
489                         NULL, 0),
490         SND_SOC_DAPM_MIXER("EAR Mute",
491                         AB8500_MUTECONF, AB8500_MUTECONF_MUTEAR, 1,
492                         NULL, 0),
493         SND_SOC_DAPM_MIXER("EAR Enable",
494                         AB8500_ANACONF4, AB8500_ANACONF4_ENEAR, 0,
495                         NULL, 0),
496
497         SND_SOC_DAPM_OUTPUT("Earpiece"),
498
499         /* Handsfree path */
500
501         SND_SOC_DAPM_MIXER("DA3 Channel Volume",
502                         AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA3, 0,
503                         NULL, 0),
504         SND_SOC_DAPM_MIXER("DA4 Channel Volume",
505                         AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA4, 0,
506                         NULL, 0),
507         SND_SOC_DAPM_MUX("Speaker Left Source",
508                         SND_SOC_NOPM, 0, 0, dapm_HFl_select),
509         SND_SOC_DAPM_MUX("Speaker Right Source",
510                         SND_SOC_NOPM, 0, 0, dapm_HFr_select),
511         SND_SOC_DAPM_MIXER("HFL DAC", AB8500_DAPATHCONF,
512                         AB8500_DAPATHCONF_ENDACHFL, 0,
513                         NULL, 0),
514         SND_SOC_DAPM_MIXER("HFR DAC",
515                         AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACHFR, 0,
516                         NULL, 0),
517         SND_SOC_DAPM_MIXER("DA4 or ANC path to HfR",
518                         AB8500_DIGMULTCONF2, AB8500_DIGMULTCONF2_DATOHFREN, 0,
519                         NULL, 0),
520         SND_SOC_DAPM_MIXER("DA3 or ANC path to HfL",
521                         AB8500_DIGMULTCONF2, AB8500_DIGMULTCONF2_DATOHFLEN, 0,
522                         NULL, 0),
523         SND_SOC_DAPM_MIXER("HFL Enable",
524                         AB8500_ANACONF4, AB8500_ANACONF4_ENHFL, 0,
525                         NULL, 0),
526         SND_SOC_DAPM_MIXER("HFR Enable",
527                         AB8500_ANACONF4, AB8500_ANACONF4_ENHFR, 0,
528                         NULL, 0),
529
530         SND_SOC_DAPM_OUTPUT("Speaker Left"),
531         SND_SOC_DAPM_OUTPUT("Speaker Right"),
532
533         /* Vibrator path */
534
535         SND_SOC_DAPM_INPUT("PWMGEN1"),
536         SND_SOC_DAPM_INPUT("PWMGEN2"),
537
538         SND_SOC_DAPM_MIXER("DA5 Channel Volume",
539                         AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA5, 0,
540                         NULL, 0),
541         SND_SOC_DAPM_MIXER("DA6 Channel Volume",
542                         AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA6, 0,
543                         NULL, 0),
544         SND_SOC_DAPM_MIXER("VIB1 DAC",
545                         AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACVIB1, 0,
546                         NULL, 0),
547         SND_SOC_DAPM_MIXER("VIB2 DAC",
548                         AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACVIB2, 0,
549                         NULL, 0),
550         SND_SOC_DAPM_MUX("Vibra 1 Controller",
551                         SND_SOC_NOPM, 0, 0, dapm_pwm2vib1),
552         SND_SOC_DAPM_MUX("Vibra 2 Controller",
553                         SND_SOC_NOPM, 0, 0, dapm_pwm2vib2),
554         SND_SOC_DAPM_MIXER("VIB1 Enable",
555                         AB8500_ANACONF4, AB8500_ANACONF4_ENVIB1, 0,
556                         NULL, 0),
557         SND_SOC_DAPM_MIXER("VIB2 Enable",
558                         AB8500_ANACONF4, AB8500_ANACONF4_ENVIB2, 0,
559                         NULL, 0),
560
561         SND_SOC_DAPM_OUTPUT("Vibra 1"),
562         SND_SOC_DAPM_OUTPUT("Vibra 2"),
563
564         /* Mic 1 */
565
566         SND_SOC_DAPM_INPUT("Mic 1"),
567
568         SND_SOC_DAPM_MUX("Mic 1a or 1b Select",
569                         SND_SOC_NOPM, 0, 0, dapm_mic1ab_mux),
570         SND_SOC_DAPM_MIXER("MIC1 Mute",
571                         AB8500_ANACONF2, AB8500_ANACONF2_MUTMIC1, 1,
572                         NULL, 0),
573         SND_SOC_DAPM_MIXER("MIC1A V-AMICx Enable",
574                         AB8500_ANACONF2, AB8500_ANACONF2_ENMIC1, 0,
575                         NULL, 0),
576         SND_SOC_DAPM_MIXER("MIC1B V-AMICx Enable",
577                         AB8500_ANACONF2, AB8500_ANACONF2_ENMIC1, 0,
578                         NULL, 0),
579         SND_SOC_DAPM_MIXER("MIC1 ADC",
580                         AB8500_ANACONF3, AB8500_ANACONF3_ENADCMIC, 0,
581                         NULL, 0),
582         SND_SOC_DAPM_MUX("AD3 Source Select",
583                         SND_SOC_NOPM, 0, 0, dapm_ad3_select),
584         SND_SOC_DAPM_MIXER("AD3 Channel Volume",
585                         SND_SOC_NOPM, 0, 0,
586                         NULL, 0),
587         SND_SOC_DAPM_MIXER("AD3 Enable",
588                         AB8500_ADPATHENA, AB8500_ADPATHENA_ENAD34, 0,
589                         NULL, 0),
590
591         /* Mic 2 */
592
593         SND_SOC_DAPM_INPUT("Mic 2"),
594
595         SND_SOC_DAPM_MIXER("MIC2 Mute",
596                         AB8500_ANACONF2, AB8500_ANACONF2_MUTMIC2, 1,
597                         NULL, 0),
598         SND_SOC_DAPM_MIXER("MIC2 V-AMICx Enable", AB8500_ANACONF2,
599                         AB8500_ANACONF2_ENMIC2, 0,
600                         NULL, 0),
601
602         /* LineIn */
603
604         SND_SOC_DAPM_INPUT("LineIn Left"),
605         SND_SOC_DAPM_INPUT("LineIn Right"),
606
607         SND_SOC_DAPM_MIXER("LINL Mute",
608                         AB8500_ANACONF2, AB8500_ANACONF2_MUTLINL, 1,
609                         NULL, 0),
610         SND_SOC_DAPM_MIXER("LINR Mute",
611                         AB8500_ANACONF2, AB8500_ANACONF2_MUTLINR, 1,
612                         NULL, 0),
613         SND_SOC_DAPM_MIXER("LINL Enable", AB8500_ANACONF2,
614                         AB8500_ANACONF2_ENLINL, 0,
615                         NULL, 0),
616         SND_SOC_DAPM_MIXER("LINR Enable", AB8500_ANACONF2,
617                         AB8500_ANACONF2_ENLINR, 0,
618                         NULL, 0),
619
620         /* LineIn Bypass path */
621         SND_SOC_DAPM_MIXER("LINL to HSL Volume",
622                         SND_SOC_NOPM, 0, 0,
623                         NULL, 0),
624         SND_SOC_DAPM_MIXER("LINR to HSR Volume",
625                         SND_SOC_NOPM, 0, 0,
626                         NULL, 0),
627
628         /* LineIn, Mic 2 */
629         SND_SOC_DAPM_MUX("Mic 2 or LINR Select",
630                         SND_SOC_NOPM, 0, 0, dapm_mic2lr_select),
631         SND_SOC_DAPM_MIXER("LINL ADC", AB8500_ANACONF3,
632                         AB8500_ANACONF3_ENADCLINL, 0,
633                         NULL, 0),
634         SND_SOC_DAPM_MIXER("LINR ADC", AB8500_ANACONF3,
635                         AB8500_ANACONF3_ENADCLINR, 0,
636                         NULL, 0),
637         SND_SOC_DAPM_MUX("AD1 Source Select",
638                         SND_SOC_NOPM, 0, 0, dapm_ad1_select),
639         SND_SOC_DAPM_MUX("AD2 Source Select",
640                         SND_SOC_NOPM, 0, 0, dapm_ad2_select),
641         SND_SOC_DAPM_MIXER("AD1 Channel Volume",
642                         SND_SOC_NOPM, 0, 0,
643                         NULL, 0),
644         SND_SOC_DAPM_MIXER("AD2 Channel Volume",
645                         SND_SOC_NOPM, 0, 0,
646                         NULL, 0),
647
648         SND_SOC_DAPM_MIXER("AD12 Enable",
649                         AB8500_ADPATHENA, AB8500_ADPATHENA_ENAD12, 0,
650                         NULL, 0),
651
652         /* HD Capture path */
653
654         SND_SOC_DAPM_MUX("AD5 Source Select",
655                         SND_SOC_NOPM, 0, 0, dapm_ad5_select),
656         SND_SOC_DAPM_MUX("AD6 Source Select",
657                         SND_SOC_NOPM, 0, 0, dapm_ad6_select),
658         SND_SOC_DAPM_MIXER("AD5 Channel Volume",
659                         SND_SOC_NOPM, 0, 0,
660                         NULL, 0),
661         SND_SOC_DAPM_MIXER("AD6 Channel Volume",
662                         SND_SOC_NOPM, 0, 0,
663                         NULL, 0),
664         SND_SOC_DAPM_MIXER("AD57 Enable",
665                         AB8500_ADPATHENA, AB8500_ADPATHENA_ENAD5768, 0,
666                         NULL, 0),
667         SND_SOC_DAPM_MIXER("AD68 Enable",
668                         AB8500_ADPATHENA, AB8500_ADPATHENA_ENAD5768, 0,
669                         NULL, 0),
670
671         /* Digital Microphone path */
672
673         SND_SOC_DAPM_INPUT("DMic 1"),
674         SND_SOC_DAPM_INPUT("DMic 2"),
675         SND_SOC_DAPM_INPUT("DMic 3"),
676         SND_SOC_DAPM_INPUT("DMic 4"),
677         SND_SOC_DAPM_INPUT("DMic 5"),
678         SND_SOC_DAPM_INPUT("DMic 6"),
679
680         SND_SOC_DAPM_MIXER("DMIC1",
681                         AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC1, 0,
682                         NULL, 0),
683         SND_SOC_DAPM_MIXER("DMIC2",
684                         AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC2, 0,
685                         NULL, 0),
686         SND_SOC_DAPM_MIXER("DMIC3",
687                         AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC3, 0,
688                         NULL, 0),
689         SND_SOC_DAPM_MIXER("DMIC4",
690                         AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC4, 0,
691                         NULL, 0),
692         SND_SOC_DAPM_MIXER("DMIC5",
693                         AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC5, 0,
694                         NULL, 0),
695         SND_SOC_DAPM_MIXER("DMIC6",
696                         AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC6, 0,
697                         NULL, 0),
698         SND_SOC_DAPM_MIXER("AD4 Channel Volume",
699                         SND_SOC_NOPM, 0, 0,
700                         NULL, 0),
701         SND_SOC_DAPM_MIXER("AD4 Enable",
702                         AB8500_ADPATHENA, AB8500_ADPATHENA_ENAD34,
703                         0, NULL, 0),
704
705         /* Acoustical Noise Cancellation path */
706
707         SND_SOC_DAPM_INPUT("ANC Configure Input"),
708         SND_SOC_DAPM_OUTPUT("ANC Configure Output"),
709
710         SND_SOC_DAPM_MUX("ANC Source",
711                         SND_SOC_NOPM, 0, 0,
712                         dapm_anc_in_select),
713         SND_SOC_DAPM_SWITCH("ANC",
714                         SND_SOC_NOPM, 0, 0,
715                         dapm_anc_enable),
716         SND_SOC_DAPM_SWITCH("ANC to Earpiece",
717                         SND_SOC_NOPM, 0, 0,
718                         dapm_anc_ear_mute),
719
720         /* Sidetone Filter path */
721
722         SND_SOC_DAPM_MUX("Sidetone Left Source",
723                         SND_SOC_NOPM, 0, 0,
724                         dapm_stfir1_in_select),
725         SND_SOC_DAPM_MUX("Sidetone Right Source",
726                         SND_SOC_NOPM, 0, 0,
727                         dapm_stfir2_in_select),
728         SND_SOC_DAPM_MIXER("STFIR1 Control",
729                         SND_SOC_NOPM, 0, 0,
730                         NULL, 0),
731         SND_SOC_DAPM_MIXER("STFIR2 Control",
732                         SND_SOC_NOPM, 0, 0,
733                         NULL, 0),
734         SND_SOC_DAPM_MIXER("STFIR1 Volume",
735                         SND_SOC_NOPM, 0, 0,
736                         NULL, 0),
737         SND_SOC_DAPM_MIXER("STFIR2 Volume",
738                         SND_SOC_NOPM, 0, 0,
739                         NULL, 0),
740 };
741
742 /*
743  * DAPM-routes
744  */
745 static const struct snd_soc_dapm_route ab8500_dapm_routes[] = {
746         /* Power AB8500 audio-block when AD/DA is active */
747         {"Main Supply", NULL, "V-AUD"},
748         {"Main Supply", NULL, "audioclk"},
749         {"Main Supply", NULL, "Audio Power"},
750         {"Main Supply", NULL, "Audio Analog Power"},
751
752         {"DAC", NULL, "ab8500_0p"},
753         {"DAC", NULL, "Main Supply"},
754         {"ADC", NULL, "ab8500_0c"},
755         {"ADC", NULL, "Main Supply"},
756
757         /* ANC Configure */
758         {"ANC Configure Input", NULL, "Main Supply"},
759         {"ANC Configure Output", NULL, "ANC Configure Input"},
760
761         /* AD/DA */
762         {"ADC", NULL, "ADC Input"},
763         {"DAC Output", NULL, "DAC"},
764
765         /* Powerup charge pump if DA1/2 is in use */
766
767         {"DA_IN1", NULL, "ab8500_0p"},
768         {"DA_IN1", NULL, "Charge Pump"},
769         {"DA_IN2", NULL, "ab8500_0p"},
770         {"DA_IN2", NULL, "Charge Pump"},
771
772         /* Headset path */
773
774         {"DA1 Enable", NULL, "DA_IN1"},
775         {"DA2 Enable", NULL, "DA_IN2"},
776
777         {"HSL Digital Volume", NULL, "DA1 Enable"},
778         {"HSR Digital Volume", NULL, "DA2 Enable"},
779
780         {"HSL DAC", NULL, "HSL Digital Volume"},
781         {"HSR DAC", NULL, "HSR Digital Volume"},
782
783         {"HSL DAC Mute", NULL, "HSL DAC"},
784         {"HSR DAC Mute", NULL, "HSR DAC"},
785
786         {"HSL DAC Driver", NULL, "HSL DAC Mute"},
787         {"HSR DAC Driver", NULL, "HSR DAC Mute"},
788
789         {"HSL Mute", NULL, "HSL DAC Driver"},
790         {"HSR Mute", NULL, "HSR DAC Driver"},
791
792         {"HSL Enable", NULL, "HSL Mute"},
793         {"HSR Enable", NULL, "HSR Mute"},
794
795         {"HSL Volume", NULL, "HSL Enable"},
796         {"HSR Volume", NULL, "HSR Enable"},
797
798         {"Headset Left", NULL, "HSL Volume"},
799         {"Headset Right", NULL, "HSR Volume"},
800
801         /* HF or LineOut path */
802
803         {"DA_IN3", NULL, "ab8500_0p"},
804         {"DA3 Channel Volume", NULL, "DA_IN3"},
805         {"DA_IN4", NULL, "ab8500_0p"},
806         {"DA4 Channel Volume", NULL, "DA_IN4"},
807
808         {"Speaker Left Source", "Audio Path", "DA3 Channel Volume"},
809         {"Speaker Right Source", "Audio Path", "DA4 Channel Volume"},
810
811         {"DA3 or ANC path to HfL", NULL, "Speaker Left Source"},
812         {"DA4 or ANC path to HfR", NULL, "Speaker Right Source"},
813
814         /* HF path */
815
816         {"HFL DAC", NULL, "DA3 or ANC path to HfL"},
817         {"HFR DAC", NULL, "DA4 or ANC path to HfR"},
818
819         {"HFL Enable", NULL, "HFL DAC"},
820         {"HFR Enable", NULL, "HFR DAC"},
821
822         {"Speaker Left", NULL, "HFL Enable"},
823         {"Speaker Right", NULL, "HFR Enable"},
824
825         /* Earpiece path */
826
827         {"Earpiece or LineOut Mono Source", "Headset Left",
828                 "HSL Digital Volume"},
829         {"Earpiece or LineOut Mono Source", "Speaker Left",
830                 "DA3 or ANC path to HfL"},
831
832         {"EAR DAC", NULL, "Earpiece or LineOut Mono Source"},
833
834         {"EAR Mute", NULL, "EAR DAC"},
835
836         {"EAR Enable", NULL, "EAR Mute"},
837
838         {"Earpiece", NULL, "EAR Enable"},
839
840         /* LineOut path stereo */
841
842         {"LineOut Source", "Stereo Path", "HSL DAC Driver"},
843         {"LineOut Source", "Stereo Path", "HSR DAC Driver"},
844
845         /* LineOut path mono */
846
847         {"LineOut Source", "Mono Path", "EAR DAC"},
848
849         /* LineOut path */
850
851         {"LOL Disable HFL", NULL, "LineOut Source"},
852         {"LOR Disable HFR", NULL, "LineOut Source"},
853
854         {"LOL Enable", NULL, "LOL Disable HFL"},
855         {"LOR Enable", NULL, "LOR Disable HFR"},
856
857         {"LineOut Left", NULL, "LOL Enable"},
858         {"LineOut Right", NULL, "LOR Enable"},
859
860         /* Vibrator path */
861
862         {"DA_IN5", NULL, "ab8500_0p"},
863         {"DA5 Channel Volume", NULL, "DA_IN5"},
864         {"DA_IN6", NULL, "ab8500_0p"},
865         {"DA6 Channel Volume", NULL, "DA_IN6"},
866
867         {"VIB1 DAC", NULL, "DA5 Channel Volume"},
868         {"VIB2 DAC", NULL, "DA6 Channel Volume"},
869
870         {"Vibra 1 Controller", "Audio Path", "VIB1 DAC"},
871         {"Vibra 2 Controller", "Audio Path", "VIB2 DAC"},
872         {"Vibra 1 Controller", "PWM Generator", "PWMGEN1"},
873         {"Vibra 2 Controller", "PWM Generator", "PWMGEN2"},
874
875         {"VIB1 Enable", NULL, "Vibra 1 Controller"},
876         {"VIB2 Enable", NULL, "Vibra 2 Controller"},
877
878         {"Vibra 1", NULL, "VIB1 Enable"},
879         {"Vibra 2", NULL, "VIB2 Enable"},
880
881
882         /* Mic 2 */
883
884         {"MIC2 V-AMICx Enable", NULL, "Mic 2"},
885
886         /* LineIn */
887         {"LINL Mute", NULL, "LineIn Left"},
888         {"LINR Mute", NULL, "LineIn Right"},
889
890         {"LINL Enable", NULL, "LINL Mute"},
891         {"LINR Enable", NULL, "LINR Mute"},
892
893         /* LineIn, Mic 2 */
894         {"Mic 2 or LINR Select", "LineIn Right", "LINR Enable"},
895         {"Mic 2 or LINR Select", "Mic 2", "MIC2 V-AMICx Enable"},
896
897         {"LINL ADC", NULL, "LINL Enable"},
898         {"LINR ADC", NULL, "Mic 2 or LINR Select"},
899
900         {"AD1 Source Select", "LineIn Left", "LINL ADC"},
901         {"AD2 Source Select", "LineIn Right", "LINR ADC"},
902
903         {"AD1 Channel Volume", NULL, "AD1 Source Select"},
904         {"AD2 Channel Volume", NULL, "AD2 Source Select"},
905
906         {"AD12 Enable", NULL, "AD1 Channel Volume"},
907         {"AD12 Enable", NULL, "AD2 Channel Volume"},
908
909         {"AD_OUT1", NULL, "ab8500_0c"},
910         {"AD_OUT1", NULL, "AD12 Enable"},
911         {"AD_OUT2", NULL, "ab8500_0c"},
912         {"AD_OUT2", NULL, "AD12 Enable"},
913
914         /* Mic 1 */
915
916         {"MIC1 Mute", NULL, "Mic 1"},
917
918         {"MIC1A V-AMICx Enable", NULL, "MIC1 Mute"},
919         {"MIC1B V-AMICx Enable", NULL, "MIC1 Mute"},
920
921         {"Mic 1a or 1b Select", "Mic 1a", "MIC1A V-AMICx Enable"},
922         {"Mic 1a or 1b Select", "Mic 1b", "MIC1B V-AMICx Enable"},
923
924         {"MIC1 ADC", NULL, "Mic 1a or 1b Select"},
925
926         {"AD3 Source Select", "Mic 1", "MIC1 ADC"},
927
928         {"AD3 Channel Volume", NULL, "AD3 Source Select"},
929
930         {"AD3 Enable", NULL, "AD3 Channel Volume"},
931
932         {"AD_OUT3", NULL, "ab8500_0c"},
933         {"AD_OUT3", NULL, "AD3 Enable"},
934
935         /* HD Capture path */
936
937         {"AD5 Source Select", "Mic 2", "LINR ADC"},
938         {"AD6 Source Select", "Mic 1", "MIC1 ADC"},
939
940         {"AD5 Channel Volume", NULL, "AD5 Source Select"},
941         {"AD6 Channel Volume", NULL, "AD6 Source Select"},
942
943         {"AD57 Enable", NULL, "AD5 Channel Volume"},
944         {"AD68 Enable", NULL, "AD6 Channel Volume"},
945
946         {"AD_OUT57", NULL, "ab8500_0c"},
947         {"AD_OUT57", NULL, "AD57 Enable"},
948         {"AD_OUT68", NULL, "ab8500_0c"},
949         {"AD_OUT68", NULL, "AD68 Enable"},
950
951         /* Digital Microphone path */
952
953         {"DMic 1", NULL, "V-DMIC"},
954         {"DMic 2", NULL, "V-DMIC"},
955         {"DMic 3", NULL, "V-DMIC"},
956         {"DMic 4", NULL, "V-DMIC"},
957         {"DMic 5", NULL, "V-DMIC"},
958         {"DMic 6", NULL, "V-DMIC"},
959
960         {"AD1 Source Select", NULL, "DMic 1"},
961         {"AD2 Source Select", NULL, "DMic 2"},
962         {"AD3 Source Select", NULL, "DMic 3"},
963         {"AD5 Source Select", NULL, "DMic 5"},
964         {"AD6 Source Select", NULL, "DMic 6"},
965
966         {"AD4 Channel Volume", NULL, "DMic 4"},
967         {"AD4 Enable", NULL, "AD4 Channel Volume"},
968
969         {"AD_OUT4", NULL, "ab8500_0c"},
970         {"AD_OUT4", NULL, "AD4 Enable"},
971
972         /* LineIn Bypass path */
973
974         {"LINL to HSL Volume", NULL, "LINL Enable"},
975         {"LINR to HSR Volume", NULL, "LINR Enable"},
976
977         {"HSL DAC Driver", NULL, "LINL to HSL Volume"},
978         {"HSR DAC Driver", NULL, "LINR to HSR Volume"},
979
980         /* ANC path (Acoustic Noise Cancellation) */
981
982         {"ANC Source", "Mic 2 / DMic 5", "AD5 Channel Volume"},
983         {"ANC Source", "Mic 1 / DMic 6", "AD6 Channel Volume"},
984
985         {"ANC", "Switch", "ANC Source"},
986
987         {"Speaker Left Source", "ANC", "ANC"},
988         {"Speaker Right Source", "ANC", "ANC"},
989         {"ANC to Earpiece", "Switch", "ANC"},
990
991         {"HSL Digital Volume", NULL, "ANC to Earpiece"},
992
993         /* Sidetone Filter path */
994
995         {"Sidetone Left Source", "LineIn Left", "AD12 Enable"},
996         {"Sidetone Left Source", "LineIn Right", "AD12 Enable"},
997         {"Sidetone Left Source", "Mic 1", "AD3 Enable"},
998         {"Sidetone Left Source", "Headset Left", "DA_IN1"},
999         {"Sidetone Right Source", "LineIn Right", "AD12 Enable"},
1000         {"Sidetone Right Source", "Mic 1", "AD3 Enable"},
1001         {"Sidetone Right Source", "DMic 4", "AD4 Enable"},
1002         {"Sidetone Right Source", "Headset Right", "DA_IN2"},
1003
1004         {"STFIR1 Control", NULL, "Sidetone Left Source"},
1005         {"STFIR2 Control", NULL, "Sidetone Right Source"},
1006
1007         {"STFIR1 Volume", NULL, "STFIR1 Control"},
1008         {"STFIR2 Volume", NULL, "STFIR2 Control"},
1009
1010         {"DA1 Enable", NULL, "STFIR1 Volume"},
1011         {"DA2 Enable", NULL, "STFIR2 Volume"},
1012 };
1013
1014 static const struct snd_soc_dapm_route ab8500_dapm_routes_mic1a_vamicx[] = {
1015         {"MIC1A V-AMICx Enable", NULL, "V-AMIC1"},
1016         {"MIC1A V-AMICx Enable", NULL, "V-AMIC2"},
1017 };
1018
1019 static const struct snd_soc_dapm_route ab8500_dapm_routes_mic1b_vamicx[] = {
1020         {"MIC1B V-AMICx Enable", NULL, "V-AMIC1"},
1021         {"MIC1B V-AMICx Enable", NULL, "V-AMIC2"},
1022 };
1023
1024 static const struct snd_soc_dapm_route ab8500_dapm_routes_mic2_vamicx[] = {
1025         {"MIC2 V-AMICx Enable", NULL, "V-AMIC1"},
1026         {"MIC2 V-AMICx Enable", NULL, "V-AMIC2"},
1027 };
1028
1029 /* ANC FIR-coefficients configuration sequence */
1030 static void anc_fir(struct snd_soc_component *component,
1031                 unsigned int bnk, unsigned int par, unsigned int val)
1032 {
1033         if (par == 0 && bnk == 0)
1034                 snd_soc_component_update_bits(component, AB8500_ANCCONF1,
1035                         BIT(AB8500_ANCCONF1_ANCFIRUPDATE),
1036                         BIT(AB8500_ANCCONF1_ANCFIRUPDATE));
1037
1038         snd_soc_component_write(component, AB8500_ANCCONF5, val >> 8 & 0xff);
1039         snd_soc_component_write(component, AB8500_ANCCONF6, val &  0xff);
1040
1041         if (par == AB8500_ANC_FIR_COEFFS - 1 && bnk == 1)
1042                 snd_soc_component_update_bits(component, AB8500_ANCCONF1,
1043                         BIT(AB8500_ANCCONF1_ANCFIRUPDATE), 0);
1044 }
1045
1046 /* ANC IIR-coefficients configuration sequence */
1047 static void anc_iir(struct snd_soc_component *component, unsigned int bnk,
1048                 unsigned int par, unsigned int val)
1049 {
1050         if (par == 0) {
1051                 if (bnk == 0) {
1052                         snd_soc_component_update_bits(component, AB8500_ANCCONF1,
1053                                         BIT(AB8500_ANCCONF1_ANCIIRINIT),
1054                                         BIT(AB8500_ANCCONF1_ANCIIRINIT));
1055                         usleep_range(AB8500_ANC_SM_DELAY, AB8500_ANC_SM_DELAY*2);
1056                         snd_soc_component_update_bits(component, AB8500_ANCCONF1,
1057                                         BIT(AB8500_ANCCONF1_ANCIIRINIT), 0);
1058                         usleep_range(AB8500_ANC_SM_DELAY, AB8500_ANC_SM_DELAY*2);
1059                 } else {
1060                         snd_soc_component_update_bits(component, AB8500_ANCCONF1,
1061                                         BIT(AB8500_ANCCONF1_ANCIIRUPDATE),
1062                                         BIT(AB8500_ANCCONF1_ANCIIRUPDATE));
1063                 }
1064         } else if (par > 3) {
1065                 snd_soc_component_write(component, AB8500_ANCCONF7, 0);
1066                 snd_soc_component_write(component, AB8500_ANCCONF8, val >> 16 & 0xff);
1067         }
1068
1069         snd_soc_component_write(component, AB8500_ANCCONF7, val >> 8 & 0xff);
1070         snd_soc_component_write(component, AB8500_ANCCONF8, val & 0xff);
1071
1072         if (par == AB8500_ANC_IIR_COEFFS - 1 && bnk == 1)
1073                 snd_soc_component_update_bits(component, AB8500_ANCCONF1,
1074                         BIT(AB8500_ANCCONF1_ANCIIRUPDATE), 0);
1075 }
1076
1077 /* ANC IIR-/FIR-coefficients configuration sequence */
1078 static void anc_configure(struct snd_soc_component *component,
1079                         bool apply_fir, bool apply_iir)
1080 {
1081         struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(component->dev);
1082         unsigned int bnk, par, val;
1083
1084         dev_dbg(component->dev, "%s: Enter.\n", __func__);
1085
1086         if (apply_fir)
1087                 snd_soc_component_update_bits(component, AB8500_ANCCONF1,
1088                         BIT(AB8500_ANCCONF1_ENANC), 0);
1089
1090         snd_soc_component_update_bits(component, AB8500_ANCCONF1,
1091                 BIT(AB8500_ANCCONF1_ENANC), BIT(AB8500_ANCCONF1_ENANC));
1092
1093         if (apply_fir)
1094                 for (bnk = 0; bnk < AB8500_NR_OF_ANC_COEFF_BANKS; bnk++)
1095                         for (par = 0; par < AB8500_ANC_FIR_COEFFS; par++) {
1096                                 val = snd_soc_component_read(component,
1097                                                 drvdata->anc_fir_values[par]);
1098                                 anc_fir(component, bnk, par, val);
1099                         }
1100
1101         if (apply_iir)
1102                 for (bnk = 0; bnk < AB8500_NR_OF_ANC_COEFF_BANKS; bnk++)
1103                         for (par = 0; par < AB8500_ANC_IIR_COEFFS; par++) {
1104                                 val = snd_soc_component_read(component,
1105                                                 drvdata->anc_iir_values[par]);
1106                                 anc_iir(component, bnk, par, val);
1107                         }
1108
1109         dev_dbg(component->dev, "%s: Exit.\n", __func__);
1110 }
1111
1112 /*
1113  * Control-events
1114  */
1115
1116 static int sid_status_control_get(struct snd_kcontrol *kcontrol,
1117                 struct snd_ctl_elem_value *ucontrol)
1118 {
1119         struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1120         struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(component->dev);
1121
1122         mutex_lock(&drvdata->ctrl_lock);
1123         ucontrol->value.enumerated.item[0] = drvdata->sid_status;
1124         mutex_unlock(&drvdata->ctrl_lock);
1125
1126         return 0;
1127 }
1128
1129 /* Write sidetone FIR-coefficients configuration sequence */
1130 static int sid_status_control_put(struct snd_kcontrol *kcontrol,
1131                                 struct snd_ctl_elem_value *ucontrol)
1132 {
1133         struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1134         struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(component->dev);
1135         unsigned int param, sidconf, val;
1136         int status = 1;
1137
1138         dev_dbg(component->dev, "%s: Enter\n", __func__);
1139
1140         if (ucontrol->value.enumerated.item[0] != SID_APPLY_FIR) {
1141                 dev_err(component->dev,
1142                         "%s: ERROR: This control supports '%s' only!\n",
1143                         __func__, enum_sid_state[SID_APPLY_FIR]);
1144                 return -EIO;
1145         }
1146
1147         mutex_lock(&drvdata->ctrl_lock);
1148
1149         sidconf = snd_soc_component_read(component, AB8500_SIDFIRCONF);
1150         if (((sidconf & BIT(AB8500_SIDFIRCONF_FIRSIDBUSY)) != 0)) {
1151                 if ((sidconf & BIT(AB8500_SIDFIRCONF_ENFIRSIDS)) == 0) {
1152                         dev_err(component->dev, "%s: Sidetone busy while off!\n",
1153                                 __func__);
1154                         status = -EPERM;
1155                 } else {
1156                         status = -EBUSY;
1157                 }
1158                 goto out;
1159         }
1160
1161         snd_soc_component_write(component, AB8500_SIDFIRADR, 0);
1162
1163         for (param = 0; param < AB8500_SID_FIR_COEFFS; param++) {
1164                 val = snd_soc_component_read(component, drvdata->sid_fir_values[param]);
1165                 snd_soc_component_write(component, AB8500_SIDFIRCOEF1, val >> 8 & 0xff);
1166                 snd_soc_component_write(component, AB8500_SIDFIRCOEF2, val & 0xff);
1167         }
1168
1169         snd_soc_component_update_bits(component, AB8500_SIDFIRADR,
1170                 BIT(AB8500_SIDFIRADR_FIRSIDSET),
1171                 BIT(AB8500_SIDFIRADR_FIRSIDSET));
1172         snd_soc_component_update_bits(component, AB8500_SIDFIRADR,
1173                 BIT(AB8500_SIDFIRADR_FIRSIDSET), 0);
1174
1175         drvdata->sid_status = SID_FIR_CONFIGURED;
1176
1177 out:
1178         mutex_unlock(&drvdata->ctrl_lock);
1179
1180         dev_dbg(component->dev, "%s: Exit\n", __func__);
1181
1182         return status;
1183 }
1184
1185 static int anc_status_control_get(struct snd_kcontrol *kcontrol,
1186                                 struct snd_ctl_elem_value *ucontrol)
1187 {
1188         struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1189         struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(component->dev);
1190
1191         mutex_lock(&drvdata->ctrl_lock);
1192         ucontrol->value.enumerated.item[0] = drvdata->anc_status;
1193         mutex_unlock(&drvdata->ctrl_lock);
1194
1195         return 0;
1196 }
1197
1198 static int anc_status_control_put(struct snd_kcontrol *kcontrol,
1199                                 struct snd_ctl_elem_value *ucontrol)
1200 {
1201         struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1202         struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
1203         struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(component->dev);
1204         struct device *dev = component->dev;
1205         bool apply_fir, apply_iir;
1206         unsigned int req;
1207         int status;
1208
1209         dev_dbg(dev, "%s: Enter.\n", __func__);
1210
1211         mutex_lock(&drvdata->ctrl_lock);
1212
1213         req = ucontrol->value.enumerated.item[0];
1214         if (req >= ARRAY_SIZE(enum_anc_state)) {
1215                 status = -EINVAL;
1216                 goto cleanup;
1217         }
1218         if (req != ANC_APPLY_FIR_IIR && req != ANC_APPLY_FIR &&
1219                 req != ANC_APPLY_IIR) {
1220                 dev_err(dev, "%s: ERROR: Unsupported status to set '%s'!\n",
1221                         __func__, enum_anc_state[req]);
1222                 status = -EINVAL;
1223                 goto cleanup;
1224         }
1225         apply_fir = req == ANC_APPLY_FIR || req == ANC_APPLY_FIR_IIR;
1226         apply_iir = req == ANC_APPLY_IIR || req == ANC_APPLY_FIR_IIR;
1227
1228         status = snd_soc_dapm_force_enable_pin(dapm, "ANC Configure Input");
1229         if (status < 0) {
1230                 dev_err(dev,
1231                         "%s: ERROR: Failed to enable power (status = %d)!\n",
1232                         __func__, status);
1233                 goto cleanup;
1234         }
1235         snd_soc_dapm_sync(dapm);
1236
1237         anc_configure(component, apply_fir, apply_iir);
1238
1239         if (apply_fir) {
1240                 if (drvdata->anc_status == ANC_IIR_CONFIGURED)
1241                         drvdata->anc_status = ANC_FIR_IIR_CONFIGURED;
1242                 else if (drvdata->anc_status != ANC_FIR_IIR_CONFIGURED)
1243                         drvdata->anc_status =  ANC_FIR_CONFIGURED;
1244         }
1245         if (apply_iir) {
1246                 if (drvdata->anc_status == ANC_FIR_CONFIGURED)
1247                         drvdata->anc_status = ANC_FIR_IIR_CONFIGURED;
1248                 else if (drvdata->anc_status != ANC_FIR_IIR_CONFIGURED)
1249                         drvdata->anc_status =  ANC_IIR_CONFIGURED;
1250         }
1251
1252         status = snd_soc_dapm_disable_pin(dapm, "ANC Configure Input");
1253         snd_soc_dapm_sync(dapm);
1254
1255 cleanup:
1256         mutex_unlock(&drvdata->ctrl_lock);
1257
1258         if (status < 0)
1259                 dev_err(dev, "%s: Unable to configure ANC! (status = %d)\n",
1260                         __func__, status);
1261
1262         dev_dbg(dev, "%s: Exit.\n", __func__);
1263
1264         return (status < 0) ? status : 1;
1265 }
1266
1267 static int filter_control_info(struct snd_kcontrol *kcontrol,
1268                         struct snd_ctl_elem_info *uinfo)
1269 {
1270         struct filter_control *fc =
1271                         (struct filter_control *)kcontrol->private_value;
1272
1273         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
1274         uinfo->count = fc->count;
1275         uinfo->value.integer.min = fc->min;
1276         uinfo->value.integer.max = fc->max;
1277
1278         return 0;
1279 }
1280
1281 static int filter_control_get(struct snd_kcontrol *kcontrol,
1282                         struct snd_ctl_elem_value *ucontrol)
1283 {
1284         struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1285         struct ab8500_codec_drvdata *drvdata = snd_soc_component_get_drvdata(component);
1286         struct filter_control *fc =
1287                         (struct filter_control *)kcontrol->private_value;
1288         unsigned int i;
1289
1290         mutex_lock(&drvdata->ctrl_lock);
1291         for (i = 0; i < fc->count; i++)
1292                 ucontrol->value.integer.value[i] = fc->value[i];
1293         mutex_unlock(&drvdata->ctrl_lock);
1294
1295         return 0;
1296 }
1297
1298 static int filter_control_put(struct snd_kcontrol *kcontrol,
1299                 struct snd_ctl_elem_value *ucontrol)
1300 {
1301         struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
1302         struct ab8500_codec_drvdata *drvdata = snd_soc_component_get_drvdata(component);
1303         struct filter_control *fc =
1304                         (struct filter_control *)kcontrol->private_value;
1305         unsigned int i;
1306
1307         mutex_lock(&drvdata->ctrl_lock);
1308         for (i = 0; i < fc->count; i++)
1309                 fc->value[i] = ucontrol->value.integer.value[i];
1310         mutex_unlock(&drvdata->ctrl_lock);
1311
1312         return 0;
1313 }
1314
1315 /*
1316  * Controls - Non-DAPM ASoC
1317  */
1318
1319 static DECLARE_TLV_DB_SCALE(adx_dig_gain_tlv, -3200, 100, 1);
1320 /* -32dB = Mute */
1321
1322 static DECLARE_TLV_DB_SCALE(dax_dig_gain_tlv, -6300, 100, 1);
1323 /* -63dB = Mute */
1324
1325 static DECLARE_TLV_DB_SCALE(hs_ear_dig_gain_tlv, -100, 100, 1);
1326 /* -1dB = Mute */
1327
1328 static const DECLARE_TLV_DB_RANGE(hs_gain_tlv,
1329         0, 3, TLV_DB_SCALE_ITEM(-3200, 400, 0),
1330         4, 15, TLV_DB_SCALE_ITEM(-1800, 200, 0)
1331 );
1332
1333 static DECLARE_TLV_DB_SCALE(mic_gain_tlv, 0, 100, 0);
1334
1335 static DECLARE_TLV_DB_SCALE(lin_gain_tlv, -1000, 200, 0);
1336
1337 static DECLARE_TLV_DB_SCALE(lin2hs_gain_tlv, -3800, 200, 1);
1338 /* -38dB = Mute */
1339
1340 static const char * const enum_hsfadspeed[] = {"2ms", "0.5ms", "10.6ms",
1341                                         "5ms"};
1342 static SOC_ENUM_SINGLE_DECL(soc_enum_hsfadspeed,
1343         AB8500_DIGMICCONF, AB8500_DIGMICCONF_HSFADSPEED, enum_hsfadspeed);
1344
1345 static const char * const enum_envdetthre[] = {
1346         "250mV", "300mV", "350mV", "400mV",
1347         "450mV", "500mV", "550mV", "600mV",
1348         "650mV", "700mV", "750mV", "800mV",
1349         "850mV", "900mV", "950mV", "1.00V" };
1350 static SOC_ENUM_SINGLE_DECL(soc_enum_envdeththre,
1351         AB8500_ENVCPCONF, AB8500_ENVCPCONF_ENVDETHTHRE, enum_envdetthre);
1352 static SOC_ENUM_SINGLE_DECL(soc_enum_envdetlthre,
1353         AB8500_ENVCPCONF, AB8500_ENVCPCONF_ENVDETLTHRE, enum_envdetthre);
1354 static const char * const enum_envdettime[] = {
1355         "26.6us", "53.2us", "106us",  "213us",
1356         "426us",  "851us",  "1.70ms", "3.40ms",
1357         "6.81ms", "13.6ms", "27.2ms", "54.5ms",
1358         "109ms",  "218ms",  "436ms",  "872ms" };
1359 static SOC_ENUM_SINGLE_DECL(soc_enum_envdettime,
1360         AB8500_SIGENVCONF, AB8500_SIGENVCONF_ENVDETTIME, enum_envdettime);
1361
1362 static const char * const enum_sinc31[] = {"Sinc 3", "Sinc 1"};
1363 static SOC_ENUM_SINGLE_DECL(soc_enum_hsesinc, AB8500_HSLEARDIGGAIN,
1364                         AB8500_HSLEARDIGGAIN_HSSINC1, enum_sinc31);
1365
1366 static const char * const enum_fadespeed[] = {"1ms", "4ms", "8ms", "16ms"};
1367 static SOC_ENUM_SINGLE_DECL(soc_enum_fadespeed, AB8500_HSRDIGGAIN,
1368                         AB8500_HSRDIGGAIN_FADESPEED, enum_fadespeed);
1369
1370 /* Earpiece */
1371
1372 static const char * const enum_lowpow[] = {"Normal", "Low Power"};
1373 static SOC_ENUM_SINGLE_DECL(soc_enum_eardaclowpow, AB8500_ANACONF1,
1374                         AB8500_ANACONF1_EARDACLOWPOW, enum_lowpow);
1375 static SOC_ENUM_SINGLE_DECL(soc_enum_eardrvlowpow, AB8500_ANACONF1,
1376                         AB8500_ANACONF1_EARDRVLOWPOW, enum_lowpow);
1377
1378 static const char * const enum_av_mode[] = {"Audio", "Voice"};
1379 static SOC_ENUM_DOUBLE_DECL(soc_enum_ad12voice, AB8500_ADFILTCONF,
1380         AB8500_ADFILTCONF_AD1VOICE, AB8500_ADFILTCONF_AD2VOICE, enum_av_mode);
1381 static SOC_ENUM_DOUBLE_DECL(soc_enum_ad34voice, AB8500_ADFILTCONF,
1382         AB8500_ADFILTCONF_AD3VOICE, AB8500_ADFILTCONF_AD4VOICE, enum_av_mode);
1383
1384 /* DA */
1385
1386 static SOC_ENUM_SINGLE_DECL(soc_enum_da12voice,
1387                         AB8500_DASLOTCONF1, AB8500_DASLOTCONF1_DA12VOICE,
1388                         enum_av_mode);
1389 static SOC_ENUM_SINGLE_DECL(soc_enum_da34voice,
1390                         AB8500_DASLOTCONF3, AB8500_DASLOTCONF3_DA34VOICE,
1391                         enum_av_mode);
1392 static SOC_ENUM_SINGLE_DECL(soc_enum_da56voice,
1393                         AB8500_DASLOTCONF5, AB8500_DASLOTCONF5_DA56VOICE,
1394                         enum_av_mode);
1395
1396 static const char * const enum_da2hslr[] = {"Sidetone", "Audio Path"};
1397 static SOC_ENUM_DOUBLE_DECL(soc_enum_da2hslr, AB8500_DIGMULTCONF1,
1398                         AB8500_DIGMULTCONF1_DATOHSLEN,
1399                         AB8500_DIGMULTCONF1_DATOHSREN, enum_da2hslr);
1400
1401 static const char * const enum_sinc53[] = {"Sinc 5", "Sinc 3"};
1402 static SOC_ENUM_DOUBLE_DECL(soc_enum_dmic12sinc, AB8500_DMICFILTCONF,
1403                         AB8500_DMICFILTCONF_DMIC1SINC3,
1404                         AB8500_DMICFILTCONF_DMIC2SINC3, enum_sinc53);
1405 static SOC_ENUM_DOUBLE_DECL(soc_enum_dmic34sinc, AB8500_DMICFILTCONF,
1406                         AB8500_DMICFILTCONF_DMIC3SINC3,
1407                         AB8500_DMICFILTCONF_DMIC4SINC3, enum_sinc53);
1408 static SOC_ENUM_DOUBLE_DECL(soc_enum_dmic56sinc, AB8500_DMICFILTCONF,
1409                         AB8500_DMICFILTCONF_DMIC5SINC3,
1410                         AB8500_DMICFILTCONF_DMIC6SINC3, enum_sinc53);
1411
1412 /* Digital interface - DA from slot mapping */
1413 static const char * const enum_da_from_slot_map[] = {"SLOT0",
1414                                         "SLOT1",
1415                                         "SLOT2",
1416                                         "SLOT3",
1417                                         "SLOT4",
1418                                         "SLOT5",
1419                                         "SLOT6",
1420                                         "SLOT7",
1421                                         "SLOT8",
1422                                         "SLOT9",
1423                                         "SLOT10",
1424                                         "SLOT11",
1425                                         "SLOT12",
1426                                         "SLOT13",
1427                                         "SLOT14",
1428                                         "SLOT15",
1429                                         "SLOT16",
1430                                         "SLOT17",
1431                                         "SLOT18",
1432                                         "SLOT19",
1433                                         "SLOT20",
1434                                         "SLOT21",
1435                                         "SLOT22",
1436                                         "SLOT23",
1437                                         "SLOT24",
1438                                         "SLOT25",
1439                                         "SLOT26",
1440                                         "SLOT27",
1441                                         "SLOT28",
1442                                         "SLOT29",
1443                                         "SLOT30",
1444                                         "SLOT31"};
1445 static SOC_ENUM_SINGLE_DECL(soc_enum_da1slotmap,
1446                         AB8500_DASLOTCONF1, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
1447                         enum_da_from_slot_map);
1448 static SOC_ENUM_SINGLE_DECL(soc_enum_da2slotmap,
1449                         AB8500_DASLOTCONF2, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
1450                         enum_da_from_slot_map);
1451 static SOC_ENUM_SINGLE_DECL(soc_enum_da3slotmap,
1452                         AB8500_DASLOTCONF3, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
1453                         enum_da_from_slot_map);
1454 static SOC_ENUM_SINGLE_DECL(soc_enum_da4slotmap,
1455                         AB8500_DASLOTCONF4, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
1456                         enum_da_from_slot_map);
1457 static SOC_ENUM_SINGLE_DECL(soc_enum_da5slotmap,
1458                         AB8500_DASLOTCONF5, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
1459                         enum_da_from_slot_map);
1460 static SOC_ENUM_SINGLE_DECL(soc_enum_da6slotmap,
1461                         AB8500_DASLOTCONF6, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
1462                         enum_da_from_slot_map);
1463 static SOC_ENUM_SINGLE_DECL(soc_enum_da7slotmap,
1464                         AB8500_DASLOTCONF7, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
1465                         enum_da_from_slot_map);
1466 static SOC_ENUM_SINGLE_DECL(soc_enum_da8slotmap,
1467                         AB8500_DASLOTCONF8, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
1468                         enum_da_from_slot_map);
1469
1470 /* Digital interface - AD to slot mapping */
1471 static const char * const enum_ad_to_slot_map[] = {"AD_OUT1",
1472                                         "AD_OUT2",
1473                                         "AD_OUT3",
1474                                         "AD_OUT4",
1475                                         "AD_OUT5",
1476                                         "AD_OUT6",
1477                                         "AD_OUT7",
1478                                         "AD_OUT8",
1479                                         "zeroes",
1480                                         "zeroes",
1481                                         "zeroes",
1482                                         "zeroes",
1483                                         "tristate",
1484                                         "tristate",
1485                                         "tristate",
1486                                         "tristate"};
1487 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot0map,
1488                         AB8500_ADSLOTSEL1, AB8500_ADSLOTSELX_EVEN_SHIFT,
1489                         enum_ad_to_slot_map);
1490 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot1map,
1491                         AB8500_ADSLOTSEL1, AB8500_ADSLOTSELX_ODD_SHIFT,
1492                         enum_ad_to_slot_map);
1493 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot2map,
1494                         AB8500_ADSLOTSEL2, AB8500_ADSLOTSELX_EVEN_SHIFT,
1495                         enum_ad_to_slot_map);
1496 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot3map,
1497                         AB8500_ADSLOTSEL2, AB8500_ADSLOTSELX_ODD_SHIFT,
1498                         enum_ad_to_slot_map);
1499 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot4map,
1500                         AB8500_ADSLOTSEL3, AB8500_ADSLOTSELX_EVEN_SHIFT,
1501                         enum_ad_to_slot_map);
1502 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot5map,
1503                         AB8500_ADSLOTSEL3, AB8500_ADSLOTSELX_ODD_SHIFT,
1504                         enum_ad_to_slot_map);
1505 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot6map,
1506                         AB8500_ADSLOTSEL4, AB8500_ADSLOTSELX_EVEN_SHIFT,
1507                         enum_ad_to_slot_map);
1508 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot7map,
1509                         AB8500_ADSLOTSEL4, AB8500_ADSLOTSELX_ODD_SHIFT,
1510                         enum_ad_to_slot_map);
1511 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot8map,
1512                         AB8500_ADSLOTSEL5, AB8500_ADSLOTSELX_EVEN_SHIFT,
1513                         enum_ad_to_slot_map);
1514 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot9map,
1515                         AB8500_ADSLOTSEL5, AB8500_ADSLOTSELX_ODD_SHIFT,
1516                         enum_ad_to_slot_map);
1517 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot10map,
1518                         AB8500_ADSLOTSEL6, AB8500_ADSLOTSELX_EVEN_SHIFT,
1519                         enum_ad_to_slot_map);
1520 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot11map,
1521                         AB8500_ADSLOTSEL6, AB8500_ADSLOTSELX_ODD_SHIFT,
1522                         enum_ad_to_slot_map);
1523 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot12map,
1524                         AB8500_ADSLOTSEL7, AB8500_ADSLOTSELX_EVEN_SHIFT,
1525                         enum_ad_to_slot_map);
1526 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot13map,
1527                         AB8500_ADSLOTSEL7, AB8500_ADSLOTSELX_ODD_SHIFT,
1528                         enum_ad_to_slot_map);
1529 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot14map,
1530                         AB8500_ADSLOTSEL8, AB8500_ADSLOTSELX_EVEN_SHIFT,
1531                         enum_ad_to_slot_map);
1532 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot15map,
1533                         AB8500_ADSLOTSEL8, AB8500_ADSLOTSELX_ODD_SHIFT,
1534                         enum_ad_to_slot_map);
1535 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot16map,
1536                         AB8500_ADSLOTSEL9, AB8500_ADSLOTSELX_EVEN_SHIFT,
1537                         enum_ad_to_slot_map);
1538 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot17map,
1539                         AB8500_ADSLOTSEL9, AB8500_ADSLOTSELX_ODD_SHIFT,
1540                         enum_ad_to_slot_map);
1541 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot18map,
1542                         AB8500_ADSLOTSEL10, AB8500_ADSLOTSELX_EVEN_SHIFT,
1543                         enum_ad_to_slot_map);
1544 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot19map,
1545                         AB8500_ADSLOTSEL10, AB8500_ADSLOTSELX_ODD_SHIFT,
1546                         enum_ad_to_slot_map);
1547 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot20map,
1548                         AB8500_ADSLOTSEL11, AB8500_ADSLOTSELX_EVEN_SHIFT,
1549                         enum_ad_to_slot_map);
1550 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot21map,
1551                         AB8500_ADSLOTSEL11, AB8500_ADSLOTSELX_ODD_SHIFT,
1552                         enum_ad_to_slot_map);
1553 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot22map,
1554                         AB8500_ADSLOTSEL12, AB8500_ADSLOTSELX_EVEN_SHIFT,
1555                         enum_ad_to_slot_map);
1556 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot23map,
1557                         AB8500_ADSLOTSEL12, AB8500_ADSLOTSELX_ODD_SHIFT,
1558                         enum_ad_to_slot_map);
1559 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot24map,
1560                         AB8500_ADSLOTSEL13, AB8500_ADSLOTSELX_EVEN_SHIFT,
1561                         enum_ad_to_slot_map);
1562 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot25map,
1563                         AB8500_ADSLOTSEL13, AB8500_ADSLOTSELX_ODD_SHIFT,
1564                         enum_ad_to_slot_map);
1565 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot26map,
1566                         AB8500_ADSLOTSEL14, AB8500_ADSLOTSELX_EVEN_SHIFT,
1567                         enum_ad_to_slot_map);
1568 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot27map,
1569                         AB8500_ADSLOTSEL14, AB8500_ADSLOTSELX_ODD_SHIFT,
1570                         enum_ad_to_slot_map);
1571 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot28map,
1572                         AB8500_ADSLOTSEL15, AB8500_ADSLOTSELX_EVEN_SHIFT,
1573                         enum_ad_to_slot_map);
1574 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot29map,
1575                         AB8500_ADSLOTSEL15, AB8500_ADSLOTSELX_ODD_SHIFT,
1576                         enum_ad_to_slot_map);
1577 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot30map,
1578                         AB8500_ADSLOTSEL16, AB8500_ADSLOTSELX_EVEN_SHIFT,
1579                         enum_ad_to_slot_map);
1580 static SOC_ENUM_SINGLE_DECL(soc_enum_adslot31map,
1581                         AB8500_ADSLOTSEL16, AB8500_ADSLOTSELX_ODD_SHIFT,
1582                         enum_ad_to_slot_map);
1583
1584 /* Digital interface - Burst mode */
1585 static const char * const enum_mask[] = {"Unmasked", "Masked"};
1586 static SOC_ENUM_SINGLE_DECL(soc_enum_bfifomask,
1587                         AB8500_FIFOCONF1, AB8500_FIFOCONF1_BFIFOMASK,
1588                         enum_mask);
1589 static const char * const enum_bitclk0[] = {"19_2_MHz", "38_4_MHz"};
1590 static SOC_ENUM_SINGLE_DECL(soc_enum_bfifo19m2,
1591                         AB8500_FIFOCONF1, AB8500_FIFOCONF1_BFIFO19M2,
1592                         enum_bitclk0);
1593 static const char * const enum_slavemaster[] = {"Slave", "Master"};
1594 static SOC_ENUM_SINGLE_DECL(soc_enum_bfifomast,
1595                         AB8500_FIFOCONF3, AB8500_FIFOCONF3_BFIFOMAST_SHIFT,
1596                         enum_slavemaster);
1597
1598 /* Sidetone */
1599 static SOC_ENUM_SINGLE_EXT_DECL(soc_enum_sidstate, enum_sid_state);
1600
1601 /* ANC */
1602 static SOC_ENUM_SINGLE_EXT_DECL(soc_enum_ancstate, enum_anc_state);
1603
1604 static struct snd_kcontrol_new ab8500_ctrls[] = {
1605         /* Charge pump */
1606         SOC_ENUM("Charge Pump High Threshold For Low Voltage",
1607                 soc_enum_envdeththre),
1608         SOC_ENUM("Charge Pump Low Threshold For Low Voltage",
1609                 soc_enum_envdetlthre),
1610         SOC_SINGLE("Charge Pump Envelope Detection Switch",
1611                 AB8500_SIGENVCONF, AB8500_SIGENVCONF_ENVDETCPEN,
1612                 1, 0),
1613         SOC_ENUM("Charge Pump Envelope Detection Decay Time",
1614                 soc_enum_envdettime),
1615
1616         /* Headset */
1617         SOC_ENUM("Headset Mode", soc_enum_da12voice),
1618         SOC_SINGLE("Headset High Pass Switch",
1619                 AB8500_ANACONF1, AB8500_ANACONF1_HSHPEN,
1620                 1, 0),
1621         SOC_SINGLE("Headset Low Power Switch",
1622                 AB8500_ANACONF1, AB8500_ANACONF1_HSLOWPOW,
1623                 1, 0),
1624         SOC_SINGLE("Headset DAC Low Power Switch",
1625                 AB8500_ANACONF1, AB8500_ANACONF1_DACLOWPOW1,
1626                 1, 0),
1627         SOC_SINGLE("Headset DAC Drv Low Power Switch",
1628                 AB8500_ANACONF1, AB8500_ANACONF1_DACLOWPOW0,
1629                 1, 0),
1630         SOC_ENUM("Headset Fade Speed", soc_enum_hsfadspeed),
1631         SOC_ENUM("Headset Source", soc_enum_da2hslr),
1632         SOC_ENUM("Headset Filter", soc_enum_hsesinc),
1633         SOC_DOUBLE_R_TLV("Headset Master Volume",
1634                 AB8500_DADIGGAIN1, AB8500_DADIGGAIN2,
1635                 0, AB8500_DADIGGAINX_DAXGAIN_MAX, 1, dax_dig_gain_tlv),
1636         SOC_DOUBLE_R_TLV("Headset Digital Volume",
1637                 AB8500_HSLEARDIGGAIN, AB8500_HSRDIGGAIN,
1638                 0, AB8500_HSLEARDIGGAIN_HSLDGAIN_MAX, 1, hs_ear_dig_gain_tlv),
1639         SOC_DOUBLE_TLV("Headset Volume",
1640                 AB8500_ANAGAIN3,
1641                 AB8500_ANAGAIN3_HSLGAIN, AB8500_ANAGAIN3_HSRGAIN,
1642                 AB8500_ANAGAIN3_HSXGAIN_MAX, 1, hs_gain_tlv),
1643
1644         /* Earpiece */
1645         SOC_ENUM("Earpiece DAC Mode",
1646                 soc_enum_eardaclowpow),
1647         SOC_ENUM("Earpiece DAC Drv Mode",
1648                 soc_enum_eardrvlowpow),
1649
1650         /* HandsFree */
1651         SOC_ENUM("HF Mode", soc_enum_da34voice),
1652         SOC_SINGLE("HF and Headset Swap Switch",
1653                 AB8500_DASLOTCONF1, AB8500_DASLOTCONF1_SWAPDA12_34,
1654                 1, 0),
1655         SOC_DOUBLE("HF Low EMI Mode Switch",
1656                 AB8500_CLASSDCONF1,
1657                 AB8500_CLASSDCONF1_HFLSWAPEN, AB8500_CLASSDCONF1_HFRSWAPEN,
1658                 1, 0),
1659         SOC_DOUBLE("HF FIR Bypass Switch",
1660                 AB8500_CLASSDCONF2,
1661                 AB8500_CLASSDCONF2_FIRBYP0, AB8500_CLASSDCONF2_FIRBYP1,
1662                 1, 0),
1663         SOC_DOUBLE("HF High Volume Switch",
1664                 AB8500_CLASSDCONF2,
1665                 AB8500_CLASSDCONF2_HIGHVOLEN0, AB8500_CLASSDCONF2_HIGHVOLEN1,
1666                 1, 0),
1667         SOC_SINGLE("HF L and R Bridge Switch",
1668                 AB8500_CLASSDCONF1, AB8500_CLASSDCONF1_PARLHF,
1669                 1, 0),
1670         SOC_DOUBLE_R_TLV("HF Master Volume",
1671                 AB8500_DADIGGAIN3, AB8500_DADIGGAIN4,
1672                 0, AB8500_DADIGGAINX_DAXGAIN_MAX, 1, dax_dig_gain_tlv),
1673
1674         /* Vibra */
1675         SOC_DOUBLE("Vibra High Volume Switch",
1676                 AB8500_CLASSDCONF2,
1677                 AB8500_CLASSDCONF2_HIGHVOLEN2, AB8500_CLASSDCONF2_HIGHVOLEN3,
1678                 1, 0),
1679         SOC_DOUBLE("Vibra Low EMI Mode Switch",
1680                 AB8500_CLASSDCONF1,
1681                 AB8500_CLASSDCONF1_VIB1SWAPEN, AB8500_CLASSDCONF1_VIB2SWAPEN,
1682                 1, 0),
1683         SOC_DOUBLE("Vibra FIR Bypass Switch",
1684                 AB8500_CLASSDCONF2,
1685                 AB8500_CLASSDCONF2_FIRBYP2, AB8500_CLASSDCONF2_FIRBYP3,
1686                 1, 0),
1687         SOC_ENUM("Vibra Mode", soc_enum_da56voice),
1688         SOC_DOUBLE_R("Vibra PWM Duty Cycle N",
1689                 AB8500_PWMGENCONF3, AB8500_PWMGENCONF5,
1690                 AB8500_PWMGENCONFX_PWMVIBXDUTCYC,
1691                 AB8500_PWMGENCONFX_PWMVIBXDUTCYC_MAX, 0),
1692         SOC_DOUBLE_R("Vibra PWM Duty Cycle P",
1693                 AB8500_PWMGENCONF2, AB8500_PWMGENCONF4,
1694                 AB8500_PWMGENCONFX_PWMVIBXDUTCYC,
1695                 AB8500_PWMGENCONFX_PWMVIBXDUTCYC_MAX, 0),
1696         SOC_SINGLE("Vibra 1 and 2 Bridge Switch",
1697                 AB8500_CLASSDCONF1, AB8500_CLASSDCONF1_PARLVIB,
1698                 1, 0),
1699         SOC_DOUBLE_R_TLV("Vibra Master Volume",
1700                 AB8500_DADIGGAIN5, AB8500_DADIGGAIN6,
1701                 0, AB8500_DADIGGAINX_DAXGAIN_MAX, 1, dax_dig_gain_tlv),
1702
1703         /* HandsFree, Vibra */
1704         SOC_SINGLE("ClassD High Pass Volume",
1705                 AB8500_CLASSDCONF3, AB8500_CLASSDCONF3_DITHHPGAIN,
1706                 AB8500_CLASSDCONF3_DITHHPGAIN_MAX, 0),
1707         SOC_SINGLE("ClassD White Volume",
1708                 AB8500_CLASSDCONF3, AB8500_CLASSDCONF3_DITHWGAIN,
1709                 AB8500_CLASSDCONF3_DITHWGAIN_MAX, 0),
1710
1711         /* Mic 1, Mic 2, LineIn */
1712         SOC_DOUBLE_R_TLV("Mic Master Volume",
1713                 AB8500_ADDIGGAIN3, AB8500_ADDIGGAIN4,
1714                 0, AB8500_ADDIGGAINX_ADXGAIN_MAX, 1, adx_dig_gain_tlv),
1715
1716         /* Mic 1 */
1717         SOC_SINGLE_TLV("Mic 1",
1718                 AB8500_ANAGAIN1,
1719                 AB8500_ANAGAINX_MICXGAIN,
1720                 AB8500_ANAGAINX_MICXGAIN_MAX, 0, mic_gain_tlv),
1721         SOC_SINGLE("Mic 1 Low Power Switch",
1722                 AB8500_ANAGAIN1, AB8500_ANAGAINX_LOWPOWMICX,
1723                 1, 0),
1724
1725         /* Mic 2 */
1726         SOC_DOUBLE("Mic High Pass Switch",
1727                 AB8500_ADFILTCONF,
1728                 AB8500_ADFILTCONF_AD3NH, AB8500_ADFILTCONF_AD4NH,
1729                 1, 1),
1730         SOC_ENUM("Mic Mode", soc_enum_ad34voice),
1731         SOC_ENUM("Mic Filter", soc_enum_dmic34sinc),
1732         SOC_SINGLE_TLV("Mic 2",
1733                 AB8500_ANAGAIN2,
1734                 AB8500_ANAGAINX_MICXGAIN,
1735                 AB8500_ANAGAINX_MICXGAIN_MAX, 0, mic_gain_tlv),
1736         SOC_SINGLE("Mic 2 Low Power Switch",
1737                 AB8500_ANAGAIN2, AB8500_ANAGAINX_LOWPOWMICX,
1738                 1, 0),
1739
1740         /* LineIn */
1741         SOC_DOUBLE("LineIn High Pass Switch",
1742                 AB8500_ADFILTCONF,
1743                 AB8500_ADFILTCONF_AD1NH, AB8500_ADFILTCONF_AD2NH,
1744                 1, 1),
1745         SOC_ENUM("LineIn Filter", soc_enum_dmic12sinc),
1746         SOC_ENUM("LineIn Mode", soc_enum_ad12voice),
1747         SOC_DOUBLE_R_TLV("LineIn Master Volume",
1748                 AB8500_ADDIGGAIN1, AB8500_ADDIGGAIN2,
1749                 0, AB8500_ADDIGGAINX_ADXGAIN_MAX, 1, adx_dig_gain_tlv),
1750         SOC_DOUBLE_TLV("LineIn",
1751                 AB8500_ANAGAIN4,
1752                 AB8500_ANAGAIN4_LINLGAIN, AB8500_ANAGAIN4_LINRGAIN,
1753                 AB8500_ANAGAIN4_LINXGAIN_MAX, 0, lin_gain_tlv),
1754         SOC_DOUBLE_R_TLV("LineIn to Headset Volume",
1755                 AB8500_DIGLINHSLGAIN, AB8500_DIGLINHSRGAIN,
1756                 AB8500_DIGLINHSXGAIN_LINTOHSXGAIN,
1757                 AB8500_DIGLINHSXGAIN_LINTOHSXGAIN_MAX,
1758                 1, lin2hs_gain_tlv),
1759
1760         /* DMic */
1761         SOC_ENUM("DMic Filter", soc_enum_dmic56sinc),
1762         SOC_DOUBLE_R_TLV("DMic Master Volume",
1763                 AB8500_ADDIGGAIN5, AB8500_ADDIGGAIN6,
1764                 0, AB8500_ADDIGGAINX_ADXGAIN_MAX, 1, adx_dig_gain_tlv),
1765
1766         /* Digital gains */
1767         SOC_ENUM("Digital Gain Fade Speed", soc_enum_fadespeed),
1768
1769         /* Analog loopback */
1770         SOC_DOUBLE_R_TLV("Analog Loopback Volume",
1771                 AB8500_ADDIGLOOPGAIN1, AB8500_ADDIGLOOPGAIN2,
1772                 0, AB8500_ADDIGLOOPGAINX_ADXLBGAIN_MAX, 1, dax_dig_gain_tlv),
1773
1774         /* Digital interface - DA from slot mapping */
1775         SOC_ENUM("Digital Interface DA 1 From Slot Map", soc_enum_da1slotmap),
1776         SOC_ENUM("Digital Interface DA 2 From Slot Map", soc_enum_da2slotmap),
1777         SOC_ENUM("Digital Interface DA 3 From Slot Map", soc_enum_da3slotmap),
1778         SOC_ENUM("Digital Interface DA 4 From Slot Map", soc_enum_da4slotmap),
1779         SOC_ENUM("Digital Interface DA 5 From Slot Map", soc_enum_da5slotmap),
1780         SOC_ENUM("Digital Interface DA 6 From Slot Map", soc_enum_da6slotmap),
1781         SOC_ENUM("Digital Interface DA 7 From Slot Map", soc_enum_da7slotmap),
1782         SOC_ENUM("Digital Interface DA 8 From Slot Map", soc_enum_da8slotmap),
1783
1784         /* Digital interface - AD to slot mapping */
1785         SOC_ENUM("Digital Interface AD To Slot 0 Map", soc_enum_adslot0map),
1786         SOC_ENUM("Digital Interface AD To Slot 1 Map", soc_enum_adslot1map),
1787         SOC_ENUM("Digital Interface AD To Slot 2 Map", soc_enum_adslot2map),
1788         SOC_ENUM("Digital Interface AD To Slot 3 Map", soc_enum_adslot3map),
1789         SOC_ENUM("Digital Interface AD To Slot 4 Map", soc_enum_adslot4map),
1790         SOC_ENUM("Digital Interface AD To Slot 5 Map", soc_enum_adslot5map),
1791         SOC_ENUM("Digital Interface AD To Slot 6 Map", soc_enum_adslot6map),
1792         SOC_ENUM("Digital Interface AD To Slot 7 Map", soc_enum_adslot7map),
1793         SOC_ENUM("Digital Interface AD To Slot 8 Map", soc_enum_adslot8map),
1794         SOC_ENUM("Digital Interface AD To Slot 9 Map", soc_enum_adslot9map),
1795         SOC_ENUM("Digital Interface AD To Slot 10 Map", soc_enum_adslot10map),
1796         SOC_ENUM("Digital Interface AD To Slot 11 Map", soc_enum_adslot11map),
1797         SOC_ENUM("Digital Interface AD To Slot 12 Map", soc_enum_adslot12map),
1798         SOC_ENUM("Digital Interface AD To Slot 13 Map", soc_enum_adslot13map),
1799         SOC_ENUM("Digital Interface AD To Slot 14 Map", soc_enum_adslot14map),
1800         SOC_ENUM("Digital Interface AD To Slot 15 Map", soc_enum_adslot15map),
1801         SOC_ENUM("Digital Interface AD To Slot 16 Map", soc_enum_adslot16map),
1802         SOC_ENUM("Digital Interface AD To Slot 17 Map", soc_enum_adslot17map),
1803         SOC_ENUM("Digital Interface AD To Slot 18 Map", soc_enum_adslot18map),
1804         SOC_ENUM("Digital Interface AD To Slot 19 Map", soc_enum_adslot19map),
1805         SOC_ENUM("Digital Interface AD To Slot 20 Map", soc_enum_adslot20map),
1806         SOC_ENUM("Digital Interface AD To Slot 21 Map", soc_enum_adslot21map),
1807         SOC_ENUM("Digital Interface AD To Slot 22 Map", soc_enum_adslot22map),
1808         SOC_ENUM("Digital Interface AD To Slot 23 Map", soc_enum_adslot23map),
1809         SOC_ENUM("Digital Interface AD To Slot 24 Map", soc_enum_adslot24map),
1810         SOC_ENUM("Digital Interface AD To Slot 25 Map", soc_enum_adslot25map),
1811         SOC_ENUM("Digital Interface AD To Slot 26 Map", soc_enum_adslot26map),
1812         SOC_ENUM("Digital Interface AD To Slot 27 Map", soc_enum_adslot27map),
1813         SOC_ENUM("Digital Interface AD To Slot 28 Map", soc_enum_adslot28map),
1814         SOC_ENUM("Digital Interface AD To Slot 29 Map", soc_enum_adslot29map),
1815         SOC_ENUM("Digital Interface AD To Slot 30 Map", soc_enum_adslot30map),
1816         SOC_ENUM("Digital Interface AD To Slot 31 Map", soc_enum_adslot31map),
1817
1818         /* Digital interface - Loopback */
1819         SOC_SINGLE("Digital Interface AD 1 Loopback Switch",
1820                 AB8500_DASLOTCONF1, AB8500_DASLOTCONF1_DAI7TOADO1,
1821                 1, 0),
1822         SOC_SINGLE("Digital Interface AD 2 Loopback Switch",
1823                 AB8500_DASLOTCONF2, AB8500_DASLOTCONF2_DAI8TOADO2,
1824                 1, 0),
1825         SOC_SINGLE("Digital Interface AD 3 Loopback Switch",
1826                 AB8500_DASLOTCONF3, AB8500_DASLOTCONF3_DAI7TOADO3,
1827                 1, 0),
1828         SOC_SINGLE("Digital Interface AD 4 Loopback Switch",
1829                 AB8500_DASLOTCONF4, AB8500_DASLOTCONF4_DAI8TOADO4,
1830                 1, 0),
1831         SOC_SINGLE("Digital Interface AD 5 Loopback Switch",
1832                 AB8500_DASLOTCONF5, AB8500_DASLOTCONF5_DAI7TOADO5,
1833                 1, 0),
1834         SOC_SINGLE("Digital Interface AD 6 Loopback Switch",
1835                 AB8500_DASLOTCONF6, AB8500_DASLOTCONF6_DAI8TOADO6,
1836                 1, 0),
1837         SOC_SINGLE("Digital Interface AD 7 Loopback Switch",
1838                 AB8500_DASLOTCONF7, AB8500_DASLOTCONF7_DAI8TOADO7,
1839                 1, 0),
1840         SOC_SINGLE("Digital Interface AD 8 Loopback Switch",
1841                 AB8500_DASLOTCONF8, AB8500_DASLOTCONF8_DAI7TOADO8,
1842                 1, 0),
1843
1844         /* Digital interface - Burst FIFO */
1845         SOC_SINGLE("Digital Interface 0 FIFO Enable Switch",
1846                 AB8500_DIGIFCONF3, AB8500_DIGIFCONF3_IF0BFIFOEN,
1847                 1, 0),
1848         SOC_ENUM("Burst FIFO Mask", soc_enum_bfifomask),
1849         SOC_ENUM("Burst FIFO Bit-clock Frequency", soc_enum_bfifo19m2),
1850         SOC_SINGLE("Burst FIFO Threshold",
1851                 AB8500_FIFOCONF1, AB8500_FIFOCONF1_BFIFOINT_SHIFT,
1852                 AB8500_FIFOCONF1_BFIFOINT_MAX, 0),
1853         SOC_SINGLE("Burst FIFO Length",
1854                 AB8500_FIFOCONF2, AB8500_FIFOCONF2_BFIFOTX_SHIFT,
1855                 AB8500_FIFOCONF2_BFIFOTX_MAX, 0),
1856         SOC_SINGLE("Burst FIFO EOS Extra Slots",
1857                 AB8500_FIFOCONF3, AB8500_FIFOCONF3_BFIFOEXSL_SHIFT,
1858                 AB8500_FIFOCONF3_BFIFOEXSL_MAX, 0),
1859         SOC_SINGLE("Burst FIFO FS Extra Bit-clocks",
1860                 AB8500_FIFOCONF3, AB8500_FIFOCONF3_PREBITCLK0_SHIFT,
1861                 AB8500_FIFOCONF3_PREBITCLK0_MAX, 0),
1862         SOC_ENUM("Burst FIFO Interface Mode", soc_enum_bfifomast),
1863
1864         SOC_SINGLE("Burst FIFO Interface Switch",
1865                 AB8500_FIFOCONF3, AB8500_FIFOCONF3_BFIFORUN_SHIFT,
1866                 1, 0),
1867         SOC_SINGLE("Burst FIFO Switch Frame Number",
1868                 AB8500_FIFOCONF4, AB8500_FIFOCONF4_BFIFOFRAMSW_SHIFT,
1869                 AB8500_FIFOCONF4_BFIFOFRAMSW_MAX, 0),
1870         SOC_SINGLE("Burst FIFO Wake Up Delay",
1871                 AB8500_FIFOCONF5, AB8500_FIFOCONF5_BFIFOWAKEUP_SHIFT,
1872                 AB8500_FIFOCONF5_BFIFOWAKEUP_MAX, 0),
1873         SOC_SINGLE("Burst FIFO Samples In FIFO",
1874                 AB8500_FIFOCONF6, AB8500_FIFOCONF6_BFIFOSAMPLE_SHIFT,
1875                 AB8500_FIFOCONF6_BFIFOSAMPLE_MAX, 0),
1876
1877         /* ANC */
1878         SOC_ENUM_EXT("ANC Status", soc_enum_ancstate,
1879                 anc_status_control_get, anc_status_control_put),
1880         SOC_SINGLE_XR_SX("ANC Warp Delay Shift",
1881                 AB8500_ANCCONF2, 1, AB8500_ANCCONF2_SHIFT,
1882                 AB8500_ANCCONF2_MIN, AB8500_ANCCONF2_MAX, 0),
1883         SOC_SINGLE_XR_SX("ANC FIR Output Shift",
1884                 AB8500_ANCCONF3, 1, AB8500_ANCCONF3_SHIFT,
1885                 AB8500_ANCCONF3_MIN, AB8500_ANCCONF3_MAX, 0),
1886         SOC_SINGLE_XR_SX("ANC IIR Output Shift",
1887                 AB8500_ANCCONF4, 1, AB8500_ANCCONF4_SHIFT,
1888                 AB8500_ANCCONF4_MIN, AB8500_ANCCONF4_MAX, 0),
1889         SOC_SINGLE_XR_SX("ANC Warp Delay",
1890                 AB8500_ANCCONF9, 2, AB8500_ANC_WARP_DELAY_SHIFT,
1891                 AB8500_ANC_WARP_DELAY_MIN, AB8500_ANC_WARP_DELAY_MAX, 0),
1892
1893         /* Sidetone */
1894         SOC_ENUM_EXT("Sidetone Status", soc_enum_sidstate,
1895                 sid_status_control_get, sid_status_control_put),
1896         SOC_SINGLE_STROBE("Sidetone Reset",
1897                 AB8500_SIDFIRADR, AB8500_SIDFIRADR_FIRSIDSET, 0),
1898 };
1899
1900 static struct snd_kcontrol_new ab8500_filter_controls[] = {
1901         AB8500_FILTER_CONTROL("ANC FIR Coefficients", AB8500_ANC_FIR_COEFFS,
1902                 AB8500_ANC_FIR_COEFF_MIN, AB8500_ANC_FIR_COEFF_MAX),
1903         AB8500_FILTER_CONTROL("ANC IIR Coefficients", AB8500_ANC_IIR_COEFFS,
1904                 AB8500_ANC_IIR_COEFF_MIN, AB8500_ANC_IIR_COEFF_MAX),
1905         AB8500_FILTER_CONTROL("Sidetone FIR Coefficients",
1906                         AB8500_SID_FIR_COEFFS, AB8500_SID_FIR_COEFF_MIN,
1907                         AB8500_SID_FIR_COEFF_MAX)
1908 };
1909 enum ab8500_filter {
1910         AB8500_FILTER_ANC_FIR = 0,
1911         AB8500_FILTER_ANC_IIR = 1,
1912         AB8500_FILTER_SID_FIR = 2,
1913 };
1914
1915 /*
1916  * Extended interface for codec-driver
1917  */
1918
1919 static int ab8500_audio_init_audioblock(struct snd_soc_component *component)
1920 {
1921         int status;
1922
1923         dev_dbg(component->dev, "%s: Enter.\n", __func__);
1924
1925         /* Reset audio-registers and disable 32kHz-clock output 2 */
1926         status = ab8500_sysctrl_write(AB8500_STW4500CTRL3,
1927                                 AB8500_STW4500CTRL3_CLK32KOUT2DIS |
1928                                         AB8500_STW4500CTRL3_RESETAUDN,
1929                                 AB8500_STW4500CTRL3_RESETAUDN);
1930         if (status < 0)
1931                 return status;
1932
1933         return 0;
1934 }
1935
1936 static int ab8500_audio_setup_mics(struct snd_soc_component *component,
1937                         struct amic_settings *amics)
1938 {
1939         struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
1940         u8 value8;
1941         unsigned int value;
1942         int status;
1943         const struct snd_soc_dapm_route *route;
1944
1945         dev_dbg(component->dev, "%s: Enter.\n", __func__);
1946
1947         /* Set DMic-clocks to outputs */
1948         status = abx500_get_register_interruptible(component->dev, AB8500_MISC,
1949                                                 AB8500_GPIO_DIR4_REG,
1950                                                 &value8);
1951         if (status < 0)
1952                 return status;
1953         value = value8 | GPIO27_DIR_OUTPUT | GPIO29_DIR_OUTPUT |
1954                 GPIO31_DIR_OUTPUT;
1955         status = abx500_set_register_interruptible(component->dev,
1956                                                 AB8500_MISC,
1957                                                 AB8500_GPIO_DIR4_REG,
1958                                                 value);
1959         if (status < 0)
1960                 return status;
1961
1962         /* Attach regulators to AMic DAPM-paths */
1963         dev_dbg(component->dev, "%s: Mic 1a regulator: %s\n", __func__,
1964                 amic_micbias_str(amics->mic1a_micbias));
1965         route = &ab8500_dapm_routes_mic1a_vamicx[amics->mic1a_micbias];
1966         status = snd_soc_dapm_add_routes(dapm, route, 1);
1967         dev_dbg(component->dev, "%s: Mic 1b regulator: %s\n", __func__,
1968                 amic_micbias_str(amics->mic1b_micbias));
1969         route = &ab8500_dapm_routes_mic1b_vamicx[amics->mic1b_micbias];
1970         status |= snd_soc_dapm_add_routes(dapm, route, 1);
1971         dev_dbg(component->dev, "%s: Mic 2 regulator: %s\n", __func__,
1972                 amic_micbias_str(amics->mic2_micbias));
1973         route = &ab8500_dapm_routes_mic2_vamicx[amics->mic2_micbias];
1974         status |= snd_soc_dapm_add_routes(dapm, route, 1);
1975         if (status < 0) {
1976                 dev_err(component->dev,
1977                         "%s: Failed to add AMic-regulator DAPM-routes (%d).\n",
1978                         __func__, status);
1979                 return status;
1980         }
1981
1982         /* Set AMic-configuration */
1983         dev_dbg(component->dev, "%s: Mic 1 mic-type: %s\n", __func__,
1984                 amic_type_str(amics->mic1_type));
1985         snd_soc_component_update_bits(component, AB8500_ANAGAIN1, AB8500_ANAGAINX_ENSEMICX,
1986                         amics->mic1_type == AMIC_TYPE_DIFFERENTIAL ?
1987                                 0 : AB8500_ANAGAINX_ENSEMICX);
1988         dev_dbg(component->dev, "%s: Mic 2 mic-type: %s\n", __func__,
1989                 amic_type_str(amics->mic2_type));
1990         snd_soc_component_update_bits(component, AB8500_ANAGAIN2, AB8500_ANAGAINX_ENSEMICX,
1991                         amics->mic2_type == AMIC_TYPE_DIFFERENTIAL ?
1992                                 0 : AB8500_ANAGAINX_ENSEMICX);
1993
1994         return 0;
1995 }
1996
1997 static int ab8500_audio_set_ear_cmv(struct snd_soc_component *component,
1998                                 enum ear_cm_voltage ear_cmv)
1999 {
2000         char *cmv_str;
2001
2002         switch (ear_cmv) {
2003         case EAR_CMV_0_95V:
2004                 cmv_str = "0.95V";
2005                 break;
2006         case EAR_CMV_1_10V:
2007                 cmv_str = "1.10V";
2008                 break;
2009         case EAR_CMV_1_27V:
2010                 cmv_str = "1.27V";
2011                 break;
2012         case EAR_CMV_1_58V:
2013                 cmv_str = "1.58V";
2014                 break;
2015         default:
2016                 dev_err(component->dev,
2017                         "%s: Unknown earpiece CM-voltage (%d)!\n",
2018                         __func__, (int)ear_cmv);
2019                 return -EINVAL;
2020         }
2021         dev_dbg(component->dev, "%s: Earpiece CM-voltage: %s\n", __func__,
2022                 cmv_str);
2023         snd_soc_component_update_bits(component, AB8500_ANACONF1, AB8500_ANACONF1_EARSELCM,
2024                         ear_cmv);
2025
2026         return 0;
2027 }
2028
2029 static int ab8500_audio_set_bit_delay(struct snd_soc_dai *dai,
2030                                 unsigned int delay)
2031 {
2032         unsigned int mask, val;
2033         struct snd_soc_component *component = dai->component;
2034
2035         mask = BIT(AB8500_DIGIFCONF2_IF0DEL);
2036         val = 0;
2037
2038         switch (delay) {
2039         case 0:
2040                 break;
2041         case 1:
2042                 val |= BIT(AB8500_DIGIFCONF2_IF0DEL);
2043                 break;
2044         default:
2045                 dev_err(dai->component->dev,
2046                         "%s: ERROR: Unsupported bit-delay (0x%x)!\n",
2047                         __func__, delay);
2048                 return -EINVAL;
2049         }
2050
2051         dev_dbg(dai->component->dev, "%s: IF0 Bit-delay: %d bits.\n",
2052                 __func__, delay);
2053         snd_soc_component_update_bits(component, AB8500_DIGIFCONF2, mask, val);
2054
2055         return 0;
2056 }
2057
2058 /* Gates clocking according format mask */
2059 static int ab8500_codec_set_dai_clock_gate(struct snd_soc_component *component,
2060                                         unsigned int fmt)
2061 {
2062         unsigned int mask;
2063         unsigned int val;
2064
2065         mask = BIT(AB8500_DIGIFCONF1_ENMASTGEN) |
2066                         BIT(AB8500_DIGIFCONF1_ENFSBITCLK0);
2067
2068         val = BIT(AB8500_DIGIFCONF1_ENMASTGEN);
2069
2070         switch (fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
2071         case SND_SOC_DAIFMT_CONT: /* continuous clock */
2072                 dev_dbg(component->dev, "%s: IF0 Clock is continuous.\n",
2073                         __func__);
2074                 val |= BIT(AB8500_DIGIFCONF1_ENFSBITCLK0);
2075                 break;
2076         case SND_SOC_DAIFMT_GATED: /* clock is gated */
2077                 dev_dbg(component->dev, "%s: IF0 Clock is gated.\n",
2078                         __func__);
2079                 break;
2080         default:
2081                 dev_err(component->dev,
2082                         "%s: ERROR: Unsupported clock mask (0x%x)!\n",
2083                         __func__, fmt & SND_SOC_DAIFMT_CLOCK_MASK);
2084                 return -EINVAL;
2085         }
2086
2087         snd_soc_component_update_bits(component, AB8500_DIGIFCONF1, mask, val);
2088
2089         return 0;
2090 }
2091
2092 static int ab8500_codec_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
2093 {
2094         unsigned int mask;
2095         unsigned int val;
2096         struct snd_soc_component *component = dai->component;
2097         int status;
2098
2099         dev_dbg(component->dev, "%s: Enter (fmt = 0x%x)\n", __func__, fmt);
2100
2101         mask = BIT(AB8500_DIGIFCONF3_IF1DATOIF0AD) |
2102                         BIT(AB8500_DIGIFCONF3_IF1CLKTOIF0CLK) |
2103                         BIT(AB8500_DIGIFCONF3_IF0BFIFOEN) |
2104                         BIT(AB8500_DIGIFCONF3_IF0MASTER);
2105         val = 0;
2106
2107         switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
2108         case SND_SOC_DAIFMT_CBP_CFP:
2109                 dev_dbg(dai->component->dev,
2110                         "%s: IF0 Master-mode: AB8500 provider.\n", __func__);
2111                 val |= BIT(AB8500_DIGIFCONF3_IF0MASTER);
2112                 break;
2113         case SND_SOC_DAIFMT_CBC_CFC:
2114                 dev_dbg(dai->component->dev,
2115                         "%s: IF0 Master-mode: AB8500 consumer.\n", __func__);
2116                 break;
2117         case SND_SOC_DAIFMT_CBC_CFP:
2118         case SND_SOC_DAIFMT_CBP_CFC:
2119                 dev_err(dai->component->dev,
2120                         "%s: ERROR: The device is either a provider or a consumer.\n",
2121                         __func__);
2122                 fallthrough;
2123         default:
2124                 dev_err(dai->component->dev,
2125                         "%s: ERROR: Unsupporter clocking mask 0x%x\n",
2126                         __func__, fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK);
2127                 return -EINVAL;
2128         }
2129
2130         snd_soc_component_update_bits(component, AB8500_DIGIFCONF3, mask, val);
2131
2132         /* Set clock gating */
2133         status = ab8500_codec_set_dai_clock_gate(component, fmt);
2134         if (status) {
2135                 dev_err(dai->component->dev,
2136                         "%s: ERROR: Failed to set clock gate (%d).\n",
2137                         __func__, status);
2138                 return status;
2139         }
2140
2141         /* Setting data transfer format */
2142
2143         mask = BIT(AB8500_DIGIFCONF2_IF0FORMAT0) |
2144                 BIT(AB8500_DIGIFCONF2_IF0FORMAT1) |
2145                 BIT(AB8500_DIGIFCONF2_FSYNC0P) |
2146                 BIT(AB8500_DIGIFCONF2_BITCLK0P);
2147         val = 0;
2148
2149         switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
2150         case SND_SOC_DAIFMT_I2S: /* I2S mode */
2151                 dev_dbg(dai->component->dev, "%s: IF0 Protocol: I2S\n", __func__);
2152                 val |= BIT(AB8500_DIGIFCONF2_IF0FORMAT1);
2153                 ab8500_audio_set_bit_delay(dai, 0);
2154                 break;
2155
2156         case SND_SOC_DAIFMT_DSP_A: /* L data MSB after FRM LRC */
2157                 dev_dbg(dai->component->dev,
2158                         "%s: IF0 Protocol: DSP A (TDM)\n", __func__);
2159                 val |= BIT(AB8500_DIGIFCONF2_IF0FORMAT0);
2160                 ab8500_audio_set_bit_delay(dai, 1);
2161                 break;
2162
2163         case SND_SOC_DAIFMT_DSP_B: /* L data MSB during FRM LRC */
2164                 dev_dbg(dai->component->dev,
2165                         "%s: IF0 Protocol: DSP B (TDM)\n", __func__);
2166                 val |= BIT(AB8500_DIGIFCONF2_IF0FORMAT0);
2167                 ab8500_audio_set_bit_delay(dai, 0);
2168                 break;
2169
2170         default:
2171                 dev_err(dai->component->dev,
2172                         "%s: ERROR: Unsupported format (0x%x)!\n",
2173                         __func__, fmt & SND_SOC_DAIFMT_FORMAT_MASK);
2174                 return -EINVAL;
2175         }
2176
2177         switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
2178         case SND_SOC_DAIFMT_NB_NF: /* normal bit clock + frame */
2179                 dev_dbg(dai->component->dev,
2180                         "%s: IF0: Normal bit clock, normal frame\n",
2181                         __func__);
2182                 break;
2183         case SND_SOC_DAIFMT_NB_IF: /* normal BCLK + inv FRM */
2184                 dev_dbg(dai->component->dev,
2185                         "%s: IF0: Normal bit clock, inverted frame\n",
2186                         __func__);
2187                 val |= BIT(AB8500_DIGIFCONF2_FSYNC0P);
2188                 break;
2189         case SND_SOC_DAIFMT_IB_NF: /* invert BCLK + nor FRM */
2190                 dev_dbg(dai->component->dev,
2191                         "%s: IF0: Inverted bit clock, normal frame\n",
2192                         __func__);
2193                 val |= BIT(AB8500_DIGIFCONF2_BITCLK0P);
2194                 break;
2195         case SND_SOC_DAIFMT_IB_IF: /* invert BCLK + FRM */
2196                 dev_dbg(dai->component->dev,
2197                         "%s: IF0: Inverted bit clock, inverted frame\n",
2198                         __func__);
2199                 val |= BIT(AB8500_DIGIFCONF2_FSYNC0P);
2200                 val |= BIT(AB8500_DIGIFCONF2_BITCLK0P);
2201                 break;
2202         default:
2203                 dev_err(dai->component->dev,
2204                         "%s: ERROR: Unsupported INV mask 0x%x\n",
2205                         __func__, fmt & SND_SOC_DAIFMT_INV_MASK);
2206                 return -EINVAL;
2207         }
2208
2209         snd_soc_component_update_bits(component, AB8500_DIGIFCONF2, mask, val);
2210
2211         return 0;
2212 }
2213
2214 static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai,
2215                 unsigned int tx_mask, unsigned int rx_mask,
2216                 int slots, int slot_width)
2217 {
2218         struct snd_soc_component *component = dai->component;
2219         unsigned int val, mask, slot, slots_active;
2220
2221         mask = BIT(AB8500_DIGIFCONF2_IF0WL0) |
2222                 BIT(AB8500_DIGIFCONF2_IF0WL1);
2223         val = 0;
2224
2225         switch (slot_width) {
2226         case 16:
2227                 break;
2228         case 20:
2229                 val |= BIT(AB8500_DIGIFCONF2_IF0WL0);
2230                 break;
2231         case 24:
2232                 val |= BIT(AB8500_DIGIFCONF2_IF0WL1);
2233                 break;
2234         case 32:
2235                 val |= BIT(AB8500_DIGIFCONF2_IF0WL1) |
2236                         BIT(AB8500_DIGIFCONF2_IF0WL0);
2237                 break;
2238         default:
2239                 dev_err(dai->component->dev, "%s: Unsupported slot-width 0x%x\n",
2240                         __func__, slot_width);
2241                 return -EINVAL;
2242         }
2243
2244         dev_dbg(dai->component->dev, "%s: IF0 slot-width: %d bits.\n",
2245                 __func__, slot_width);
2246         snd_soc_component_update_bits(component, AB8500_DIGIFCONF2, mask, val);
2247
2248         /* Setup TDM clocking according to slot count */
2249         dev_dbg(dai->component->dev, "%s: Slots, total: %d\n", __func__, slots);
2250         mask = BIT(AB8500_DIGIFCONF1_IF0BITCLKOS0) |
2251                         BIT(AB8500_DIGIFCONF1_IF0BITCLKOS1);
2252         switch (slots) {
2253         case 2:
2254                 val = AB8500_MASK_NONE;
2255                 break;
2256         case 4:
2257                 val = BIT(AB8500_DIGIFCONF1_IF0BITCLKOS0);
2258                 break;
2259         case 8:
2260                 val = BIT(AB8500_DIGIFCONF1_IF0BITCLKOS1);
2261                 break;
2262         case 16:
2263                 val = BIT(AB8500_DIGIFCONF1_IF0BITCLKOS0) |
2264                         BIT(AB8500_DIGIFCONF1_IF0BITCLKOS1);
2265                 break;
2266         default:
2267                 dev_err(dai->component->dev,
2268                         "%s: ERROR: Unsupported number of slots (%d)!\n",
2269                         __func__, slots);
2270                 return -EINVAL;
2271         }
2272         snd_soc_component_update_bits(component, AB8500_DIGIFCONF1, mask, val);
2273
2274         /* Setup TDM DA according to active tx slots */
2275
2276         if (tx_mask & ~0xff)
2277                 return -EINVAL;
2278
2279         mask = AB8500_DASLOTCONFX_SLTODAX_MASK;
2280         tx_mask = tx_mask << AB8500_DA_DATA0_OFFSET;
2281         slots_active = hweight32(tx_mask);
2282
2283         dev_dbg(dai->component->dev, "%s: Slots, active, TX: %d\n", __func__,
2284                 slots_active);
2285
2286         switch (slots_active) {
2287         case 0:
2288                 break;
2289         case 1:
2290                 slot = ffs(tx_mask);
2291                 snd_soc_component_update_bits(component, AB8500_DASLOTCONF1, mask, slot);
2292                 snd_soc_component_update_bits(component, AB8500_DASLOTCONF3, mask, slot);
2293                 snd_soc_component_update_bits(component, AB8500_DASLOTCONF2, mask, slot);
2294                 snd_soc_component_update_bits(component, AB8500_DASLOTCONF4, mask, slot);
2295                 break;
2296         case 2:
2297                 slot = ffs(tx_mask);
2298                 snd_soc_component_update_bits(component, AB8500_DASLOTCONF1, mask, slot);
2299                 snd_soc_component_update_bits(component, AB8500_DASLOTCONF3, mask, slot);
2300                 slot = fls(tx_mask);
2301                 snd_soc_component_update_bits(component, AB8500_DASLOTCONF2, mask, slot);
2302                 snd_soc_component_update_bits(component, AB8500_DASLOTCONF4, mask, slot);
2303                 break;
2304         case 8:
2305                 dev_dbg(dai->component->dev,
2306                         "%s: In 8-channel mode DA-from-slot mapping is set manually.",
2307                         __func__);
2308                 break;
2309         default:
2310                 dev_err(dai->component->dev,
2311                         "%s: Unsupported number of active TX-slots (%d)!\n",
2312                         __func__, slots_active);
2313                 return -EINVAL;
2314         }
2315
2316         /* Setup TDM AD according to active RX-slots */
2317
2318         if (rx_mask & ~0xff)
2319                 return -EINVAL;
2320
2321         rx_mask = rx_mask << AB8500_AD_DATA0_OFFSET;
2322         slots_active = hweight32(rx_mask);
2323
2324         dev_dbg(dai->component->dev, "%s: Slots, active, RX: %d\n", __func__,
2325                 slots_active);
2326
2327         switch (slots_active) {
2328         case 0:
2329                 break;
2330         case 1:
2331                 slot = ffs(rx_mask);
2332                 snd_soc_component_update_bits(component, AB8500_ADSLOTSEL(slot),
2333                                 AB8500_MASK_SLOT(slot),
2334                                 AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(AB8500_AD_OUT3, slot));
2335                 break;
2336         case 2:
2337                 slot = ffs(rx_mask);
2338                 snd_soc_component_update_bits(component,
2339                                 AB8500_ADSLOTSEL(slot),
2340                                 AB8500_MASK_SLOT(slot),
2341                                 AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(AB8500_AD_OUT3, slot));
2342                 slot = fls(rx_mask);
2343                 snd_soc_component_update_bits(component,
2344                                 AB8500_ADSLOTSEL(slot),
2345                                 AB8500_MASK_SLOT(slot),
2346                                 AB8500_ADSLOTSELX_AD_OUT_TO_SLOT(AB8500_AD_OUT2, slot));
2347                 break;
2348         case 8:
2349                 dev_dbg(dai->component->dev,
2350                         "%s: In 8-channel mode AD-to-slot mapping is set manually.",
2351                         __func__);
2352                 break;
2353         default:
2354                 dev_err(dai->component->dev,
2355                         "%s: Unsupported number of active RX-slots (%d)!\n",
2356                         __func__, slots_active);
2357                 return -EINVAL;
2358         }
2359
2360         return 0;
2361 }
2362
2363 static const struct snd_soc_dai_ops ab8500_codec_ops = {
2364         .set_fmt = ab8500_codec_set_dai_fmt,
2365         .set_tdm_slot = ab8500_codec_set_dai_tdm_slot,
2366 };
2367
2368 static struct snd_soc_dai_driver ab8500_codec_dai[] = {
2369         {
2370                 .name = "ab8500-codec-dai.0",
2371                 .id = 0,
2372                 .playback = {
2373                         .stream_name = "ab8500_0p",
2374                         .channels_min = 1,
2375                         .channels_max = 8,
2376                         .rates = AB8500_SUPPORTED_RATE,
2377                         .formats = AB8500_SUPPORTED_FMT,
2378                 },
2379                 .ops = &ab8500_codec_ops,
2380                 .symmetric_rate = 1
2381         },
2382         {
2383                 .name = "ab8500-codec-dai.1",
2384                 .id = 1,
2385                 .capture = {
2386                         .stream_name = "ab8500_0c",
2387                         .channels_min = 1,
2388                         .channels_max = 8,
2389                         .rates = AB8500_SUPPORTED_RATE,
2390                         .formats = AB8500_SUPPORTED_FMT,
2391                 },
2392                 .ops = &ab8500_codec_ops,
2393                 .symmetric_rate = 1
2394         }
2395 };
2396
2397 static void ab8500_codec_of_probe(struct device *dev, struct device_node *np,
2398                                 struct ab8500_codec_platform_data *codec)
2399 {
2400         u32 value;
2401
2402         if (of_property_read_bool(np, "stericsson,amic1-type-single-ended"))
2403                 codec->amics.mic1_type = AMIC_TYPE_SINGLE_ENDED;
2404         else
2405                 codec->amics.mic1_type = AMIC_TYPE_DIFFERENTIAL;
2406
2407         if (of_property_read_bool(np, "stericsson,amic2-type-single-ended"))
2408                 codec->amics.mic2_type = AMIC_TYPE_SINGLE_ENDED;
2409         else
2410                 codec->amics.mic2_type = AMIC_TYPE_DIFFERENTIAL;
2411
2412         /* Has a non-standard Vamic been requested? */
2413         if (of_property_read_bool(np, "stericsson,amic1a-bias-vamic2"))
2414                 codec->amics.mic1a_micbias = AMIC_MICBIAS_VAMIC2;
2415         else
2416                 codec->amics.mic1a_micbias = AMIC_MICBIAS_VAMIC1;
2417
2418         if (of_property_read_bool(np, "stericsson,amic1b-bias-vamic2"))
2419                 codec->amics.mic1b_micbias = AMIC_MICBIAS_VAMIC2;
2420         else
2421                 codec->amics.mic1b_micbias = AMIC_MICBIAS_VAMIC1;
2422
2423         if (of_property_read_bool(np, "stericsson,amic2-bias-vamic1"))
2424                 codec->amics.mic2_micbias = AMIC_MICBIAS_VAMIC1;
2425         else
2426                 codec->amics.mic2_micbias = AMIC_MICBIAS_VAMIC2;
2427
2428         if (!of_property_read_u32(np, "stericsson,earpeice-cmv", &value)) {
2429                 switch (value) {
2430                 case 950 :
2431                         codec->ear_cmv = EAR_CMV_0_95V;
2432                         break;
2433                 case 1100 :
2434                         codec->ear_cmv = EAR_CMV_1_10V;
2435                         break;
2436                 case 1270 :
2437                         codec->ear_cmv = EAR_CMV_1_27V;
2438                         break;
2439                 case 1580 :
2440                         codec->ear_cmv = EAR_CMV_1_58V;
2441                         break;
2442                 default :
2443                         codec->ear_cmv = EAR_CMV_UNKNOWN;
2444                         dev_err(dev, "Unsuitable earpiece voltage found in DT\n");
2445                 }
2446         } else {
2447                 dev_warn(dev, "No earpiece voltage found in DT - using default\n");
2448                 codec->ear_cmv = EAR_CMV_0_95V;
2449         }
2450 }
2451
2452 static int ab8500_codec_probe(struct snd_soc_component *component)
2453 {
2454         struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
2455         struct device *dev = component->dev;
2456         struct device_node *np = dev->of_node;
2457         struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(dev);
2458         struct ab8500_codec_platform_data codec_pdata;
2459         struct filter_control *fc;
2460         int status;
2461
2462         dev_dbg(dev, "%s: Enter.\n", __func__);
2463
2464         ab8500_codec_of_probe(dev, np, &codec_pdata);
2465
2466         status = ab8500_audio_setup_mics(component, &codec_pdata.amics);
2467         if (status < 0) {
2468                 pr_err("%s: Failed to setup mics (%d)!\n", __func__, status);
2469                 return status;
2470         }
2471         status = ab8500_audio_set_ear_cmv(component, codec_pdata.ear_cmv);
2472         if (status < 0) {
2473                 pr_err("%s: Failed to set earpiece CM-voltage (%d)!\n",
2474                         __func__, status);
2475                 return status;
2476         }
2477
2478         status = ab8500_audio_init_audioblock(component);
2479         if (status < 0) {
2480                 dev_err(dev, "%s: failed to init audio-block (%d)!\n",
2481                         __func__, status);
2482                 return status;
2483         }
2484
2485         /* Override HW-defaults */
2486         snd_soc_component_write(component, AB8500_ANACONF5,
2487                       BIT(AB8500_ANACONF5_HSAUTOEN));
2488         snd_soc_component_write(component, AB8500_SHORTCIRCONF,
2489                       BIT(AB8500_SHORTCIRCONF_HSZCDDIS));
2490
2491         /* Add filter controls */
2492         status = snd_soc_add_component_controls(component, ab8500_filter_controls,
2493                                 ARRAY_SIZE(ab8500_filter_controls));
2494         if (status < 0) {
2495                 dev_err(dev,
2496                         "%s: failed to add ab8500 filter controls (%d).\n",
2497                         __func__, status);
2498                 return status;
2499         }
2500         fc = (struct filter_control *)
2501                 &ab8500_filter_controls[AB8500_FILTER_ANC_FIR].private_value;
2502         drvdata->anc_fir_values = (long *)fc->value;
2503         fc = (struct filter_control *)
2504                 &ab8500_filter_controls[AB8500_FILTER_ANC_IIR].private_value;
2505         drvdata->anc_iir_values = (long *)fc->value;
2506         fc = (struct filter_control *)
2507                 &ab8500_filter_controls[AB8500_FILTER_SID_FIR].private_value;
2508         drvdata->sid_fir_values = (long *)fc->value;
2509
2510         snd_soc_dapm_disable_pin(dapm, "ANC Configure Input");
2511
2512         mutex_init(&drvdata->ctrl_lock);
2513
2514         return status;
2515 }
2516
2517 static const struct snd_soc_component_driver ab8500_component_driver = {
2518         .probe                  = ab8500_codec_probe,
2519         .controls               = ab8500_ctrls,
2520         .num_controls           = ARRAY_SIZE(ab8500_ctrls),
2521         .dapm_widgets           = ab8500_dapm_widgets,
2522         .num_dapm_widgets       = ARRAY_SIZE(ab8500_dapm_widgets),
2523         .dapm_routes            = ab8500_dapm_routes,
2524         .num_dapm_routes        = ARRAY_SIZE(ab8500_dapm_routes),
2525         .idle_bias_on           = 1,
2526         .use_pmdown_time        = 1,
2527         .endianness             = 1,
2528         .non_legacy_dai_naming  = 1,
2529 };
2530
2531 static int ab8500_codec_driver_probe(struct platform_device *pdev)
2532 {
2533         int status;
2534         struct ab8500_codec_drvdata *drvdata;
2535
2536         dev_dbg(&pdev->dev, "%s: Enter.\n", __func__);
2537
2538         /* Create driver private-data struct */
2539         drvdata = devm_kzalloc(&pdev->dev, sizeof(struct ab8500_codec_drvdata),
2540                         GFP_KERNEL);
2541         if (!drvdata)
2542                 return -ENOMEM;
2543         drvdata->sid_status = SID_UNCONFIGURED;
2544         drvdata->anc_status = ANC_UNCONFIGURED;
2545         dev_set_drvdata(&pdev->dev, drvdata);
2546
2547         drvdata->regmap = devm_regmap_init(&pdev->dev, NULL, &pdev->dev,
2548                                            &ab8500_codec_regmap);
2549         if (IS_ERR(drvdata->regmap)) {
2550                 status = PTR_ERR(drvdata->regmap);
2551                 dev_err(&pdev->dev, "%s: Failed to allocate regmap: %d\n",
2552                         __func__, status);
2553                 return status;
2554         }
2555
2556         dev_dbg(&pdev->dev, "%s: Register codec.\n", __func__);
2557         status = devm_snd_soc_register_component(&pdev->dev,
2558                                 &ab8500_component_driver,
2559                                 ab8500_codec_dai,
2560                                 ARRAY_SIZE(ab8500_codec_dai));
2561         if (status < 0)
2562                 dev_err(&pdev->dev,
2563                         "%s: Error: Failed to register codec (%d).\n",
2564                         __func__, status);
2565
2566         return status;
2567 }
2568
2569 static struct platform_driver ab8500_codec_platform_driver = {
2570         .driver = {
2571                 .name   = "ab8500-codec",
2572         },
2573         .probe          = ab8500_codec_driver_probe,
2574 };
2575 module_platform_driver(ab8500_codec_platform_driver);
2576
2577 MODULE_LICENSE("GPL v2");