On Sun, Aug 16, 2009 at 05:22:23PM +0800, Takashi Iwai wrote:
At Sun, 16 Aug 2009 16:53:17 +0800, Wu Fengguang wrote:
There are 3 causes to the silence of Compaq 6530s' internal speaker:
- HP pin 0x11 always return 0xffff,ffff (pin_presence=1), which automutes the speaker at module loading time.
This is odd. Is the sense-trigger issued before reading the pin sense?
Sorry, what do you mean? The facts I explored are: - ad1884a_hp_automute() will be explicitly called by ad1884a_hp_init() - ad1884a_hp_unsol_event() is never called on plug events - I tried manually execute AC_VERB_SET_PIN_SENSE then read pin sense, it takes effect on the impedance, but pin_presence still remains 1.
- HP pin 0x11 won't emit unsol events on jack plug/unplug, so the speaker have no chance to be unmuted.
Can it be fixed with enable_msi=1 option?
Not yet, will try it.
- pin 0x1c must be set to PIN_OUT mode to make the speaker work this is the most weird part - line-in pin 0x1c and speaker pin 0x16 seem to be unrelated.
Hm, sounds strange.
Yes. Note that the 6530s I have is a test box. Another 6531s which is bought directly from market don't have this bug.
Fix the problems by
- add "Speaker" and "Headphone" mixers to allow hand tuning by user
It's a bit buggy because the auto-mute feature can turn on/off these silently. If any, these controls have to be notified at changing the state via plugging.
OK. Are there code examples for doing this? Thank you!
Thanks, Fengguang
thanks,
Takashi
- add the 0x1c PIN_OUT quirk
Signed-off-by: Wu Fengguang fengguang.wu@intel.com
sound/pci/hda/patch_analog.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
--- sound-2.6.orig/sound/pci/hda/patch_analog.c 2009-08-05 09:40:13.000000000 +0800 +++ sound-2.6/sound/pci/hda/patch_analog.c 2009-08-16 16:49:39.000000000 +0800 @@ -3717,6 +3717,8 @@ static struct snd_kcontrol_new ad1884a_l HDA_CODEC_VOLUME("Master Playback Volume", 0x21, 0x0, HDA_OUTPUT), HDA_CODEC_MUTE("Master Playback Switch", 0x21, 0x0, HDA_OUTPUT), HDA_CODEC_MUTE("Dock Playback Switch", 0x12, 0x0, HDA_OUTPUT),
- HDA_CODEC_MUTE("Headphone Playback Switch", 0x11, 0x0, HDA_OUTPUT),
- HDA_CODEC_MUTE("Speaker Playback Switch", 0x16, 0x0, HDA_OUTPUT), HDA_CODEC_VOLUME("PCM Playback Volume", 0x20, 0x5, HDA_INPUT), HDA_CODEC_MUTE("PCM Playback Switch", 0x20, 0x5, HDA_INPUT), HDA_CODEC_VOLUME("Mic Playback Volume", 0x20, 0x00, HDA_INPUT),
@@ -3837,8 +3839,10 @@ static struct hda_verb ad1884a_laptop_ve {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, /* Port-F pin */
- {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
- {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
- /* required for compaq 6530s speaker output */
- {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, /* Port-C pin - internal mic-in */ {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, {0x14, AC_VERB_SET_AMP_GAIN_MUTE, 0x7002}, /* raise mic as default */
@@ -4003,6 +4007,8 @@ static struct snd_pci_quirk ad1884a_cfg_ SND_PCI_QUIRK(0x103c, 0x3030, "HP", AD1884A_MOBILE), SND_PCI_QUIRK(0x103c, 0x3037, "HP 2230s", AD1884A_LAPTOP), SND_PCI_QUIRK(0x103c, 0x3056, "HP", AD1884A_MOBILE),
- SND_PCI_QUIRK(0x103c, 0x30e8, "HP Compaq 6530s", AD1884A_LAPTOP),
- SND_PCI_QUIRK(0x103c, 0x30e9, "HP Compaq 6531s", AD1884A_LAPTOP), SND_PCI_QUIRK_MASK(0x103c, 0xfff0, 0x3070, "HP", AD1884A_MOBILE), SND_PCI_QUIRK_MASK(0x103c, 0xfff0, 0x30d0, "HP laptop", AD1884A_LAPTOP), SND_PCI_QUIRK_MASK(0x103c, 0xfff0, 0x30e0, "HP laptop", AD1884A_LAPTOP),