aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/wm5110.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/codecs/wm5110.c')
-rw-r--r--sound/soc/codecs/wm5110.c406
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
35struct wm5110_priv { 38struct 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
43static 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
50static 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
57static 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
64static 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
71static 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
40static const struct reg_default wm5110_sysclk_revd_patch[] = { 78static 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,
117SOC_SINGLE_RANGE_TLV("IN3R Volume", ARIZONA_IN3R_CONTROL, 155SOC_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
158SOC_ENUM("IN HPF Cutoff Frequency", arizona_in_hpf_cut_enum),
159
160SOC_SINGLE("IN1L HPF Switch", ARIZONA_IN1L_CONTROL,
161 ARIZONA_IN1L_HPF_SHIFT, 1, 0),
162SOC_SINGLE("IN1R HPF Switch", ARIZONA_IN1R_CONTROL,
163 ARIZONA_IN1R_HPF_SHIFT, 1, 0),
164SOC_SINGLE("IN2L HPF Switch", ARIZONA_IN2L_CONTROL,
165 ARIZONA_IN2L_HPF_SHIFT, 1, 0),
166SOC_SINGLE("IN2R HPF Switch", ARIZONA_IN2R_CONTROL,
167 ARIZONA_IN2R_HPF_SHIFT, 1, 0),
168SOC_SINGLE("IN3L HPF Switch", ARIZONA_IN3L_CONTROL,
169 ARIZONA_IN3L_HPF_SHIFT, 1, 0),
170SOC_SINGLE("IN3R HPF Switch", ARIZONA_IN3R_CONTROL,
171 ARIZONA_IN3R_HPF_SHIFT, 1, 0),
172SOC_SINGLE("IN4L HPF Switch", ARIZONA_IN4L_CONTROL,
173 ARIZONA_IN4L_HPF_SHIFT, 1, 0),
174SOC_SINGLE("IN4R HPF Switch", ARIZONA_IN4R_CONTROL,
175 ARIZONA_IN4R_HPF_SHIFT, 1, 0),
176
120SOC_SINGLE_TLV("IN1L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1L, 177SOC_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),
122SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R, 179SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R,
@@ -220,6 +277,14 @@ SOC_ENUM("LHPF2 Mode", arizona_lhpf2_mode),
220SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode), 277SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode),
221SOC_ENUM("LHPF4 Mode", arizona_lhpf4_mode), 278SOC_ENUM("LHPF4 Mode", arizona_lhpf4_mode),
222 279
280SOC_VALUE_ENUM("ISRC1 FSL", arizona_isrc_fsl[0]),
281SOC_VALUE_ENUM("ISRC2 FSL", arizona_isrc_fsl[1]),
282SOC_VALUE_ENUM("ISRC3 FSL", arizona_isrc_fsl[2]),
283SOC_VALUE_ENUM("ISRC1 FSH", arizona_isrc_fsh[0]),
284SOC_VALUE_ENUM("ISRC2 FSH", arizona_isrc_fsh[1]),
285SOC_VALUE_ENUM("ISRC3 FSH", arizona_isrc_fsh[2]),
286SOC_VALUE_ENUM("ASRC RATE 1", arizona_asrc_rate1),
287
223ARIZONA_MIXER_CONTROLS("DSP1L", ARIZONA_DSP1LMIX_INPUT_1_SOURCE), 288ARIZONA_MIXER_CONTROLS("DSP1L", ARIZONA_DSP1LMIX_INPUT_1_SOURCE),
224ARIZONA_MIXER_CONTROLS("DSP1R", ARIZONA_DSP1RMIX_INPUT_1_SOURCE), 289ARIZONA_MIXER_CONTROLS("DSP1R", ARIZONA_DSP1RMIX_INPUT_1_SOURCE),
225ARIZONA_MIXER_CONTROLS("DSP2L", ARIZONA_DSP2LMIX_INPUT_1_SOURCE), 290ARIZONA_MIXER_CONTROLS("DSP2L", ARIZONA_DSP2LMIX_INPUT_1_SOURCE),
@@ -248,19 +313,6 @@ ARIZONA_MIXER_CONTROLS("SPKDAT1R", ARIZONA_OUT5RMIX_INPUT_1_SOURCE),
248ARIZONA_MIXER_CONTROLS("SPKDAT2L", ARIZONA_OUT6LMIX_INPUT_1_SOURCE), 313ARIZONA_MIXER_CONTROLS("SPKDAT2L", ARIZONA_OUT6LMIX_INPUT_1_SOURCE),
249ARIZONA_MIXER_CONTROLS("SPKDAT2R", ARIZONA_OUT6RMIX_INPUT_1_SOURCE), 314ARIZONA_MIXER_CONTROLS("SPKDAT2R", ARIZONA_OUT6RMIX_INPUT_1_SOURCE),
250 315
251SOC_SINGLE("HPOUT1 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_1L,
252 ARIZONA_OUT1_OSR_SHIFT, 1, 0),
253SOC_SINGLE("HPOUT2 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_2L,
254 ARIZONA_OUT2_OSR_SHIFT, 1, 0),
255SOC_SINGLE("HPOUT3 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_3L,
256 ARIZONA_OUT3_OSR_SHIFT, 1, 0),
257SOC_SINGLE("Speaker High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_4L,
258 ARIZONA_OUT4_OSR_SHIFT, 1, 0),
259SOC_SINGLE("SPKDAT1 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_5L,
260 ARIZONA_OUT5_OSR_SHIFT, 1, 0),
261SOC_SINGLE("SPKDAT2 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_6L,
262 ARIZONA_OUT6_OSR_SHIFT, 1, 0),
263
264SOC_DOUBLE_R("HPOUT1 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_1L, 316SOC_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),
266SOC_DOUBLE_R("HPOUT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L, 318SOC_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
296SOC_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),
300SOC_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),
304SOC_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
308SOC_DOUBLE("SPKDAT1 Switch", ARIZONA_PDM_SPK1_CTRL_1, ARIZONA_SPK1L_MUTE_SHIFT, 348SOC_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),
310SOC_DOUBLE("SPKDAT2 Switch", ARIZONA_PDM_SPK2_CTRL_1, ARIZONA_SPK2L_MUTE_SHIFT, 350SOC_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
353SOC_DOUBLE("HPOUT1 DRE Switch", ARIZONA_DRE_ENABLE,
354 ARIZONA_DRE1L_ENA_SHIFT, ARIZONA_DRE1R_ENA_SHIFT, 1, 0),
355SOC_DOUBLE("HPOUT2 DRE Switch", ARIZONA_DRE_ENABLE,
356 ARIZONA_DRE2L_ENA_SHIFT, ARIZONA_DRE2R_ENA_SHIFT, 1, 0),
357SOC_DOUBLE("HPOUT3 DRE Switch", ARIZONA_DRE_ENABLE,
358 ARIZONA_DRE3L_ENA_SHIFT, ARIZONA_DRE3R_ENA_SHIFT, 1, 0),
359
313SOC_ENUM("Output Ramp Up", arizona_out_vi_ramp), 360SOC_ENUM("Output Ramp Up", arizona_out_vi_ramp),
314SOC_ENUM("Output Ramp Down", arizona_out_vd_ramp), 361SOC_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
344ARIZONA_MIXER_CONTROLS("AIF2TX1", ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE), 391ARIZONA_MIXER_CONTROLS("AIF2TX1", ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE),
345ARIZONA_MIXER_CONTROLS("AIF2TX2", ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE), 392ARIZONA_MIXER_CONTROLS("AIF2TX2", ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE),
393ARIZONA_MIXER_CONTROLS("AIF2TX3", ARIZONA_AIF2TX3MIX_INPUT_1_SOURCE),
394ARIZONA_MIXER_CONTROLS("AIF2TX4", ARIZONA_AIF2TX4MIX_INPUT_1_SOURCE),
395ARIZONA_MIXER_CONTROLS("AIF2TX5", ARIZONA_AIF2TX5MIX_INPUT_1_SOURCE),
396ARIZONA_MIXER_CONTROLS("AIF2TX6", ARIZONA_AIF2TX6MIX_INPUT_1_SOURCE),
346 397
347ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE), 398ARIZONA_MIXER_CONTROLS("AIF3TX1", ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE),
348ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE), 399ARIZONA_MIXER_CONTROLS("AIF3TX2", ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE),
@@ -372,6 +423,22 @@ ARIZONA_MIXER_ENUMS(LHPF2, ARIZONA_HPLP2MIX_INPUT_1_SOURCE);
372ARIZONA_MIXER_ENUMS(LHPF3, ARIZONA_HPLP3MIX_INPUT_1_SOURCE); 423ARIZONA_MIXER_ENUMS(LHPF3, ARIZONA_HPLP3MIX_INPUT_1_SOURCE);
373ARIZONA_MIXER_ENUMS(LHPF4, ARIZONA_HPLP4MIX_INPUT_1_SOURCE); 424ARIZONA_MIXER_ENUMS(LHPF4, ARIZONA_HPLP4MIX_INPUT_1_SOURCE);
374 425
426ARIZONA_MIXER_ENUMS(DSP1L, ARIZONA_DSP1LMIX_INPUT_1_SOURCE);
427ARIZONA_MIXER_ENUMS(DSP1R, ARIZONA_DSP1RMIX_INPUT_1_SOURCE);
428ARIZONA_DSP_AUX_ENUMS(DSP1, ARIZONA_DSP1AUX1MIX_INPUT_1_SOURCE);
429
430ARIZONA_MIXER_ENUMS(DSP2L, ARIZONA_DSP2LMIX_INPUT_1_SOURCE);
431ARIZONA_MIXER_ENUMS(DSP2R, ARIZONA_DSP2RMIX_INPUT_1_SOURCE);
432ARIZONA_DSP_AUX_ENUMS(DSP2, ARIZONA_DSP2AUX1MIX_INPUT_1_SOURCE);
433
434ARIZONA_MIXER_ENUMS(DSP3L, ARIZONA_DSP3LMIX_INPUT_1_SOURCE);
435ARIZONA_MIXER_ENUMS(DSP3R, ARIZONA_DSP3RMIX_INPUT_1_SOURCE);
436ARIZONA_DSP_AUX_ENUMS(DSP3, ARIZONA_DSP3AUX1MIX_INPUT_1_SOURCE);
437
438ARIZONA_MIXER_ENUMS(DSP4L, ARIZONA_DSP4LMIX_INPUT_1_SOURCE);
439ARIZONA_MIXER_ENUMS(DSP4R, ARIZONA_DSP4RMIX_INPUT_1_SOURCE);
440ARIZONA_DSP_AUX_ENUMS(DSP4, ARIZONA_DSP4AUX1MIX_INPUT_1_SOURCE);
441
375ARIZONA_MIXER_ENUMS(Mic, ARIZONA_MICMIX_INPUT_1_SOURCE); 442ARIZONA_MIXER_ENUMS(Mic, ARIZONA_MICMIX_INPUT_1_SOURCE);
376ARIZONA_MIXER_ENUMS(Noise, ARIZONA_NOISEMIX_INPUT_1_SOURCE); 443ARIZONA_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
403ARIZONA_MIXER_ENUMS(AIF2TX1, ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE); 470ARIZONA_MIXER_ENUMS(AIF2TX1, ARIZONA_AIF2TX1MIX_INPUT_1_SOURCE);
404ARIZONA_MIXER_ENUMS(AIF2TX2, ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE); 471ARIZONA_MIXER_ENUMS(AIF2TX2, ARIZONA_AIF2TX2MIX_INPUT_1_SOURCE);
472ARIZONA_MIXER_ENUMS(AIF2TX3, ARIZONA_AIF2TX3MIX_INPUT_1_SOURCE);
473ARIZONA_MIXER_ENUMS(AIF2TX4, ARIZONA_AIF2TX4MIX_INPUT_1_SOURCE);
474ARIZONA_MIXER_ENUMS(AIF2TX5, ARIZONA_AIF2TX5MIX_INPUT_1_SOURCE);
475ARIZONA_MIXER_ENUMS(AIF2TX6, ARIZONA_AIF2TX6MIX_INPUT_1_SOURCE);
405 476
406ARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE); 477ARIZONA_MIXER_ENUMS(AIF3TX1, ARIZONA_AIF3TX1MIX_INPUT_1_SOURCE);
407ARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE); 478ARIZONA_MIXER_ENUMS(AIF3TX2, ARIZONA_AIF3TX2MIX_INPUT_1_SOURCE);
@@ -420,6 +491,36 @@ ARIZONA_MUX_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE);
420ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); 491ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE);
421ARIZONA_MUX_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE); 492ARIZONA_MUX_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE);
422 493
494ARIZONA_MUX_ENUMS(ISRC1INT1, ARIZONA_ISRC1INT1MIX_INPUT_1_SOURCE);
495ARIZONA_MUX_ENUMS(ISRC1INT2, ARIZONA_ISRC1INT2MIX_INPUT_1_SOURCE);
496ARIZONA_MUX_ENUMS(ISRC1INT3, ARIZONA_ISRC1INT3MIX_INPUT_1_SOURCE);
497ARIZONA_MUX_ENUMS(ISRC1INT4, ARIZONA_ISRC1INT4MIX_INPUT_1_SOURCE);
498
499ARIZONA_MUX_ENUMS(ISRC1DEC1, ARIZONA_ISRC1DEC1MIX_INPUT_1_SOURCE);
500ARIZONA_MUX_ENUMS(ISRC1DEC2, ARIZONA_ISRC1DEC2MIX_INPUT_1_SOURCE);
501ARIZONA_MUX_ENUMS(ISRC1DEC3, ARIZONA_ISRC1DEC3MIX_INPUT_1_SOURCE);
502ARIZONA_MUX_ENUMS(ISRC1DEC4, ARIZONA_ISRC1DEC4MIX_INPUT_1_SOURCE);
503
504ARIZONA_MUX_ENUMS(ISRC2INT1, ARIZONA_ISRC2INT1MIX_INPUT_1_SOURCE);
505ARIZONA_MUX_ENUMS(ISRC2INT2, ARIZONA_ISRC2INT2MIX_INPUT_1_SOURCE);
506ARIZONA_MUX_ENUMS(ISRC2INT3, ARIZONA_ISRC2INT3MIX_INPUT_1_SOURCE);
507ARIZONA_MUX_ENUMS(ISRC2INT4, ARIZONA_ISRC2INT4MIX_INPUT_1_SOURCE);
508
509ARIZONA_MUX_ENUMS(ISRC2DEC1, ARIZONA_ISRC2DEC1MIX_INPUT_1_SOURCE);
510ARIZONA_MUX_ENUMS(ISRC2DEC2, ARIZONA_ISRC2DEC2MIX_INPUT_1_SOURCE);
511ARIZONA_MUX_ENUMS(ISRC2DEC3, ARIZONA_ISRC2DEC3MIX_INPUT_1_SOURCE);
512ARIZONA_MUX_ENUMS(ISRC2DEC4, ARIZONA_ISRC2DEC4MIX_INPUT_1_SOURCE);
513
514ARIZONA_MUX_ENUMS(ISRC3INT1, ARIZONA_ISRC3INT1MIX_INPUT_1_SOURCE);
515ARIZONA_MUX_ENUMS(ISRC3INT2, ARIZONA_ISRC3INT2MIX_INPUT_1_SOURCE);
516ARIZONA_MUX_ENUMS(ISRC3INT3, ARIZONA_ISRC3INT3MIX_INPUT_1_SOURCE);
517ARIZONA_MUX_ENUMS(ISRC3INT4, ARIZONA_ISRC3INT4MIX_INPUT_1_SOURCE);
518
519ARIZONA_MUX_ENUMS(ISRC3DEC1, ARIZONA_ISRC3DEC1MIX_INPUT_1_SOURCE);
520ARIZONA_MUX_ENUMS(ISRC3DEC2, ARIZONA_ISRC3DEC2MIX_INPUT_1_SOURCE);
521ARIZONA_MUX_ENUMS(ISRC3DEC3, ARIZONA_ISRC3DEC3MIX_INPUT_1_SOURCE);
522ARIZONA_MUX_ENUMS(ISRC3DEC4, ARIZONA_ISRC3DEC4MIX_INPUT_1_SOURCE);
523
423static const char *wm5110_aec_loopback_texts[] = { 524static 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,
560SND_SOC_DAPM_PGA("ASRC2R", ARIZONA_ASRC_ENABLE, ARIZONA_ASRC2R_ENA_SHIFT, 0, 661SND_SOC_DAPM_PGA("ASRC2R", ARIZONA_ASRC_ENABLE, ARIZONA_ASRC2R_ENA_SHIFT, 0,
561 NULL, 0), 662 NULL, 0),
562 663
664WM_ADSP2("DSP1", 0),
665WM_ADSP2("DSP2", 1),
666WM_ADSP2("DSP3", 2),
667WM_ADSP2("DSP4", 3),
668
669SND_SOC_DAPM_PGA("ISRC1INT1", ARIZONA_ISRC_1_CTRL_3,
670 ARIZONA_ISRC1_INT0_ENA_SHIFT, 0, NULL, 0),
671SND_SOC_DAPM_PGA("ISRC1INT2", ARIZONA_ISRC_1_CTRL_3,
672 ARIZONA_ISRC1_INT1_ENA_SHIFT, 0, NULL, 0),
673SND_SOC_DAPM_PGA("ISRC1INT3", ARIZONA_ISRC_1_CTRL_3,
674 ARIZONA_ISRC1_INT2_ENA_SHIFT, 0, NULL, 0),
675SND_SOC_DAPM_PGA("ISRC1INT4", ARIZONA_ISRC_1_CTRL_3,
676 ARIZONA_ISRC1_INT3_ENA_SHIFT, 0, NULL, 0),
677
678SND_SOC_DAPM_PGA("ISRC1DEC1", ARIZONA_ISRC_1_CTRL_3,
679 ARIZONA_ISRC1_DEC0_ENA_SHIFT, 0, NULL, 0),
680SND_SOC_DAPM_PGA("ISRC1DEC2", ARIZONA_ISRC_1_CTRL_3,
681 ARIZONA_ISRC1_DEC1_ENA_SHIFT, 0, NULL, 0),
682SND_SOC_DAPM_PGA("ISRC1DEC3", ARIZONA_ISRC_1_CTRL_3,
683 ARIZONA_ISRC1_DEC2_ENA_SHIFT, 0, NULL, 0),
684SND_SOC_DAPM_PGA("ISRC1DEC4", ARIZONA_ISRC_1_CTRL_3,
685 ARIZONA_ISRC1_DEC3_ENA_SHIFT, 0, NULL, 0),
686
687SND_SOC_DAPM_PGA("ISRC2INT1", ARIZONA_ISRC_2_CTRL_3,
688 ARIZONA_ISRC2_INT0_ENA_SHIFT, 0, NULL, 0),
689SND_SOC_DAPM_PGA("ISRC2INT2", ARIZONA_ISRC_2_CTRL_3,
690 ARIZONA_ISRC2_INT1_ENA_SHIFT, 0, NULL, 0),
691SND_SOC_DAPM_PGA("ISRC2INT3", ARIZONA_ISRC_2_CTRL_3,
692 ARIZONA_ISRC2_INT2_ENA_SHIFT, 0, NULL, 0),
693SND_SOC_DAPM_PGA("ISRC2INT4", ARIZONA_ISRC_2_CTRL_3,
694 ARIZONA_ISRC2_INT3_ENA_SHIFT, 0, NULL, 0),
695
696SND_SOC_DAPM_PGA("ISRC2DEC1", ARIZONA_ISRC_2_CTRL_3,
697 ARIZONA_ISRC2_DEC0_ENA_SHIFT, 0, NULL, 0),
698SND_SOC_DAPM_PGA("ISRC2DEC2", ARIZONA_ISRC_2_CTRL_3,
699 ARIZONA_ISRC2_DEC1_ENA_SHIFT, 0, NULL, 0),
700SND_SOC_DAPM_PGA("ISRC2DEC3", ARIZONA_ISRC_2_CTRL_3,
701 ARIZONA_ISRC2_DEC2_ENA_SHIFT, 0, NULL, 0),
702SND_SOC_DAPM_PGA("ISRC2DEC4", ARIZONA_ISRC_2_CTRL_3,
703 ARIZONA_ISRC2_DEC3_ENA_SHIFT, 0, NULL, 0),
704
705SND_SOC_DAPM_PGA("ISRC3INT1", ARIZONA_ISRC_3_CTRL_3,
706 ARIZONA_ISRC3_INT0_ENA_SHIFT, 0, NULL, 0),
707SND_SOC_DAPM_PGA("ISRC3INT2", ARIZONA_ISRC_3_CTRL_3,
708 ARIZONA_ISRC3_INT1_ENA_SHIFT, 0, NULL, 0),
709SND_SOC_DAPM_PGA("ISRC3INT3", ARIZONA_ISRC_3_CTRL_3,
710 ARIZONA_ISRC3_INT2_ENA_SHIFT, 0, NULL, 0),
711SND_SOC_DAPM_PGA("ISRC3INT4", ARIZONA_ISRC_3_CTRL_3,
712 ARIZONA_ISRC3_INT3_ENA_SHIFT, 0, NULL, 0),
713
714SND_SOC_DAPM_PGA("ISRC3DEC1", ARIZONA_ISRC_3_CTRL_3,
715 ARIZONA_ISRC3_DEC0_ENA_SHIFT, 0, NULL, 0),
716SND_SOC_DAPM_PGA("ISRC3DEC2", ARIZONA_ISRC_3_CTRL_3,
717 ARIZONA_ISRC3_DEC1_ENA_SHIFT, 0, NULL, 0),
718SND_SOC_DAPM_PGA("ISRC3DEC3", ARIZONA_ISRC_3_CTRL_3,
719 ARIZONA_ISRC3_DEC2_ENA_SHIFT, 0, NULL, 0),
720SND_SOC_DAPM_PGA("ISRC3DEC4", ARIZONA_ISRC_3_CTRL_3,
721 ARIZONA_ISRC3_DEC3_ENA_SHIFT, 0, NULL, 0),
722
563SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, 723SND_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),
603SND_SOC_DAPM_AIF_OUT("AIF2TX2", NULL, 0, 763SND_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),
765SND_SOC_DAPM_AIF_OUT("AIF2TX3", NULL, 0,
766 ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX3_ENA_SHIFT, 0),
767SND_SOC_DAPM_AIF_OUT("AIF2TX4", NULL, 0,
768 ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX4_ENA_SHIFT, 0),
769SND_SOC_DAPM_AIF_OUT("AIF2TX5", NULL, 0,
770 ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX5_ENA_SHIFT, 0),
771SND_SOC_DAPM_AIF_OUT("AIF2TX6", NULL, 0,
772 ARIZONA_AIF2_TX_ENABLES, ARIZONA_AIF2TX6_ENA_SHIFT, 0),
605 773
606SND_SOC_DAPM_AIF_IN("AIF2RX1", NULL, 0, 774SND_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),
608SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 0, 776SND_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),
778SND_SOC_DAPM_AIF_IN("AIF2RX3", NULL, 0,
779 ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX3_ENA_SHIFT, 0),
780SND_SOC_DAPM_AIF_IN("AIF2RX4", NULL, 0,
781 ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX4_ENA_SHIFT, 0),
782SND_SOC_DAPM_AIF_IN("AIF2RX5", NULL, 0,
783 ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX5_ENA_SHIFT, 0),
784SND_SOC_DAPM_AIF_IN("AIF2RX6", NULL, 0,
785 ARIZONA_AIF2_RX_ENABLES, ARIZONA_AIF2RX6_ENA_SHIFT, 0),
610 786
611SND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0, 787SND_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
745ARIZONA_MIXER_WIDGETS(AIF2TX1, "AIF2TX1"), 921ARIZONA_MIXER_WIDGETS(AIF2TX1, "AIF2TX1"),
746ARIZONA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"), 922ARIZONA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"),
923ARIZONA_MIXER_WIDGETS(AIF2TX3, "AIF2TX3"),
924ARIZONA_MIXER_WIDGETS(AIF2TX4, "AIF2TX4"),
925ARIZONA_MIXER_WIDGETS(AIF2TX5, "AIF2TX5"),
926ARIZONA_MIXER_WIDGETS(AIF2TX6, "AIF2TX6"),
747 927
748ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"), 928ARIZONA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"),
749ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"), 929ARIZONA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"),
@@ -762,6 +942,41 @@ ARIZONA_MUX_WIDGETS(ASRC1R, "ASRC1R"),
762ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"), 942ARIZONA_MUX_WIDGETS(ASRC2L, "ASRC2L"),
763ARIZONA_MUX_WIDGETS(ASRC2R, "ASRC2R"), 943ARIZONA_MUX_WIDGETS(ASRC2R, "ASRC2R"),
764 944
945ARIZONA_DSP_WIDGETS(DSP1, "DSP1"),
946ARIZONA_DSP_WIDGETS(DSP2, "DSP2"),
947ARIZONA_DSP_WIDGETS(DSP3, "DSP3"),
948ARIZONA_DSP_WIDGETS(DSP4, "DSP4"),
949
950ARIZONA_MUX_WIDGETS(ISRC1DEC1, "ISRC1DEC1"),
951ARIZONA_MUX_WIDGETS(ISRC1DEC2, "ISRC1DEC2"),
952ARIZONA_MUX_WIDGETS(ISRC1DEC3, "ISRC1DEC3"),
953ARIZONA_MUX_WIDGETS(ISRC1DEC4, "ISRC1DEC4"),
954
955ARIZONA_MUX_WIDGETS(ISRC1INT1, "ISRC1INT1"),
956ARIZONA_MUX_WIDGETS(ISRC1INT2, "ISRC1INT2"),
957ARIZONA_MUX_WIDGETS(ISRC1INT3, "ISRC1INT3"),
958ARIZONA_MUX_WIDGETS(ISRC1INT4, "ISRC1INT4"),
959
960ARIZONA_MUX_WIDGETS(ISRC2DEC1, "ISRC2DEC1"),
961ARIZONA_MUX_WIDGETS(ISRC2DEC2, "ISRC2DEC2"),
962ARIZONA_MUX_WIDGETS(ISRC2DEC3, "ISRC2DEC3"),
963ARIZONA_MUX_WIDGETS(ISRC2DEC4, "ISRC2DEC4"),
964
965ARIZONA_MUX_WIDGETS(ISRC2INT1, "ISRC2INT1"),
966ARIZONA_MUX_WIDGETS(ISRC2INT2, "ISRC2INT2"),
967ARIZONA_MUX_WIDGETS(ISRC2INT3, "ISRC2INT3"),
968ARIZONA_MUX_WIDGETS(ISRC2INT4, "ISRC2INT4"),
969
970ARIZONA_MUX_WIDGETS(ISRC3DEC1, "ISRC3DEC1"),
971ARIZONA_MUX_WIDGETS(ISRC3DEC2, "ISRC3DEC2"),
972ARIZONA_MUX_WIDGETS(ISRC3DEC3, "ISRC3DEC3"),
973ARIZONA_MUX_WIDGETS(ISRC3DEC4, "ISRC3DEC4"),
974
975ARIZONA_MUX_WIDGETS(ISRC3INT1, "ISRC3INT1"),
976ARIZONA_MUX_WIDGETS(ISRC3INT2, "ISRC3INT2"),
977ARIZONA_MUX_WIDGETS(ISRC3INT3, "ISRC3INT3"),
978ARIZONA_MUX_WIDGETS(ISRC3INT4, "ISRC3INT4"),
979
765SND_SOC_DAPM_OUTPUT("HPOUT1L"), 980SND_SOC_DAPM_OUTPUT("HPOUT1L"),
766SND_SOC_DAPM_OUTPUT("HPOUT1R"), 981SND_SOC_DAPM_OUTPUT("HPOUT1R"),
767SND_SOC_DAPM_OUTPUT("HPOUT2L"), 982SND_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
835static const struct snd_soc_dapm_route wm5110_dapm_routes[] = { 1102static 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