patch-2.2.0-pre1 linux/drivers/sound/es1370.c
Next file: linux/drivers/sound/es1371.c
Previous file: linux/drivers/sound/cs4232.c
Back to the patch index
Back to the overall index
- Lines: 89
- Date:
Sun Dec 27 10:53:45 1998
- Orig file:
v2.1.132/linux/drivers/sound/es1370.c
- Orig date:
Tue Dec 22 14:16:56 1998
diff -u --recursive --new-file v2.1.132/linux/drivers/sound/es1370.c linux/drivers/sound/es1370.c
@@ -80,6 +80,7 @@
* 08.10.98 0.14 Joystick support fixed
* -- Oliver Neukum <c188@org.chemie.uni-muenchen.de>
* 10.12.98 0.15 Fix drain_dac trying to wait on not yet initialized DMA
+ * 16.12.98 0.16 Don't wake up app until there are fragsize bytes to read/write
*
* some important things missing in Ensoniq documentation:
*
@@ -603,17 +604,14 @@
diff = get_hwptr(s, &s->dma_adc, ES1370_REG_ADC_FRAMECNT);
s->dma_adc.total_bytes += diff;
s->dma_adc.count += diff;
- if (s->dma_adc.mapped) {
- if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
- wake_up(&s->dma_adc.wait);
- } else {
+ if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
+ wake_up(&s->dma_adc.wait);
+ if (!s->dma_adc.mapped) {
if (s->dma_adc.count > (signed)(s->dma_adc.dmasize - ((3 * s->dma_adc.fragsize) >> 1))) {
s->ctrl &= ~CTRL_ADC_EN;
outl(s->ctrl, s->io+ES1370_REG_CONTROL);
s->dma_adc.error++;
}
- if (s->dma_adc.count > 0)
- wake_up(&s->dma_adc.wait);
}
}
/* update DAC1 pointer */
@@ -635,7 +633,7 @@
s->dma_dac1.fragsize, (s->sctrl & SCTRL_P1SEB) ? 0 : 0x80);
s->dma_dac1.endcleared = 1;
}
- if (s->dma_dac1.count < (signed)s->dma_dac1.dmasize)
+ if (s->dma_dac1.count + (signed)s->dma_dac1.fragsize <= (signed)s->dma_dac1.dmasize)
wake_up(&s->dma_dac1.wait);
}
}
@@ -658,7 +656,7 @@
s->dma_dac2.fragsize, (s->sctrl & SCTRL_P2SEB) ? 0 : 0x80);
s->dma_dac2.endcleared = 1;
}
- if (s->dma_dac2.count < (signed)s->dma_dac2.dmasize)
+ if (s->dma_dac2.count + (signed)s->dma_dac2.fragsize <= (signed)s->dma_dac2.dmasize)
wake_up(&s->dma_dac2.wait);
}
}
@@ -1186,20 +1184,15 @@
spin_lock_irqsave(&s->lock, flags);
es1370_update_ptr(s);
if (file->f_mode & FMODE_READ) {
- if (s->dma_adc.mapped) {
- if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
- mask |= POLLIN | POLLRDNORM;
- } else {
- if (s->dma_adc.count > 0)
- mask |= POLLIN | POLLRDNORM;
- }
+ if (s->dma_adc.count >= (signed)s->dma_adc.fragsize)
+ mask |= POLLIN | POLLRDNORM;
}
if (file->f_mode & FMODE_WRITE) {
if (s->dma_dac2.mapped) {
if (s->dma_dac2.count >= (signed)s->dma_dac2.fragsize)
mask |= POLLOUT | POLLWRNORM;
} else {
- if ((signed)s->dma_dac2.dmasize > s->dma_dac2.count)
+ if ((signed)s->dma_dac2.dmasize >= s->dma_dac2.count + (signed)s->dma_dac2.fragsize)
mask |= POLLOUT | POLLWRNORM;
}
}
@@ -1704,7 +1697,7 @@
if (s->dma_dac1.count >= (signed)s->dma_dac1.fragsize)
mask |= POLLOUT | POLLWRNORM;
} else {
- if ((signed)s->dma_dac1.dmasize > s->dma_dac1.count)
+ if ((signed)s->dma_dac1.dmasize >= s->dma_dac1.count + (signed)s->dma_dac1.fragsize)
mask |= POLLOUT | POLLWRNORM;
}
spin_unlock_irqrestore(&s->lock, flags);
@@ -2277,7 +2270,7 @@
if (!pci_present()) /* No PCI bus in this machine! */
return -ENODEV;
- printk(KERN_INFO "es1370: version v0.15 time " __TIME__ " " __DATE__ "\n");
+ printk(KERN_INFO "es1370: version v0.16 time " __TIME__ " " __DATE__ "\n");
while (index < NR_DEVICE &&
(pcidev = pci_find_device(PCI_VENDOR_ID_ENSONIQ, PCI_DEVICE_ID_ENSONIQ_ES1370, pcidev))) {
if (pcidev->base_address[0] == 0 ||
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov