diff options
Diffstat (limited to 'sound/soc/codecs/wm5110.c')
-rw-r--r-- | sound/soc/codecs/wm5110.c | 406 |
1 files changed, 374 insertions, 32 deletions
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c index c3c7396a6181..22bd7dd80bba 100644 --- a/sound/soc/codecs/wm5110.c +++ b/sound/soc/codecs/wm5110.c | |||
@@ -30,13 +30,51 @@ | |||
30 | #include <linux/mfd/arizona/registers.h> | 30 | #include <linux/mfd/arizona/registers.h> |
31 | 31 | ||
32 | #include "arizona.h" | 32 | #include "arizona.h" |
33 | #include "wm_adsp.h" | ||
33 | #include "wm5110.h" | 34 | #include "wm5110.h" |
34 | 35 | ||
36 | #define WM5110_NUM_ADSP 4 | ||
37 | |||
35 | struct wm5110_priv { | 38 | struct wm5110_priv { |
36 | struct arizona_priv core; | 39 | struct arizona_priv core; |
37 | struct arizona_fll fll[2]; | 40 | struct arizona_fll fll[2]; |
38 | }; | 41 | }; |
39 | 42 | ||
43 | static const struct wm_adsp_region wm5110_dsp1_regions[] = { | ||
44 | { .type = WMFW_ADSP2_PM, .base = 0x100000 }, | ||
45 | { .type = WMFW_ADSP2_ZM, .base = 0x180000 }, | ||
46 | { .type = WMFW_ADSP2_XM, .base = 0x190000 }, | ||
47 | { .type = WMFW_ADSP2_YM, .base = 0x1a8000 }, | ||
48 | }; | ||
49 | |||
50 | static const struct wm_adsp_region wm5110_dsp2_regions[] = { | ||
51 | { .type = WMFW_ADSP2_PM, .base = 0x200000 }, | ||
52 | { .type = WMFW_ADSP2_ZM, .base = 0x280000 }, | ||
53 | { .type = WMFW_ADSP2_XM, .base = 0x290000 }, | ||
54 | { .type = WMFW_ADSP2_YM, .base = 0x2a8000 }, | ||
55 | }; | ||
56 | |||
57 | static const struct wm_adsp_region wm5110_dsp3_regions[] = { | ||
58 | { .type = WMFW_ADSP2_PM, .base = 0x300000 }, | ||
59 | { .type = WMFW_ADSP2_ZM, .base = 0x380000 }, | ||
60 | { .type = WMFW_ADSP2_XM, .base = 0x390000 }, | ||
61 | { .type = WMFW_ADSP2_YM, .base = 0x3a8000 }, | ||
62 | }; | ||
63 | |||
64 | static const struct wm_adsp_region wm5110_dsp4_regions[] = { | ||
65 | { .type = WMFW_ADSP2_PM, .base = 0x400000 }, | ||
66 | { .type = WMFW_ADSP2_ZM, .base = 0x480000 }, | ||
67 | { .type = WMFW_ADSP2_XM, .base = 0x490000 }, | ||
68 | { .type = WMFW_ADSP2_YM, .base = 0x4a8000 }, | ||
69 | }; | ||
70 | |||
71 | static const struct wm_adsp_region *wm5110_dsp_regions[] = { | ||
72 | wm5110_dsp1_regions, | ||
73 | wm5110_dsp2_regions, | ||
74 | wm5110_dsp3_regions, | ||
75 | wm5110_dsp4_regions, | ||
76 | }; | ||
77 | |||
40 | static const struct reg_default wm5110_sysclk_revd_patch[] = { | 78 | static const struct reg_default wm5110_sysclk_revd_patch[] = { |
41 | { 0x3093, 0x1001 }, | 79 | { 0x3093, 0x1001 }, |
42 | { 0x30E3, 0x1301 }, | 80 | { 0x30E3, 0x1301 }, |
@@ -67,8 +105,8 @@ static int wm5110_sysclk_ev(struct snd_soc_dapm_widget *w, | |||
67 | case SND_SOC_DAPM_POST_PMU: | 105 | case SND_SOC_DAPM_POST_PMU: |
68 | if (patch) | 106 | if (patch) |
69 | for (i = 0; i < patch_size; i++) | 107 | for (i = 0; i < patch_size; i++) |
70 | regmap_write(regmap, patch[i].reg, | 108 | regmap_write_async(regmap, patch[i].reg, |
71 | patch[i].def); | 109 | patch[i].def); |
72 | break; | 110 | break; |
73 | 111 | ||
74 | default: | 112 | default: |
@@ -117,6 +155,25 @@ SOC_SINGLE_RANGE_TLV("IN3L Volume", ARIZONA_IN3L_CONTROL, | |||
117 | SOC_SINGLE_RANGE_TLV("IN3R Volume", ARIZONA_IN3R_CONTROL, | 155 | SOC_SINGLE_RANGE_TLV("IN3R Volume", ARIZONA_IN3R_CONTROL, |
118 | ARIZONA_IN3R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv), | 156 | ARIZONA_IN3R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv), |
119 | 157 | ||
158 | SOC_ENUM("IN HPF Cutoff Frequency", arizona_in_hpf_cut_enum), | ||
159 | |||
160 | SOC_SINGLE("IN1L HPF Switch", ARIZONA_IN1L_CONTROL, | ||
161 | ARIZONA_IN1L_HPF_SHIFT, 1, 0), | ||
162 | SOC_SINGLE("IN1R HPF Switch", ARIZONA_IN1R_CONTROL, | ||
163 | ARIZONA_IN1R_HPF_SHIFT, 1, 0), | ||
164 | SOC_SINGLE("IN2L HPF Switch", ARIZONA_IN2L_CONTROL, | ||
165 | ARIZONA_IN2L_HPF_SHIFT, 1, 0), | ||
166 | SOC_SINGLE("IN2R HPF Switch", ARIZONA_IN2R_CONTROL, | ||
167 | ARIZONA_IN2R_HPF_SHIFT, 1, 0), | ||
168 | SOC_SINGLE("IN3L HPF Switch", ARIZONA_IN3L_CONTROL, | ||
169 | ARIZONA_IN3L_HPF_SHIFT, 1, 0), | ||
170 | SOC_SINGLE("IN3R HPF Switch", ARIZONA_IN3R_CONTROL, | ||
171 | ARIZONA_IN3R_HPF_SHIFT, 1, 0), | ||
172 | SOC_SINGLE("IN4L HPF Switch", ARIZONA_IN4L_CONTROL, | ||
173 | ARIZONA_IN4L_HPF_SHIFT, 1, 0), | ||
174 | SOC_SINGLE("IN4R HPF Switch", ARIZONA_IN4R_CONTROL, | ||
175 | ARIZONA_IN4R_HPF_SHIFT, 1, 0), | ||
176 | |||
120 | SOC_SINGLE_TLV("IN1L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1L, | 177 | SOC_SINGLE_TLV("IN1L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1L, |
121 | ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv), | 178 | ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv), |
122 | SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R, | 179 | SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R, |
@@ -220,6 +277,14 @@ SOC_ENUM("LHPF2 Mode", arizona_lhpf2_mode), | |||
220 | SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode), | 277 | SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode), |
221 | SOC_ENUM("LHPF4 Mode", arizona_lhpf4_mode), | 278 | SOC_ENUM("LHPF4 Mode", arizona_lhpf4_mode), |
222 | 279 | ||
280 | SOC_VALUE_ENUM("ISRC1 FSL", arizona_isrc_fsl[0]), | ||
281 | SOC_VALUE_ENUM("ISRC2 FSL", arizona_isrc_fsl[1]), | ||
282 | SOC_VALUE_ENUM("ISRC3 FSL", arizona_isrc_fsl[2]), | ||
283 | SOC_VALUE_ENUM("ISRC1 FSH", arizona_isrc_fsh[0]), | ||
284 | SOC_VALUE_ENUM("ISRC2 FSH", arizona_isrc_fsh[1]), | ||
285 | SOC_VALUE_ENUM("ISRC3 FSH", arizona_isrc_fsh[2]), | ||
286 | SOC_VALUE_ENUM("ASRC RATE 1", arizona_asrc_rate1), | ||
287 | |||
223 | ARIZONA_MIXER_CONTROLS("DSP1L", ARIZONA_DSP1LMIX_INPUT_1_SOURCE), | 288 | ARIZONA_MIXER_CONTROLS("DSP1L", ARIZONA_DSP1LMIX_INPUT_1_SOURCE), |
224 | ARIZONA_MIXER_CONTROLS("DSP1R", ARIZONA_DSP1RMIX_INPUT_1_SOURCE), | 289 | ARIZONA_MIXER_CONTROLS("DSP1R", ARIZONA_DSP1RMIX_INPUT_1_SOURCE), |
225 | ARIZONA_MIXER_CONTROLS("DSP2L", ARIZONA_DSP2LMIX_INPUT_1_SOURCE), | 290 | ARIZONA_MIXER_CONTROLS("DSP2L", ARIZONA_DSP2LMIX_INPUT_1_SOURCE), |
@@ -248,19 +313,6 @@ ARIZONA_MIXER_CONTROLS("SPKDAT1R", ARIZONA_OUT5RMIX_INPUT_1_SOURCE), | |||
248 | ARIZONA_MIXER_CONTROLS("SPKDAT2L", ARIZONA_OUT6LMIX_INPUT_1_SOURCE), | 313 | ARIZONA_MIXER_CONTROLS("SPKDAT2L", ARIZONA_OUT6LMIX_INPUT_1_SOURCE), |
249 | ARIZONA_MIXER_CONTROLS("SPKDAT2R", ARIZONA_OUT6RMIX_INPUT_1_SOURCE), | 314 | ARIZONA_MIXER_CONTROLS("SPKDAT2R", ARIZONA_OUT6RMIX_INPUT_1_SOURCE), |
250 | 315 | ||
251 | SOC_SINGLE("HPOUT1 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_1L, | ||
252 | ARIZONA_OUT1_OSR_SHIFT, 1, 0), | ||
253 | SOC_SINGLE("HPOUT2 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_2L, | ||
254 | ARIZONA_OUT2_OSR_SHIFT, 1, 0), | ||
255 | SOC_SINGLE("HPOUT3 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_3L, | ||
256 | ARIZONA_OUT3_OSR_SHIFT, 1, 0), | ||
257 | SOC_SINGLE("Speaker High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_4L, | ||
258 | ARIZONA_OUT4_OSR_SHIFT, 1, 0), | ||
259 | SOC_SINGLE("SPKDAT1 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_5L, | ||
260 | ARIZONA_OUT5_OSR_SHIFT, 1, 0), | ||
261 | SOC_SINGLE("SPKDAT2 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_6L, | ||
262 | ARIZONA_OUT6_OSR_SHIFT, 1, 0), | ||
263 | |||
264 | SOC_DOUBLE_R("HPOUT1 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_1L, | 316 | SOC_DOUBLE_R("HPOUT1 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_1L, |
265 | ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_MUTE_SHIFT, 1, 1), | 317 | ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_MUTE_SHIFT, 1, 1), |
266 | SOC_DOUBLE_R("HPOUT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L, | 318 | SOC_DOUBLE_R("HPOUT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L, |
@@ -293,23 +345,18 @@ SOC_DOUBLE_R_TLV("SPKDAT2 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_6L, | |||
293 | ARIZONA_DAC_DIGITAL_VOLUME_6R, ARIZONA_OUT6L_VOL_SHIFT, | 345 | ARIZONA_DAC_DIGITAL_VOLUME_6R, ARIZONA_OUT6L_VOL_SHIFT, |
294 | 0xbf, 0, digital_tlv), | 346 | 0xbf, 0, digital_tlv), |
295 | 347 | ||
296 | SOC_DOUBLE_R_RANGE_TLV("HPOUT1 Volume", ARIZONA_OUTPUT_PATH_CONFIG_1L, | ||
297 | ARIZONA_OUTPUT_PATH_CONFIG_1R, | ||
298 | ARIZONA_OUT1L_PGA_VOL_SHIFT, | ||
299 | 0x34, 0x40, 0, ana_tlv), | ||
300 | SOC_DOUBLE_R_RANGE_TLV("HPOUT2 Volume", ARIZONA_OUTPUT_PATH_CONFIG_2L, | ||
301 | ARIZONA_OUTPUT_PATH_CONFIG_2R, | ||
302 | ARIZONA_OUT2L_PGA_VOL_SHIFT, | ||
303 | 0x34, 0x40, 0, ana_tlv), | ||
304 | SOC_DOUBLE_R_RANGE_TLV("HPOUT3 Volume", ARIZONA_OUTPUT_PATH_CONFIG_3L, | ||
305 | ARIZONA_OUTPUT_PATH_CONFIG_3R, | ||
306 | ARIZONA_OUT3L_PGA_VOL_SHIFT, 0x34, 0x40, 0, ana_tlv), | ||
307 | |||
308 | SOC_DOUBLE("SPKDAT1 Switch", ARIZONA_PDM_SPK1_CTRL_1, ARIZONA_SPK1L_MUTE_SHIFT, | 348 | SOC_DOUBLE("SPKDAT1 Switch", ARIZONA_PDM_SPK1_CTRL_1, ARIZONA_SPK1L_MUTE_SHIFT, |
309 | ARIZONA_SPK1R_MUTE_SHIFT, 1, 1), | 349 | ARIZONA_SPK1R_MUTE_SHIFT, 1, 1), |
310 | SOC_DOUBLE("SPKDAT2 Switch", ARIZONA_PDM_SPK2_CTRL_1, ARIZONA_SPK2L_MUTE_SHIFT, | 350 | SOC_DOUBLE("SPKDAT2 Switch", ARIZONA_PDM_SPK2_CTRL_1, ARIZONA_SPK2L_MUTE_SHIFT, |
311 | ARIZONA_SPK2R_MUTE_SHIFT, 1, 1), | 351 | ARIZONA_SPK2R_MUTE_SHIFT, 1, 1), |
312 | 352 | ||
353 | SOC_DOUBLE("HPOUT1 DRE Switch", ARIZONA_DRE_ENABLE, | ||
354 | ARIZONA_DRE1L_ENA_SHIFT, ARIZONA_DRE1R_ENA_SHIFT, 1, 0), | ||
355 | SOC_DOUBLE("HPOUT2 DRE Switch", ARIZONA_DRE_ENABLE, | ||
356 | ARIZONA_DRE2L_ENA_SHIFT, ARIZONA_DRE2R_ENA_SHIFT, 1, 0), | ||
357 | SOC_DOUBLE("HPOUT3 DRE Switch", ARIZONA_DRE_ENABLE, | ||
358 | ARIZONA_DRE3L_ENA_SHIFT, ARIZONA_DRE3R_ENA_SHIFT, 1, 0), | ||
359 | |||
313 | SOC_ENUM("Output Ramp Up", arizona_out_vi_ramp), | 360 | SOC_ENUM("Output Ramp Up", arizona_out_vi_ramp), |
314 | SOC_ENUM("Output Ramp Down", arizona_out_vd_ramp), | 361 | SOC_ENUM("Output Ramp Down", arizona_out_vd_ramp), |
315 | 362 | ||
@@ -343,6 +390,10 @@ ARIZONA_MIXER_CONTROLS("AIF1TX8", ARIZONA_AIF1TX8MIX_INPUT_1_SOURCE), | |||
343 | 390 | ||
344 | ARIZONA_MIXER_CONTROLS("AIF2TX1", ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE), | 391 | ARIZONA_MIXER_CONTROLS("AIF2TX1", ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE), |
345 | ARIZONA_MIXER_CONTROLS("AIF2TX2", ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE), | 392 | ARIZONA_MIXER_CONTROLS("AIF2TX2", ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE), |
393 | ARIZONA_MIXER_CONTROLS("AIF2TX3", ARIZONA_AIF2TX3MIX_INPUT_1_SOURCE), | ||
394 | ARIZONA_MIXER_CONTROLS("AIF2TX4", ARIZONA_AIF2TX4MIX_INPUT_1_SOURCE), | ||
395 | ARIZONA_MIXER_CONTROLS("AIF2TX5", ARIZONA_AIF2TX5MIX_INPUT_1_SOURCE), | ||
396 | ARIZONA_MIXER_CONTROLS("AIF2TX6", ARIZONA_AIF2TX6MIX_INPUT_1_SOURCE), | ||
346 | 397 | ||
347 | ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE), | 398 | ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE), |
348 | ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE), | 399 | ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE), |
@@ -372,6 +423,22 @@ ARIZONA_MIXER_ENUMS(LHPF2, ARIZONA_HPLP2MIX_INPUT_1_SOURCE); | |||
372 | ARIZONA_MIXER_ENUMS(LHPF3, ARIZONA_HPLP3MIX_INPUT_1_SOURCE); | 423 | ARIZONA_MIXER_ENUMS(LHPF3, ARIZONA_HPLP3MIX_INPUT_1_SOURCE); |
373 | ARIZONA_MIXER_ENUMS(LHPF4, ARIZONA_HPLP4MIX_INPUT_1_SOURCE); | 424 | ARIZONA_MIXER_ENUMS(LHPF4, ARIZONA_HPLP4MIX_INPUT_1_SOURCE); |
374 | 425 | ||
426 | ARIZONA_MIXER_ENUMS(DSP1L, ARIZONA_DSP1LMIX_INPUT_1_SOURCE); | ||
427 | ARIZONA_MIXER_ENUMS(DSP1R, ARIZONA_DSP1RMIX_INPUT_1_SOURCE); | ||
428 | ARIZONA_DSP_AUX_ENUMS(DSP1, ARIZONA_DSP1AUX1MIX_INPUT_1_SOURCE); | ||
429 | |||
430 | ARIZONA_MIXER_ENUMS(DSP2L, ARIZONA_DSP2LMIX_INPUT_1_SOURCE); | ||
431 | ARIZONA_MIXER_ENUMS(DSP2R, ARIZONA_DSP2RMIX_INPUT_1_SOURCE); | ||
432 | ARIZONA_DSP_AUX_ENUMS(DSP2, ARIZONA_DSP2AUX1MIX_INPUT_1_SOURCE); | ||
433 | |||
434 | ARIZONA_MIXER_ENUMS(DSP3L, ARIZONA_DSP3LMIX_INPUT_1_SOURCE); | ||
435 | ARIZONA_MIXER_ENUMS(DSP3R, ARIZONA_DSP3RMIX_INPUT_1_SOURCE); | ||
436 | ARIZONA_DSP_AUX_ENUMS(DSP3, ARIZONA_DSP3AUX1MIX_INPUT_1_SOURCE); | ||
437 | |||
438 | ARIZONA_MIXER_ENUMS(DSP4L, ARIZONA_DSP4LMIX_INPUT_1_SOURCE); | ||
439 | ARIZONA_MIXER_ENUMS(DSP4R, ARIZONA_DSP4RMIX_INPUT_1_SOURCE); | ||
440 | ARIZONA_DSP_AUX_ENUMS(DSP4, ARIZONA_DSP4AUX1MIX_INPUT_1_SOURCE); | ||
441 | |||
375 | ARIZONA_MIXER_ENUMS(Mic, ARIZONA_MICMIX_INPUT_1_SOURCE); | 442 | ARIZONA_MIXER_ENUMS(Mic, ARIZONA_MICMIX_INPUT_1_SOURCE); |
376 | ARIZONA_MIXER_ENUMS(Noise, ARIZONA_NOISEMIX_INPUT_1_SOURCE); | 443 | ARIZONA_MIXER_ENUMS(Noise, ARIZONA_NOISEMIX_INPUT_1_SOURCE); |
377 | 444 | ||
@@ -402,6 +469,10 @@ ARIZONA_MIXER_ENUMS(AIF1TX8, ARIZONA_AIF1TX8MIX_INPUT_1_SOURCE); | |||
402 | 469 | ||
403 | ARIZONA_MIXER_ENUMS(AIF2TX1, ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE); | 470 | ARIZONA_MIXER_ENUMS(AIF2TX1, ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE); |
404 | ARIZONA_MIXER_ENUMS(AIF2TX2, ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE); | 471 | ARIZONA_MIXER_ENUMS(AIF2TX2, ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE); |
472 | ARIZONA_MIXER_ENUMS(AIF2TX3, ARIZONA_AIF2TX3MIX_INPUT_1_SOURCE); | ||
473 | ARIZONA_MIXER_ENUMS(AIF2TX4, ARIZONA_AIF2TX4MIX_INPUT_1_SOURCE); | ||
474 | ARIZONA_MIXER_ENUMS(AIF2TX5, ARIZONA_AIF2TX5MIX_INPUT_1_SOURCE); | ||
475 | ARIZONA_MIXER_ENUMS(AIF2TX6, ARIZONA_AIF2TX6MIX_INPUT_1_SOURCE); | ||
405 | 476 | ||
406 | ARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE); | 477 | ARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE); |
407 | ARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE); | 478 | ARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE); |
@@ -420,6 +491,36 @@ ARIZONA_MUX_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE); | |||
420 | ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); | 491 | ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); |
421 | ARIZONA_MUX_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE); | 492 | ARIZONA_MUX_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE); |
422 | 493 | ||
494 | ARIZONA_MUX_ENUMS(ISRC1INT1, ARIZONA_ISRC1INT1MIX_INPUT_1_SOURCE); | ||
495 | ARIZONA_MUX_ENUMS(ISRC1INT2, ARIZONA_ISRC1INT2MIX_INPUT_1_SOURCE); | ||
496 | ARIZONA_MUX_ENUMS(ISRC1INT3, ARIZONA_ISRC1INT3MIX_INPUT_1_SOURCE); | ||
497 | ARIZONA_MUX_ENUMS(ISRC1INT4, ARIZONA_ISRC1INT4MIX_INPUT_1_SOURCE); | ||
498 | |||
499 | ARIZONA_MUX_ENUMS(ISRC1DEC1, ARIZONA_ISRC1DEC1MIX_INPUT_1_SOURCE); | ||
500 | ARIZONA_MUX_ENUMS(ISRC1DEC2, ARIZONA_ISRC1DEC2MIX_INPUT_1_SOURCE); | ||
501 | ARIZONA_MUX_ENUMS(ISRC1DEC3, ARIZONA_ISRC1DEC3MIX_INPUT_1_SOURCE); | ||
502 | ARIZONA_MUX_ENUMS(ISRC1DEC4, ARIZONA_ISRC1DEC4MIX_INPUT_1_SOURCE); | ||
503 | |||
504 | ARIZONA_MUX_ENUMS(ISRC2INT1, ARIZONA_ISRC2INT1MIX_INPUT_1_SOURCE); | ||
505 | ARIZONA_MUX_ENUMS(ISRC2INT2, ARIZONA_ISRC2INT2MIX_INPUT_1_SOURCE); | ||
506 | ARIZONA_MUX_ENUMS(ISRC2INT3, ARIZONA_ISRC2INT3MIX_INPUT_1_SOURCE); | ||
507 | ARIZONA_MUX_ENUMS(ISRC2INT4, ARIZONA_ISRC2INT4MIX_INPUT_1_SOURCE); | ||
508 | |||
509 | ARIZONA_MUX_ENUMS(ISRC2DEC1, ARIZONA_ISRC2DEC1MIX_INPUT_1_SOURCE); | ||
510 | ARIZONA_MUX_ENUMS(ISRC2DEC2, ARIZONA_ISRC2DEC2MIX_INPUT_1_SOURCE); | ||
511 | ARIZONA_MUX_ENUMS(ISRC2DEC3, ARIZONA_ISRC2DEC3MIX_INPUT_1_SOURCE); | ||
512 | ARIZONA_MUX_ENUMS(ISRC2DEC4, ARIZONA_ISRC2DEC4MIX_INPUT_1_SOURCE); | ||
513 | |||
514 | ARIZONA_MUX_ENUMS(ISRC3INT1, ARIZONA_ISRC3INT1MIX_INPUT_1_SOURCE); | ||
515 | ARIZONA_MUX_ENUMS(ISRC3INT2, ARIZONA_ISRC3INT2MIX_INPUT_1_SOURCE); | ||
516 | ARIZONA_MUX_ENUMS(ISRC3INT3, ARIZONA_ISRC3INT3MIX_INPUT_1_SOURCE); | ||
517 | ARIZONA_MUX_ENUMS(ISRC3INT4, ARIZONA_ISRC3INT4MIX_INPUT_1_SOURCE); | ||
518 | |||
519 | ARIZONA_MUX_ENUMS(ISRC3DEC1, ARIZONA_ISRC3DEC1MIX_INPUT_1_SOURCE); | ||
520 | ARIZONA_MUX_ENUMS(ISRC3DEC2, ARIZONA_ISRC3DEC2MIX_INPUT_1_SOURCE); | ||
521 | ARIZONA_MUX_ENUMS(ISRC3DEC3, ARIZONA_ISRC3DEC3MIX_INPUT_1_SOURCE); | ||
522 | ARIZONA_MUX_ENUMS(ISRC3DEC4, ARIZONA_ISRC3DEC4MIX_INPUT_1_SOURCE); | ||
523 | |||
423 | static const char *wm5110_aec_loopback_texts[] = { | 524 | static const char *wm5110_aec_loopback_texts[] = { |
424 | "HPOUT1L", "HPOUT1R", "HPOUT2L", "HPOUT2R", "HPOUT3L", "HPOUT3R", | 525 | "HPOUT1L", "HPOUT1R", "HPOUT2L", "HPOUT2R", "HPOUT3L", "HPOUT3R", |
425 | "SPKOUTL", "SPKOUTR", "SPKDAT1L", "SPKDAT1R", "SPKDAT2L", "SPKDAT2R", | 526 | "SPKOUTL", "SPKOUTR", "SPKDAT1L", "SPKDAT1R", "SPKDAT2L", "SPKDAT2R", |
@@ -560,6 +661,65 @@ SND_SOC_DAPM_PGA("ASRC2L", ARIZONA_ASRC_ENABLE, ARIZONA_ASRC2L_ENA_SHIFT, 0, | |||
560 | SND_SOC_DAPM_PGA("ASRC2R", ARIZONA_ASRC_ENABLE, ARIZONA_ASRC2R_ENA_SHIFT, 0, | 661 | SND_SOC_DAPM_PGA("ASRC2R", ARIZONA_ASRC_ENABLE, ARIZONA_ASRC2R_ENA_SHIFT, 0, |
561 | NULL, 0), | 662 | NULL, 0), |
562 | 663 | ||
664 | WM_ADSP2("DSP1", 0), | ||
665 | WM_ADSP2("DSP2", 1), | ||
666 | WM_ADSP2("DSP3", 2), | ||
667 | WM_ADSP2("DSP4", 3), | ||
668 | |||
669 | SND_SOC_DAPM_PGA("ISRC1INT1", ARIZONA_ISRC_1_CTRL_3, | ||
670 | ARIZONA_ISRC1_INT0_ENA_SHIFT, 0, NULL, 0), | ||
671 | SND_SOC_DAPM_PGA("ISRC1INT2", ARIZONA_ISRC_1_CTRL_3, | ||
672 | ARIZONA_ISRC1_INT1_ENA_SHIFT, 0, NULL, 0), | ||
673 | SND_SOC_DAPM_PGA("ISRC1INT3", ARIZONA_ISRC_1_CTRL_3, | ||
674 | ARIZONA_ISRC1_INT2_ENA_SHIFT, 0, NULL, 0), | ||
675 | SND_SOC_DAPM_PGA("ISRC1INT4", ARIZONA_ISRC_1_CTRL_3, | ||
676 | ARIZONA_ISRC1_INT3_ENA_SHIFT, 0, NULL, 0), | ||
677 | |||
678 | SND_SOC_DAPM_PGA("ISRC1DEC1", ARIZONA_ISRC_1_CTRL_3, | ||
679 | ARIZONA_ISRC1_DEC0_ENA_SHIFT, 0, NULL, 0), | ||
680 | SND_SOC_DAPM_PGA("ISRC1DEC2", ARIZONA_ISRC_1_CTRL_3, | ||
681 | ARIZONA_ISRC1_DEC1_ENA_SHIFT, 0, NULL, 0), | ||
682 | SND_SOC_DAPM_PGA("ISRC1DEC3", ARIZONA_ISRC_1_CTRL_3, | ||
683 | ARIZONA_ISRC1_DEC2_ENA_SHIFT, 0, NULL, 0), | ||
684 | SND_SOC_DAPM_PGA("ISRC1DEC4", ARIZONA_ISRC_1_CTRL_3, | ||
685 | ARIZONA_ISRC1_DEC3_ENA_SHIFT, 0, NULL, 0), | ||
686 | |||
687 | SND_SOC_DAPM_PGA("ISRC2INT1", ARIZONA_ISRC_2_CTRL_3, | ||
688 | ARIZONA_ISRC2_INT0_ENA_SHIFT, 0, NULL, 0), | ||
689 | SND_SOC_DAPM_PGA("ISRC2INT2", ARIZONA_ISRC_2_CTRL_3, | ||
690 | ARIZONA_ISRC2_INT1_ENA_SHIFT, 0, NULL, 0), | ||
691 | SND_SOC_DAPM_PGA("ISRC2INT3", ARIZONA_ISRC_2_CTRL_3, | ||
692 | ARIZONA_ISRC2_INT2_ENA_SHIFT, 0, NULL, 0), | ||
693 | SND_SOC_DAPM_PGA("ISRC2INT4", ARIZONA_ISRC_2_CTRL_3, | ||
694 | ARIZONA_ISRC2_INT3_ENA_SHIFT, 0, NULL, 0), | ||
695 | |||
696 | SND_SOC_DAPM_PGA("ISRC2DEC1", ARIZONA_ISRC_2_CTRL_3, | ||
697 | ARIZONA_ISRC2_DEC0_ENA_SHIFT, 0, NULL, 0), | ||
698 | SND_SOC_DAPM_PGA("ISRC2DEC2", ARIZONA_ISRC_2_CTRL_3, | ||
699 | ARIZONA_ISRC2_DEC1_ENA_SHIFT, 0, NULL, 0), | ||
700 | SND_SOC_DAPM_PGA("ISRC2DEC3", ARIZONA_ISRC_2_CTRL_3, | ||
701 | ARIZONA_ISRC2_DEC2_ENA_SHIFT, 0, NULL, 0), | ||
702 | SND_SOC_DAPM_PGA("ISRC2DEC4", ARIZONA_ISRC_2_CTRL_3, | ||
703 | ARIZONA_ISRC2_DEC3_ENA_SHIFT, 0, NULL, 0), | ||
704 | |||
705 | SND_SOC_DAPM_PGA("ISRC3INT1", ARIZONA_ISRC_3_CTRL_3, | ||
706 | ARIZONA_ISRC3_INT0_ENA_SHIFT, 0, NULL, 0), | ||
707 | SND_SOC_DAPM_PGA("ISRC3INT2", ARIZONA_ISRC_3_CTRL_3, | ||
708 | ARIZONA_ISRC3_INT1_ENA_SHIFT, 0, NULL, 0), | ||
709 | SND_SOC_DAPM_PGA("ISRC3INT3", ARIZONA_ISRC_3_CTRL_3, | ||
710 | ARIZONA_ISRC3_INT2_ENA_SHIFT, 0, NULL, 0), | ||
711 | SND_SOC_DAPM_PGA("ISRC3INT4", ARIZONA_ISRC_3_CTRL_3, | ||
712 | ARIZONA_ISRC3_INT3_ENA_SHIFT, 0, NULL, 0), | ||
713 | |||
714 | SND_SOC_DAPM_PGA("ISRC3DEC1", ARIZONA_ISRC_3_CTRL_3, | ||
715 | ARIZONA_ISRC3_DEC0_ENA_SHIFT, 0, NULL, 0), | ||
716 | SND_SOC_DAPM_PGA("ISRC3DEC2", ARIZONA_ISRC_3_CTRL_3, | ||
717 | ARIZONA_ISRC3_DEC1_ENA_SHIFT, 0, NULL, 0), | ||
718 | SND_SOC_DAPM_PGA("ISRC3DEC3", ARIZONA_ISRC_3_CTRL_3, | ||
719 | ARIZONA_ISRC3_DEC2_ENA_SHIFT, 0, NULL, 0), | ||
720 | SND_SOC_DAPM_PGA("ISRC3DEC4", ARIZONA_ISRC_3_CTRL_3, | ||
721 | ARIZONA_ISRC3_DEC3_ENA_SHIFT, 0, NULL, 0), | ||
722 | |||
563 | SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, | 723 | SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, |
564 | ARIZONA_AEC_LOOPBACK_ENA_SHIFT, 0, | 724 | ARIZONA_AEC_LOOPBACK_ENA_SHIFT, 0, |
565 | &wm5110_aec_loopback_mux), | 725 | &wm5110_aec_loopback_mux), |
@@ -602,11 +762,27 @@ SND_SOC_DAPM_AIF_OUT("AIF2TX1", NULL, 0, | |||
602 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX1_ENA_SHIFT, 0), | 762 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX1_ENA_SHIFT, 0), |
603 | SND_SOC_DAPM_AIF_OUT("AIF2TX2", NULL, 0, | 763 | SND_SOC_DAPM_AIF_OUT("AIF2TX2", NULL, 0, |
604 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX2_ENA_SHIFT, 0), | 764 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX2_ENA_SHIFT, 0), |
765 | SND_SOC_DAPM_AIF_OUT("AIF2TX3", NULL, 0, | ||
766 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX3_ENA_SHIFT, 0), | ||
767 | SND_SOC_DAPM_AIF_OUT("AIF2TX4", NULL, 0, | ||
768 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX4_ENA_SHIFT, 0), | ||
769 | SND_SOC_DAPM_AIF_OUT("AIF2TX5", NULL, 0, | ||
770 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX5_ENA_SHIFT, 0), | ||
771 | SND_SOC_DAPM_AIF_OUT("AIF2TX6", NULL, 0, | ||
772 | ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX6_ENA_SHIFT, 0), | ||
605 | 773 | ||
606 | SND_SOC_DAPM_AIF_IN("AIF2RX1", NULL, 0, | 774 | SND_SOC_DAPM_AIF_IN("AIF2RX1", NULL, 0, |
607 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX1_ENA_SHIFT, 0), | 775 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX1_ENA_SHIFT, 0), |
608 | SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 0, | 776 | SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 0, |
609 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX2_ENA_SHIFT, 0), | 777 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX2_ENA_SHIFT, 0), |
778 | SND_SOC_DAPM_AIF_IN("AIF2RX3", NULL, 0, | ||
779 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX3_ENA_SHIFT, 0), | ||
780 | SND_SOC_DAPM_AIF_IN("AIF2RX4", NULL, 0, | ||
781 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX4_ENA_SHIFT, 0), | ||
782 | SND_SOC_DAPM_AIF_IN("AIF2RX5", NULL, 0, | ||
783 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX5_ENA_SHIFT, 0), | ||
784 | SND_SOC_DAPM_AIF_IN("AIF2RX6", NULL, 0, | ||
785 | ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX6_ENA_SHIFT, 0), | ||
610 | 786 | ||
611 | SND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0, | 787 | SND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0, |
612 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, | 788 | ARIZONA_SLIMBUS_RX_CHANNEL_ENABLE, |
@@ -744,6 +920,10 @@ ARIZONA_MIXER_WIDGETS(AIF1TX8, "AIF1TX8"), | |||
744 | 920 | ||
745 | ARIZONA_MIXER_WIDGETS(AIF2TX1, "AIF2TX1"), | 921 | ARIZONA_MIXER_WIDGETS(AIF2TX1, "AIF2TX1"), |
746 | ARIZONA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"), | 922 | ARIZONA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"), |
923 | ARIZONA_MIXER_WIDGETS(AIF2TX3, "AIF2TX3"), | ||
924 | ARIZONA_MIXER_WIDGETS(AIF2TX4, "AIF2TX4"), | ||
925 | ARIZONA_MIXER_WIDGETS(AIF2TX5, "AIF2TX5"), | ||
926 | ARIZONA_MIXER_WIDGETS(AIF2TX6, "AIF2TX6"), | ||
747 | 927 | ||
748 | ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"), | 928 | ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"), |
749 | ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"), | 929 | ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"), |
@@ -762,6 +942,41 @@ ARIZONA_MUX_WIDGETS(ASRC1R, "ASRC1R"), | |||
762 | ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"), | 942 | ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"), |
763 | ARIZONA_MUX_WIDGETS(ASRC2R, "ASRC2R"), | 943 | ARIZONA_MUX_WIDGETS(ASRC2R, "ASRC2R"), |
764 | 944 | ||
945 | ARIZONA_DSP_WIDGETS(DSP1, "DSP1"), | ||
946 | ARIZONA_DSP_WIDGETS(DSP2, "DSP2"), | ||
947 | ARIZONA_DSP_WIDGETS(DSP3, "DSP3"), | ||
948 | ARIZONA_DSP_WIDGETS(DSP4, "DSP4"), | ||
949 | |||
950 | ARIZONA_MUX_WIDGETS(ISRC1DEC1, "ISRC1DEC1"), | ||
951 | ARIZONA_MUX_WIDGETS(ISRC1DEC2, "ISRC1DEC2"), | ||
952 | ARIZONA_MUX_WIDGETS(ISRC1DEC3, "ISRC1DEC3"), | ||
953 | ARIZONA_MUX_WIDGETS(ISRC1DEC4, "ISRC1DEC4"), | ||
954 | |||
955 | ARIZONA_MUX_WIDGETS(ISRC1INT1, "ISRC1INT1"), | ||
956 | ARIZONA_MUX_WIDGETS(ISRC1INT2, "ISRC1INT2"), | ||
957 | ARIZONA_MUX_WIDGETS(ISRC1INT3, "ISRC1INT3"), | ||
958 | ARIZONA_MUX_WIDGETS(ISRC1INT4, "ISRC1INT4"), | ||
959 | |||
960 | ARIZONA_MUX_WIDGETS(ISRC2DEC1, "ISRC2DEC1"), | ||
961 | ARIZONA_MUX_WIDGETS(ISRC2DEC2, "ISRC2DEC2"), | ||
962 | ARIZONA_MUX_WIDGETS(ISRC2DEC3, "ISRC2DEC3"), | ||
963 | ARIZONA_MUX_WIDGETS(ISRC2DEC4, "ISRC2DEC4"), | ||
964 | |||
965 | ARIZONA_MUX_WIDGETS(ISRC2INT1, "ISRC2INT1"), | ||
966 | ARIZONA_MUX_WIDGETS(ISRC2INT2, "ISRC2INT2"), | ||
967 | ARIZONA_MUX_WIDGETS(ISRC2INT3, "ISRC2INT3"), | ||
968 | ARIZONA_MUX_WIDGETS(ISRC2INT4, "ISRC2INT4"), | ||
969 | |||
970 | ARIZONA_MUX_WIDGETS(ISRC3DEC1, "ISRC3DEC1"), | ||
971 | ARIZONA_MUX_WIDGETS(ISRC3DEC2, "ISRC3DEC2"), | ||
972 | ARIZONA_MUX_WIDGETS(ISRC3DEC3, "ISRC3DEC3"), | ||
973 | ARIZONA_MUX_WIDGETS(ISRC3DEC4, "ISRC3DEC4"), | ||
974 | |||
975 | ARIZONA_MUX_WIDGETS(ISRC3INT1, "ISRC3INT1"), | ||
976 | ARIZONA_MUX_WIDGETS(ISRC3INT2, "ISRC3INT2"), | ||
977 | ARIZONA_MUX_WIDGETS(ISRC3INT3, "ISRC3INT3"), | ||
978 | ARIZONA_MUX_WIDGETS(ISRC3INT4, "ISRC3INT4"), | ||
979 | |||
765 | SND_SOC_DAPM_OUTPUT("HPOUT1L"), | 980 | SND_SOC_DAPM_OUTPUT("HPOUT1L"), |
766 | SND_SOC_DAPM_OUTPUT("HPOUT1R"), | 981 | SND_SOC_DAPM_OUTPUT("HPOUT1R"), |
767 | SND_SOC_DAPM_OUTPUT("HPOUT2L"), | 982 | SND_SOC_DAPM_OUTPUT("HPOUT2L"), |
@@ -805,6 +1020,10 @@ SND_SOC_DAPM_OUTPUT("MICSUPP"), | |||
805 | { name, "AIF1RX8", "AIF1RX8" }, \ | 1020 | { name, "AIF1RX8", "AIF1RX8" }, \ |
806 | { name, "AIF2RX1", "AIF2RX1" }, \ | 1021 | { name, "AIF2RX1", "AIF2RX1" }, \ |
807 | { name, "AIF2RX2", "AIF2RX2" }, \ | 1022 | { name, "AIF2RX2", "AIF2RX2" }, \ |
1023 | { name, "AIF2RX3", "AIF2RX3" }, \ | ||
1024 | { name, "AIF2RX4", "AIF2RX4" }, \ | ||
1025 | { name, "AIF2RX5", "AIF2RX5" }, \ | ||
1026 | { name, "AIF2RX6", "AIF2RX6" }, \ | ||
808 | { name, "AIF3RX1", "AIF3RX1" }, \ | 1027 | { name, "AIF3RX1", "AIF3RX1" }, \ |
809 | { name, "AIF3RX2", "AIF3RX2" }, \ | 1028 | { name, "AIF3RX2", "AIF3RX2" }, \ |
810 | { name, "SLIMRX1", "SLIMRX1" }, \ | 1029 | { name, "SLIMRX1", "SLIMRX1" }, \ |
@@ -830,7 +1049,55 @@ SND_SOC_DAPM_OUTPUT("MICSUPP"), | |||
830 | { name, "ASRC1L", "ASRC1L" }, \ | 1049 | { name, "ASRC1L", "ASRC1L" }, \ |
831 | { name, "ASRC1R", "ASRC1R" }, \ | 1050 | { name, "ASRC1R", "ASRC1R" }, \ |
832 | { name, "ASRC2L", "ASRC2L" }, \ | 1051 | { name, "ASRC2L", "ASRC2L" }, \ |
833 | { name, "ASRC2R", "ASRC2R" } | 1052 | { name, "ASRC2R", "ASRC2R" }, \ |
1053 | { name, "ISRC1DEC1", "ISRC1DEC1" }, \ | ||
1054 | { name, "ISRC1DEC2", "ISRC1DEC2" }, \ | ||
1055 | { name, "ISRC1DEC3", "ISRC1DEC3" }, \ | ||
1056 | { name, "ISRC1DEC4", "ISRC1DEC4" }, \ | ||
1057 | { name, "ISRC1INT1", "ISRC1INT1" }, \ | ||
1058 | { name, "ISRC1INT2", "ISRC1INT2" }, \ | ||
1059 | { name, "ISRC1INT3", "ISRC1INT3" }, \ | ||
1060 | { name, "ISRC1INT4", "ISRC1INT4" }, \ | ||
1061 | { name, "ISRC2DEC1", "ISRC2DEC1" }, \ | ||
1062 | { name, "ISRC2DEC2", "ISRC2DEC2" }, \ | ||
1063 | { name, "ISRC2DEC3", "ISRC2DEC3" }, \ | ||
1064 | { name, "ISRC2DEC4", "ISRC2DEC4" }, \ | ||
1065 | { name, "ISRC2INT1", "ISRC2INT1" }, \ | ||
1066 | { name, "ISRC2INT2", "ISRC2INT2" }, \ | ||
1067 | { name, "ISRC2INT3", "ISRC2INT3" }, \ | ||
1068 | { name, "ISRC2INT4", "ISRC2INT4" }, \ | ||
1069 | { name, "ISRC3DEC1", "ISRC3DEC1" }, \ | ||
1070 | { name, "ISRC3DEC2", "ISRC3DEC2" }, \ | ||
1071 | { name, "ISRC3DEC3", "ISRC3DEC3" }, \ | ||
1072 | { name, "ISRC3DEC4", "ISRC3DEC4" }, \ | ||
1073 | { name, "ISRC3INT1", "ISRC3INT1" }, \ | ||
1074 | { name, "ISRC3INT2", "ISRC3INT2" }, \ | ||
1075 | { name, "ISRC3INT3", "ISRC3INT3" }, \ | ||
1076 | { name, "ISRC3INT4", "ISRC3INT4" }, \ | ||
1077 | { name, "DSP1.1", "DSP1" }, \ | ||
1078 | { name, "DSP1.2", "DSP1" }, \ | ||
1079 | { name, "DSP1.3", "DSP1" }, \ | ||
1080 | { name, "DSP1.4", "DSP1" }, \ | ||
1081 | { name, "DSP1.5", "DSP1" }, \ | ||
1082 | { name, "DSP1.6", "DSP1" }, \ | ||
1083 | { name, "DSP2.1", "DSP2" }, \ | ||
1084 | { name, "DSP2.2", "DSP2" }, \ | ||
1085 | { name, "DSP2.3", "DSP2" }, \ | ||
1086 | { name, "DSP2.4", "DSP2" }, \ | ||
1087 | { name, "DSP2.5", "DSP2" }, \ | ||
1088 | { name, "DSP2.6", "DSP2" }, \ | ||
1089 | { name, "DSP3.1", "DSP3" }, \ | ||
1090 | { name, "DSP3.2", "DSP3" }, \ | ||
1091 | { name, "DSP3.3", "DSP3" }, \ | ||
1092 | { name, "DSP3.4", "DSP3" }, \ | ||
1093 | { name, "DSP3.5", "DSP3" }, \ | ||
1094 | { name, "DSP3.6", "DSP3" }, \ | ||
1095 | { name, "DSP4.1", "DSP4" }, \ | ||
1096 | { name, "DSP4.2", "DSP4" }, \ | ||
1097 | { name, "DSP4.3", "DSP4" }, \ | ||
1098 | { name, "DSP4.4", "DSP4" }, \ | ||
1099 | { name, "DSP4.5", "DSP4" }, \ | ||
1100 | { name, "DSP4.6", "DSP4" } | ||
834 | 1101 | ||
835 | static const struct snd_soc_dapm_route wm5110_dapm_routes[] = { | 1102 | static const struct snd_soc_dapm_route wm5110_dapm_routes[] = { |
836 | { "AIF2 Capture", NULL, "DBVDD2" }, | 1103 | { "AIF2 Capture", NULL, "DBVDD2" }, |
@@ -902,9 +1169,17 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = { | |||
902 | 1169 | ||
903 | { "AIF2 Capture", NULL, "AIF2TX1" }, | 1170 | { "AIF2 Capture", NULL, "AIF2TX1" }, |
904 | { "AIF2 Capture", NULL, "AIF2TX2" }, | 1171 | { "AIF2 Capture", NULL, "AIF2TX2" }, |
1172 | { "AIF2 Capture", NULL, "AIF2TX3" }, | ||
1173 | { "AIF2 Capture", NULL, "AIF2TX4" }, | ||
1174 | { "AIF2 Capture", NULL, "AIF2TX5" }, | ||
1175 | { "AIF2 Capture", NULL, "AIF2TX6" }, | ||
905 | 1176 | ||
906 | { "AIF2RX1", NULL, "AIF2 Playback" }, | 1177 | { "AIF2RX1", NULL, "AIF2 Playback" }, |
907 | { "AIF2RX2", NULL, "AIF2 Playback" }, | 1178 | { "AIF2RX2", NULL, "AIF2 Playback" }, |
1179 | { "AIF2RX3", NULL, "AIF2 Playback" }, | ||
1180 | { "AIF2RX4", NULL, "AIF2 Playback" }, | ||
1181 | { "AIF2RX5", NULL, "AIF2 Playback" }, | ||
1182 | { "AIF2RX6", NULL, "AIF2 Playback" }, | ||
908 | 1183 | ||
909 | { "AIF3 Capture", NULL, "AIF3TX1" }, | 1184 | { "AIF3 Capture", NULL, "AIF3TX1" }, |
910 | { "AIF3 Capture", NULL, "AIF3TX2" }, | 1185 | { "AIF3 Capture", NULL, "AIF3TX2" }, |
@@ -988,6 +1263,10 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = { | |||
988 | 1263 | ||
989 | ARIZONA_MIXER_ROUTES("AIF2TX1", "AIF2TX1"), | 1264 | ARIZONA_MIXER_ROUTES("AIF2TX1", "AIF2TX1"), |
990 | ARIZONA_MIXER_ROUTES("AIF2TX2", "AIF2TX2"), | 1265 | ARIZONA_MIXER_ROUTES("AIF2TX2", "AIF2TX2"), |
1266 | ARIZONA_MIXER_ROUTES("AIF2TX3", "AIF2TX3"), | ||
1267 | ARIZONA_MIXER_ROUTES("AIF2TX4", "AIF2TX4"), | ||
1268 | ARIZONA_MIXER_ROUTES("AIF2TX5", "AIF2TX5"), | ||
1269 | ARIZONA_MIXER_ROUTES("AIF2TX6", "AIF2TX6"), | ||
991 | 1270 | ||
992 | ARIZONA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"), | 1271 | ARIZONA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"), |
993 | ARIZONA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"), | 1272 | ARIZONA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"), |
@@ -1024,6 +1303,41 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = { | |||
1024 | ARIZONA_MUX_ROUTES("ASRC2L", "ASRC2L"), | 1303 | ARIZONA_MUX_ROUTES("ASRC2L", "ASRC2L"), |
1025 | ARIZONA_MUX_ROUTES("ASRC2R", "ASRC2R"), | 1304 | ARIZONA_MUX_ROUTES("ASRC2R", "ASRC2R"), |
1026 | 1305 | ||
1306 | ARIZONA_DSP_ROUTES("DSP1"), | ||
1307 | ARIZONA_DSP_ROUTES("DSP2"), | ||
1308 | ARIZONA_DSP_ROUTES("DSP3"), | ||
1309 | ARIZONA_DSP_ROUTES("DSP4"), | ||
1310 | |||
1311 | ARIZONA_MUX_ROUTES("ISRC1INT1", "ISRC1INT1"), | ||
1312 | ARIZONA_MUX_ROUTES("ISRC1INT2", "ISRC1INT2"), | ||
1313 | ARIZONA_MUX_ROUTES("ISRC1INT3", "ISRC1INT3"), | ||
1314 | ARIZONA_MUX_ROUTES("ISRC1INT4", "ISRC1INT4"), | ||
1315 | |||
1316 | ARIZONA_MUX_ROUTES("ISRC1DEC1", "ISRC1DEC1"), | ||
1317 | ARIZONA_MUX_ROUTES("ISRC1DEC2", "ISRC1DEC2"), | ||
1318 | ARIZONA_MUX_ROUTES("ISRC1DEC3", "ISRC1DEC3"), | ||
1319 | ARIZONA_MUX_ROUTES("ISRC1DEC4", "ISRC1DEC4"), | ||
1320 | |||
1321 | ARIZONA_MUX_ROUTES("ISRC2INT1", "ISRC2INT1"), | ||
1322 | ARIZONA_MUX_ROUTES("ISRC2INT2", "ISRC2INT2"), | ||
1323 | ARIZONA_MUX_ROUTES("ISRC2INT3", "ISRC2INT3"), | ||
1324 | ARIZONA_MUX_ROUTES("ISRC2INT4", "ISRC2INT4"), | ||
1325 | |||
1326 | ARIZONA_MUX_ROUTES("ISRC2DEC1", "ISRC2DEC1"), | ||
1327 | ARIZONA_MUX_ROUTES("ISRC2DEC2", "ISRC2DEC2"), | ||
1328 | ARIZONA_MUX_ROUTES("ISRC2DEC3", "ISRC2DEC3"), | ||
1329 | ARIZONA_MUX_ROUTES("ISRC2DEC4", "ISRC2DEC4"), | ||
1330 | |||
1331 | ARIZONA_MUX_ROUTES("ISRC3INT1", "ISRC3INT1"), | ||
1332 | ARIZONA_MUX_ROUTES("ISRC3INT2", "ISRC3INT2"), | ||
1333 | ARIZONA_MUX_ROUTES("ISRC3INT3", "ISRC3INT3"), | ||
1334 | ARIZONA_MUX_ROUTES("ISRC3INT4", "ISRC3INT4"), | ||
1335 | |||
1336 | ARIZONA_MUX_ROUTES("ISRC3DEC1", "ISRC3DEC1"), | ||
1337 | ARIZONA_MUX_ROUTES("ISRC3DEC2", "ISRC3DEC2"), | ||
1338 | ARIZONA_MUX_ROUTES("ISRC3DEC3", "ISRC3DEC3"), | ||
1339 | ARIZONA_MUX_ROUTES("ISRC3DEC4", "ISRC3DEC4"), | ||
1340 | |||
1027 | { "AEC Loopback", "HPOUT1L", "OUT1L" }, | 1341 | { "AEC Loopback", "HPOUT1L", "OUT1L" }, |
1028 | { "AEC Loopback", "HPOUT1R", "OUT1R" }, | 1342 | { "AEC Loopback", "HPOUT1R", "OUT1R" }, |
1029 | { "HPOUT1L", NULL, "OUT1L" }, | 1343 | { "HPOUT1L", NULL, "OUT1L" }, |
@@ -1037,7 +1351,7 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = { | |||
1037 | { "AEC Loopback", "HPOUT3L", "OUT3L" }, | 1351 | { "AEC Loopback", "HPOUT3L", "OUT3L" }, |
1038 | { "AEC Loopback", "HPOUT3R", "OUT3R" }, | 1352 | { "AEC Loopback", "HPOUT3R", "OUT3R" }, |
1039 | { "HPOUT3L", NULL, "OUT3L" }, | 1353 | { "HPOUT3L", NULL, "OUT3L" }, |
1040 | { "HPOUT3R", NULL, "OUT3L" }, | 1354 | { "HPOUT3R", NULL, "OUT3R" }, |
1041 | 1355 | ||
1042 | { "AEC Loopback", "SPKOUTL", "OUT4L" }, | 1356 | { "AEC Loopback", "SPKOUTL", "OUT4L" }, |
1043 | { "SPKOUTLN", NULL, "OUT4L" }, | 1357 | { "SPKOUTLN", NULL, "OUT4L" }, |
@@ -1120,14 +1434,14 @@ static struct snd_soc_dai_driver wm5110_dai[] = { | |||
1120 | .playback = { | 1434 | .playback = { |
1121 | .stream_name = "AIF2 Playback", | 1435 | .stream_name = "AIF2 Playback", |
1122 | .channels_min = 1, | 1436 | .channels_min = 1, |
1123 | .channels_max = 2, | 1437 | .channels_max = 6, |
1124 | .rates = WM5110_RATES, | 1438 | .rates = WM5110_RATES, |
1125 | .formats = WM5110_FORMATS, | 1439 | .formats = WM5110_FORMATS, |
1126 | }, | 1440 | }, |
1127 | .capture = { | 1441 | .capture = { |
1128 | .stream_name = "AIF2 Capture", | 1442 | .stream_name = "AIF2 Capture", |
1129 | .channels_min = 1, | 1443 | .channels_min = 1, |
1130 | .channels_max = 2, | 1444 | .channels_max = 6, |
1131 | .rates = WM5110_RATES, | 1445 | .rates = WM5110_RATES, |
1132 | .formats = WM5110_FORMATS, | 1446 | .formats = WM5110_FORMATS, |
1133 | }, | 1447 | }, |
@@ -1229,6 +1543,10 @@ static int wm5110_codec_probe(struct snd_soc_codec *codec) | |||
1229 | arizona_init_spk(codec); | 1543 | arizona_init_spk(codec); |
1230 | arizona_init_gpio(codec); | 1544 | arizona_init_gpio(codec); |
1231 | 1545 | ||
1546 | ret = snd_soc_add_codec_controls(codec, wm_adsp2_fw_controls, 8); | ||
1547 | if (ret != 0) | ||
1548 | return ret; | ||
1549 | |||
1232 | snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS"); | 1550 | snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS"); |
1233 | 1551 | ||
1234 | priv->core.arizona->dapm = &codec->dapm; | 1552 | priv->core.arizona->dapm = &codec->dapm; |
@@ -1283,7 +1601,7 @@ static int wm5110_probe(struct platform_device *pdev) | |||
1283 | { | 1601 | { |
1284 | struct arizona *arizona = dev_get_drvdata(pdev->dev.parent); | 1602 | struct arizona *arizona = dev_get_drvdata(pdev->dev.parent); |
1285 | struct wm5110_priv *wm5110; | 1603 | struct wm5110_priv *wm5110; |
1286 | int i; | 1604 | int i, ret; |
1287 | 1605 | ||
1288 | wm5110 = devm_kzalloc(&pdev->dev, sizeof(struct wm5110_priv), | 1606 | wm5110 = devm_kzalloc(&pdev->dev, sizeof(struct wm5110_priv), |
1289 | GFP_KERNEL); | 1607 | GFP_KERNEL); |
@@ -1294,6 +1612,24 @@ static int wm5110_probe(struct platform_device *pdev) | |||
1294 | wm5110->core.arizona = arizona; | 1612 | wm5110->core.arizona = arizona; |
1295 | wm5110->core.num_inputs = 8; | 1613 | wm5110->core.num_inputs = 8; |
1296 | 1614 | ||
1615 | for (i = 0; i < WM5110_NUM_ADSP; i++) { | ||
1616 | wm5110->core.adsp[i].part = "wm5110"; | ||
1617 | wm5110->core.adsp[i].num = i + 1; | ||
1618 | wm5110->core.adsp[i].type = WMFW_ADSP2; | ||
1619 | wm5110->core.adsp[i].dev = arizona->dev; | ||
1620 | wm5110->core.adsp[i].regmap = arizona->regmap; | ||
1621 | |||
1622 | wm5110->core.adsp[i].base = ARIZONA_DSP1_CONTROL_1 | ||
1623 | + (0x100 * i); | ||
1624 | wm5110->core.adsp[i].mem = wm5110_dsp_regions[i]; | ||
1625 | wm5110->core.adsp[i].num_mems | ||
1626 | = ARRAY_SIZE(wm5110_dsp1_regions); | ||
1627 | |||
1628 | ret = wm_adsp2_init(&wm5110->core.adsp[i], false); | ||
1629 | if (ret != 0) | ||
1630 | return ret; | ||
1631 | } | ||
1632 | |||
1297 | for (i = 0; i < ARRAY_SIZE(wm5110->fll); i++) | 1633 | for (i = 0; i < ARRAY_SIZE(wm5110->fll); i++) |
1298 | wm5110->fll[i].vco_mult = 3; | 1634 | wm5110->fll[i].vco_mult = 3; |
1299 | 1635 | ||
@@ -1304,6 +1640,12 @@ static int wm5110_probe(struct platform_device *pdev) | |||
1304 | ARIZONA_IRQ_FLL2_LOCK, ARIZONA_IRQ_FLL2_CLOCK_OK, | 1640 | ARIZONA_IRQ_FLL2_LOCK, ARIZONA_IRQ_FLL2_CLOCK_OK, |
1305 | &wm5110->fll[1]); | 1641 | &wm5110->fll[1]); |
1306 | 1642 | ||
1643 | /* SR2 fixed at 8kHz, SR3 fixed at 16kHz */ | ||
1644 | regmap_update_bits(arizona->regmap, ARIZONA_SAMPLE_RATE_2, | ||
1645 | ARIZONA_SAMPLE_RATE_2_MASK, 0x11); | ||
1646 | regmap_update_bits(arizona->regmap, ARIZONA_SAMPLE_RATE_3, | ||
1647 | ARIZONA_SAMPLE_RATE_3_MASK, 0x12); | ||
1648 | |||
1307 | for (i = 0; i < ARRAY_SIZE(wm5110_dai); i++) | 1649 | for (i = 0; i < ARRAY_SIZE(wm5110_dai); i++) |
1308 | arizona_init_dai(&wm5110->core, i); | 1650 | arizona_init_dai(&wm5110->core, i); |
1309 | 1651 | ||