aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Chini <georg.chini@triaton-webhosting.com>2007-01-03 00:28:17 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2007-01-03 21:37:26 -0500
commitd35a1b9e10481c9f1d3b87e778a0f1f6a0a2dd48 (patch)
treefb110100baeafa0fc20a1849c74ca572a0458808
parenta7ec3f5289681e9d63b65db5f56857f998812b4b (diff)
[SOUND] Sparc CS4231: Fix IRQ return value and initialization.
SBUS: Change IRQ-handler return value from 0 to IRQ_HANDLED and fix some initialisation problems. Change period_bytes_min from 4096 to 256 to allow driver to work with low latency (VOIP) applications. Hope this does not break EBUS. Signed-off-by: Georg Chini <georg.chini@triaton-webhosting.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--sound/sparc/cs4231.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/sound/sparc/cs4231.c b/sound/sparc/cs4231.c
index edeb3d3c4c7e..78c412ae2234 100644
--- a/sound/sparc/cs4231.c
+++ b/sound/sparc/cs4231.c
@@ -1268,7 +1268,7 @@ static struct snd_pcm_hardware snd_cs4231_playback =
1268 .channels_min = 1, 1268 .channels_min = 1,
1269 .channels_max = 2, 1269 .channels_max = 2,
1270 .buffer_bytes_max = (32*1024), 1270 .buffer_bytes_max = (32*1024),
1271 .period_bytes_min = 4096, 1271 .period_bytes_min = 256,
1272 .period_bytes_max = (32*1024), 1272 .period_bytes_max = (32*1024),
1273 .periods_min = 1, 1273 .periods_min = 1,
1274 .periods_max = 1024, 1274 .periods_max = 1024,
@@ -1288,7 +1288,7 @@ static struct snd_pcm_hardware snd_cs4231_capture =
1288 .channels_min = 1, 1288 .channels_min = 1,
1289 .channels_max = 2, 1289 .channels_max = 2,
1290 .buffer_bytes_max = (32*1024), 1290 .buffer_bytes_max = (32*1024),
1291 .period_bytes_min = 4096, 1291 .period_bytes_min = 256,
1292 .period_bytes_max = (32*1024), 1292 .period_bytes_max = (32*1024),
1293 .periods_min = 1, 1293 .periods_min = 1,
1294 .periods_max = 1024, 1294 .periods_max = 1024,
@@ -1796,7 +1796,7 @@ static irqreturn_t snd_cs4231_sbus_interrupt(int irq, void *dev_id)
1796 snd_cs4231_outm(chip, CS4231_IRQ_STATUS, ~CS4231_ALL_IRQS | ~status, 0); 1796 snd_cs4231_outm(chip, CS4231_IRQ_STATUS, ~CS4231_ALL_IRQS | ~status, 0);
1797 spin_unlock_irqrestore(&chip->lock, flags); 1797 spin_unlock_irqrestore(&chip->lock, flags);
1798 1798
1799 return 0; 1799 return IRQ_HANDLED;
1800} 1800}
1801 1801
1802/* 1802/*
@@ -1821,7 +1821,6 @@ static int sbus_dma_request(struct cs4231_dma_control *dma_cont, dma_addr_t bus_
1821 if (!(csr & test)) 1821 if (!(csr & test))
1822 goto out; 1822 goto out;
1823 err = -EBUSY; 1823 err = -EBUSY;
1824 csr = sbus_readl(base->regs + APCCSR);
1825 test = APC_XINT_CNVA; 1824 test = APC_XINT_CNVA;
1826 if ( base->dir == APC_PLAY ) 1825 if ( base->dir == APC_PLAY )
1827 test = APC_XINT_PNVA; 1826 test = APC_XINT_PNVA;
@@ -1862,17 +1861,16 @@ static void sbus_dma_enable(struct cs4231_dma_control *dma_cont, int on)
1862 1861
1863 spin_lock_irqsave(&base->lock, flags); 1862 spin_lock_irqsave(&base->lock, flags);
1864 if (!on) { 1863 if (!on) {
1865 if (base->dir == APC_PLAY) { 1864 sbus_writel(0, base->regs + base->dir + APCNC);
1866 sbus_writel(0, base->regs + base->dir + APCNVA); 1865 sbus_writel(0, base->regs + base->dir + APCNVA);
1867 sbus_writel(1, base->regs + base->dir + APCC); 1866 sbus_writel(0, base->regs + base->dir + APCC);
1868 } 1867 sbus_writel(0, base->regs + base->dir + APCVA);
1869 else 1868
1870 { 1869 /* ACK any APC interrupts. */
1871 sbus_writel(0, base->regs + base->dir + APCNC); 1870 csr = sbus_readl(base->regs + APCCSR);
1872 sbus_writel(0, base->regs + base->dir + APCVA); 1871 sbus_writel(csr, base->regs + APCCSR);
1873 }
1874 } 1872 }
1875 udelay(600); 1873 udelay(1000);
1876 csr = sbus_readl(base->regs + APCCSR); 1874 csr = sbus_readl(base->regs + APCCSR);
1877 shift = 0; 1875 shift = 0;
1878 if ( base->dir == APC_PLAY ) 1876 if ( base->dir == APC_PLAY )