aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/wm5102.c
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2012-12-18 08:48:36 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-12-24 10:39:09 -0500
commit50571263722452a57a67edee23b892b2607dc374 (patch)
tree7eaaebd2fa2995b4ccb832a708cf2037a90b51f0 /sound/soc/codecs/wm5102.c
parent845571cce6aebffd6de9b9024daf789f333a734d (diff)
ASoC: wm5102: Add noise gate control
The references used for the noise gates and parameters for their triggering are configurable, expose that to users. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/wm5102.c')
-rw-r--r--sound/soc/codecs/wm5102.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c
index a16239f594e4..e64b968a8c9a 100644
--- a/sound/soc/codecs/wm5102.c
+++ b/sound/soc/codecs/wm5102.c
@@ -42,6 +42,7 @@ static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0);
42static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0); 42static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
43static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0); 43static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0);
44static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0); 44static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0);
45static DECLARE_TLV_DB_SCALE(ng_tlv, -10200, 600, 0);
45 46
46static const struct wm_adsp_region wm5102_dsp1_regions[] = { 47static const struct wm_adsp_region wm5102_dsp1_regions[] = {
47 { .type = WMFW_ADSP2_PM, .base = 0x100000 }, 48 { .type = WMFW_ADSP2_PM, .base = 0x100000 },
@@ -600,6 +601,17 @@ static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w,
600 return 0; 601 return 0;
601} 602}
602 603
604#define WM5102_NG_SRC(name, base) \
605 SOC_SINGLE(name " NG HPOUT1L Switch", base, 0, 1, 0), \
606 SOC_SINGLE(name " NG HPOUT1R Switch", base, 1, 1, 0), \
607 SOC_SINGLE(name " NG HPOUT2L Switch", base, 2, 1, 0), \
608 SOC_SINGLE(name " NG HPOUT2R Switch", base, 3, 1, 0), \
609 SOC_SINGLE(name " NG EPOUT Switch", base, 4, 1, 0), \
610 SOC_SINGLE(name " NG SPKOUTL Switch", base, 6, 1, 0), \
611 SOC_SINGLE(name " NG SPKOUTR Switch", base, 7, 1, 0), \
612 SOC_SINGLE(name " NG SPKDAT1L Switch", base, 8, 1, 0), \
613 SOC_SINGLE(name " NG SPKDAT1R Switch", base, 9, 1, 0)
614
603static const struct snd_kcontrol_new wm5102_snd_controls[] = { 615static const struct snd_kcontrol_new wm5102_snd_controls[] = {
604SOC_SINGLE("IN1 High Performance Switch", ARIZONA_IN1L_CONTROL, 616SOC_SINGLE("IN1 High Performance Switch", ARIZONA_IN1L_CONTROL,
605 ARIZONA_IN1_OSR_SHIFT, 1, 0), 617 ARIZONA_IN1_OSR_SHIFT, 1, 0),
@@ -783,6 +795,22 @@ SOC_ENUM("Output Ramp Down", arizona_out_vd_ramp),
783SOC_DOUBLE("SPKDAT1 Switch", ARIZONA_PDM_SPK1_CTRL_1, ARIZONA_SPK1L_MUTE_SHIFT, 795SOC_DOUBLE("SPKDAT1 Switch", ARIZONA_PDM_SPK1_CTRL_1, ARIZONA_SPK1L_MUTE_SHIFT,
784 ARIZONA_SPK1R_MUTE_SHIFT, 1, 1), 796 ARIZONA_SPK1R_MUTE_SHIFT, 1, 1),
785 797
798SOC_SINGLE("Noise Gate Switch", ARIZONA_NOISE_GATE_CONTROL,
799 ARIZONA_NGATE_ENA_SHIFT, 1, 0),
800SOC_SINGLE_TLV("Noise Gate Threshold Volume", ARIZONA_NOISE_GATE_CONTROL,
801 ARIZONA_NGATE_THR_SHIFT, 7, 1, ng_tlv),
802SOC_ENUM("Noise Gate Hold", arizona_ng_hold),
803
804WM5102_NG_SRC("HPOUT1L", ARIZONA_NOISE_GATE_SELECT_1L),
805WM5102_NG_SRC("HPOUT1R", ARIZONA_NOISE_GATE_SELECT_1R),
806WM5102_NG_SRC("HPOUT2L", ARIZONA_NOISE_GATE_SELECT_2L),
807WM5102_NG_SRC("HPOUT2R", ARIZONA_NOISE_GATE_SELECT_2R),
808WM5102_NG_SRC("EPOUT", ARIZONA_NOISE_GATE_SELECT_3L),
809WM5102_NG_SRC("SPKOUTL", ARIZONA_NOISE_GATE_SELECT_4L),
810WM5102_NG_SRC("SPKOUTR", ARIZONA_NOISE_GATE_SELECT_4R),
811WM5102_NG_SRC("SPKDAT1L", ARIZONA_NOISE_GATE_SELECT_5L),
812WM5102_NG_SRC("SPKDAT1R", ARIZONA_NOISE_GATE_SELECT_5R),
813
786ARIZONA_MIXER_CONTROLS("AIF1TX1", ARIZONA_AIF1TX1MIX_INPUT_1_SOURCE), 814ARIZONA_MIXER_CONTROLS("AIF1TX1", ARIZONA_AIF1TX1MIX_INPUT_1_SOURCE),
787ARIZONA_MIXER_CONTROLS("AIF1TX2", ARIZONA_AIF1TX2MIX_INPUT_1_SOURCE), 815ARIZONA_MIXER_CONTROLS("AIF1TX2", ARIZONA_AIF1TX2MIX_INPUT_1_SOURCE),
788ARIZONA_MIXER_CONTROLS("AIF1TX3", ARIZONA_AIF1TX3MIX_INPUT_1_SOURCE), 816ARIZONA_MIXER_CONTROLS("AIF1TX3", ARIZONA_AIF1TX3MIX_INPUT_1_SOURCE),