|
@@ -90,6 +90,8 @@
|
|
|
#include <asm/sibyte/sb1250_mac.h>
|
|
|
#include <asm/sibyte/sb1250.h>
|
|
|
|
|
|
+#include "sleep.h"
|
|
|
+
|
|
|
struct cs4297a_state;
|
|
|
|
|
|
static DEFINE_MUTEX(swarm_cs4297a_mutex);
|
|
@@ -748,7 +750,7 @@ static int serdma_reg_access(struct cs4297a_state *s, u64 data)
|
|
|
/* Since a writer has the DSP open, we have to mux the
|
|
|
request in */
|
|
|
s->reg_request = data;
|
|
|
- interruptible_sleep_on(&s->dma_dac.reg_wait);
|
|
|
+ oss_broken_sleep_on(&s->dma_dac.reg_wait, MAX_SCHEDULE_TIMEOUT);
|
|
|
/* XXXKW how can I deal with the starvation case where
|
|
|
the opener isn't writing? */
|
|
|
} else {
|
|
@@ -790,7 +792,7 @@ static int cs4297a_read_ac97(struct cs4297a_state *s, u32 offset,
|
|
|
if (serdma_reg_access(s, (0xCLL << 60) | (1LL << 47) | ((u64)(offset & 0x7F) << 40)))
|
|
|
return -1;
|
|
|
|
|
|
- interruptible_sleep_on(&s->dma_adc.reg_wait);
|
|
|
+ oss_broken_sleep_on(&s->dma_adc.reg_wait, MAX_SCHEDULE_TIMEOUT);
|
|
|
*value = s->read_value;
|
|
|
CS_DBGOUT(CS_AC97, 2,
|
|
|
printk(KERN_INFO "cs4297a: rdr reg %x -> %x\n", s->read_reg, s->read_value));
|
|
@@ -1740,7 +1742,7 @@ static ssize_t cs4297a_read(struct file *file, char *buffer, size_t count,
|
|
|
start_adc(s);
|
|
|
if (file->f_flags & O_NONBLOCK)
|
|
|
return ret ? ret : -EAGAIN;
|
|
|
- interruptible_sleep_on(&s->dma_adc.wait);
|
|
|
+ oss_broken_sleep_on(&s->dma_adc.wait, MAX_SCHEDULE_TIMEOUT);
|
|
|
if (signal_pending(current))
|
|
|
return ret ? ret : -ERESTARTSYS;
|
|
|
continue;
|
|
@@ -1836,7 +1838,7 @@ static ssize_t cs4297a_write(struct file *file, const char *buffer,
|
|
|
start_dac(s);
|
|
|
if (file->f_flags & O_NONBLOCK)
|
|
|
return ret ? ret : -EAGAIN;
|
|
|
- interruptible_sleep_on(&d->wait);
|
|
|
+ oss_broken_sleep_on(&d->wait, MAX_SCHEDULE_TIMEOUT);
|
|
|
if (signal_pending(current))
|
|
|
return ret ? ret : -ERESTARTSYS;
|
|
|
continue;
|
|
@@ -2452,7 +2454,7 @@ static int cs4297a_locked_open(struct inode *inode, struct file *file)
|
|
|
return -EBUSY;
|
|
|
}
|
|
|
mutex_unlock(&s->open_sem_dac);
|
|
|
- interruptible_sleep_on(&s->open_wait_dac);
|
|
|
+ oss_broken_sleep_on(&s->open_wait_dac, MAX_SCHEDULE_TIMEOUT);
|
|
|
|
|
|
if (signal_pending(current)) {
|
|
|
printk("open - sig pending\n");
|
|
@@ -2469,7 +2471,7 @@ static int cs4297a_locked_open(struct inode *inode, struct file *file)
|
|
|
return -EBUSY;
|
|
|
}
|
|
|
mutex_unlock(&s->open_sem_adc);
|
|
|
- interruptible_sleep_on(&s->open_wait_adc);
|
|
|
+ oss_broken_sleep_on(&s->open_wait_adc, MAX_SCHEDULE_TIMEOUT);
|
|
|
|
|
|
if (signal_pending(current)) {
|
|
|
printk("open - sig pending\n");
|