diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2010-07-01 14:23:45 +0900 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-07-01 17:08:47 +0100 |
commit | a300de3cfffb9ce7d3e87c8c4f24d22f0a081402 (patch) | |
tree | 966933a64feadc3ccc2047f4435342f68fa85ead /sound/soc/codecs/ak4642.c | |
parent | 338de9d9dac038a76fd6577cf30aa3ada07ae756 (diff) | |
download | op-kernel-dev-a300de3cfffb9ce7d3e87c8c4f24d22f0a081402.zip op-kernel-dev-a300de3cfffb9ce7d3e87c8c4f24d22f0a081402.tar.gz |
ASoC: ak4642: Add Digital Playback Volume control
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/ak4642.c')
-rw-r--r-- | sound/soc/codecs/ak4642.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c index 8d56811..60b83b4 100644 --- a/sound/soc/codecs/ak4642.c +++ b/sound/soc/codecs/ak4642.c @@ -28,6 +28,7 @@ #include <linux/slab.h> #include <sound/soc-dapm.h> #include <sound/initval.h> +#include <sound/tlv.h> #include "ak4642.h" @@ -103,6 +104,23 @@ struct snd_soc_codec_device soc_codec_dev_ak4642; +/* + * Playback Volume (table 39) + * + * max : 0x00 : +12.0 dB + * ( 0.5 dB step ) + * min : 0xFE : -115.0 dB + * mute: 0xFF + */ +static const DECLARE_TLV_DB_SCALE(out_tlv, -11500, 50, 1); + +static const struct snd_kcontrol_new ak4642_snd_controls[] = { + + SOC_DOUBLE_R_TLV("Digital Playback Volume", L_DVC, R_DVC, + 0, 0xFF, 1, out_tlv), +}; + + /* codec private data */ struct ak4642_priv { struct snd_soc_codec codec; @@ -196,7 +214,6 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream, * * PLL, Master Mode * Audio I/F Format :MSB justified (ADC & DAC) - * Digital Volume: -8dB * Bass Boost Level : Middle * * This operation came from example code of @@ -206,8 +223,6 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream, ak4642_write(codec, 0x0e, 0x19); ak4642_write(codec, 0x09, 0x91); ak4642_write(codec, 0x0c, 0x91); - ak4642_write(codec, 0x0a, 0x28); - ak4642_write(codec, 0x0d, 0x28); ak4642_write(codec, 0x00, 0x64); snd_soc_update_bits(codec, PW_MGMT2, PMHP_MASK, PMHP); snd_soc_update_bits(codec, PW_MGMT2, HPMTN, HPMTN); @@ -540,6 +555,9 @@ static int ak4642_probe(struct platform_device *pdev) goto pcm_err; } + snd_soc_add_controls(ak4642_codec, ak4642_snd_controls, + ARRAY_SIZE(ak4642_snd_controls)); + dev_info(&pdev->dev, "AK4642 Audio Codec %s", AK4642_VERSION); return ret; |