summaryrefslogtreecommitdiff
path: root/wcfxs.c
diff options
context:
space:
mode:
Diffstat (limited to 'wcfxs.c')
-rwxr-xr-xwcfxs.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/wcfxs.c b/wcfxs.c
index 9e0ff1e..6ecf724 100755
--- a/wcfxs.c
+++ b/wcfxs.c
@@ -256,10 +256,9 @@ static void wcfxs_interrupt(int irq, void *dev_id, struct pt_regs *regs)
return;
if (ints & 0x10) {
- /* Restart DMA */
- printk("PCI Master abort\n");
+ /* Stop DMA, wait for watchdog */
+ printk("FXS PCI Master abort\n");
wcfxs_stop_dma(wc);
- wcfxs_restart_dma(wc);
return;
}
@@ -1073,10 +1072,6 @@ static void wcfxs_restart_dma(struct wcfxs *wc)
{
int x;
/* Reset Master and TDM */
- outb(0x0f, wc->ioaddr + WC_CNTL);
- /* Can't really wait, so simulate a wait */
- for (x=0;x<100;x++)
- inb(wc->ioaddr + WC_CNTL);
outb(0x01, wc->ioaddr + WC_CNTL);
outb(0x01, wc->ioaddr + WC_OPER);
}
@@ -1084,6 +1079,8 @@ static void wcfxs_restart_dma(struct wcfxs *wc)
static void wcfxs_stop_dma(struct wcfxs *wc)
{
outb(0x00, wc->ioaddr + WC_OPER);
+ /* Reset TDM */
+ outb(0x0f, wc->ioaddr + WC_CNTL);
}
static void wcfxs_disable_interrupts(struct wcfxs *wc)