aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/codecs/Kconfig2
-rw-r--r--sound/soc/codecs/wm5102.c38
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
149config SND_SOC_WM_ADSP 149config 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
154config SND_SOC_AB8500_CODEC 156config 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
35struct wm5102_priv { 36struct 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);
42static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0); 43static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);
43static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0); 44static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0);
44 45
46static 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
45static const struct snd_kcontrol_new wm5102_snd_controls[] = { 53static const struct snd_kcontrol_new wm5102_snd_controls[] = {
46SOC_SINGLE("IN1 High Performance Switch", ARIZONA_IN1L_CONTROL, 54SOC_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),
137ARIZONA_MIXER_CONTROLS("LHPF3", ARIZONA_HPLP3MIX_INPUT_1_SOURCE), 145ARIZONA_MIXER_CONTROLS("LHPF3", ARIZONA_HPLP3MIX_INPUT_1_SOURCE),
138ARIZONA_MIXER_CONTROLS("LHPF4", ARIZONA_HPLP4MIX_INPUT_1_SOURCE), 146ARIZONA_MIXER_CONTROLS("LHPF4", ARIZONA_HPLP4MIX_INPUT_1_SOURCE),
139 147
148ARIZONA_MIXER_CONTROLS("DSP1L", ARIZONA_DSP1LMIX_INPUT_1_SOURCE),
149ARIZONA_MIXER_CONTROLS("DSP1R", ARIZONA_DSP1RMIX_INPUT_1_SOURCE),
150
140SOC_ENUM("LHPF1 Mode", arizona_lhpf1_mode), 151SOC_ENUM("LHPF1 Mode", arizona_lhpf1_mode),
141SOC_ENUM("LHPF2 Mode", arizona_lhpf2_mode), 152SOC_ENUM("LHPF2 Mode", arizona_lhpf2_mode),
142SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode), 153SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode),
@@ -274,6 +285,10 @@ ARIZONA_MIXER_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE);
274ARIZONA_MIXER_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); 285ARIZONA_MIXER_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE);
275ARIZONA_MIXER_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE); 286ARIZONA_MIXER_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE);
276 287
288ARIZONA_MIXER_ENUMS(DSP1L, ARIZONA_DSP1LMIX_INPUT_1_SOURCE);
289ARIZONA_MIXER_ENUMS(DSP1R, ARIZONA_DSP1RMIX_INPUT_1_SOURCE);
290
291ARIZONA_DSP_AUX_ENUMS(DSP1, ARIZONA_DSP1AUX1MIX_INPUT_1_SOURCE);
277 292
278static const char *wm5102_aec_loopback_texts[] = { 293static 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,
446SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0, 461SND_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
464WM_ADSP2("DSP1", 0),
465
449SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, 466SND_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"),
526ARIZONA_MIXER_WIDGETS(ASRC2L, "ASRC2L"), 543ARIZONA_MIXER_WIDGETS(ASRC2L, "ASRC2L"),
527ARIZONA_MIXER_WIDGETS(ASRC2R, "ASRC2R"), 544ARIZONA_MIXER_WIDGETS(ASRC2R, "ASRC2R"),
528 545
546WM_ADSP2("DSP1", 0),
547
529SND_SOC_DAPM_OUTPUT("HPOUT1L"), 548SND_SOC_DAPM_OUTPUT("HPOUT1L"),
530SND_SOC_DAPM_OUTPUT("HPOUT1R"), 549SND_SOC_DAPM_OUTPUT("HPOUT1R"),
531SND_SOC_DAPM_OUTPUT("HPOUT2L"), 550SND_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
582static const struct snd_soc_dapm_route wm5102_dapm_routes[] = { 607static 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