ALSA: wm8990: Implement speaker volume PGA

The latest revisions of the WM8990 provide a programmable gain amplifier
for the speaker - configure the register cache and implement controls
for this. Older revisions of the device ignore writes to these controls.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

authored by Mark Brown and committed by Takashi Iwai 97bb8129 436a7459

+18 -4
+6 -2
sound/soc/codecs/wm8990.c
··· 82 82 0x0003, /* R35 - ClassD1 */ 83 83 0x0000, /* R36 */ 84 84 0x0100, /* R37 - ClassD3 */ 85 - 0x0000, /* R38 */ 85 + 0x0079, /* R38 - ClassD4 */ 86 86 0x0000, /* R39 - Input Mixer1 */ 87 87 0x0000, /* R40 - Input Mixer2 */ 88 88 0x0000, /* R41 - Input Mixer3 */ ··· 311 311 WM8990_CDMODE_BIT, 1, 0), 312 312 313 313 SOC_SINGLE("Speaker Output Attenuation Volume", WM8990_SPEAKER_VOLUME, 314 - WM8990_SPKVOL_SHIFT, WM8990_SPKVOL_MASK, 0), 314 + WM8990_SPKATTN_SHIFT, WM8990_SPKATTN_MASK, 0), 315 315 SOC_SINGLE("Speaker DC Boost Volume", WM8990_CLASSD3, 316 316 WM8990_DCGAIN_SHIFT, WM8990_DCGAIN_MASK, 0), 317 317 SOC_SINGLE("Speaker AC Boost Volume", WM8990_CLASSD3, 318 318 WM8990_ACGAIN_SHIFT, WM8990_ACGAIN_MASK, 0), 319 + SOC_SINGLE_TLV("Speaker Volume", WM8990_CLASSD4, 320 + WM8990_SPKVOL_SHIFT, WM8990_SPKVOL_MASK, 0, out_pga_tlv), 321 + SOC_SINGLE("Speaker ZC Switch", WM8990_CLASSD4, 322 + WM8990_SPKZC_SHIFT, WM8990_SPKZC_MASK, 0), 319 323 320 324 SOC_WM899X_OUTPGA_SINGLE_R_TLV("Left DAC Digital Volume", 321 325 WM8990_LEFT_DAC_DIGITAL_VOLUME,
+12 -2
sound/soc/codecs/wm8990.h
··· 54 54 #define WM8990_SPEAKER_VOLUME 0x22 55 55 #define WM8990_CLASSD1 0x23 56 56 #define WM8990_CLASSD3 0x25 57 + #define WM8990_CLASSD4 0x26 57 58 #define WM8990_INPUT_MIXER1 0x27 58 59 #define WM8990_INPUT_MIXER2 0x28 59 60 #define WM8990_INPUT_MIXER3 0x29 ··· 529 528 /* 530 529 * R34 (0x22) - Speaker Volume 531 530 */ 532 - #define WM8990_SPKVOL_MASK 0x0003 /* SPKVOL - [1:0] */ 533 - #define WM8990_SPKVOL_SHIFT 0 531 + #define WM8990_SPKATTN_MASK 0x0003 /* SPKATTN - [1:0] */ 532 + #define WM8990_SPKATTN_SHIFT 0 534 533 535 534 /* 536 535 * R35 (0x23) - ClassD1 ··· 545 544 #define WM8990_DCGAIN_SHIFT 3 546 545 #define WM8990_ACGAIN_MASK 0x0007 /* ACGAIN - [2:0] */ 547 546 #define WM8990_ACGAIN_SHIFT 0 547 + 548 + /* 549 + * R38 (0x26) - ClassD4 550 + */ 551 + #define WM8990_SPKZC_MASK 0x0001 /* SPKZC */ 552 + #define WM8990_SPKZC_SHIFT 7 /* SPKZC */ 553 + #define WM8990_SPKVOL_MASK 0x007F /* SPKVOL - [6:0] */ 554 + #define WM8990_SPKVOL_SHIFT 0 /* SPKVOL - [6:0] */ 555 + 548 556 /* 549 557 * R39 (0x27) - Input Mixer1 550 558 */