diff options
-rw-r--r-- | sound/soc/codecs/Kconfig | 2 | ||||
-rw-r--r-- | sound/soc/codecs/wm5102.c | 38 |
2 files changed, 39 insertions, 1 deletions
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index f866e18e7876..80799639814e 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig | |||
@@ -148,7 +148,9 @@ config SND_SOC_WM_HUBS | |||
148 | 148 | ||
149 | config SND_SOC_WM_ADSP | 149 | config SND_SOC_WM_ADSP |
150 | tristate | 150 | tristate |
151 | default y if SND_SOC_WM5102=y | ||
151 | default y if SND_SOC_WM2200=y | 152 | default y if SND_SOC_WM2200=y |
153 | default m if SND_SOC_WM5102=m | ||
152 | default m if SND_SOC_WM2200=m | 154 | default m if SND_SOC_WM2200=m |
153 | 155 | ||
154 | config SND_SOC_AB8500_CODEC | 156 | config SND_SOC_AB8500_CODEC |
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c index 8714d6280dca..f27527b0d61f 100644 --- a/sound/soc/codecs/wm5102.c +++ b/sound/soc/codecs/wm5102.c | |||
@@ -31,6 +31,7 @@ | |||
31 | 31 | ||
32 | #include "arizona.h" | 32 | #include "arizona.h" |
33 | #include "wm5102.h" | 33 | #include "wm5102.h" |
34 | #include "wm_adsp.h" | ||
34 | 35 | ||
35 | struct wm5102_priv { | 36 | struct wm5102_priv { |
36 | struct arizona_priv core; | 37 | struct arizona_priv core; |
@@ -42,6 +43,13 @@ static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0); | |||
42 | static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0); | 43 | static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0); |
43 | static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0); | 44 | static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0); |
44 | 45 | ||
46 | static const struct wm_adsp_region wm5102_dsp1_regions[] = { | ||
47 | { .type = WMFW_ADSP2_PM, .base = 0x100000 }, | ||
48 | { .type = WMFW_ADSP2_ZM, .base = 0x180000 }, | ||
49 | { .type = WMFW_ADSP2_XM, .base = 0x190000 }, | ||
50 | { .type = WMFW_ADSP2_YM, .base = 0x1a0000 }, | ||
51 | }; | ||
52 | |||
45 | static const struct snd_kcontrol_new wm5102_snd_controls[] = { | 53 | static const struct snd_kcontrol_new wm5102_snd_controls[] = { |
46 | SOC_SINGLE("IN1 High Performance Switch", ARIZONA_IN1L_CONTROL, | 54 | SOC_SINGLE("IN1 High Performance Switch", ARIZONA_IN1L_CONTROL, |
47 | ARIZONA_IN1_OSR_SHIFT, 1, 0), | 55 | ARIZONA_IN1_OSR_SHIFT, 1, 0), |
@@ -137,6 +145,9 @@ ARIZONA_MIXER_CONTROLS("LHPF2", ARIZONA_HPLP2MIX_INPUT_1_SOURCE), | |||
137 | ARIZONA_MIXER_CONTROLS("LHPF3", ARIZONA_HPLP3MIX_INPUT_1_SOURCE), | 145 | ARIZONA_MIXER_CONTROLS("LHPF3", ARIZONA_HPLP3MIX_INPUT_1_SOURCE), |
138 | ARIZONA_MIXER_CONTROLS("LHPF4", ARIZONA_HPLP4MIX_INPUT_1_SOURCE), | 146 | ARIZONA_MIXER_CONTROLS("LHPF4", ARIZONA_HPLP4MIX_INPUT_1_SOURCE), |
139 | 147 | ||
148 | ARIZONA_MIXER_CONTROLS("DSP1L", ARIZONA_DSP1LMIX_INPUT_1_SOURCE), | ||
149 | ARIZONA_MIXER_CONTROLS("DSP1R", ARIZONA_DSP1RMIX_INPUT_1_SOURCE), | ||
150 | |||
140 | SOC_ENUM("LHPF1 Mode", arizona_lhpf1_mode), | 151 | SOC_ENUM("LHPF1 Mode", arizona_lhpf1_mode), |
141 | SOC_ENUM("LHPF2 Mode", arizona_lhpf2_mode), | 152 | SOC_ENUM("LHPF2 Mode", arizona_lhpf2_mode), |
142 | SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode), | 153 | SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode), |
@@ -274,6 +285,10 @@ ARIZONA_MIXER_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE); | |||
274 | ARIZONA_MIXER_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); | 285 | ARIZONA_MIXER_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); |
275 | ARIZONA_MIXER_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE); | 286 | ARIZONA_MIXER_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE); |
276 | 287 | ||
288 | ARIZONA_MIXER_ENUMS(DSP1L, ARIZONA_DSP1LMIX_INPUT_1_SOURCE); | ||
289 | ARIZONA_MIXER_ENUMS(DSP1R, ARIZONA_DSP1RMIX_INPUT_1_SOURCE); | ||
290 | |||
291 | ARIZONA_DSP_AUX_ENUMS(DSP1, ARIZONA_DSP1AUX1MIX_INPUT_1_SOURCE); | ||
277 | 292 | ||
278 | static const char *wm5102_aec_loopback_texts[] = { | 293 | static const char *wm5102_aec_loopback_texts[] = { |
279 | "HPOUT1L", "HPOUT1R", "HPOUT2L", "HPOUT2R", "EPOUT", | 294 | "HPOUT1L", "HPOUT1R", "HPOUT2L", "HPOUT2R", "EPOUT", |
@@ -446,6 +461,8 @@ SND_SOC_DAPM_AIF_IN("AIF3RX1", NULL, 0, | |||
446 | SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0, | 461 | SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0, |
447 | ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX2_ENA_SHIFT, 0), | 462 | ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX2_ENA_SHIFT, 0), |
448 | 463 | ||
464 | WM_ADSP2("DSP1", 0), | ||
465 | |||
449 | SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, | 466 | SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, |
450 | ARIZONA_AEC_LOOPBACK_ENA, 0, &wm5102_aec_loopback_mux), | 467 | ARIZONA_AEC_LOOPBACK_ENA, 0, &wm5102_aec_loopback_mux), |
451 | 468 | ||
@@ -526,6 +543,8 @@ ARIZONA_MIXER_WIDGETS(ASRC1R, "ASRC1R"), | |||
526 | ARIZONA_MIXER_WIDGETS(ASRC2L, "ASRC2L"), | 543 | ARIZONA_MIXER_WIDGETS(ASRC2L, "ASRC2L"), |
527 | ARIZONA_MIXER_WIDGETS(ASRC2R, "ASRC2R"), | 544 | ARIZONA_MIXER_WIDGETS(ASRC2R, "ASRC2R"), |
528 | 545 | ||
546 | WM_ADSP2("DSP1", 0), | ||
547 | |||
529 | SND_SOC_DAPM_OUTPUT("HPOUT1L"), | 548 | SND_SOC_DAPM_OUTPUT("HPOUT1L"), |
530 | SND_SOC_DAPM_OUTPUT("HPOUT1R"), | 549 | SND_SOC_DAPM_OUTPUT("HPOUT1R"), |
531 | SND_SOC_DAPM_OUTPUT("HPOUT2L"), | 550 | SND_SOC_DAPM_OUTPUT("HPOUT2L"), |
@@ -577,7 +596,13 @@ SND_SOC_DAPM_OUTPUT("SPKDAT1R"), | |||
577 | { name, "ASRC1L", "ASRC1L" }, \ | 596 | { name, "ASRC1L", "ASRC1L" }, \ |
578 | { name, "ASRC1R", "ASRC1R" }, \ | 597 | { name, "ASRC1R", "ASRC1R" }, \ |
579 | { name, "ASRC2L", "ASRC2L" }, \ | 598 | { name, "ASRC2L", "ASRC2L" }, \ |
580 | { name, "ASRC2R", "ASRC2R" } | 599 | { name, "ASRC2R", "ASRC2R" }, \ |
600 | { name, "DSP1.1", "DSP1" }, \ | ||
601 | { name, "DSP1.2", "DSP1" }, \ | ||
602 | { name, "DSP1.3", "DSP1" }, \ | ||
603 | { name, "DSP1.4", "DSP1" }, \ | ||
604 | { name, "DSP1.5", "DSP1" }, \ | ||
605 | { name, "DSP1.6", "DSP1" } | ||
581 | 606 | ||
582 | static const struct snd_soc_dapm_route wm5102_dapm_routes[] = { | 607 | static const struct snd_soc_dapm_route wm5102_dapm_routes[] = { |
583 | { "AIF2 Capture", NULL, "DBVDD2" }, | 608 | { "AIF2 Capture", NULL, "DBVDD2" }, |
@@ -710,6 +735,8 @@ static const struct snd_soc_dapm_route wm5102_dapm_routes[] = { | |||
710 | ARIZONA_MIXER_ROUTES("ASRC2L", "ASRC2L"), | 735 | ARIZONA_MIXER_ROUTES("ASRC2L", "ASRC2L"), |
711 | ARIZONA_MIXER_ROUTES("ASRC2R", "ASRC2R"), | 736 | ARIZONA_MIXER_ROUTES("ASRC2R", "ASRC2R"), |
712 | 737 | ||
738 | ARIZONA_DSP_ROUTES("DSP1"), | ||
739 | |||
713 | { "AEC Loopback", "HPOUT1L", "OUT1L" }, | 740 | { "AEC Loopback", "HPOUT1L", "OUT1L" }, |
714 | { "AEC Loopback", "HPOUT1R", "OUT1R" }, | 741 | { "AEC Loopback", "HPOUT1R", "OUT1R" }, |
715 | { "HPOUT1L", NULL, "OUT1L" }, | 742 | { "HPOUT1L", NULL, "OUT1L" }, |
@@ -884,6 +911,15 @@ static int __devinit wm5102_probe(struct platform_device *pdev) | |||
884 | 911 | ||
885 | wm5102->core.arizona = arizona; | 912 | wm5102->core.arizona = arizona; |
886 | 913 | ||
914 | wm5102->core.adsp[0].part = "wm5102"; | ||
915 | wm5102->core.adsp[0].num = 1; | ||
916 | wm5102->core.adsp[0].type = WMFW_ADSP2; | ||
917 | wm5102->core.adsp[0].base = ARIZONA_DSP1_CONTROL_1; | ||
918 | wm5102->core.adsp[0].dev = arizona->dev; | ||
919 | wm5102->core.adsp[0].regmap = arizona->regmap; | ||
920 | wm5102->core.adsp[0].mem = wm5102_dsp1_regions; | ||
921 | wm5102->core.adsp[0].num_mems = ARRAY_SIZE(wm5102_dsp1_regions); | ||
922 | |||
887 | for (i = 0; i < ARRAY_SIZE(wm5102->fll); i++) | 923 | for (i = 0; i < ARRAY_SIZE(wm5102->fll); i++) |
888 | wm5102->fll[i].vco_mult = 1; | 924 | wm5102->fll[i].vco_mult = 1; |
889 | 925 | ||