the patch was made for stac9200 and stac9205 and only tested by reporter with those two codecs
it is a regression of the driver which applied to all sigmatel codecs
static struct snd_kcontrol_new stac9200_mixer[] = { - HDA_CODEC_VOLUME("Master Playback Volume", 0xb, 0, HDA_OUTPUT), + HDA_CODEC_VOLUME_MIN_MUTE("Master Playback Volume", 0xb, 0, HDA_OUTPUT), HDA_CODEC_MUTE("Master Playback Switch", 0xb, 0, HDA_OUTPUT), HDA_CODEC_VOLUME("Capture Volume", 0x0a, 0, HDA_OUTPUT), HDA_CODEC_MUTE("Capture Switch", 0x0a, 0, HDA_OUTPUT), @@ -1020,7 +1020,7 @@ static struct snd_kcontrol_new stac92hd71bxx_loopback[] = { };
static struct snd_kcontrol_new stac925x_mixer[] = { - HDA_CODEC_VOLUME("Master Playback Volume", 0x0e, 0, HDA_OUTPUT), + HDA_CODEC_VOLUME_MIN_MUTE("Master Playback Volume", 0xe, 0, HDA_OUTPUT), HDA_CODEC_MUTE("Master Playback Switch", 0x0e, 0, HDA_OUTPUT), { } /* end */ }; @@ -1144,6 +1144,8 @@ static int stac92xx_build_controls(struct hda_codec *codec) HDA_OUTPUT, vmaster_tlv); /* correct volume offset */ vmaster_tlv[2] += vmaster_tlv[3] * spec->volume_offset; + /* minimum value is actually mute */ + vmaster_tlv[3] |= 0x1000; err = snd_hda_add_vmaster(codec, "Master Playback Volume", vmaster_tlv, slave_vols); if (err < 0)
the patch was made for stac9200 and stac9205 and only tested by reporter with those two codecs
it is a regression of the driver which applied to all sigmatel codecs
static struct snd_kcontrol_new stac9200_mixer[] = { VOLUME( "Master Playback Volume", 0xb, 0, HDA_OUTPUT), VOLUME_ MIN_MUTE( "Master Playback Volume", 0xb, 0, HDA_OUTPUT), MUTE("Master Playback Switch", 0xb, 0, HDA_OUTPUT), VOLUME( "Capture Volume", 0x0a, 0, HDA_OUTPUT), MUTE("Capture Switch", 0x0a, 0, HDA_OUTPUT), loopback[ ] = {
- HDA_CODEC_
+ HDA_CODEC_
HDA_CODEC_
HDA_CODEC_
HDA_CODEC_
@@ -1020,7 +1020,7 @@ static struct snd_kcontrol_new stac92hd71bxx_
};
static struct snd_kcontrol_new stac925x_mixer[] = { VOLUME( "Master Playback Volume", 0x0e, 0, HDA_OUTPUT), VOLUME_ MIN_MUTE( "Master Playback Volume", 0xe, 0, HDA_OUTPUT), MUTE("Master Playback Switch", 0x0e, 0, HDA_OUTPUT), build_controls( struct hda_codec *codec) offset; add_vmaster( codec, "Master Playback Volume",
vmaster_ tlv, slave_vols);
- HDA_CODEC_
+ HDA_CODEC_
HDA_CODEC_
{ } /* end */
};
@@ -1144,6 +1144,8 @@ static int stac92xx_
HDA_OUTPUT, vmaster_tlv);
/* correct volume offset */
vmaster_tlv[2] += vmaster_tlv[3] * spec->volume_
+ /* minimum value is actually mute */
+ vmaster_tlv[3] |= 0x1000;
err = snd_hda_
if (err < 0)