[alsa-devel] [PATCH] hda: enable speaker output for Compaq 6530s/6531s

Takashi Iwai tiwai at suse.de
Mon Aug 17 08:46:14 CEST 2009


At Sun, 16 Aug 2009 19:01:10 +0800,
Wu Fengguang wrote:
> 
> 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.

The fact that it returns only -1 sounds rather like a hardware issue.
Or, at least, reading a wrong place or so.

> > > - 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!

Basically you need to call snd_ctl_notify() to control elements which
h/w values are changed.  In that way, the mixer app can be notified and
update the values appropriately.

However, I think adding these control unconditionally to the existing
model is no right solution.  The laptop model is designed for the device
where the HP jack detection works properly.  If the device isn't such one,
the model itself isn't applicable.

So, it's better to create either another model without jack detection,
or add a check for hint strings, at least.
In either case, you can create two controls, Headphone and Speaker,
which access the h/w normally without master control.  Then a master
control will be automatically created as vmaster.


Takashi


> 
> Thanks,
> Fengguang
> 
> > 
> > thanks,
> > 
> > Takashi
> > 
> > > - add the 0x1c PIN_OUT quirk
> > > 
> > > Signed-off-by: Wu Fengguang <fengguang.wu at 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),
> > > 
> 


More information about the Alsa-devel mailing list