[alsa-devel] "modprobe snd_hda_intel" crashes on my hardware

Abdelghani Ouchabane abdelghani at ezono.com
Wed Sep 28 15:19:13 CEST 2011


Takashi Iwai wrote:
> 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?
>
>   
Yes , they are.
>> 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;
>
>   
Thanks a lot.


More information about the Alsa-devel mailing list