aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/codecs/wm5110.c178
1 files changed, 178 insertions, 0 deletions
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c
index e5f2804086a1..0e63d8ce533f 100644
--- a/sound/soc/codecs/wm5110.c
+++ b/sound/soc/codecs/wm5110.c
@@ -277,6 +277,10 @@ SOC_ENUM("LHPF2 Mode", arizona_lhpf2_mode),
277SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode), 277SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode),
278SOC_ENUM("LHPF4 Mode", arizona_lhpf4_mode), 278SOC_ENUM("LHPF4 Mode", arizona_lhpf4_mode),
279 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]),
283
280ARIZONA_MIXER_CONTROLS("DSP1L", ARIZONA_DSP1LMIX_INPUT_1_SOURCE), 284ARIZONA_MIXER_CONTROLS("DSP1L", ARIZONA_DSP1LMIX_INPUT_1_SOURCE),
281ARIZONA_MIXER_CONTROLS("DSP1R", ARIZONA_DSP1RMIX_INPUT_1_SOURCE), 285ARIZONA_MIXER_CONTROLS("DSP1R", ARIZONA_DSP1RMIX_INPUT_1_SOURCE),
282ARIZONA_MIXER_CONTROLS("DSP2L", ARIZONA_DSP2LMIX_INPUT_1_SOURCE), 286ARIZONA_MIXER_CONTROLS("DSP2L", ARIZONA_DSP2LMIX_INPUT_1_SOURCE),
@@ -501,6 +505,36 @@ ARIZONA_MUX_ENUMS(ASRC1R, ARIZONA_ASRC1RMIX_INPUT_1_SOURCE);
501ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE); 505ARIZONA_MUX_ENUMS(ASRC2L, ARIZONA_ASRC2LMIX_INPUT_1_SOURCE);
502ARIZONA_MUX_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE); 506ARIZONA_MUX_ENUMS(ASRC2R, ARIZONA_ASRC2RMIX_INPUT_1_SOURCE);
503 507
508ARIZONA_MUX_ENUMS(ISRC1INT1, ARIZONA_ISRC1INT1MIX_INPUT_1_SOURCE);
509ARIZONA_MUX_ENUMS(ISRC1INT2, ARIZONA_ISRC1INT2MIX_INPUT_1_SOURCE);
510ARIZONA_MUX_ENUMS(ISRC1INT3, ARIZONA_ISRC1INT3MIX_INPUT_1_SOURCE);
511ARIZONA_MUX_ENUMS(ISRC1INT4, ARIZONA_ISRC1INT4MIX_INPUT_1_SOURCE);
512
513ARIZONA_MUX_ENUMS(ISRC1DEC1, ARIZONA_ISRC1DEC1MIX_INPUT_1_SOURCE);
514ARIZONA_MUX_ENUMS(ISRC1DEC2, ARIZONA_ISRC1DEC2MIX_INPUT_1_SOURCE);
515ARIZONA_MUX_ENUMS(ISRC1DEC3, ARIZONA_ISRC1DEC3MIX_INPUT_1_SOURCE);
516ARIZONA_MUX_ENUMS(ISRC1DEC4, ARIZONA_ISRC1DEC4MIX_INPUT_1_SOURCE);
517
518ARIZONA_MUX_ENUMS(ISRC2INT1, ARIZONA_ISRC2INT1MIX_INPUT_1_SOURCE);
519ARIZONA_MUX_ENUMS(ISRC2INT2, ARIZONA_ISRC2INT2MIX_INPUT_1_SOURCE);
520ARIZONA_MUX_ENUMS(ISRC2INT3, ARIZONA_ISRC2INT3MIX_INPUT_1_SOURCE);
521ARIZONA_MUX_ENUMS(ISRC2INT4, ARIZONA_ISRC2INT4MIX_INPUT_1_SOURCE);
522
523ARIZONA_MUX_ENUMS(ISRC2DEC1, ARIZONA_ISRC2DEC1MIX_INPUT_1_SOURCE);
524ARIZONA_MUX_ENUMS(ISRC2DEC2, ARIZONA_ISRC2DEC2MIX_INPUT_1_SOURCE);
525ARIZONA_MUX_ENUMS(ISRC2DEC3, ARIZONA_ISRC2DEC3MIX_INPUT_1_SOURCE);
526ARIZONA_MUX_ENUMS(ISRC2DEC4, ARIZONA_ISRC2DEC4MIX_INPUT_1_SOURCE);
527
528ARIZONA_MUX_ENUMS(ISRC3INT1, ARIZONA_ISRC3INT1MIX_INPUT_1_SOURCE);
529ARIZONA_MUX_ENUMS(ISRC3INT2, ARIZONA_ISRC3INT2MIX_INPUT_1_SOURCE);
530ARIZONA_MUX_ENUMS(ISRC3INT3, ARIZONA_ISRC3INT3MIX_INPUT_1_SOURCE);
531ARIZONA_MUX_ENUMS(ISRC3INT4, ARIZONA_ISRC3INT4MIX_INPUT_1_SOURCE);
532
533ARIZONA_MUX_ENUMS(ISRC3DEC1, ARIZONA_ISRC3DEC1MIX_INPUT_1_SOURCE);
534ARIZONA_MUX_ENUMS(ISRC3DEC2, ARIZONA_ISRC3DEC2MIX_INPUT_1_SOURCE);
535ARIZONA_MUX_ENUMS(ISRC3DEC3, ARIZONA_ISRC3DEC3MIX_INPUT_1_SOURCE);
536ARIZONA_MUX_ENUMS(ISRC3DEC4, ARIZONA_ISRC3DEC4MIX_INPUT_1_SOURCE);
537
504static const char *wm5110_aec_loopback_texts[] = { 538static const char *wm5110_aec_loopback_texts[] = {
505 "HPOUT1L", "HPOUT1R", "HPOUT2L", "HPOUT2R", "HPOUT3L", "HPOUT3R", 539 "HPOUT1L", "HPOUT1R", "HPOUT2L", "HPOUT2R", "HPOUT3L", "HPOUT3R",
506 "SPKOUTL", "SPKOUTR", "SPKDAT1L", "SPKDAT1R", "SPKDAT2L", "SPKDAT2R", 540 "SPKOUTL", "SPKOUTR", "SPKDAT1L", "SPKDAT1R", "SPKDAT2L", "SPKDAT2R",
@@ -646,6 +680,60 @@ WM_ADSP2("DSP2", 1),
646WM_ADSP2("DSP3", 2), 680WM_ADSP2("DSP3", 2),
647WM_ADSP2("DSP4", 3), 681WM_ADSP2("DSP4", 3),
648 682
683SND_SOC_DAPM_PGA("ISRC1INT1", ARIZONA_ISRC_1_CTRL_3,
684 ARIZONA_ISRC1_INT0_ENA_SHIFT, 0, NULL, 0),
685SND_SOC_DAPM_PGA("ISRC1INT2", ARIZONA_ISRC_1_CTRL_3,
686 ARIZONA_ISRC1_INT1_ENA_SHIFT, 0, NULL, 0),
687SND_SOC_DAPM_PGA("ISRC1INT3", ARIZONA_ISRC_1_CTRL_3,
688 ARIZONA_ISRC1_INT2_ENA_SHIFT, 0, NULL, 0),
689SND_SOC_DAPM_PGA("ISRC1INT4", ARIZONA_ISRC_1_CTRL_3,
690 ARIZONA_ISRC1_INT3_ENA_SHIFT, 0, NULL, 0),
691
692SND_SOC_DAPM_PGA("ISRC1DEC1", ARIZONA_ISRC_1_CTRL_3,
693 ARIZONA_ISRC1_DEC0_ENA_SHIFT, 0, NULL, 0),
694SND_SOC_DAPM_PGA("ISRC1DEC2", ARIZONA_ISRC_1_CTRL_3,
695 ARIZONA_ISRC1_DEC1_ENA_SHIFT, 0, NULL, 0),
696SND_SOC_DAPM_PGA("ISRC1DEC3", ARIZONA_ISRC_1_CTRL_3,
697 ARIZONA_ISRC1_DEC2_ENA_SHIFT, 0, NULL, 0),
698SND_SOC_DAPM_PGA("ISRC1DEC4", ARIZONA_ISRC_1_CTRL_3,
699 ARIZONA_ISRC1_DEC3_ENA_SHIFT, 0, NULL, 0),
700
701SND_SOC_DAPM_PGA("ISRC2INT1", ARIZONA_ISRC_2_CTRL_3,
702 ARIZONA_ISRC2_INT0_ENA_SHIFT, 0, NULL, 0),
703SND_SOC_DAPM_PGA("ISRC2INT2", ARIZONA_ISRC_2_CTRL_3,
704 ARIZONA_ISRC2_INT1_ENA_SHIFT, 0, NULL, 0),
705SND_SOC_DAPM_PGA("ISRC2INT3", ARIZONA_ISRC_2_CTRL_3,
706 ARIZONA_ISRC2_INT2_ENA_SHIFT, 0, NULL, 0),
707SND_SOC_DAPM_PGA("ISRC2INT4", ARIZONA_ISRC_2_CTRL_3,
708 ARIZONA_ISRC2_INT3_ENA_SHIFT, 0, NULL, 0),
709
710SND_SOC_DAPM_PGA("ISRC2DEC1", ARIZONA_ISRC_2_CTRL_3,
711 ARIZONA_ISRC2_DEC0_ENA_SHIFT, 0, NULL, 0),
712SND_SOC_DAPM_PGA("ISRC2DEC2", ARIZONA_ISRC_2_CTRL_3,
713 ARIZONA_ISRC2_DEC1_ENA_SHIFT, 0, NULL, 0),
714SND_SOC_DAPM_PGA("ISRC2DEC3", ARIZONA_ISRC_2_CTRL_3,
715 ARIZONA_ISRC2_DEC2_ENA_SHIFT, 0, NULL, 0),
716SND_SOC_DAPM_PGA("ISRC2DEC4", ARIZONA_ISRC_2_CTRL_3,
717 ARIZONA_ISRC2_DEC3_ENA_SHIFT, 0, NULL, 0),
718
719SND_SOC_DAPM_PGA("ISRC3INT1", ARIZONA_ISRC_3_CTRL_3,
720 ARIZONA_ISRC3_INT0_ENA_SHIFT, 0, NULL, 0),
721SND_SOC_DAPM_PGA("ISRC3INT2", ARIZONA_ISRC_3_CTRL_3,
722 ARIZONA_ISRC3_INT1_ENA_SHIFT, 0, NULL, 0),
723SND_SOC_DAPM_PGA("ISRC3INT3", ARIZONA_ISRC_3_CTRL_3,
724 ARIZONA_ISRC3_INT2_ENA_SHIFT, 0, NULL, 0),
725SND_SOC_DAPM_PGA("ISRC3INT4", ARIZONA_ISRC_3_CTRL_3,
726 ARIZONA_ISRC3_INT3_ENA_SHIFT, 0, NULL, 0),
727
728SND_SOC_DAPM_PGA("ISRC3DEC1", ARIZONA_ISRC_3_CTRL_3,
729 ARIZONA_ISRC3_DEC0_ENA_SHIFT, 0, NULL, 0),
730SND_SOC_DAPM_PGA("ISRC3DEC2", ARIZONA_ISRC_3_CTRL_3,
731 ARIZONA_ISRC3_DEC1_ENA_SHIFT, 0, NULL, 0),
732SND_SOC_DAPM_PGA("ISRC3DEC3", ARIZONA_ISRC_3_CTRL_3,
733 ARIZONA_ISRC3_DEC2_ENA_SHIFT, 0, NULL, 0),
734SND_SOC_DAPM_PGA("ISRC3DEC4", ARIZONA_ISRC_3_CTRL_3,
735 ARIZONA_ISRC3_DEC3_ENA_SHIFT, 0, NULL, 0),
736
649SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1, 737SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1,
650 ARIZONA_AEC_LOOPBACK_ENA_SHIFT, 0, 738 ARIZONA_AEC_LOOPBACK_ENA_SHIFT, 0,
651 &wm5110_aec_loopback_mux), 739 &wm5110_aec_loopback_mux),
@@ -873,6 +961,36 @@ ARIZONA_DSP_WIDGETS(DSP2, "DSP2"),
873ARIZONA_DSP_WIDGETS(DSP3, "DSP3"), 961ARIZONA_DSP_WIDGETS(DSP3, "DSP3"),
874ARIZONA_DSP_WIDGETS(DSP4, "DSP4"), 962ARIZONA_DSP_WIDGETS(DSP4, "DSP4"),
875 963
964ARIZONA_MUX_WIDGETS(ISRC1DEC1, "ISRC1DEC1"),
965ARIZONA_MUX_WIDGETS(ISRC1DEC2, "ISRC1DEC2"),
966ARIZONA_MUX_WIDGETS(ISRC1DEC3, "ISRC1DEC3"),
967ARIZONA_MUX_WIDGETS(ISRC1DEC4, "ISRC1DEC4"),
968
969ARIZONA_MUX_WIDGETS(ISRC1INT1, "ISRC1INT1"),
970ARIZONA_MUX_WIDGETS(ISRC1INT2, "ISRC1INT2"),
971ARIZONA_MUX_WIDGETS(ISRC1INT3, "ISRC1INT3"),
972ARIZONA_MUX_WIDGETS(ISRC1INT4, "ISRC1INT4"),
973
974ARIZONA_MUX_WIDGETS(ISRC2DEC1, "ISRC2DEC1"),
975ARIZONA_MUX_WIDGETS(ISRC2DEC2, "ISRC2DEC2"),
976ARIZONA_MUX_WIDGETS(ISRC2DEC3, "ISRC2DEC3"),
977ARIZONA_MUX_WIDGETS(ISRC2DEC4, "ISRC2DEC4"),
978
979ARIZONA_MUX_WIDGETS(ISRC2INT1, "ISRC2INT1"),
980ARIZONA_MUX_WIDGETS(ISRC2INT2, "ISRC2INT2"),
981ARIZONA_MUX_WIDGETS(ISRC2INT3, "ISRC2INT3"),
982ARIZONA_MUX_WIDGETS(ISRC2INT4, "ISRC2INT4"),
983
984ARIZONA_MUX_WIDGETS(ISRC3DEC1, "ISRC3DEC1"),
985ARIZONA_MUX_WIDGETS(ISRC3DEC2, "ISRC3DEC2"),
986ARIZONA_MUX_WIDGETS(ISRC3DEC3, "ISRC3DEC3"),
987ARIZONA_MUX_WIDGETS(ISRC3DEC4, "ISRC3DEC4"),
988
989ARIZONA_MUX_WIDGETS(ISRC3INT1, "ISRC3INT1"),
990ARIZONA_MUX_WIDGETS(ISRC3INT2, "ISRC3INT2"),
991ARIZONA_MUX_WIDGETS(ISRC3INT3, "ISRC3INT3"),
992ARIZONA_MUX_WIDGETS(ISRC3INT4, "ISRC3INT4"),
993
876SND_SOC_DAPM_OUTPUT("HPOUT1L"), 994SND_SOC_DAPM_OUTPUT("HPOUT1L"),
877SND_SOC_DAPM_OUTPUT("HPOUT1R"), 995SND_SOC_DAPM_OUTPUT("HPOUT1R"),
878SND_SOC_DAPM_OUTPUT("HPOUT2L"), 996SND_SOC_DAPM_OUTPUT("HPOUT2L"),
@@ -946,6 +1064,30 @@ SND_SOC_DAPM_OUTPUT("MICSUPP"),
946 { name, "ASRC1R", "ASRC1R" }, \ 1064 { name, "ASRC1R", "ASRC1R" }, \
947 { name, "ASRC2L", "ASRC2L" }, \ 1065 { name, "ASRC2L", "ASRC2L" }, \
948 { name, "ASRC2R", "ASRC2R" }, \ 1066 { name, "ASRC2R", "ASRC2R" }, \
1067 { name, "ISRC1DEC1", "ISRC1DEC1" }, \
1068 { name, "ISRC1DEC2", "ISRC1DEC2" }, \
1069 { name, "ISRC1DEC3", "ISRC1DEC3" }, \
1070 { name, "ISRC1DEC4", "ISRC1DEC4" }, \
1071 { name, "ISRC1INT1", "ISRC1INT1" }, \
1072 { name, "ISRC1INT2", "ISRC1INT2" }, \
1073 { name, "ISRC1INT3", "ISRC1INT3" }, \
1074 { name, "ISRC1INT4", "ISRC1INT4" }, \
1075 { name, "ISRC2DEC1", "ISRC2DEC1" }, \
1076 { name, "ISRC2DEC2", "ISRC2DEC2" }, \
1077 { name, "ISRC2DEC3", "ISRC2DEC3" }, \
1078 { name, "ISRC2DEC4", "ISRC2DEC4" }, \
1079 { name, "ISRC2INT1", "ISRC2INT1" }, \
1080 { name, "ISRC2INT2", "ISRC2INT2" }, \
1081 { name, "ISRC2INT3", "ISRC2INT3" }, \
1082 { name, "ISRC2INT4", "ISRC2INT4" }, \
1083 { name, "ISRC3DEC1", "ISRC3DEC1" }, \
1084 { name, "ISRC3DEC2", "ISRC3DEC2" }, \
1085 { name, "ISRC3DEC3", "ISRC3DEC3" }, \
1086 { name, "ISRC3DEC4", "ISRC3DEC4" }, \
1087 { name, "ISRC3INT1", "ISRC3INT1" }, \
1088 { name, "ISRC3INT2", "ISRC3INT2" }, \
1089 { name, "ISRC3INT3", "ISRC3INT3" }, \
1090 { name, "ISRC3INT4", "ISRC3INT4" }, \
949 { name, "DSP1.1", "DSP1" }, \ 1091 { name, "DSP1.1", "DSP1" }, \
950 { name, "DSP1.2", "DSP1" }, \ 1092 { name, "DSP1.2", "DSP1" }, \
951 { name, "DSP1.3", "DSP1" }, \ 1093 { name, "DSP1.3", "DSP1" }, \
@@ -1180,6 +1322,36 @@ static const struct snd_soc_dapm_route wm5110_dapm_routes[] = {
1180 ARIZONA_DSP_ROUTES("DSP3"), 1322 ARIZONA_DSP_ROUTES("DSP3"),
1181 ARIZONA_DSP_ROUTES("DSP4"), 1323 ARIZONA_DSP_ROUTES("DSP4"),
1182 1324
1325 ARIZONA_MUX_ROUTES("ISRC1INT1", "ISRC1INT1"),
1326 ARIZONA_MUX_ROUTES("ISRC1INT2", "ISRC1INT2"),
1327 ARIZONA_MUX_ROUTES("ISRC1INT3", "ISRC1INT3"),
1328 ARIZONA_MUX_ROUTES("ISRC1INT4", "ISRC1INT4"),
1329
1330 ARIZONA_MUX_ROUTES("ISRC1DEC1", "ISRC1DEC1"),
1331 ARIZONA_MUX_ROUTES("ISRC1DEC2", "ISRC1DEC2"),
1332 ARIZONA_MUX_ROUTES("ISRC1DEC3", "ISRC1DEC3"),
1333 ARIZONA_MUX_ROUTES("ISRC1DEC4", "ISRC1DEC4"),
1334
1335 ARIZONA_MUX_ROUTES("ISRC2INT1", "ISRC2INT1"),
1336 ARIZONA_MUX_ROUTES("ISRC2INT2", "ISRC2INT2"),
1337 ARIZONA_MUX_ROUTES("ISRC2INT3", "ISRC2INT3"),
1338 ARIZONA_MUX_ROUTES("ISRC2INT4", "ISRC2INT4"),
1339
1340 ARIZONA_MUX_ROUTES("ISRC2DEC1", "ISRC2DEC1"),
1341 ARIZONA_MUX_ROUTES("ISRC2DEC2", "ISRC2DEC2"),
1342 ARIZONA_MUX_ROUTES("ISRC2DEC3", "ISRC2DEC3"),
1343 ARIZONA_MUX_ROUTES("ISRC2DEC4", "ISRC2DEC4"),
1344
1345 ARIZONA_MUX_ROUTES("ISRC3INT1", "ISRC3INT1"),
1346 ARIZONA_MUX_ROUTES("ISRC3INT2", "ISRC3INT2"),
1347 ARIZONA_MUX_ROUTES("ISRC3INT3", "ISRC3INT3"),
1348 ARIZONA_MUX_ROUTES("ISRC3INT4", "ISRC3INT4"),
1349
1350 ARIZONA_MUX_ROUTES("ISRC3DEC1", "ISRC3DEC1"),
1351 ARIZONA_MUX_ROUTES("ISRC3DEC2", "ISRC3DEC2"),
1352 ARIZONA_MUX_ROUTES("ISRC3DEC3", "ISRC3DEC3"),
1353 ARIZONA_MUX_ROUTES("ISRC3DEC4", "ISRC3DEC4"),
1354
1183 { "AEC Loopback", "HPOUT1L", "OUT1L" }, 1355 { "AEC Loopback", "HPOUT1L", "OUT1L" },
1184 { "AEC Loopback", "HPOUT1R", "OUT1R" }, 1356 { "AEC Loopback", "HPOUT1R", "OUT1R" },
1185 { "HPOUT1L", NULL, "OUT1L" }, 1357 { "HPOUT1L", NULL, "OUT1L" },
@@ -1482,6 +1654,12 @@ static int wm5110_probe(struct platform_device *pdev)
1482 ARIZONA_IRQ_FLL2_LOCK, ARIZONA_IRQ_FLL2_CLOCK_OK, 1654 ARIZONA_IRQ_FLL2_LOCK, ARIZONA_IRQ_FLL2_CLOCK_OK,
1483 &wm5110->fll[1]); 1655 &wm5110->fll[1]);
1484 1656
1657 /* SR2 fixed at 8kHz, SR3 fixed at 16kHz */
1658 regmap_update_bits(arizona->regmap, ARIZONA_SAMPLE_RATE_2,
1659 ARIZONA_SAMPLE_RATE_2_MASK, 0x11);
1660 regmap_update_bits(arizona->regmap, ARIZONA_SAMPLE_RATE_3,
1661 ARIZONA_SAMPLE_RATE_3_MASK, 0x12);
1662
1485 for (i = 0; i < ARRAY_SIZE(wm5110_dai); i++) 1663 for (i = 0; i < ARRAY_SIZE(wm5110_dai); i++)
1486 arizona_init_dai(&wm5110->core, i); 1664 arizona_init_dai(&wm5110->core, i);
1487 1665