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