At Thu, 30 Jul 2009 14:59:25 +0800, Wu Fengguang wrote: > > On Thu, Jul 30, 2009 at 02:52:21PM +0800, Takashi Iwai wrote: > > At Thu, 30 Jul 2009 14:47:25 +0800, > > Wu Fengguang wrote: > > > > > > +static struct hda_verb alc262_hippo_unsol_verbs[] = { > > > + {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT}, > > > + {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, > > > + {} > > > +}; > > > > I don't think it's good to move alc262 stuff into the middle of > > alc88x. Rather define a common content, e.g. alc_pin15_hp_automute_verbs[], > > and use it in all places. Or, to reduce the patch size, you can simply > > #define alc262_hippo_unsol_verbs alc_pin15_hp_automute_verbs > > Good idea. Here is the updated patch. > > --- > hda: add automute support to Intel ALC889/ALC889A models > > It auto mutes all 8-channel outputs at rear panel when > the front panel headphone is connected. > > Signed-off-by: Wu Fengguang <fengguang.wu@xxxxxxxxx> Looks good. Applied now. thanks, Takashi > --- > sound/pci/hda/patch_realtek.c | 47 +++++++++++++++++++++++--------- > 1 file changed, 35 insertions(+), 12 deletions(-) > > --- sound-2.6.orig/sound/pci/hda/patch_realtek.c > +++ sound-2.6/sound/pci/hda/patch_realtek.c > @@ -1436,6 +1436,25 @@ static void alc_automute_amp_unsol_event > alc_automute_amp(codec); > } > > +static void alc889_automute_init(struct hda_codec *codec) > +{ > + struct alc_spec *spec = codec->spec; > + > + spec->autocfg.hp_pins[0] = 0x15; > + spec->autocfg.speaker_pins[0] = 0x14; > + spec->autocfg.speaker_pins[1] = 0x16; > + spec->autocfg.speaker_pins[2] = 0x17; > + spec->autocfg.speaker_pins[3] = 0x19; > + spec->autocfg.speaker_pins[4] = 0x1a; > + alc_automute_amp(codec); > +} > + > +static void alc889_intel_init_hook(struct hda_codec *codec) > +{ > + alc889_coef_init(codec); > + alc889_automute_init(codec); > +} > + > static void alc888_fujitsu_xa3530_init_hook(struct hda_codec *codec) > { > struct alc_spec *spec = codec->spec; > @@ -6994,6 +7013,11 @@ static struct hda_verb alc889_eapd_verbs > { } > }; > > +static struct hda_verb alc_hp15_unsol_verbs[] = { > + {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT}, > + {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, > + {} > +}; > > static struct hda_verb alc885_init_verbs[] = { > /* Front mixer: unmute input/output amp left and right (volume = 0) */ > @@ -7019,7 +7043,7 @@ static struct hda_verb alc885_init_verbs > {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, > > /* Front HP Pin: output 0 (0x0c) */ > - {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, > + {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, > {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, > {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, > /* Front Pin: output 0 (0x0c) */ > @@ -8861,7 +8885,8 @@ static struct alc_config_preset alc882_p > }, > [ALC889A_INTEL] = { > .mixers = { alc885_8ch_intel_mixer, alc883_chmode_mixer }, > - .init_verbs = { alc885_init_verbs, alc885_init_input_verbs }, > + .init_verbs = { alc885_init_verbs, alc885_init_input_verbs, > + alc_hp15_unsol_verbs }, > .num_dacs = ARRAY_SIZE(alc883_dac_nids), > .dac_nids = alc883_dac_nids, > .num_adc_nids = ARRAY_SIZE(alc889_adc_nids), > @@ -8873,12 +8898,14 @@ static struct alc_config_preset alc882_p > .channel_mode = alc889_8ch_intel_modes, > .capsrc_nids = alc889_capsrc_nids, > .input_mux = &alc889_capture_source, > + .init_hook = alc889_automute_init, > + .unsol_event = alc_automute_amp_unsol_event, > .need_dac_fix = 1, > }, > [ALC889_INTEL] = { > .mixers = { alc885_8ch_intel_mixer, alc883_chmode_mixer }, > .init_verbs = { alc885_init_verbs, alc889_init_input_verbs, > - alc889_eapd_verbs }, > + alc889_eapd_verbs, alc_hp15_unsol_verbs}, > .num_dacs = ARRAY_SIZE(alc883_dac_nids), > .dac_nids = alc883_dac_nids, > .num_adc_nids = ARRAY_SIZE(alc889_adc_nids), > @@ -8890,7 +8917,8 @@ static struct alc_config_preset alc882_p > .channel_mode = alc889_8ch_intel_modes, > .capsrc_nids = alc889_capsrc_nids, > .input_mux = &alc889_capture_source, > - .init_hook = alc889_coef_init, > + .init_hook = alc889_intel_init_hook, > + .unsol_event = alc_automute_amp_unsol_event, > .need_dac_fix = 1, > }, > [ALC883_6ST_DIG] = { > @@ -10123,12 +10151,6 @@ static struct hda_verb alc262_eapd_verbs > { } > }; > > -static struct hda_verb alc262_hippo_unsol_verbs[] = { > - {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT}, > - {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, > - {} > -}; > - > static struct hda_verb alc262_hippo1_unsol_verbs[] = { > {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc0}, > {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00}, > @@ -11170,7 +11192,7 @@ static struct alc_config_preset alc262_p > }, > [ALC262_HIPPO] = { > .mixers = { alc262_hippo_mixer }, > - .init_verbs = { alc262_init_verbs, alc262_hippo_unsol_verbs}, > + .init_verbs = { alc262_init_verbs, alc_hp15_unsol_verbs}, > .num_dacs = ARRAY_SIZE(alc262_dac_nids), > .dac_nids = alc262_dac_nids, > .hp_nid = 0x03, > @@ -11290,7 +11312,8 @@ static struct alc_config_preset alc262_p > }, > [ALC262_BENQ_T31] = { > .mixers = { alc262_benq_t31_mixer }, > - .init_verbs = { alc262_init_verbs, alc262_benq_t31_EAPD_verbs, alc262_hippo_unsol_verbs }, > + .init_verbs = { alc262_init_verbs, alc262_benq_t31_EAPD_verbs, > + alc_hp15_unsol_verbs }, > .num_dacs = ARRAY_SIZE(alc262_dac_nids), > .dac_nids = alc262_dac_nids, > .hp_nid = 0x03, > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel