diff options
author | Takashi Iwai <tiwai@suse.de> | 2012-07-19 02:03:20 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2012-07-19 02:03:20 -0400 |
commit | 4609ed6b1f0ab9f11a9d0361573b53d9d057c440 (patch) | |
tree | 802119cc6ddea286bc03d56431286ac52166352e /sound/soc/codecs/tlv320aic3x.c | |
parent | 639aa4bd58582f3015ae5621b7e9e754dcb58e6b (diff) | |
parent | 409b78cc17a4a3d07a541037575da648ced99437 (diff) |
Merge tag 'asoc-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-next
ASoC: Updates for 3.6
This has been a pretty quiet release - very little activity in framework
terms, mostly just a few new drivers and updates:
- Added the ability to add and remove DAPM paths dynamically, mostly for
reparenting on clock changes.
- New machine drivers for Marvell Brownstone, ST-Ericsson Ux500
reference platform and ttc-dkp.
- New CPU drivers for Blackfin BF6xx SPORTs in I2S mode, Marvell MMP,
Synopsis Designware I2S controllers, and SPEAr DMA and S/PDIF
- New CODEC drivers for Dialog DA732x, ST STA529, ST-Ericsson AB8500, TI
Isabelle and Wolfson Microelectronics WM5102 and WM5110
Diffstat (limited to 'sound/soc/codecs/tlv320aic3x.c')
-rw-r--r-- | sound/soc/codecs/tlv320aic3x.c | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c index e9b62b5ea637..dc78f5a4bcbf 100644 --- a/sound/soc/codecs/tlv320aic3x.c +++ b/sound/soc/codecs/tlv320aic3x.c | |||
@@ -118,7 +118,9 @@ static const u8 aic3x_reg[AIC3X_CACHEREGNUM] = { | |||
118 | 0x00, 0x00, 0x00, 0x00, /* 88 */ | 118 | 0x00, 0x00, 0x00, 0x00, /* 88 */ |
119 | 0x00, 0x00, 0x00, 0x00, /* 92 */ | 119 | 0x00, 0x00, 0x00, 0x00, /* 92 */ |
120 | 0x00, 0x00, 0x00, 0x00, /* 96 */ | 120 | 0x00, 0x00, 0x00, 0x00, /* 96 */ |
121 | 0x00, 0x00, 0x02, /* 100 */ | 121 | 0x00, 0x00, 0x02, 0x00, /* 100 */ |
122 | 0x00, 0x00, 0x00, 0x00, /* 104 */ | ||
123 | 0x00, 0x00, /* 108 */ | ||
122 | }; | 124 | }; |
123 | 125 | ||
124 | #define SOC_DAPM_SINGLE_AIC3X(xname, reg, shift, mask, invert) \ | 126 | #define SOC_DAPM_SINGLE_AIC3X(xname, reg, shift, mask, invert) \ |
@@ -229,6 +231,25 @@ static const struct soc_enum aic3x_enum[] = { | |||
229 | SOC_ENUM_DOUBLE(AIC3X_CODEC_DFILT_CTRL, 6, 4, 4, aic3x_adc_hpf), | 231 | SOC_ENUM_DOUBLE(AIC3X_CODEC_DFILT_CTRL, 6, 4, 4, aic3x_adc_hpf), |
230 | }; | 232 | }; |
231 | 233 | ||
234 | static const char *aic3x_agc_level[] = | ||
235 | { "-5.5dB", "-8dB", "-10dB", "-12dB", "-14dB", "-17dB", "-20dB", "-24dB" }; | ||
236 | static const struct soc_enum aic3x_agc_level_enum[] = { | ||
237 | SOC_ENUM_SINGLE(LAGC_CTRL_A, 4, 8, aic3x_agc_level), | ||
238 | SOC_ENUM_SINGLE(RAGC_CTRL_A, 4, 8, aic3x_agc_level), | ||
239 | }; | ||
240 | |||
241 | static const char *aic3x_agc_attack[] = { "8ms", "11ms", "16ms", "20ms" }; | ||
242 | static const struct soc_enum aic3x_agc_attack_enum[] = { | ||
243 | SOC_ENUM_SINGLE(LAGC_CTRL_A, 2, 4, aic3x_agc_attack), | ||
244 | SOC_ENUM_SINGLE(RAGC_CTRL_A, 2, 4, aic3x_agc_attack), | ||
245 | }; | ||
246 | |||
247 | static const char *aic3x_agc_decay[] = { "100ms", "200ms", "400ms", "500ms" }; | ||
248 | static const struct soc_enum aic3x_agc_decay_enum[] = { | ||
249 | SOC_ENUM_SINGLE(LAGC_CTRL_A, 0, 4, aic3x_agc_decay), | ||
250 | SOC_ENUM_SINGLE(RAGC_CTRL_A, 0, 4, aic3x_agc_decay), | ||
251 | }; | ||
252 | |||
232 | /* | 253 | /* |
233 | * DAC digital volumes. From -63.5 to 0 dB in 0.5 dB steps | 254 | * DAC digital volumes. From -63.5 to 0 dB in 0.5 dB steps |
234 | */ | 255 | */ |
@@ -353,6 +374,15 @@ static const struct snd_kcontrol_new aic3x_snd_controls[] = { | |||
353 | * adjust PGA to max value when ADC is on and will never go back. | 374 | * adjust PGA to max value when ADC is on and will never go back. |
354 | */ | 375 | */ |
355 | SOC_DOUBLE_R("AGC Switch", LAGC_CTRL_A, RAGC_CTRL_A, 7, 0x01, 0), | 376 | SOC_DOUBLE_R("AGC Switch", LAGC_CTRL_A, RAGC_CTRL_A, 7, 0x01, 0), |
377 | SOC_ENUM("Left AGC Target level", aic3x_agc_level_enum[0]), | ||
378 | SOC_ENUM("Right AGC Target level", aic3x_agc_level_enum[1]), | ||
379 | SOC_ENUM("Left AGC Attack time", aic3x_agc_attack_enum[0]), | ||
380 | SOC_ENUM("Right AGC Attack time", aic3x_agc_attack_enum[1]), | ||
381 | SOC_ENUM("Left AGC Decay time", aic3x_agc_decay_enum[0]), | ||
382 | SOC_ENUM("Right AGC Decay time", aic3x_agc_decay_enum[1]), | ||
383 | |||
384 | /* De-emphasis */ | ||
385 | SOC_DOUBLE("De-emphasis Switch", AIC3X_CODEC_DFILT_CTRL, 2, 0, 0x01, 0), | ||
356 | 386 | ||
357 | /* Input */ | 387 | /* Input */ |
358 | SOC_DOUBLE_R_TLV("PGA Capture Volume", LADC_VOL, RADC_VOL, | 388 | SOC_DOUBLE_R_TLV("PGA Capture Volume", LADC_VOL, RADC_VOL, |
@@ -368,7 +398,7 @@ static const struct snd_kcontrol_new aic3x_snd_controls[] = { | |||
368 | static DECLARE_TLV_DB_SCALE(classd_amp_tlv, 0, 600, 0); | 398 | static DECLARE_TLV_DB_SCALE(classd_amp_tlv, 0, 600, 0); |
369 | 399 | ||
370 | static const struct snd_kcontrol_new aic3x_classd_amp_gain_ctrl = | 400 | static const struct snd_kcontrol_new aic3x_classd_amp_gain_ctrl = |
371 | SOC_DOUBLE_TLV("Class-D Amplifier Gain", CLASSD_CTRL, 6, 4, 3, 0, classd_amp_tlv); | 401 | SOC_DOUBLE_TLV("Class-D Playback Volume", CLASSD_CTRL, 6, 4, 3, 0, classd_amp_tlv); |
372 | 402 | ||
373 | /* Left DAC Mux */ | 403 | /* Left DAC Mux */ |
374 | static const struct snd_kcontrol_new aic3x_left_dac_mux_controls = | 404 | static const struct snd_kcontrol_new aic3x_left_dac_mux_controls = |
@@ -970,6 +1000,12 @@ static int aic3x_set_dai_sysclk(struct snd_soc_dai *codec_dai, | |||
970 | struct snd_soc_codec *codec = codec_dai->codec; | 1000 | struct snd_soc_codec *codec = codec_dai->codec; |
971 | struct aic3x_priv *aic3x = snd_soc_codec_get_drvdata(codec); | 1001 | struct aic3x_priv *aic3x = snd_soc_codec_get_drvdata(codec); |
972 | 1002 | ||
1003 | /* set clock on MCLK or GPIO2 or BCLK */ | ||
1004 | snd_soc_update_bits(codec, AIC3X_CLKGEN_CTRL_REG, PLLCLK_IN_MASK, | ||
1005 | clk_id << PLLCLK_IN_SHIFT); | ||
1006 | snd_soc_update_bits(codec, AIC3X_CLKGEN_CTRL_REG, CLKDIV_IN_MASK, | ||
1007 | clk_id << CLKDIV_IN_SHIFT); | ||
1008 | |||
973 | aic3x->sysclk = freq; | 1009 | aic3x->sysclk = freq; |
974 | return 0; | 1010 | return 0; |
975 | } | 1011 | } |