[alsa-devel] [PATCH] ASoC: da7210: Add HeadPhone Playback Volume control
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:
Dear Mark, Liam
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(-)
I'm so sorry. This patch was not based on ASoC's git tree. Please give me a chance to send v2 patch.
Best regards -- Kuninori Morimoto
On Tue, Jul 20, 2010 at 11:24:17AM +0900, Kuninori Morimoto wrote:
- /*
* 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);
I find this very surprising - the chip actually comes up with an indeterminate value at start? In any case, if this is required I'd suggest picking mute as the default value since then there's no chance that the signal will be excessively loud by default on some systems.
participants (2)
-
Kuninori Morimoto
-
Mark Brown