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