diff options
Diffstat (limited to 'sound/soc/codecs/ak4642.c')
-rw-r--r-- | sound/soc/codecs/ak4642.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c index 7528a54102b5..3d7dc55305ec 100644 --- a/sound/soc/codecs/ak4642.c +++ b/sound/soc/codecs/ak4642.c | |||
@@ -22,20 +22,13 @@ | |||
22 | * AK4643 is tested. | 22 | * AK4643 is tested. |
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include <linux/module.h> | ||
26 | #include <linux/moduleparam.h> | ||
27 | #include <linux/init.h> | ||
28 | #include <linux/delay.h> | 25 | #include <linux/delay.h> |
29 | #include <linux/pm.h> | ||
30 | #include <linux/i2c.h> | 26 | #include <linux/i2c.h> |
31 | #include <linux/platform_device.h> | 27 | #include <linux/platform_device.h> |
32 | #include <linux/slab.h> | 28 | #include <linux/slab.h> |
33 | #include <sound/core.h> | ||
34 | #include <sound/pcm.h> | ||
35 | #include <sound/pcm_params.h> | ||
36 | #include <sound/soc.h> | ||
37 | #include <sound/soc-dapm.h> | 29 | #include <sound/soc-dapm.h> |
38 | #include <sound/initval.h> | 30 | #include <sound/initval.h> |
31 | #include <sound/tlv.h> | ||
39 | 32 | ||
40 | #include "ak4642.h" | 33 | #include "ak4642.h" |
41 | 34 | ||
@@ -111,6 +104,23 @@ | |||
111 | 104 | ||
112 | struct snd_soc_codec_device soc_codec_dev_ak4642; | 105 | struct snd_soc_codec_device soc_codec_dev_ak4642; |
113 | 106 | ||
107 | /* | ||
108 | * Playback Volume (table 39) | ||
109 | * | ||
110 | * max : 0x00 : +12.0 dB | ||
111 | * ( 0.5 dB step ) | ||
112 | * min : 0xFE : -115.0 dB | ||
113 | * mute: 0xFF | ||
114 | */ | ||
115 | static const DECLARE_TLV_DB_SCALE(out_tlv, -11500, 50, 1); | ||
116 | |||
117 | static const struct snd_kcontrol_new ak4642_snd_controls[] = { | ||
118 | |||
119 | SOC_DOUBLE_R_TLV("Digital Playback Volume", L_DVC, R_DVC, | ||
120 | 0, 0xFF, 1, out_tlv), | ||
121 | }; | ||
122 | |||
123 | |||
114 | /* codec private data */ | 124 | /* codec private data */ |
115 | struct ak4642_priv { | 125 | struct ak4642_priv { |
116 | struct snd_soc_codec codec; | 126 | struct snd_soc_codec codec; |
@@ -204,7 +214,6 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream, | |||
204 | * | 214 | * |
205 | * PLL, Master Mode | 215 | * PLL, Master Mode |
206 | * Audio I/F Format :MSB justified (ADC & DAC) | 216 | * Audio I/F Format :MSB justified (ADC & DAC) |
207 | * Digital Volume: -8dB | ||
208 | * Bass Boost Level : Middle | 217 | * Bass Boost Level : Middle |
209 | * | 218 | * |
210 | * This operation came from example code of | 219 | * This operation came from example code of |
@@ -214,8 +223,6 @@ static int ak4642_dai_startup(struct snd_pcm_substream *substream, | |||
214 | ak4642_write(codec, 0x0e, 0x19); | 223 | ak4642_write(codec, 0x0e, 0x19); |
215 | ak4642_write(codec, 0x09, 0x91); | 224 | ak4642_write(codec, 0x09, 0x91); |
216 | ak4642_write(codec, 0x0c, 0x91); | 225 | ak4642_write(codec, 0x0c, 0x91); |
217 | ak4642_write(codec, 0x0a, 0x28); | ||
218 | ak4642_write(codec, 0x0d, 0x28); | ||
219 | ak4642_write(codec, 0x00, 0x64); | 226 | ak4642_write(codec, 0x00, 0x64); |
220 | snd_soc_update_bits(codec, PW_MGMT2, PMHP_MASK, PMHP); | 227 | snd_soc_update_bits(codec, PW_MGMT2, PMHP_MASK, PMHP); |
221 | snd_soc_update_bits(codec, PW_MGMT2, HPMTN, HPMTN); | 228 | snd_soc_update_bits(codec, PW_MGMT2, HPMTN, HPMTN); |
@@ -491,8 +498,10 @@ static int ak4642_i2c_probe(struct i2c_client *i2c, | |||
491 | codec->control_data = i2c; | 498 | codec->control_data = i2c; |
492 | 499 | ||
493 | ret = ak4642_init(ak4642); | 500 | ret = ak4642_init(ak4642); |
494 | if (ret < 0) | 501 | if (ret < 0) { |
495 | printk(KERN_ERR "failed to initialise AK4642\n"); | 502 | printk(KERN_ERR "failed to initialise AK4642\n"); |
503 | kfree(ak4642); | ||
504 | } | ||
496 | 505 | ||
497 | return ret; | 506 | return ret; |
498 | } | 507 | } |
@@ -548,6 +557,9 @@ static int ak4642_probe(struct platform_device *pdev) | |||
548 | goto pcm_err; | 557 | goto pcm_err; |
549 | } | 558 | } |
550 | 559 | ||
560 | snd_soc_add_controls(ak4642_codec, ak4642_snd_controls, | ||
561 | ARRAY_SIZE(ak4642_snd_controls)); | ||
562 | |||
551 | dev_info(&pdev->dev, "AK4642 Audio Codec %s", AK4642_VERSION); | 563 | dev_info(&pdev->dev, "AK4642 Audio Codec %s", AK4642_VERSION); |
552 | return ret; | 564 | return ret; |
553 | 565 | ||