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!
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 { if ((res >> 26) != ALC880_HP_EVENT) return;
- alc262_hippo1_automute(codec, 1);
- alc262_hippo1_automute(codec);
}
/* @@ -7923,6 +7914,7 @@ static struct snd_pci_quirk alc262_cfg_t SND_PCI_QUIRK(0x17ff, 0x058f, "Benq Hippo", ALC262_HIPPO_1), SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_BENQ_ED8), SND_PCI_QUIRK(0x17ff, 0x058d, "Benq T31-16", ALC262_BENQ_T31),
- SND_PCI_QUIRK(0x104d, 0x820f, "Sony ASSAMD",
ALC262_SONY_ASSAMD), SND_PCI_QUIRK(0x104d, 0x9015, "Sony 0x9015", ALC262_SONY_ASSAMD), SND_PCI_QUIRK(0x104d, 0x900e, "Sony ASSAMD", ALC262_SONY_ASSAMD), SND_PCI_QUIRK(0x104d, 0x1f00, "Sony ASSAMD", ALC262_SONY_ASSAMD), @@ -7951,6 +7943,7 @@ static struct alc_config_preset alc262_p .channel_mode = alc262_modes, .input_mux = &alc262_capture_source, .unsol_event = alc262_hippo_unsol_event,
}, [ALC262_HIPPO_1] = { .mixers = { alc262_hippo1_mixer },.init_hook = alc262_hippo_automute,
@@ -7963,6 +7956,7 @@ static struct alc_config_preset alc262_p .channel_mode = alc262_modes, .input_mux = &alc262_capture_source, .unsol_event = alc262_hippo1_unsol_event,
}, [ALC262_FUJITSU] = { .mixers = { alc262_fujitsu_mixer },.init_hook = alc262_hippo1_automute,
@@ -8027,6 +8021,7 @@ static struct alc_config_preset alc262_p .channel_mode = alc262_modes, .input_mux = &alc262_capture_source, .unsol_event = alc262_hippo_unsol_event,
}, [ALC262_BENQ_T31] = { .mixers = { alc262_benq_t31_mixer },.init_hook = alc262_hippo_automute,
@@ -8038,6 +8033,7 @@ static struct alc_config_preset alc262_p .channel_mode = alc262_modes, .input_mux = &alc262_capture_source, .unsol_event = alc262_hippo_unsol_event,
=== message truncated ===
___________________________________________________________ Yahoo! Answers - Got a question? Someone out there knows the answer. Try it now. http://uk.answers.yahoo.com/