summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorOleksandr Suvorov <oleksandr.suvorov@toradex.com>2019-05-03 17:28:11 +0300
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2020-04-15 01:24:38 +0200
commit2761d848134298133c010130b1f33121cd96145c (patch)
tree69eb46707846c569b1788bdc7ce2d8c504ee793d /sound
parent216f5f964625259e88adc0ce84cca61d5eafd0cd (diff)
ASoC: sgtl5000: Add on/off control for HP/LINE out
- adding mute/unmute controls for headphone and lineout allows alsa-compatible sound players automatically unmute output port to play music. Related to: #48500 Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/codecs/sgtl5000.c34
-rw-r--r--sound/soc/codecs/sgtl5000.h3
2 files changed, 26 insertions, 11 deletions
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index 532b94874534..fcf58ae15f54 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -450,24 +450,35 @@ static const struct snd_kcontrol_new sgtl5000_snd_controls[] = {
.put = dac_put_volsw,
},
+ /* ADC Capture */
SOC_DOUBLE("Capture Volume", SGTL5000_CHIP_ANA_ADC_CTRL, 0, 4, 0xf, 0),
SOC_SINGLE_TLV("Capture Attenuate Switch (-6dB)",
- SGTL5000_CHIP_ANA_ADC_CTRL,
- 8, 1, 0, capture_6db_attenuate),
- SOC_SINGLE("Capture ZC Switch", SGTL5000_CHIP_ANA_CTRL, 1, 1, 0),
+ SGTL5000_CHIP_ANA_ADC_CTRL,
+ SGTL5000_ADC_VOL_M6DB, 1, 0, capture_6db_attenuate),
+ SOC_SINGLE("Capture ZC Switch", SGTL5000_CHIP_ANA_CTRL,
+ SGTL5000_ADC_ZCD_EN, 1, 0),
+ /* Headphone */
SOC_DOUBLE_TLV("Headphone Playback Volume",
- SGTL5000_CHIP_ANA_HP_CTRL,
- 0, 8,
- 0x7f, 1,
- headphone_volume),
+ SGTL5000_CHIP_ANA_HP_CTRL,
+ SGTL5000_HP_VOL_LEFT_SHIFT,
+ SGTL5000_HP_VOL_RIGHT_SHIFT,
+ 0x7f, 1,
+ headphone_volume),
SOC_SINGLE("Headphone Playback Switch", SGTL5000_CHIP_ANA_CTRL,
- 4, 1, 1),
+ SGTL5000_HP_MUTE_SHIFT, 1, 1),
SOC_SINGLE("Headphone Playback ZC Switch", SGTL5000_CHIP_ANA_CTRL,
- 5, 1, 0),
+ SGTL5000_HP_ZCD_EN, 1, 0),
+ SOC_SINGLE("Headphone Playback Switch", SGTL5000_CHIP_ANA_CTRL,
+ SGTL5000_HP_MUTE_SHIFT, 1, 1),
+
+ /* Lineout */
+ SOC_SINGLE("Lineout Playback Switch", SGTL5000_CHIP_ANA_CTRL,
+ SGTL5000_LINE_MUTE_SHIFT, 1, 1),
+ /* Microphone */
SOC_SINGLE_TLV("Mic Volume", SGTL5000_CHIP_MIC_CTRL,
- 0, 3, 0, mic_gain_tlv),
+ SGTL5000_MIC_GAIN_SHIFT, 3, 0, mic_gain_tlv),
SOC_DOUBLE_TLV("Lineout Playback Volume",
SGTL5000_CHIP_LINE_OUT_VOL,
@@ -475,7 +486,8 @@ static const struct snd_kcontrol_new sgtl5000_snd_controls[] = {
SGTL5000_LINE_OUT_VOL_RIGHT_SHIFT,
0x1f, 1,
lineout_volume),
- SOC_SINGLE("Lineout Playback Switch", SGTL5000_CHIP_ANA_CTRL, 8, 1, 1),
+ SOC_SINGLE("Lineout Playback Switch", SGTL5000_CHIP_ANA_CTRL,
+ SGTL5000_LINE_MUTE_SHIFT, 1, 1),
};
/* mute the codec used by alsa core */
diff --git a/sound/soc/codecs/sgtl5000.h b/sound/soc/codecs/sgtl5000.h
index 1c62073000de..fda7b7a6c5f3 100644
--- a/sound/soc/codecs/sgtl5000.h
+++ b/sound/soc/codecs/sgtl5000.h
@@ -237,6 +237,7 @@
* SGTL5000_CHIP_ANA_CTRL
*/
#define SGTL5000_LINE_OUT_MUTE 0x0100
+#define SGTL5000_LINE_MUTE_SHIFT 8
#define SGTL5000_HP_SEL_MASK 0x0040
#define SGTL5000_HP_SEL_SHIFT 6
#define SGTL5000_HP_SEL_WIDTH 1
@@ -244,6 +245,7 @@
#define SGTL5000_HP_SEL_LINE_IN 0x1
#define SGTL5000_HP_ZCD_EN 0x0020
#define SGTL5000_HP_MUTE 0x0010
+#define SGTL5000_HP_MUTE_SHIFT 4
#define SGTL5000_ADC_SEL_MASK 0x0004
#define SGTL5000_ADC_SEL_SHIFT 2
#define SGTL5000_ADC_SEL_WIDTH 1
@@ -251,6 +253,7 @@
#define SGTL5000_ADC_SEL_LINE_IN 0x1
#define SGTL5000_ADC_ZCD_EN 0x0002
#define SGTL5000_ADC_MUTE 0x0001
+#define SGTL5000_ADC_MUTE_SHIFT 0
/*
* SGTL5000_CHIP_LINREG_CTRL