ASoC: da7210: Add HeadPhone Playback Volume control
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Wed, 21 Jul 2010 05:12:16 +0000 (14:12 +0900)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 23 Jul 2010 09:17:47 +0000 (10:17 +0100)
HeadPhone Playback Volume control register of DA7210 has
reserved area. This patch considered it as mute.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/da7210.c

index a83aa18..3e42d1e 100644 (file)
@@ -23,6 +23,7 @@
 #include <sound/pcm_params.h>
 #include <sound/soc-dapm.h>
 #include <sound/initval.h>
+#include <sound/tlv.h>
 
 #include "da7210.h"
 
 
 #define DA7210_VERSION "0.0.1"
 
+/*
+ * Playback Volume
+ *
+ * max         : 0x3F (+15.0 dB)
+ *                (1.5 dB step)
+ * min         : 0x11 (-54.0 dB)
+ * mute                : 0x10
+ * reserved    : 0x00 - 0x0F
+ *
+ * ** FIXME **
+ *
+ * Reserved area are considered as "mute".
+ * -> min = -79.5 dB
+ */
+static const DECLARE_TLV_DB_SCALE(hp_out_tlv, -7950, 150, 1);
+
+static const struct snd_kcontrol_new da7210_snd_controls[] = {
+
+       SOC_DOUBLE_R_TLV("HeadPhone Playback Volume",
+                        DA7210_HP_L_VOL, DA7210_HP_R_VOL,
+                        0, 0x3F, 0, hp_out_tlv),
+};
+
 /* Codec private data */
 struct da7210_priv {
        struct snd_soc_codec codec;
@@ -218,10 +242,6 @@ static int da7210_startup(struct snd_pcm_substream *substream,
        struct snd_soc_codec *codec = dai->codec;
 
        if (is_play) {
-               /* PlayBack Volume 40 */
-               snd_soc_update_bits(codec, DA7210_HP_L_VOL, 0x3F, 40);
-               snd_soc_update_bits(codec, DA7210_HP_R_VOL, 0x3F, 40);
-
                /* Enable Out */
                snd_soc_update_bits(codec, DA7210_OUTMIX_L, 0x1F, 0x10);
                snd_soc_update_bits(codec, DA7210_OUTMIX_R, 0x1F, 0x10);
@@ -647,6 +667,9 @@ static int da7210_probe(struct platform_device *pdev)
        if (ret < 0)
                goto pcm_err;
 
+       snd_soc_add_controls(da7210_codec, da7210_snd_controls,
+                            ARRAY_SIZE(da7210_snd_controls));
+
        dev_info(&pdev->dev, "DA7210 Audio Codec %s\n", DA7210_VERSION);
 
 pcm_err: