ALSA: ac97_codec - increase timeout for analog sections to 5 second
I have a Soundblaster 16PCI. For many years, alsa has had a bug where not all of the card's controls are detected (many alsa versions, many kernel versions). In particular, Master Playback Volume is usually not detected, and so I get no sound or extremely faint sound. The problem has always been inconsistent: sometimes all of the controls are detected correctly, and sometimes a partial set is detected. It works correctly about 10% of the time. Finally, I got around to tracking down the problem. When the driver fails, it prints the kernel message "AC'97 0 analog subsections not ready". This message is generated from the function snd_ac97_mixer() in ac97_codec.c. The message indicates that the card failed to come back after reset within the time limit. The time limit is 120 milliseconds. I tried increasing the time limit to 1 second, and found that this made the driver work about 70% of the time. I tried increasing it to 5 seconds, and it now seems to work 100% of the time. I expect that this change would be completely harmless for existing cards that work, and would only introduce additional delay for cards that do not work. ALSA bug#4032. Signed-off-by: Steve Soule <sts11dbxr@gmail.com> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
f40542532e
commit
f74890277a
|
@ -2122,7 +2122,7 @@ int snd_ac97_mixer(struct snd_ac97_bus *bus, struct snd_ac97_template *template,
|
|||
}
|
||||
/* nothing should be in powerdown mode */
|
||||
snd_ac97_write_cache(ac97, AC97_GENERAL_PURPOSE, 0);
|
||||
end_time = jiffies + msecs_to_jiffies(120);
|
||||
end_time = jiffies + msecs_to_jiffies(5000);
|
||||
do {
|
||||
if ((snd_ac97_read(ac97, AC97_POWERDOWN) & 0x0f) == 0x0f)
|
||||
goto __ready_ok;
|
||||
|
|
Loading…
Reference in New Issue