All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] cs4231 alsa driver: Fix IRQ and initialisation problems,
@ 2006-12-29 21:47 Georg Chini
  2006-12-29 22:02 ` Chini, Georg
  0 siblings, 1 reply; 2+ messages in thread
From: Georg Chini @ 2006-12-29 21:47 UTC (permalink / raw)
  To: sparclinux

From: Georg Chini georg.chini@triaton-webhosting.com

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>
---

diff -uprN linux.orig/sound/sparc/cs4231.c linux/sound/sparc/cs4231.c
--- linux.orig/sound/sparc/cs4231.c     2006-12-29 22:08:10.000000000 +0100
+++ linux/sound/sparc/cs4231.c  2006-12-29 21:45:42.000000000 +0100
@@ -1268,7 +1268,7 @@ static struct snd_pcm_hardware snd_cs423
        .channels_min           = 1,
        .channels_max           = 2,
        .buffer_bytes_max       = (32*1024),
-       .period_bytes_min       = 4096,
+       .period_bytes_min       = 256,
        .period_bytes_max       = (32*1024),
        .periods_min            = 1,
        .periods_max            = 1024,
@@ -1288,7 +1288,7 @@ static struct snd_pcm_hardware snd_cs423
        .channels_min           = 1,
        .channels_max           = 2,
        .buffer_bytes_max       = (32*1024),
-       .period_bytes_min       = 4096,
+       .period_bytes_min       = 256,
        .period_bytes_max       = (32*1024),
        .periods_min            = 1,
        .periods_max            = 1024,
@@ -1796,7 +1796,7 @@ static irqreturn_t snd_cs4231_sbus_inter
        snd_cs4231_outm(chip, CS4231_IRQ_STATUS, ~CS4231_ALL_IRQS | 
~status, 0);
        spin_unlock_irqrestore(&chip->lock, flags);

-       return 0;
+       return IRQ_HANDLED;
 }

 /*
@@ -1821,7 +1821,6 @@ static int sbus_dma_request(struct cs423
        if (!(csr & test))
                goto out;
        err = -EBUSY;
-       csr = sbus_readl(base->regs + APCCSR);
        test = APC_XINT_CNVA;
        if ( base->dir = APC_PLAY )
                test = APC_XINT_PNVA;
@@ -1862,17 +1861,16 @@ static void sbus_dma_enable(struct cs423

        spin_lock_irqsave(&base->lock, flags);
        if (!on) {
-               if (base->dir = APC_PLAY) {
-                       sbus_writel(0, base->regs + base->dir + APCNVA);
-                       sbus_writel(1, base->regs + base->dir + APCC);
-               }
-               else
-               {
-                       sbus_writel(0, base->regs + base->dir + APCNC);
-                       sbus_writel(0, base->regs + base->dir + APCVA);
-               }
+               sbus_writel(0, base->regs + base->dir + APCNC);
+               sbus_writel(0, base->regs + base->dir + APCNVA);
+               sbus_writel(0, base->regs + base->dir + APCC);
+               sbus_writel(0, base->regs + base->dir + APCVA);
+              
+               /* ACK any APC interrupts. */
+               csr = sbus_readl(base->regs + APCCSR);
+               sbus_writel(csr, base->regs + APCCSR);
        }
-       udelay(600);
+       udelay(1000);
        csr = sbus_readl(base->regs + APCCSR);
        shift = 0;
        if ( base->dir = APC_PLAY )


^ permalink raw reply	[flat|nested] 2+ messages in thread

* [PATCH] cs4231 alsa driver: Fix IRQ and initialisation problems,
  2006-12-29 21:47 [PATCH] cs4231 alsa driver: Fix IRQ and initialisation problems, Georg Chini
@ 2006-12-29 22:02 ` Chini, Georg
  0 siblings, 0 replies; 2+ messages in thread
From: Chini, Georg @ 2006-12-29 22:02 UTC (permalink / raw)
  To: sparclinux

Hello,

there was a typo in the last patch, so here it is again. Sorry for  the  
confusion.

-----
 
From: Georg Chini georg.chini@triaton-webhosting.com

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>
---

diff -uprN linux.orig/sound/sparc/cs4231.c linux/sound/sparc/cs4231.c
--- linux.orig/sound/sparc/cs4231.c     2006-12-29 22:08:10.000000000 +0100
+++ linux/sound/sparc/cs4231.c  2006-12-29 21:45:42.000000000 +0100
@@ -1268,7 +1268,7 @@ static struct snd_pcm_hardware snd_cs423
        .channels_min           = 1,
        .channels_max           = 2,
        .buffer_bytes_max       = (32*1024),
-       .period_bytes_min       = 4096,
+       .period_bytes_min       = 256,
        .period_bytes_max       = (32*1024),
        .periods_min            = 1,
        .periods_max            = 1024,
@@ -1288,7 +1288,7 @@ static struct snd_pcm_hardware snd_cs423
        .channels_min           = 1,
        .channels_max           = 2,
        .buffer_bytes_max       = (32*1024),
-       .period_bytes_min       = 4096,
+       .period_bytes_min       = 256,
        .period_bytes_max       = (32*1024),
        .periods_min            = 1,
        .periods_max            = 1024,
@@ -1796,7 +1796,7 @@ static irqreturn_t snd_cs4231_sbus_inter
        snd_cs4231_outm(chip, CS4231_IRQ_STATUS, ~CS4231_ALL_IRQS | 
~status, 0);
        spin_unlock_irqrestore(&chip->lock, flags);

-       return 0;
+       return IRQ_HANDLED;
 }

 /*
@@ -1821,7 +1821,6 @@ static int sbus_dma_request(struct cs423
        if (!(csr & test))
                goto out;
        err = -EBUSY;
-       csr = sbus_readl(base->regs + APCCSR);
        test = APC_XINT_CNVA;
        if ( base->dir = APC_PLAY )
                test = APC_XINT_PNVA;
@@ -1862,17 +1861,16 @@ static void sbus_dma_enable(struct cs423

        spin_lock_irqsave(&base->lock, flags);
        if (!on) {
-               if (base->dir = APC_PLAY) {
-                       sbus_writel(0, base->regs + base->dir + APCNVA);
-                       sbus_writel(1, base->regs + base->dir + APCC);
-               }
-               else
-               {
-                       sbus_writel(0, base->regs + base->dir + APCNC);
-                       sbus_writel(0, base->regs + base->dir + APCVA);
-               }
+               sbus_writel(0, base->regs + base->dir + APCNC);
+               sbus_writel(0, base->regs + base->dir + APCNVA);
+               sbus_writel(0, base->regs + base->dir + APCC);
+               sbus_writel(0, base->regs + base->dir + APCVA);
+              
+               /* ACK any APC interrupts. */
+               csr = sbus_readl(base->regs + APCCSR);
+               sbus_writel(csr, base->regs + APCCSR);
        }
-       udelay(600);
+       udelay(1000);
        csr = sbus_readl(base->regs + APCCSR);
        shift = 0;
        if ( base->dir = APC_PLAY )


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2006-12-29 22:02 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-29 21:47 [PATCH] cs4231 alsa driver: Fix IRQ and initialisation problems, Georg Chini
2006-12-29 22:02 ` Chini, Georg

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.