mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 07:04:10 +08:00
ALSA: hda - Improved MacBook (Pro) 5,1 / 5,2 support
This patch adds support for automatically muting the speakers when headphones are inserted, as well as relabelling the headphone widgets from the non-standard "HP" to the standard "Headphone" for the mb5 model. Signed-off-by: Alex Murray <murray.alex@gmail.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
4dee8baa18
commit
a76221d47e
@ -7094,8 +7094,8 @@ static struct snd_kcontrol_new alc885_mb5_mixer[] = {
|
||||
HDA_BIND_MUTE ("Surround Playback Switch", 0x0d, 0x02, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("LFE Playback Volume", 0x0e, 0x00, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE ("LFE Playback Switch", 0x0e, 0x02, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("HP Playback Volume", 0x0f, 0x00, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE ("HP Playback Switch", 0x0f, 0x02, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0f, 0x00, HDA_OUTPUT),
|
||||
HDA_BIND_MUTE ("Headphone Playback Switch", 0x0f, 0x02, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
|
||||
HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
|
||||
HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x01, HDA_INPUT),
|
||||
@ -7496,6 +7496,7 @@ static struct hda_verb alc885_mb5_init_verbs[] = {
|
||||
{0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
|
||||
{0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
||||
{0x14, AC_VERB_SET_CONNECT_SEL, 0x03},
|
||||
{0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN},
|
||||
/* Front Mic pin: input vref at 80% */
|
||||
{0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
|
||||
{0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
|
||||
@ -7680,6 +7681,27 @@ static void alc885_mbp3_setup(struct hda_codec *codec)
|
||||
spec->autocfg.speaker_pins[0] = 0x14;
|
||||
}
|
||||
|
||||
static void alc885_mb5_automute(struct hda_codec *codec)
|
||||
{
|
||||
unsigned int present;
|
||||
|
||||
present = snd_hda_codec_read(codec, 0x14, 0,
|
||||
AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
|
||||
snd_hda_codec_amp_stereo(codec, 0x18, HDA_OUTPUT, 0,
|
||||
HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
|
||||
snd_hda_codec_amp_stereo(codec, 0x1a, HDA_OUTPUT, 0,
|
||||
HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
|
||||
|
||||
}
|
||||
|
||||
static void alc885_mb5_unsol_event(struct hda_codec *codec,
|
||||
unsigned int res)
|
||||
{
|
||||
/* Headphone insertion or removal. */
|
||||
if ((res >> 26) == ALC880_HP_EVENT)
|
||||
alc885_mb5_automute(codec);
|
||||
}
|
||||
|
||||
static void alc885_imac91_automute(struct hda_codec *codec)
|
||||
{
|
||||
unsigned int present;
|
||||
@ -9126,6 +9148,8 @@ static struct alc_config_preset alc882_presets[] = {
|
||||
.input_mux = &mb5_capture_source,
|
||||
.dig_out_nid = ALC882_DIGOUT_NID,
|
||||
.dig_in_nid = ALC882_DIGIN_NID,
|
||||
.unsol_event = alc885_mb5_unsol_event,
|
||||
.init_hook = alc885_mb5_automute,
|
||||
},
|
||||
[ALC885_MACPRO] = {
|
||||
.mixers = { alc882_macpro_mixer },
|
||||
|
Loading…
Reference in New Issue
Block a user