HeadPhone Playback Volume control register of DA7210 has reserved area. This patch considered it as mute.
This patch add HeadPhone Playback Volume 40 as default, because DA7210 doesn't have default volume.
Signed-off-by: Kuninori Morimoto kuninori.morimoto.gx@renesas.com --- sound/soc/codecs/da7210.c | 37 +++++++++++++++++++++++++++++++++---- 1 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/sound/soc/codecs/da7210.c b/sound/soc/codecs/da7210.c index 75af2d6..f0af2c8 100644 --- a/sound/soc/codecs/da7210.c +++ b/sound/soc/codecs/da7210.c @@ -145,6 +145,29 @@
#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; @@ -227,10 +250,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); @@ -572,6 +591,13 @@ static int da7210_init(struct da7210_priv *da7210) /* Activate all enabled subsystem */ da7210_write(codec, DA7210_STARTUP1, DA7210_SC_MST_EN);
+ /* + * HeadPhone PlayBack Volume 40 is given here + * because DA7210 doesn't have default volume. + */ + snd_soc_update_bits(codec, DA7210_HP_L_VOL, 0x3F, 40); + snd_soc_update_bits(codec, DA7210_HP_R_VOL, 0x3F, 40); + return ret;
init_err: @@ -656,6 +682,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: