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@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@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.htm...