Signed-off-by: Danny Milosavljevic <dan...@scratchpost.org>
---
 sound/soc/sunxi/sun4i-codec.c | 55 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 54 insertions(+), 1 deletion(-)

diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c
index a2435c6e..b5a3b5b3 100644
--- a/sound/soc/sunxi/sun4i-codec.c
+++ b/sound/soc/sunxi/sun4i-codec.c
@@ -64,6 +64,9 @@
 #define SUN4I_CODEC_DAC_ACTL_DACAENR                   (31)
 #define SUN4I_CODEC_DAC_ACTL_DACAENL                   (30)
 #define SUN4I_CODEC_DAC_ACTL_MIXEN                     (29)
+#define SUN4I_CODEC_DAC_ACTL_LNG                       (26)
+#define SUN4I_CODEC_DAC_ACTL_FMG                       (23)
+#define SUN4I_CODEC_DAC_ACTL_MICG                      (20)
 #define SUN4I_CODEC_DAC_ACTL_LDACLMIXS                 (15)
 #define SUN4I_CODEC_DAC_ACTL_RDACRMIXS                 (14)
 #define SUN4I_CODEC_DAC_ACTL_LDACRMIXS                 (13)
@@ -94,9 +97,10 @@
 #define SUN4I_CODEC_ADC_ACTL_PREG1EN                   (29)
 #define SUN4I_CODEC_ADC_ACTL_PREG2EN                   (28)
 #define SUN4I_CODEC_ADC_ACTL_VMICEN                    (27)
-#define SUN4I_CODEC_ADC_ACTL_VADCG                     (20)
+#define SUN4I_CODEC_ADC_ACTL_ADCG                      (20)
 #define SUN4I_CODEC_ADC_ACTL_ADCIS                     (17)
 #define SUN4I_CODEC_ADC_ACTL_LNRDF                     (16)
+#define SUN4I_CODEC_ADC_ACTL_LNPREG                    (13)
 #define SUN4I_CODEC_ADC_ACTL_PA_EN                     (4)
 #define SUN4I_CODEC_ADC_ACTL_DDE                       (3)
 #define SUN4I_CODEC_ADC_DEBUG                  (0x2c)
@@ -644,6 +648,23 @@ static const struct snd_kcontrol_new sun4i_codec_pa_mute =
                        SUN4I_CODEC_DAC_ACTL_PA_MUTE, 1, 0);
 
 static DECLARE_TLV_DB_SCALE(sun4i_codec_pa_volume_scale, -6300, 100, 1);
+static DECLARE_TLV_DB_SCALE(sun4i_codec_linein_loopback_gain_scale,
+                           -150,
+                           150,
+                           0);
+static DECLARE_TLV_DB_SCALE(sun4i_codec_linein_preamp_gain_scale,
+                           -1200,
+                           300,
+                           0);
+static DECLARE_TLV_DB_SCALE(sun4i_codec_fmin_loopback_gain_scale,
+                           -450,
+                           150,
+                           0);
+static DECLARE_TLV_DB_SCALE(sun4i_codec_micin_loopback_gain_scale,
+                           -450,
+                           150,
+                           0);
+static DECLARE_TLV_DB_SCALE(sun4i_codec_adc_gain_scale, -450, 150, 0);
 
 static const char * const sun4i_codec_difflinein_capture_source[] = {
        "Stereo",
@@ -663,6 +684,38 @@ static const struct snd_kcontrol_new 
sun4i_codec_controls[] = {
        SOC_SINGLE_TLV("Power Amplifier Volume", SUN4I_CODEC_DAC_ACTL,
                       SUN4I_CODEC_DAC_ACTL_PA_VOL, 0x3F, 0,
                       sun4i_codec_pa_volume_scale),
+       /* Line, FM, Mic1, Mic2 */
+       SOC_SINGLE_TLV("Line Playback Volume",
+                      SUN4I_CODEC_DAC_ACTL,
+                      SUN4I_CODEC_DAC_ACTL_LNG,
+                      1,
+                      0,
+                      sun4i_codec_linein_loopback_gain_scale),
+       SOC_SINGLE_TLV("Line Capture Volume",
+                      SUN4I_CODEC_ADC_ACTL,
+                      SUN4I_CODEC_ADC_ACTL_LNPREG,
+                      7,
+                      0,
+                      sun4i_codec_linein_preamp_gain_scale),
+       SOC_SINGLE_TLV("FM Playback Volume",
+                      SUN4I_CODEC_DAC_ACTL,
+                      SUN4I_CODEC_DAC_ACTL_FMG,
+                      3,
+                      0,
+                      sun4i_codec_fmin_loopback_gain_scale),
+       SOC_SINGLE_TLV("Mic Playback Volume",
+                      SUN4I_CODEC_DAC_ACTL,
+                      SUN4I_CODEC_DAC_ACTL_MICG,
+                      7,
+                      0,
+                      sun4i_codec_micin_loopback_gain_scale),
+       /* ADC */
+       SOC_SINGLE_TLV("Capture Volume",
+                      SUN4I_CODEC_ADC_ACTL,
+                      SUN4I_CODEC_ADC_ACTL_ADCG,
+                      4,
+                      0,
+                      sun4i_codec_adc_gain_scale),
 };
 
 static const struct snd_kcontrol_new sun4i_codec_left_mixer_controls[] = {

Reply via email to