On 05/25/2010 11:26 AM, Takashi Iwai wrote: > At Sun, 23 May 2010 10:55:00 -0700, > Justin P. Mattock wrote: > >> What seemed to be a simple little task of getting the microphone >> to work, ended up becoming a bigger task than I had set out. >> (oh-well, good learning experience). >> >> Anyways below you will find an updated patch to the iMac9,1 machine >> which fixes some issues that I found.(keep in mind this is still a work >> in progress). >> >> First issue: >> With the original patch, I've noticed by unmuting the mic >> (and even having it muted), there is a distorted("Noise") >> coming from the internal speakers, even when the headphones are plugged in. >> What my finding's revealed is: >> >> /* Mic (rear) pin: input vref at 80% */ >> {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, >> {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, >> >> > From the original patch. Looking at codec#0 0x18/0x1a is listed as: >> >> Node 0x18 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out >> Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0 >> Amp-In vals: [0x00 0x00] >> Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 >> Amp-Out vals: [0x00 0x00] >> Pincap 0x0000373c: IN OUT HP Detect >> Vref caps: HIZ 50 GRD 80 100 >> Pin Default 0x90100141: [Fixed] Speaker at Int N/A >> Conn = Unknown, Color = Unknown >> DefAssociation = 0x4, Sequence = 0x1 >> Misc = NO_PRESENCE >> Pin-ctls: 0x41: OUT VREF_50 >> Unsolicited: tag=00, enabled=0 >> Connection: 5 >> 0x0c* 0x0d 0x0e 0x0f 0x26 >> >> seems this Node is listed as: [Fixed] Speaker while 0x15 >> >> Node 0x15 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out >> Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0 >> Amp-In vals: [0x00 0x00] >> Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 >> Amp-Out vals: [0x80 0x80] >> Pincap 0x0000373c: IN OUT HP Detect >> Vref caps: HIZ 50 GRD 80 100 >> Pin Default 0x018b3020: [Jack] Line In at Ext Rear >> Conn = Comb, Color = Blue >> DefAssociation = 0x2, Sequence = 0x0 >> Pin-ctls: 0x01: VREF_50 >> Unsolicited: tag=00, enabled=0 >> Connection: 5 >> 0x0c 0x0d* 0x0e 0x0f 0x26 >> >> is [Jack] Line In at Ext Rear. >> (looking at the other apple products as examples >> I came up with the fix below). >> >> Second issue: >> alc885_mbp_4ch_modes >> The original patch does a good job with the >> HP pin automute function, but from what I noticed is I would have to manually >> change the channel form 2 to 4 after plugging the headphones in. >> And not to mention having odd moments to where I was jamming out >> with the headphones on, then later realized I had sound blasting out >> of the speakers as well. My findings revealed that changing >> alc885_mbp_4ch_modes to alc885_mba21_ch_modes and setting >> - spec->autocfg.speaker_pins[0] = 0x15; >> + spec->autocfg.speaker_pins[0] = 0x18; >> gets the automute function when the headphones plugged in working >> flawlessly(and the no need to manually change the channel number >> afterwards). >> >> Third issue: >> alc885_imac91_mixer >> There probably doesnt need to be anything changed with this >> (esspecially if your one to like lots of sliders),but my findings >> revealed that mac osx only has a master on the top right, >> another switch on itunes, and then a slider for the mic. >> >> So the changes I did below try and mimic osx as much as possible >> (only thing I had an issue with is just having one mute switch >> on the master, instead of having two(still investigating)). >> >> fourth issue: >> alc882_capture_source >> I endeded up creating alc889A_imac91_capture_source() >> only because looking at alc882_capture_source I see >> that the mic is set to 0x1 while this works, I also noticed >> that adding 0x1 and 0x01 and testing that 0x1 somehow >> stops working, and 0x01 works(so I figured 0x01 was more >> of the alpha of the numbers(still need to figure out >> where that valuse is)). In any case the microphone >> does work with the original, and with the below patch, but both >> still record not as clean(lots of "Noise", which I would like to >> look into too). >> Note: using alsamixer -Va reveals the capture switches. >> >> Overall the original patch is good, the below patch does >> (hopefully)address some issues, if it's too much of a change >> I can go back, and just adjust the verb pins on the original >> and just call it that..(main thing over here is I don't have >> the "Noise" coming out of the speakers(and music sounds good)... >> >> cheers.. >> >> Signed-off-by: Justin P. Mattock<justinmattock@xxxxxxxxx> >> > Looks good. Now applied. > Thanks. > > > Takashi > > o.k... >> --- >> sound/pci/hda/patch_realtek.c | 84 +++++++++++++++++++--------------------- >> 1 files changed, 40 insertions(+), 44 deletions(-) >> >> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c >> index 886d8e4..d8adea3 100644 >> --- a/sound/pci/hda/patch_realtek.c >> +++ b/sound/pci/hda/patch_realtek.c >> @@ -6937,6 +6937,14 @@ static struct hda_input_mux alc889A_mb31_capture_source = { >> }, >> }; >> >> +static struct hda_input_mux alc889A_imac91_capture_source = { >> + .num_items = 2, >> + .items = { >> + { "Mic", 0x01 }, >> + { "Line", 0x2 }, /* Not sure! */ >> + }, >> +}; >> + >> /* >> * 2ch mode >> */ >> @@ -7398,15 +7406,8 @@ static struct snd_kcontrol_new alc885_macmini3_mixer[] = { >> }; >> >> static struct snd_kcontrol_new alc885_imac91_mixer[] = { >> - HDA_CODEC_VOLUME("Line-Out Playback Volume", 0x0c, 0x00, HDA_OUTPUT), >> - HDA_BIND_MUTE ("Line-Out Playback Switch", 0x0c, 0x02, HDA_INPUT), >> - HDA_CODEC_MUTE ("Speaker Playback Switch", 0x14, 0x00, HDA_OUTPUT), >> - HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0d, 0x00, HDA_OUTPUT), >> - 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, 0x00, HDA_INPUT), >> - HDA_CODEC_MUTE ("Mic Playback Switch", 0x0b, 0x00, HDA_INPUT), >> - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0x00, HDA_INPUT), >> + HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0c, 0x00, HDA_OUTPUT), >> + HDA_BIND_MUTE("Speaker Playback Switch", 0x0c, 0x02, HDA_INPUT), >> { } /* end */ >> }; >> >> @@ -7907,61 +7908,56 @@ static struct hda_verb alc885_mbp3_init_verbs[] = { >> >> /* iMac 9,1 */ >> static struct hda_verb alc885_imac91_init_verbs[] = { >> - /* Line-Out mixer: unmute input/output amp left and right (volume = 0) */ >> - {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, >> - {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, >> - {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, >> - /* Rear mixer */ >> - {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, >> - {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, >> - {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, >> - /* HP Pin: output 0 (0x0c) */ >> + /* Internal Speaker Pin (0x0c) */ >> + {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, (PIN_OUT | AC_PINCTL_VREF_50) }, >> + {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, >> + {0x18, AC_VERB_SET_CONNECT_SEL, 0x00}, >> + {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, (PIN_OUT | AC_PINCTL_VREF_50) }, >> + {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, >> + {0x1a, AC_VERB_SET_CONNECT_SEL, 0x00}, >> + /* HP Pin: Rear */ >> {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, >> {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, >> {0x14, AC_VERB_SET_CONNECT_SEL, 0x00}, >> - {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN}, >> - /* Internal Speakers: output 0 (0x0d) */ >> - {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, >> + {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, (ALC880_HP_EVENT | AC_USRSP_EN)}, >> + /* Line in Rear */ >> + {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, AC_PINCTL_VREF_50}, >> {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, >> - {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, >> - /* Mic (rear) pin: input vref at 80% */ >> - {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, >> - {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, >> /* 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}, >> - /* Line In pin: use output 1 when in LineOut mode */ >> - {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, >> - {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, >> - {0x1a, AC_VERB_SET_CONNECT_SEL, 0x01}, >> - >> - /* FIXME: use matrix-type input source selection */ >> - /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */ >> - /* Input mixer1: unmute Mic, F-Mic, Line, CD inputs */ >> + /* Rear mixer */ >> + {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, >> + {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, >> + {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, >> + /* Line-Out mixer: unmute input/output amp left and right (volume = 0) */ >> + {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, >> + {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, >> + {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, >> + /* 0x24 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In */ >> {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, >> {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, >> {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, >> {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, >> - /* Input mixer2 */ >> + /* 0x23 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In */ >> {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, >> {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, >> {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, >> {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, >> - /* Input mixer3 */ >> + /* 0x22 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In */ >> {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, >> {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, >> {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, >> {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, >> - /* ADC1: mute amp left and right */ >> + /* 0x07 [Audio Input] wcaps 0x10011b: Stereo Amp-In */ >> {0x07, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, >> {0x07, AC_VERB_SET_CONNECT_SEL, 0x00}, >> - /* ADC2: mute amp left and right */ >> + /* 0x08 [Audio Input] wcaps 0x10011b: Stereo Amp-In */ >> {0x08, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, >> {0x08, AC_VERB_SET_CONNECT_SEL, 0x00}, >> - /* ADC3: mute amp left and right */ >> + /* 0x09 [Audio Input] wcaps 0x10011b: Stereo Amp-In */ >> {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, >> {0x09, AC_VERB_SET_CONNECT_SEL, 0x00}, >> - >> { } >> }; >> >> @@ -8030,7 +8026,7 @@ static void alc885_imac91_setup(struct hda_codec *codec) >> struct alc_spec *spec = codec->spec; >> >> spec->autocfg.hp_pins[0] = 0x14; >> - spec->autocfg.speaker_pins[0] = 0x15; >> + spec->autocfg.speaker_pins[0] = 0x18; >> spec->autocfg.speaker_pins[1] = 0x1a; >> } >> >> @@ -9539,14 +9535,14 @@ static struct alc_config_preset alc882_presets[] = { >> .init_hook = alc885_imac24_init_hook, >> }, >> [ALC885_IMAC91] = { >> - .mixers = { alc885_imac91_mixer, alc882_chmode_mixer }, >> + .mixers = {alc885_imac91_mixer}, >> .init_verbs = { alc885_imac91_init_verbs, >> alc880_gpio1_init_verbs }, >> .num_dacs = ARRAY_SIZE(alc882_dac_nids), >> .dac_nids = alc882_dac_nids, >> - .channel_mode = alc885_mbp_4ch_modes, >> - .num_channel_mode = ARRAY_SIZE(alc885_mbp_4ch_modes), >> - .input_mux =&alc882_capture_source, >> + .channel_mode = alc885_mba21_ch_modes, >> + .num_channel_mode = ARRAY_SIZE(alc885_mba21_ch_modes), >> + .input_mux =&alc889A_imac91_capture_source, >> .dig_out_nid = ALC882_DIGOUT_NID, >> .dig_in_nid = ALC882_DIGIN_NID, >> .unsol_event = alc_automute_amp_unsol_event, >> -- >> 1.7.1.rc1.21.gf3bd6 >> >> > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel