aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorZidan Wang <zidan.wang@freescale.com>2016-01-08 03:57:01 -0500
committerMark Brown <broonie@kernel.org>2016-01-08 08:07:25 -0500
commitdefbf708baf2a4cc4421699d02b57d7c3bb728b0 (patch)
tree9362a6758cc56947ac50bcb6ea86b8065463600d /sound
parent4a5893cf67062be4f70196c3fe45cfda950ea308 (diff)
ASoC: wm8960: add DAC mono mix kcontrol
In normal operation, the left and right channel digital audio data is converted to analogue in two separate DACs. There is a mono-mix mode where the two audio channels are mixed together digitally and then converted to analogue using only one DAC, while the other DAC is switched off. The mono-mix signal can be selected to appear on both analogue output channels. The mono mix is automatically attenuated by 6dB to prevent clipping. Signed-off-by: Zidan Wang <zidan.wang@freescale.com> Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/codecs/wm8960.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
index 328bde09d5bf..9e90b8e2b86e 100644
--- a/sound/soc/codecs/wm8960.c
+++ b/sound/soc/codecs/wm8960.c
@@ -153,6 +153,7 @@ static const char *wm8960_adc_data_output_sel[] = {
153 "Left Data = Right ADC; Right Data = Right ADC", 153 "Left Data = Right ADC; Right Data = Right ADC",
154 "Left Data = Right ADC; Right Data = Left ADC", 154 "Left Data = Right ADC; Right Data = Left ADC",
155}; 155};
156static const char *wm8960_dmonomix[] = {"Stereo", "Mono"};
156 157
157static const struct soc_enum wm8960_enum[] = { 158static const struct soc_enum wm8960_enum[] = {
158 SOC_ENUM_SINGLE(WM8960_DACCTL1, 5, 4, wm8960_polarity), 159 SOC_ENUM_SINGLE(WM8960_DACCTL1, 5, 4, wm8960_polarity),
@@ -162,6 +163,7 @@ static const struct soc_enum wm8960_enum[] = {
162 SOC_ENUM_SINGLE(WM8960_ALC1, 7, 4, wm8960_alcfunc), 163 SOC_ENUM_SINGLE(WM8960_ALC1, 7, 4, wm8960_alcfunc),
163 SOC_ENUM_SINGLE(WM8960_ALC3, 8, 2, wm8960_alcmode), 164 SOC_ENUM_SINGLE(WM8960_ALC3, 8, 2, wm8960_alcmode),
164 SOC_ENUM_SINGLE(WM8960_ADDCTL1, 2, 4, wm8960_adc_data_output_sel), 165 SOC_ENUM_SINGLE(WM8960_ADDCTL1, 2, 4, wm8960_adc_data_output_sel),
166 SOC_ENUM_SINGLE(WM8960_ADDCTL1, 4, 2, wm8960_dmonomix),
165}; 167};
166 168
167static const int deemph_settings[] = { 0, 32000, 44100, 48000 }; 169static const int deemph_settings[] = { 0, 32000, 44100, 48000 };
@@ -304,6 +306,7 @@ SOC_SINGLE_TLV("Right Output Mixer RINPUT3 Volume",
304 WM8960_ROUTMIX, 4, 7, 1, bypass_tlv), 306 WM8960_ROUTMIX, 4, 7, 1, bypass_tlv),
305 307
306SOC_ENUM("ADC Data Output Select", wm8960_enum[6]), 308SOC_ENUM("ADC Data Output Select", wm8960_enum[6]),
309SOC_ENUM("DAC Mono Mix", wm8960_enum[7]),
307}; 310};
308 311
309static const struct snd_kcontrol_new wm8960_lin_boost[] = { 312static const struct snd_kcontrol_new wm8960_lin_boost[] = {