diff options
Diffstat (limited to 'sound/soc/codecs/wm5102.c')
-rw-r--r-- | sound/soc/codecs/wm5102.c | 52 |
1 files changed, 45 insertions, 7 deletions
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c index e33d327396ad..1722b586bdba 100644 --- a/sound/soc/codecs/wm5102.c +++ b/sound/soc/codecs/wm5102.c | |||
@@ -274,18 +274,43 @@ ARIZONA_MIXER_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE); | |||
274 | ARIZONA_MIXER_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); | 274 | ARIZONA_MIXER_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); |
275 | ARIZONA_MIXER_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE); | 275 | ARIZONA_MIXER_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE); |
276 | 276 | ||
277 | |||
278 | static const char *wm5102_aec_loopback_texts[] = { | ||
279 | "HPOUT1L", "HPOUT1R", "HPOUT2L", "HPOUT2R", "EPOUT", | ||
280 | "SPKOUTL", "SPKOUTR", "SPKDAT1L", "SPKDAT1R", | ||
281 | }; | ||
282 | |||
283 | static const unsigned int wm5102_aec_loopback_values[] = { | ||
284 | 0, 1, 2, 3, 4, 6, 7, 8, 9, | ||
285 | }; | ||
286 | |||
287 | static const struct soc_enum wm5102_aec_loopback = | ||
288 | SOC_VALUE_ENUM_SINGLE(ARIZONA_DAC_AEC_CONTROL_1, | ||
289 | ARIZONA_AEC_LOOPBACK_SRC_SHIFT, | ||
290 | ARIZONA_AEC_LOOPBACK_SRC_MASK, | ||
291 | ARRAY_SIZE(wm5102_aec_loopback_texts), | ||
292 | wm5102_aec_loopback_texts, | ||
293 | wm5102_aec_loopback_values); | ||
294 | |||
295 | static const struct snd_kcontrol_new wm5102_aec_loopback_mux = | ||
296 | SOC_DAPM_VALUE_ENUM("AEC Loopback", wm5102_aec_loopback); | ||
297 | |||
277 | static const struct snd_soc_dapm_widget wm5102_dapm_widgets[] = { | 298 | static const struct snd_soc_dapm_widget wm5102_dapm_widgets[] = { |
278 | SND_SOC_DAPM_SUPPLY("SYSCLK", ARIZONA_SYSTEM_CLOCK_1, ARIZONA_SYSCLK_ENA_SHIFT, | 299 | SND_SOC_DAPM_SUPPLY("SYSCLK", ARIZONA_SYSTEM_CLOCK_1, ARIZONA_SYSCLK_ENA_SHIFT, |
279 | 0, NULL, 0), | 300 | 0, NULL, 0), |
280 | SND_SOC_DAPM_SUPPLY("ASYNCCLK", ARIZONA_ASYNC_CLOCK_1, | 301 | SND_SOC_DAPM_SUPPLY("ASYNCCLK", ARIZONA_ASYNC_CLOCK_1, |
281 | ARIZONA_ASYNC_CLK_ENA_SHIFT, 0, NULL, 0), | 302 | ARIZONA_ASYNC_CLK_ENA_SHIFT, 0, NULL, 0), |
282 | 303 | SND_SOC_DAPM_SUPPLY("OPCLK", ARIZONA_OUTPUT_SYSTEM_CLOCK, | |
283 | SND_SOC_DAPM_REGULATOR_SUPPLY("DBVDD2", 0), | 304 | ARIZONA_OPCLK_ENA_SHIFT, 0, NULL, 0), |
284 | SND_SOC_DAPM_REGULATOR_SUPPLY("DBVDD3", 0), | 305 | SND_SOC_DAPM_SUPPLY("ASYNCOPCLK", ARIZONA_OUTPUT_ASYNC_CLOCK, |
285 | SND_SOC_DAPM_REGULATOR_SUPPLY("CPVDD", 20), | 306 | ARIZONA_OPCLK_ASYNC_ENA_SHIFT, 0, NULL, 0), |
286 | SND_SOC_DAPM_REGULATOR_SUPPLY("MICVDD", 0), | 307 | |
287 | SND_SOC_DAPM_REGULATOR_SUPPLY("SPKVDDL", 0), | 308 | SND_SOC_DAPM_REGULATOR_SUPPLY("DBVDD2", 0, 0), |
288 | SND_SOC_DAPM_REGULATOR_SUPPLY("SPKVDDR", 0), | 309 | SND_SOC_DAPM_REGULATOR_SUPPLY("DBVDD3", 0, 0), |
310 | SND_SOC_DAPM_REGULATOR_SUPPLY("CPVDD", 20, 0), | ||
311 | SND_SOC_DAPM_REGULATOR_SUPPLY("MICVDD", 0, SND_SOC_DAPM_REGULATOR_BYPASS), | ||
312 | SND_SOC_DAPM_REGULATOR_SUPPLY("SPKVDDL", 0, 0), | ||
313 | SND_SOC_DAPM_REGULATOR_SUPPLY("SPKVDDR", 0, 0), | ||
289 | 314 | ||
290 | SND_SOC_DAPM_SIGGEN("TONE"), | 315 | SND_SOC_DAPM_SIGGEN("TONE"), |
291 | SND_SOC_DAPM_SIGGEN("NOISE"), | 316 | SND_SOC_DAPM_SIGGEN("NOISE"), |
@@ -421,6 +446,9 @@ SND_SOC_DAPM_AIF_IN("AIF3RX1", NULL, 0, | |||
421 | SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0, | 446 | SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0, |
422 | ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX2_ENA_SHIFT, 0), | 447 | ARIZONA_AIF3_RX_ENABLES, ARIZONA_AIF3RX2_ENA_SHIFT, 0), |
423 | 448 | ||
449 | SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, | ||
450 | ARIZONA_AEC_LOOPBACK_ENA, 0, &wm5102_aec_loopback_mux), | ||
451 | |||
424 | SND_SOC_DAPM_PGA_E("OUT1L", ARIZONA_OUTPUT_ENABLES_1, | 452 | SND_SOC_DAPM_PGA_E("OUT1L", ARIZONA_OUTPUT_ENABLES_1, |
425 | ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, | 453 | ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_out_ev, |
426 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), | 454 | SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU), |
@@ -516,6 +544,7 @@ SND_SOC_DAPM_OUTPUT("SPKDAT1R"), | |||
516 | { name, "Noise Generator", "Noise Generator" }, \ | 544 | { name, "Noise Generator", "Noise Generator" }, \ |
517 | { name, "Tone Generator 1", "Tone Generator 1" }, \ | 545 | { name, "Tone Generator 1", "Tone Generator 1" }, \ |
518 | { name, "Tone Generator 2", "Tone Generator 2" }, \ | 546 | { name, "Tone Generator 2", "Tone Generator 2" }, \ |
547 | { name, "AEC", "AEC Loopback" }, \ | ||
519 | { name, "IN1L", "IN1L PGA" }, \ | 548 | { name, "IN1L", "IN1L PGA" }, \ |
520 | { name, "IN1R", "IN1R PGA" }, \ | 549 | { name, "IN1R", "IN1R PGA" }, \ |
521 | { name, "IN2L", "IN2L PGA" }, \ | 550 | { name, "IN2L", "IN2L PGA" }, \ |
@@ -681,21 +710,30 @@ static const struct snd_soc_dapm_route wm5102_dapm_routes[] = { | |||
681 | ARIZONA_MIXER_ROUTES("ASRC2L", "ASRC2L"), | 710 | ARIZONA_MIXER_ROUTES("ASRC2L", "ASRC2L"), |
682 | ARIZONA_MIXER_ROUTES("ASRC2R", "ASRC2R"), | 711 | ARIZONA_MIXER_ROUTES("ASRC2R", "ASRC2R"), |
683 | 712 | ||
713 | { "AEC Loopback", "HPOUT1L", "OUT1L" }, | ||
714 | { "AEC Loopback", "HPOUT1R", "OUT1R" }, | ||
684 | { "HPOUT1L", NULL, "OUT1L" }, | 715 | { "HPOUT1L", NULL, "OUT1L" }, |
685 | { "HPOUT1R", NULL, "OUT1R" }, | 716 | { "HPOUT1R", NULL, "OUT1R" }, |
686 | 717 | ||
718 | { "AEC Loopback", "HPOUT2L", "OUT2L" }, | ||
719 | { "AEC Loopback", "HPOUT2R", "OUT2R" }, | ||
687 | { "HPOUT2L", NULL, "OUT2L" }, | 720 | { "HPOUT2L", NULL, "OUT2L" }, |
688 | { "HPOUT2R", NULL, "OUT2R" }, | 721 | { "HPOUT2R", NULL, "OUT2R" }, |
689 | 722 | ||
723 | { "AEC Loopback", "EPOUT", "OUT3L" }, | ||
690 | { "EPOUTN", NULL, "OUT3L" }, | 724 | { "EPOUTN", NULL, "OUT3L" }, |
691 | { "EPOUTP", NULL, "OUT3L" }, | 725 | { "EPOUTP", NULL, "OUT3L" }, |
692 | 726 | ||
727 | { "AEC Loopback", "SPKOUTL", "OUT4L" }, | ||
693 | { "SPKOUTLN", NULL, "OUT4L" }, | 728 | { "SPKOUTLN", NULL, "OUT4L" }, |
694 | { "SPKOUTLP", NULL, "OUT4L" }, | 729 | { "SPKOUTLP", NULL, "OUT4L" }, |
695 | 730 | ||
731 | { "AEC Loopback", "SPKOUTR", "OUT4R" }, | ||
696 | { "SPKOUTRN", NULL, "OUT4R" }, | 732 | { "SPKOUTRN", NULL, "OUT4R" }, |
697 | { "SPKOUTRP", NULL, "OUT4R" }, | 733 | { "SPKOUTRP", NULL, "OUT4R" }, |
698 | 734 | ||
735 | { "AEC Loopback", "SPKDAT1L", "OUT5L" }, | ||
736 | { "AEC Loopback", "SPKDAT1R", "OUT5R" }, | ||
699 | { "SPKDAT1L", NULL, "OUT5L" }, | 737 | { "SPKDAT1L", NULL, "OUT5L" }, |
700 | { "SPKDAT1R", NULL, "OUT5R" }, | 738 | { "SPKDAT1R", NULL, "OUT5R" }, |
701 | }; | 739 | }; |