[alsa-devel] ALC262 - HDA-Intel

Andy hornett83 at yahoo.co.uk
Wed Jul 25 17:51:25 CEST 2007


Hello again Takashi,

I put in some printks, and indeed the function does
run and it correctly detects that there are no
headphones present, but the speakers are not unmuted.

(the 'mute' variable both times is reported as being
0x80 after it is set with snd_hda_codec_amp_read)

Thanks,
Andy

--- Takashi Iwai <tiwai at suse.de> wrote:

> At Tue, 24 Jul 2007 18:08:24 +0100 (BST),
> Andy wrote:
> > 
> > Thank-you Takashi,
> > 
> > I applied the patch (to the in-kernel version from
> > 2.6.22.1) but sadly it did not fix the problem.  
> > 
> > I noticed that my XFCE mixer wasn't broken before
> I
> > plugged the 'phones in this time, not sure if the
> > patch fixed that, but it seems like a step in the
> > right direction!
> 
> I don't understand how XFCE mixer behavior changes,
> but you mean that
> the playback still doesn't work without replugging
> the jack?
> If yes, add a debug printk in
> alc262_hippo_automute() to check whether
> this function gets really called without replugging
> at loading the
> module.  (And you can check the variable "preset"
> there which
> indicates the presence of the jack.)
> 
> 
> Takashi
> 
> > 
> > Regards,
> > Andy.
> > 
> > 
> > --- Takashi Iwai <tiwai at suse.de> wrote:
> > 
> > > At Tue, 24 Jul 2007 11:08:29 +0100 (BST),
> > > Andy wrote:
> > > > 
> > > > I have a ALC262 hda-intel card which doesn't
> > > function
> > > > quite correctly. Details can be found at
> > > >
> > >
> >
>
https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/110145
> > > > 
> > > > I got bored of waiting for it to be fixed, and
> had
> > > a
> > > > go myself. My knowledge of ALSA is very
> limited,
> > > but
> > > > nevertheless it was really simple to add my
> device
> > > ids
> > > > to the quirks list in the patch_realtek.c file
> -
> > > eg:
> > > > 
> > > > ...
> > > > SND_PCI_QUIRK(0x104d, 0x900e, "Sony ASSAMD",
> > > > ALC262_SONY_ASSAMD),
> > > > SND_PCI_QUIRK(0x104d, 0x1f00, "Sony ASSAMD",
> > > > ALC262_SONY_ASSAMD),
> > > > /* My card... */
> > > > SND_PCI_QUIRK(0x104d, 0x820f, "Sony ASSAMD",
> > > > ALC262_SONY_ASSAMD),
> > > > ...
> > > > 
> > > > I found by trial and error that
> ALC262_SONY_ASSAMD
> > > > almost works. Connecting headphones disables
> > > built-in
> > > > speakers and unplugging them re-enables them.
> > > > 
> > > > However, something does not get initialised
> until
> > > this
> > > > is done. That is, every bootup using
> > > > ALC262_SONY_ASSAMD, I must plug in and remove
> my
> > > > headphones before the device is initialised
> > > properly. 
> > > > 
> > > > Until this is done, I get no sound and the
> little
> > > GUI
> > > > mixer in XFCE doesn't show the list of
> supported
> > > > outputs on the device. 
> > > > 
> > > > I'm posting this to the devel list as I'm more
> > > > interested the code side of things rather than
> > > > actually having working sound :)
> > > 
> > > Could you try the patch below?
> > > 
> > > 
> > > thanks,
> > > 
> > > Takashi
> > > 
> > > diff -r 2250b8a4b66a pci/hda/patch_realtek.c
> > > --- a/pci/hda/patch_realtek.c	Tue Jul 24
> 12:49:39
> > > 2007 +0200
> > > +++ b/pci/hda/patch_realtek.c	Tue Jul 24
> 15:00:15
> > > 2007 +0200
> > > @@ -7269,21 +7269,17 @@ static struct hda_verb
> > > alc262_sony_unsol
> > >  };
> > >  
> > >  /* mute/unmute internal speaker according to
> the hp
> > > jack and mute state */
> > > -static void alc262_hippo_automute(struct
> hda_codec
> > > *codec, int force)
> > > -{
> > > -	struct alc_spec *spec = codec->spec;
> > > +static void alc262_hippo_automute(struct
> hda_codec
> > > *codec)
> > > +{
> > >  	unsigned int mute;
> > > -
> > > -	if (force || !spec->sense_updated) {
> > > -		unsigned int present;
> > > -		/* need to execute and sync at first */
> > > -		snd_hda_codec_read(codec, 0x15, 0,
> > > AC_VERB_SET_PIN_SENSE, 0);
> > > -		present = snd_hda_codec_read(codec, 0x15, 0,
> > > -				    	 AC_VERB_GET_PIN_SENSE, 0);
> > > -		spec->jack_present = (present & 0x80000000)
> != 0;
> > > -		spec->sense_updated = 1;
> > > -	}
> > > -	if (spec->jack_present) {
> > > +	unsigned int present;
> > > +
> > > +	/* need to execute and sync at first */
> > > +	snd_hda_codec_read(codec, 0x15, 0,
> > > AC_VERB_SET_PIN_SENSE, 0);
> > > +	present = snd_hda_codec_read(codec, 0x15, 0,
> > > +				     AC_VERB_GET_PIN_SENSE, 0);
> > > +	present = (present & 0x80000000) != 0;
> > > +	if (present) {
> > >  		/* mute internal speaker */
> > >  		snd_hda_codec_amp_update(codec, 0x14, 0,
> > > HDA_OUTPUT, 0,
> > >  					 0x80, 0x80);
> > > @@ -7306,24 +7302,19 @@ static void
> > > alc262_hippo_unsol_event(str
> > >  {
> > >  	if ((res >> 26) != ALC880_HP_EVENT)
> > >  		return;
> > > -	alc262_hippo_automute(codec, 1);
> > > -}
> > > -
> > > -static void alc262_hippo1_automute(struct
> hda_codec
> > > *codec, int force)
> > > -{
> > > -	struct alc_spec *spec = codec->spec;
> > > +	alc262_hippo_automute(codec);
> > > +}
> > > +
> > > +static void alc262_hippo1_automute(struct
> hda_codec
> > > *codec)
> > > +{
> > >  	unsigned int mute;
> > > -
> > > -	if (force || !spec->sense_updated) {
> > > -		unsigned int present;
> > > -		/* need to execute and sync at first */
> > > -		snd_hda_codec_read(codec, 0x1b, 0,
> > > AC_VERB_SET_PIN_SENSE, 0);
> > > -		present = snd_hda_codec_read(codec, 0x1b, 0,
> > > -				    	 AC_VERB_GET_PIN_SENSE, 0);
> > > -		spec->jack_present = (present & 0x80000000)
> != 0;
> > > -		spec->sense_updated = 1;
> > > -	}
> > > -	if (spec->jack_present) {
> > > +	unsigned int present;
> > > +
> > > +	snd_hda_codec_read(codec, 0x1b, 0,
> > > AC_VERB_SET_PIN_SENSE, 0);
> > > +	present = snd_hda_codec_read(codec, 0x1b, 0,
> > > +				     AC_VERB_GET_PIN_SENSE, 0);
> > > +	present = (present & 0x80000000) != 0;
> > > +	if (present) {
> > >  		/* mute internal speaker */
> > >  		snd_hda_codec_amp_update(codec, 0x14, 0,
> > > HDA_OUTPUT, 0,
> > >  					 0x80, 0x80);
> > > @@ -7346,7 +7337,7 @@ static void
> > > alc262_hippo1_unsol_event(st
> 
=== message truncated ===



      ___________________________________________________________ 
Yahoo! Mail is the world's favourite email. Don't settle for less, sign up for
your free account today http://uk.rd.yahoo.com/evt=44106/*http://uk.docs.yahoo.com/mail/winter07.html 


More information about the Alsa-devel mailing list