aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/twl4030.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/codecs/twl4030.c')
-rw-r--r--sound/soc/codecs/twl4030.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
index 9d1078325c3d..1da46175519e 100644
--- a/sound/soc/codecs/twl4030.c
+++ b/sound/soc/codecs/twl4030.c
@@ -190,6 +190,19 @@ static void twl4030_init_chip(struct snd_soc_codec *codec)
190 190
191} 191}
192 192
193/* Earpiece */
194static const char *twl4030_earpiece_texts[] =
195 {"Off", "DACL1", "DACL2", "Invalid",
196 "DACR1"};
197
198static const struct soc_enum twl4030_earpiece_enum =
199 SOC_ENUM_SINGLE(TWL4030_REG_EAR_CTL, 1,
200 ARRAY_SIZE(twl4030_earpiece_texts),
201 twl4030_earpiece_texts);
202
203static const struct snd_kcontrol_new twl4030_dapm_earpiece_control =
204SOC_DAPM_ENUM("Route", twl4030_earpiece_enum);
205
193static int outmixer_event(struct snd_soc_dapm_widget *w, 206static int outmixer_event(struct snd_soc_dapm_widget *w,
194 struct snd_kcontrol *kcontrol, int event) 207 struct snd_kcontrol *kcontrol, int event)
195{ 208{
@@ -645,6 +658,7 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = {
645 658
646 SND_SOC_DAPM_OUTPUT("OUTL"), 659 SND_SOC_DAPM_OUTPUT("OUTL"),
647 SND_SOC_DAPM_OUTPUT("OUTR"), 660 SND_SOC_DAPM_OUTPUT("OUTR"),
661 SND_SOC_DAPM_OUTPUT("EARPIECE"),
648 662
649 /* DACs */ 663 /* DACs */
650 SND_SOC_DAPM_DAC("DACR1", "Right Front Playback", 664 SND_SOC_DAPM_DAC("DACR1", "Right Front Playback",
@@ -666,6 +680,12 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = {
666 SND_SOC_DAPM_PGA("ARXL2_APGA", TWL4030_REG_ARXL2_APGA_CTL, 680 SND_SOC_DAPM_PGA("ARXL2_APGA", TWL4030_REG_ARXL2_APGA_CTL,
667 0, 0, NULL, 0), 681 0, 0, NULL, 0),
668 682
683 /* Output MUX controls */
684 /* Earpiece */
685 SND_SOC_DAPM_MUX_E("Earpiece Mux", SND_SOC_NOPM, 0, 0,
686 &twl4030_dapm_earpiece_control, outmixer_event,
687 SND_SOC_DAPM_PRE_REG),
688
669 SND_SOC_DAPM_ADC("ADCL", "Left Capture", SND_SOC_NOPM, 0, 0), 689 SND_SOC_DAPM_ADC("ADCL", "Left Capture", SND_SOC_NOPM, 0, 0),
670 SND_SOC_DAPM_ADC("ADCR", "Right Capture", SND_SOC_NOPM, 0, 0), 690 SND_SOC_DAPM_ADC("ADCR", "Right Capture", SND_SOC_NOPM, 0, 0),
671}; 691};
@@ -676,9 +696,16 @@ static const struct snd_soc_dapm_route intercon[] = {
676 {"ARXL2_APGA", NULL, "DACL2"}, 696 {"ARXL2_APGA", NULL, "DACL2"},
677 {"ARXR2_APGA", NULL, "DACR2"}, 697 {"ARXR2_APGA", NULL, "DACR2"},
678 698
699 /* Internal playback routings */
700 /* Earpiece */
701 {"Earpiece Mux", "DACL1", "ARXL1_APGA"},
702 {"Earpiece Mux", "DACL2", "ARXL2_APGA"},
703 {"Earpiece Mux", "DACR1", "ARXR1_APGA"},
704
679 /* outputs */ 705 /* outputs */
680 {"OUTL", NULL, "ARXL2_APGA"}, 706 {"OUTL", NULL, "ARXL2_APGA"},
681 {"OUTR", NULL, "ARXR2_APGA"}, 707 {"OUTR", NULL, "ARXR2_APGA"},
708 {"EARPIECE", NULL, "Earpiece Mux"},
682 709
683 /* inputs */ 710 /* inputs */
684 {"ADCL", NULL, "INL"}, 711 {"ADCL", NULL, "INL"},