diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-06-11 04:51:28 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-06-11 05:55:48 -0400 |
commit | a686ec4c5f28eb1b384e4b87b08543155c970072 (patch) | |
tree | d35a87067360948ffad9e2dae8cfeb9d97d5925e /sound/hda | |
parent | bf06848bdbe549175d25d2327ab9f37d4bd556b7 (diff) |
ALSA: hda - Re-add the lost fake mute support
Yet another regression by the transition to regmap cache; for better
usability, we had the fake mute control using the zero amp value for
Conexant codecs, and this was forgotten in the new hda core code.
Since the bits 4-7 are unused for the amp registers (as we follow the
syntax of AMP_GET verb), the bit 4 is now used to indicate the fake
mute. For setting this flag, snd_hda_codec_amp_update() becomes a
function from a simple macro. The bonus is that it gained a proper
function description.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/hda')
-rw-r--r-- | sound/hda/hdac_regmap.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sound/hda/hdac_regmap.c b/sound/hda/hdac_regmap.c index c4f5e61d4404..1eabcdf69457 100644 --- a/sound/hda/hdac_regmap.c +++ b/sound/hda/hdac_regmap.c | |||
@@ -246,6 +246,9 @@ static int hda_reg_read(void *context, unsigned int reg, unsigned int *val) | |||
246 | return hda_reg_read_stereo_amp(codec, reg, val); | 246 | return hda_reg_read_stereo_amp(codec, reg, val); |
247 | if (verb == AC_VERB_GET_PROC_COEF) | 247 | if (verb == AC_VERB_GET_PROC_COEF) |
248 | return hda_reg_read_coef(codec, reg, val); | 248 | return hda_reg_read_coef(codec, reg, val); |
249 | if ((verb & 0x700) == AC_VERB_SET_AMP_GAIN_MUTE) | ||
250 | reg &= ~AC_AMP_FAKE_MUTE; | ||
251 | |||
249 | err = snd_hdac_exec_verb(codec, reg, 0, val); | 252 | err = snd_hdac_exec_verb(codec, reg, 0, val); |
250 | if (err < 0) | 253 | if (err < 0) |
251 | return err; | 254 | return err; |
@@ -283,6 +286,8 @@ static int hda_reg_write(void *context, unsigned int reg, unsigned int val) | |||
283 | 286 | ||
284 | switch (verb & 0xf00) { | 287 | switch (verb & 0xf00) { |
285 | case AC_VERB_SET_AMP_GAIN_MUTE: | 288 | case AC_VERB_SET_AMP_GAIN_MUTE: |
289 | if ((reg & AC_AMP_FAKE_MUTE) && (val & AC_AMP_MUTE)) | ||
290 | val = 0; | ||
286 | verb = AC_VERB_SET_AMP_GAIN_MUTE; | 291 | verb = AC_VERB_SET_AMP_GAIN_MUTE; |
287 | if (reg & AC_AMP_GET_LEFT) | 292 | if (reg & AC_AMP_GET_LEFT) |
288 | verb |= AC_AMP_SET_LEFT >> 8; | 293 | verb |= AC_AMP_SET_LEFT >> 8; |