diff options
author | Peter Ujfalusi <peter.ujfalusi@nokia.com> | 2008-12-01 03:03:46 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2008-12-01 14:58:53 -0500 |
commit | d889a72c5c71161d6f934f9d7fca0e5b7e52bc08 (patch) | |
tree | b6db608138905a81f9030bdc98d8e983b932de34 | |
parent | 381a22b564ff5a7ada09ad9a0831246da1dc5513 (diff) |
ASoC: TWL4030: Change the common playback volume controls
Add Playback volume controls for all four DACs.
All four paths has three levels of volume controls:
Digital Fine gain, Digital Coarse gain, Analog gain.
The controls are named to reflect their connection to the DACs.
Per DAC volume can be performed, if needed:
amixer sset 'DAC1 Analog' 5,10
DACL1 analog gain to 5
DACR1 analog gain to 10
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r-- | sound/soc/codecs/twl4030.c | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c index 4b7a2d173a4a..1dae73af5273 100644 --- a/sound/soc/codecs/twl4030.c +++ b/sound/soc/codecs/twl4030.c | |||
@@ -351,14 +351,20 @@ static int snd_soc_put_volsw_r2_twl4030(struct snd_kcontrol *kcontrol, | |||
351 | * FGAIN volume control: | 351 | * FGAIN volume control: |
352 | * from -62 to 0 dB in 1 dB steps (mute instead of -63 dB) | 352 | * from -62 to 0 dB in 1 dB steps (mute instead of -63 dB) |
353 | */ | 353 | */ |
354 | static DECLARE_TLV_DB_SCALE(master_tlv, -6300, 100, 1); | 354 | static DECLARE_TLV_DB_SCALE(digital_fine_tlv, -6300, 100, 1); |
355 | 355 | ||
356 | /* | 356 | /* |
357 | * CGAIN volume control: | 357 | * CGAIN volume control: |
358 | * 0 dB to 12 dB in 6 dB steps | 358 | * 0 dB to 12 dB in 6 dB steps |
359 | * value 2 and 3 means 12 dB | 359 | * value 2 and 3 means 12 dB |
360 | */ | 360 | */ |
361 | static DECLARE_TLV_DB_SCALE(master_coarse_tlv, 0, 600, 0); | 361 | static DECLARE_TLV_DB_SCALE(digital_coarse_tlv, 0, 600, 0); |
362 | |||
363 | /* | ||
364 | * Analog playback gain | ||
365 | * -24 dB to 12 dB in 2 dB steps | ||
366 | */ | ||
367 | static DECLARE_TLV_DB_SCALE(analog_tlv, -2400, 200, 0); | ||
362 | 368 | ||
363 | /* | 369 | /* |
364 | * Capture gain after the ADCs | 370 | * Capture gain after the ADCs |
@@ -367,12 +373,27 @@ static DECLARE_TLV_DB_SCALE(master_coarse_tlv, 0, 600, 0); | |||
367 | static DECLARE_TLV_DB_SCALE(digital_capture_tlv, 0, 100, 0); | 373 | static DECLARE_TLV_DB_SCALE(digital_capture_tlv, 0, 100, 0); |
368 | 374 | ||
369 | static const struct snd_kcontrol_new twl4030_snd_controls[] = { | 375 | static const struct snd_kcontrol_new twl4030_snd_controls[] = { |
370 | SOC_DOUBLE_R_TLV("Master Playback Volume", | 376 | /* Common playback gain controls */ |
371 | TWL4030_REG_ARXL2PGA, TWL4030_REG_ARXR2PGA, | 377 | SOC_DOUBLE_R_TLV("DAC1 Digital Fine Playback Volume", |
372 | 0, 0x3f, 0, master_tlv), | 378 | TWL4030_REG_ARXL1PGA, TWL4030_REG_ARXR1PGA, |
373 | SOC_DOUBLE_R_TLV("Master PCM Playback Volume", | 379 | 0, 0x3f, 0, digital_fine_tlv), |
374 | TWL4030_REG_ARXL2PGA, TWL4030_REG_ARXR2PGA, | 380 | SOC_DOUBLE_R_TLV("DAC2 Digital Fine Playback Volume", |
375 | 6, 0x2, 0, master_coarse_tlv), | 381 | TWL4030_REG_ARXL2PGA, TWL4030_REG_ARXR2PGA, |
382 | 0, 0x3f, 0, digital_fine_tlv), | ||
383 | |||
384 | SOC_DOUBLE_R_TLV("DAC1 Digital Coarse Playback Volume", | ||
385 | TWL4030_REG_ARXL1PGA, TWL4030_REG_ARXR1PGA, | ||
386 | 6, 0x2, 0, digital_coarse_tlv), | ||
387 | SOC_DOUBLE_R_TLV("DAC2 Digital Coarse Playback Volume", | ||
388 | TWL4030_REG_ARXL2PGA, TWL4030_REG_ARXR2PGA, | ||
389 | 6, 0x2, 0, digital_coarse_tlv), | ||
390 | |||
391 | SOC_DOUBLE_R_TLV("DAC1 Analog Playback Volume", | ||
392 | TWL4030_REG_ARXL1_APGA_CTL, TWL4030_REG_ARXR1_APGA_CTL, | ||
393 | 3, 0x12, 1, analog_tlv), | ||
394 | SOC_DOUBLE_R_TLV("DAC2 Analog Playback Volume", | ||
395 | TWL4030_REG_ARXL2_APGA_CTL, TWL4030_REG_ARXR2_APGA_CTL, | ||
396 | 3, 0x12, 1, analog_tlv), | ||
376 | 397 | ||
377 | /* Common capture gain controls */ | 398 | /* Common capture gain controls */ |
378 | SOC_DOUBLE_R_TLV("Capture Volume", | 399 | SOC_DOUBLE_R_TLV("Capture Volume", |