[ALSA] sound/pci: fix-up sleeping paths
ENS1370/1+ driver,ES1968 driver,Intel8x0 driver,VIA82xx driver VIA82xx-modem driver,AC97 Codec,ALI5451 driver,CS46xx driver MIXART driver,RME HDSP driver,Trident driver,YMFPCI driver Description: Fix-up sleeping in sound/pci. These changes fall under the following two categories: 1) Replace schedule_timeout() with msleep() to guarantee the task delays as expected. This also involved replacing/removing custom sleep functions. 2) Do not assume jiffies will only increment by one if you request a 1 jiffy sleep, i.e. use time_after/time_before in while loops. Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
This commit is contained in:

committed by
Jaroslav Kysela

parent
072c01194d
commit
ef21ca24fa
@@ -2227,6 +2227,7 @@ void snd_ac97_restore_iec958(ac97_t *ac97)
|
||||
void snd_ac97_resume(ac97_t *ac97)
|
||||
{
|
||||
int i;
|
||||
unsigned long end_time;
|
||||
|
||||
if (ac97->bus->ops->reset) {
|
||||
ac97->bus->ops->reset(ac97);
|
||||
@@ -2244,26 +2245,26 @@ void snd_ac97_resume(ac97_t *ac97)
|
||||
snd_ac97_write(ac97, AC97_POWERDOWN, ac97->regs[AC97_POWERDOWN]);
|
||||
if (ac97_is_audio(ac97)) {
|
||||
ac97->bus->ops->write(ac97, AC97_MASTER, 0x8101);
|
||||
for (i = HZ/10; i >= 0; i--) {
|
||||
end_time = jiffies + msecs_to_jiffies(100);
|
||||
do {
|
||||
if (snd_ac97_read(ac97, AC97_MASTER) == 0x8101)
|
||||
break;
|
||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
schedule_timeout(1);
|
||||
}
|
||||
} while (time_after_eq(end_time, jiffies));
|
||||
/* FIXME: extra delay */
|
||||
ac97->bus->ops->write(ac97, AC97_MASTER, 0x8000);
|
||||
if (snd_ac97_read(ac97, AC97_MASTER) != 0x8000) {
|
||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
schedule_timeout(HZ/4);
|
||||
}
|
||||
if (snd_ac97_read(ac97, AC97_MASTER) != 0x8000)
|
||||
msleep(250);
|
||||
} else {
|
||||
for (i = HZ/10; i >= 0; i--) {
|
||||
end_time = jiffies + msecs_to_jiffies(100);
|
||||
do {
|
||||
unsigned short val = snd_ac97_read(ac97, AC97_EXTENDED_MID);
|
||||
if (val != 0xffff && (val & 1) != 0)
|
||||
break;
|
||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
schedule_timeout(1);
|
||||
}
|
||||
} while (time_after_eq(end_time, jiffies));
|
||||
}
|
||||
__reset_ready:
|
||||
|
||||
|
Reference in New Issue
Block a user