ASoC: ak4613: add Digital Playback Volume support
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Fri, 18 Sep 2015 00:52:44 +0000 (00:52 +0000)
committerMark Brown <broonie@kernel.org>
Sat, 19 Sep 2015 14:41:15 +0000 (07:41 -0700)
For L/ROUT1 to L/ROUT6

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/ak4613.c

index fd96a8f9e2d3f767537394269b6215220d962a01..07a266460ec39cb3941dde8d4fe96eeb1bb8d414 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/regmap.h>
 #include <sound/soc.h>
 #include <sound/pcm_params.h>
+#include <sound/tlv.h>
 
 #define PW_MGMT1       0x00 /* Power Management 1 */
 #define PW_MGMT2       0x01 /* Power Management 2 */
@@ -91,6 +92,31 @@ struct ak4613_interface {
        struct ak4613_formats playback;
 };
 
+/*
+ * Playback Volume
+ *
+ * max : 0x00 : 0 dB
+ *       ( 0.5 dB step )
+ * min : 0xFE : -127.0 dB
+ * mute: 0xFF
+ */
+static const DECLARE_TLV_DB_SCALE(out_tlv, -12750, 50, 1);
+
+static const struct snd_kcontrol_new ak4613_snd_controls[] = {
+       SOC_DOUBLE_R_TLV("Digital Playback Volume1", LOUT1, ROUT1,
+                        0, 0xFF, 1, out_tlv),
+       SOC_DOUBLE_R_TLV("Digital Playback Volume2", LOUT2, ROUT2,
+                        0, 0xFF, 1, out_tlv),
+       SOC_DOUBLE_R_TLV("Digital Playback Volume3", LOUT3, ROUT3,
+                        0, 0xFF, 1, out_tlv),
+       SOC_DOUBLE_R_TLV("Digital Playback Volume4", LOUT4, ROUT4,
+                        0, 0xFF, 1, out_tlv),
+       SOC_DOUBLE_R_TLV("Digital Playback Volume5", LOUT5, ROUT5,
+                        0, 0xFF, 1, out_tlv),
+       SOC_DOUBLE_R_TLV("Digital Playback Volume6", LOUT6, ROUT6,
+                        0, 0xFF, 1, out_tlv),
+};
+
 static const struct reg_default ak4613_reg[] = {
        { 0x0,  0x0f }, { 0x1,  0x07 }, { 0x2,  0x3f }, { 0x3,  0x20 },
        { 0x4,  0x20 }, { 0x5,  0x55 }, { 0x6,  0x05 }, { 0x7,  0x07 },
@@ -397,6 +423,8 @@ static int ak4613_resume(struct snd_soc_codec *codec)
 static struct snd_soc_codec_driver soc_codec_dev_ak4613 = {
        .resume                 = ak4613_resume,
        .set_bias_level         = ak4613_set_bias_level,
+       .controls               = ak4613_snd_controls,
+       .num_controls           = ARRAY_SIZE(ak4613_snd_controls),
        .dapm_widgets           = ak4613_dapm_widgets,
        .num_dapm_widgets       = ARRAY_SIZE(ak4613_dapm_widgets),
        .dapm_routes            = ak4613_intercon,