diff options
-rw-r--r-- | sound/soc/codecs/twl4030.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c index 08c33e9b96ce..d0612a4ca456 100644 --- a/sound/soc/codecs/twl4030.c +++ b/sound/soc/codecs/twl4030.c | |||
@@ -277,6 +277,30 @@ static const struct soc_enum twl4030_carkitr_enum = | |||
277 | static const struct snd_kcontrol_new twl4030_dapm_carkitr_control = | 277 | static const struct snd_kcontrol_new twl4030_dapm_carkitr_control = |
278 | SOC_DAPM_ENUM("Route", twl4030_carkitr_enum); | 278 | SOC_DAPM_ENUM("Route", twl4030_carkitr_enum); |
279 | 279 | ||
280 | /* Handsfree Left */ | ||
281 | static const char *twl4030_handsfreel_texts[] = | ||
282 | {"Voice", "DACL1", "DACL2", "DACR2"}; | ||
283 | |||
284 | static const struct soc_enum twl4030_handsfreel_enum = | ||
285 | SOC_ENUM_SINGLE(TWL4030_REG_HFL_CTL, 0, | ||
286 | ARRAY_SIZE(twl4030_handsfreel_texts), | ||
287 | twl4030_handsfreel_texts); | ||
288 | |||
289 | static const struct snd_kcontrol_new twl4030_dapm_handsfreel_control = | ||
290 | SOC_DAPM_ENUM("Route", twl4030_handsfreel_enum); | ||
291 | |||
292 | /* Handsfree Right */ | ||
293 | static const char *twl4030_handsfreer_texts[] = | ||
294 | {"Voice", "DACR1", "DACR2", "DACL2"}; | ||
295 | |||
296 | static const struct soc_enum twl4030_handsfreer_enum = | ||
297 | SOC_ENUM_SINGLE(TWL4030_REG_HFR_CTL, 0, | ||
298 | ARRAY_SIZE(twl4030_handsfreer_texts), | ||
299 | twl4030_handsfreer_texts); | ||
300 | |||
301 | static const struct snd_kcontrol_new twl4030_dapm_handsfreer_control = | ||
302 | SOC_DAPM_ENUM("Route", twl4030_handsfreer_enum); | ||
303 | |||
280 | static int outmixer_event(struct snd_soc_dapm_widget *w, | 304 | static int outmixer_event(struct snd_soc_dapm_widget *w, |
281 | struct snd_kcontrol *kcontrol, int event) | 305 | struct snd_kcontrol *kcontrol, int event) |
282 | { | 306 | { |
@@ -737,6 +761,8 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { | |||
737 | SND_SOC_DAPM_OUTPUT("PREDRIVER"), | 761 | SND_SOC_DAPM_OUTPUT("PREDRIVER"), |
738 | SND_SOC_DAPM_OUTPUT("HSOL"), | 762 | SND_SOC_DAPM_OUTPUT("HSOL"), |
739 | SND_SOC_DAPM_OUTPUT("HSOR"), | 763 | SND_SOC_DAPM_OUTPUT("HSOR"), |
764 | SND_SOC_DAPM_OUTPUT("HFL"), | ||
765 | SND_SOC_DAPM_OUTPUT("HFR"), | ||
740 | 766 | ||
741 | /* DACs */ | 767 | /* DACs */ |
742 | SND_SOC_DAPM_DAC("DACR1", "Right Front Playback", | 768 | SND_SOC_DAPM_DAC("DACR1", "Right Front Playback", |
@@ -780,6 +806,11 @@ static const struct snd_soc_dapm_widget twl4030_dapm_widgets[] = { | |||
780 | &twl4030_dapm_carkitl_control), | 806 | &twl4030_dapm_carkitl_control), |
781 | SND_SOC_DAPM_MUX("CarkitR Mux", SND_SOC_NOPM, 0, 0, | 807 | SND_SOC_DAPM_MUX("CarkitR Mux", SND_SOC_NOPM, 0, 0, |
782 | &twl4030_dapm_carkitr_control), | 808 | &twl4030_dapm_carkitr_control), |
809 | /* HandsfreeL/R */ | ||
810 | SND_SOC_DAPM_MUX("HandsfreeL Mux", TWL4030_REG_HFL_CTL, 5, 0, | ||
811 | &twl4030_dapm_handsfreel_control), | ||
812 | SND_SOC_DAPM_MUX("HandsfreeR Mux", TWL4030_REG_HFR_CTL, 5, 0, | ||
813 | &twl4030_dapm_handsfreer_control), | ||
783 | 814 | ||
784 | SND_SOC_DAPM_ADC("ADCL", "Left Capture", SND_SOC_NOPM, 0, 0), | 815 | SND_SOC_DAPM_ADC("ADCL", "Left Capture", SND_SOC_NOPM, 0, 0), |
785 | SND_SOC_DAPM_ADC("ADCR", "Right Capture", SND_SOC_NOPM, 0, 0), | 816 | SND_SOC_DAPM_ADC("ADCR", "Right Capture", SND_SOC_NOPM, 0, 0), |
@@ -816,6 +847,14 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
816 | /* CarkitR */ | 847 | /* CarkitR */ |
817 | {"CarkitR Mux", "DACR1", "ARXR1_APGA"}, | 848 | {"CarkitR Mux", "DACR1", "ARXR1_APGA"}, |
818 | {"CarkitR Mux", "DACR2", "ARXR2_APGA"}, | 849 | {"CarkitR Mux", "DACR2", "ARXR2_APGA"}, |
850 | /* HandsfreeL */ | ||
851 | {"HandsfreeL Mux", "DACL1", "ARXL1_APGA"}, | ||
852 | {"HandsfreeL Mux", "DACL2", "ARXL2_APGA"}, | ||
853 | {"HandsfreeL Mux", "DACR2", "ARXR2_APGA"}, | ||
854 | /* HandsfreeR */ | ||
855 | {"HandsfreeR Mux", "DACR1", "ARXR1_APGA"}, | ||
856 | {"HandsfreeR Mux", "DACR2", "ARXR2_APGA"}, | ||
857 | {"HandsfreeR Mux", "DACL2", "ARXL2_APGA"}, | ||
819 | 858 | ||
820 | /* outputs */ | 859 | /* outputs */ |
821 | {"OUTL", NULL, "ARXL2_APGA"}, | 860 | {"OUTL", NULL, "ARXL2_APGA"}, |
@@ -827,6 +866,8 @@ static const struct snd_soc_dapm_route intercon[] = { | |||
827 | {"HSOR", NULL, "HeadsetR Mux"}, | 866 | {"HSOR", NULL, "HeadsetR Mux"}, |
828 | {"CARKITL", NULL, "CarkitL Mux"}, | 867 | {"CARKITL", NULL, "CarkitL Mux"}, |
829 | {"CARKITR", NULL, "CarkitR Mux"}, | 868 | {"CARKITR", NULL, "CarkitR Mux"}, |
869 | {"HFL", NULL, "HandsfreeL Mux"}, | ||
870 | {"HFR", NULL, "HandsfreeR Mux"}, | ||
830 | 871 | ||
831 | /* inputs */ | 872 | /* inputs */ |
832 | {"ADCL", NULL, "INL"}, | 873 | {"ADCL", NULL, "INL"}, |