[alsa-devel] "modprobe snd_hda_intel" crashes on my hardware
Takashi Iwai
tiwai at suse.de
Wed Sep 28 16:58:06 CEST 2011
At Wed, 28 Sep 2011 14:51:26 +0200,
Abdelghani Ouchabane wrote:
>
> Takashi Iwai wrote:
> > At Wed, 28 Sep 2011 14:22:02 +0200,
> > Abdelghani Ouchabane wrote:
> >
> >>
> >>> OK, it's good to hear. So 3.1 kernel is fine as is. Only 3.0 and
> >>> earlier can get Oops with buggy BIOS setups.
> >>>
> >>> I can easily fix it up, but maybe better first stabilize 3.1 and make
> >>> similar 3.0 stable patch.
> >>>
> >>>
> >>> thanks,
> >>>
> >>> Takashi
> >>>
> >>>
> >> Do I need to contact the manufacturer of my board to fix the BIOS as
> >> well, or it can be fixed by a patch?
> >>
> >
> > The easiest way is to create a file and feed via "patch" option of
> > snd-hda-intel module as Clemens suggested.
> >
> >
> I have three systems with the same hardware and software,
>
> in /proc/asound/card0/codec#2
>
> system 1 : Subsystem Id: 0x7fafffdd
> system 2 : Subsystem Id: 0xffffffff
> system 3 : Subsystem Id: 0xff7f7fa3
>
> Why the "Subsystem Id" is different between the three systems?
Don't know. All look very broken. Are the machines really OK?
> Is there a way to don't use it in :
>
> [codec]
> vendor-id subsystem-id address
>
> If I set the right subsystem-id in
> /lib/firmware/forgotten-ezono-hda-settings, the kernel doesn't crash and
> the sound works perfectly.
>
> I need one /lib/firmware/forgotten-ezono-hda-settings for all systems
> and I can not get "Subsystem Id" before loading snd_hda_intel successfully
>
> Any idea please?
You could apply the patch like below, and pass 0 or -1 to vendor and
subsystem ids.
Takashi
---
diff --git a/sound/pci/hda/hda_hwdep.c b/sound/pci/hda/hda_hwdep.c
index bf3ced5..c074ed2 100644
--- a/sound/pci/hda/hda_hwdep.c
+++ b/sound/pci/hda/hda_hwdep.c
@@ -649,8 +649,8 @@ static void parse_codec_mode(char *buf, struct hda_bus *bus,
*codecp = NULL;
if (sscanf(buf, "%i %i %i", &vendorid, &subid, &caddr) == 3) {
list_for_each_entry(codec, &bus->codec_list, list) {
- if (codec->vendor_id == vendorid &&
- codec->subsystem_id == subid &&
+ if ((vendor <= 0 || codec->vendor_id == vendorid) &&
+ (subid <= 0 || codec->subsystem_id == subid) &&
codec->addr == caddr) {
*codecp = codec;
break;
More information about the Alsa-devel
mailing list