[alsa-devel] [PATCH] ASoC: S3C: Fix PCM RX FIFO settings
When PCM capture, sound recorded abnormally because of RX FIFO threshold settings are missing. So, This patch modify PCM RX FIFO setting codes same as TX.
Signed-off-by: Seungwhan Youn sw.youn@samsung.com --- sound/soc/s3c24xx/s3c-pcm.c | 3 +++ sound/soc/s3c24xx/s3c-pcm.h | 3 ++- 2 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/sound/soc/s3c24xx/s3c-pcm.c b/sound/soc/s3c24xx/s3c-pcm.c index 43dcc6b..deaa3f2 100644 --- a/sound/soc/s3c24xx/s3c-pcm.c +++ b/sound/soc/s3c24xx/s3c-pcm.c @@ -107,11 +107,14 @@ static void s3c_pcm_snd_rxctrl(struct s3c_pcm_info *pcm, int on)
ctl = readl(regs + S3C_PCM_CTL); clkctl = readl(regs + S3C_PCM_CLKCTL); + ctl &= ~(S3C_PCM_CTL_RXDIPSTICK_MASK + << S3C_PCM_CTL_RXDIPSTICK_SHIFT);
if (on) { ctl |= S3C_PCM_CTL_RXDMA_EN; ctl |= S3C_PCM_CTL_RXFIFO_EN; ctl |= S3C_PCM_CTL_ENABLE; + ctl |= (0x20<<S3C_PCM_CTL_RXDIPSTICK_SHIFT); clkctl |= S3C_PCM_CLKCTL_SERCLK_EN; } else { ctl &= ~S3C_PCM_CTL_RXDMA_EN; diff --git a/sound/soc/s3c24xx/s3c-pcm.h b/sound/soc/s3c24xx/s3c-pcm.h index 3e9bfc9..b85eaf2 100644 --- a/sound/soc/s3c24xx/s3c-pcm.h +++ b/sound/soc/s3c24xx/s3c-pcm.h @@ -22,7 +22,8 @@ /* PCM_CTL Bit-Fields */ #define S3C_PCM_CTL_TXDIPSTICK_MASK (0x3f) #define S3C_PCM_CTL_TXDIPSTICK_SHIFT (13) -#define S3C_PCM_CTL_RXDIPSTICK_MSK (0x3f<<7) +#define S3C_PCM_CTL_RXDIPSTICK_MASK (0x3f) +#define S3C_PCM_CTL_RXDIPSTICK_SHIFT (7) #define S3C_PCM_CTL_TXDMA_EN (0x1<<6) #define S3C_PCM_CTL_RXDMA_EN (0x1<<5) #define S3C_PCM_CTL_TXMSB_AFTER_FSYNC (0x1<<4)
On Wed, Sep 8, 2010 at 5:51 PM, Seungwhan Youn sw.youn@samsung.com wrote:
When PCM capture, sound recorded abnormally because of RX FIFO threshold settings are missing. So, This patch modify PCM RX FIFO setting codes same as TX.
Signed-off-by: Seungwhan Youn sw.youn@samsung.com
sound/soc/s3c24xx/s3c-pcm.c | 3 +++ sound/soc/s3c24xx/s3c-pcm.h | 3 ++- 2 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/sound/soc/s3c24xx/s3c-pcm.c b/sound/soc/s3c24xx/s3c-pcm.c index 43dcc6b..deaa3f2 100644 --- a/sound/soc/s3c24xx/s3c-pcm.c +++ b/sound/soc/s3c24xx/s3c-pcm.c @@ -107,11 +107,14 @@ static void s3c_pcm_snd_rxctrl(struct s3c_pcm_info *pcm, int on)
ctl = readl(regs + S3C_PCM_CTL); clkctl = readl(regs + S3C_PCM_CLKCTL);
- ctl &= ~(S3C_PCM_CTL_RXDIPSTICK_MASK
- << S3C_PCM_CTL_RXDIPSTICK_SHIFT);
if (on) { ctl |= S3C_PCM_CTL_RXDMA_EN; ctl |= S3C_PCM_CTL_RXFIFO_EN; ctl |= S3C_PCM_CTL_ENABLE;
- ctl |= (0x20<<S3C_PCM_CTL_RXDIPSTICK_SHIFT);
Yes, the change is needed. But I think we should use small value as fifo_dipstick (maybe 0x4 ?), because Fifo is considered:- Almost_empty when fifo_depth < fifo_dipstick Almost_full when fifo_depth > (32 – fifo_dipstick)
And, please modify for TX as well.
On Wed, Sep 8, 2010 at 6:48 PM, Jassi Brar jassisinghbrar@gmail.com wrote:
On Wed, Sep 8, 2010 at 5:51 PM, Seungwhan Youn sw.youn@samsung.com wrote:
When PCM capture, sound recorded abnormally because of RX FIFO threshold settings are missing. So, This patch modify PCM RX FIFO setting codes same as TX.
Signed-off-by: Seungwhan Youn sw.youn@samsung.com
sound/soc/s3c24xx/s3c-pcm.c | 3 +++ sound/soc/s3c24xx/s3c-pcm.h | 3 ++- 2 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/sound/soc/s3c24xx/s3c-pcm.c b/sound/soc/s3c24xx/s3c-pcm.c index 43dcc6b..deaa3f2 100644 --- a/sound/soc/s3c24xx/s3c-pcm.c +++ b/sound/soc/s3c24xx/s3c-pcm.c @@ -107,11 +107,14 @@ static void s3c_pcm_snd_rxctrl(struct s3c_pcm_info *pcm, int on)
ctl = readl(regs + S3C_PCM_CTL); clkctl = readl(regs + S3C_PCM_CLKCTL);
- ctl &= ~(S3C_PCM_CTL_RXDIPSTICK_MASK
- << S3C_PCM_CTL_RXDIPSTICK_SHIFT);
if (on) { ctl |= S3C_PCM_CTL_RXDMA_EN; ctl |= S3C_PCM_CTL_RXFIFO_EN; ctl |= S3C_PCM_CTL_ENABLE;
- ctl |= (0x20<<S3C_PCM_CTL_RXDIPSTICK_SHIFT);
Yes, the change is needed. But I think we should use small value as fifo_dipstick (maybe 0x4 ?), because Fifo is considered:- Almost_empty when fifo_depth < fifo_dipstick Almost_full when fifo_depth > (32 – fifo_dipstick)
Yes, you're right.
And, please modify for TX as well.
I'll fix this fifo_dipstick value to be a suitable one and re-submit with TX's fifo_dipstick.
Thanks for your opinion. Claude.
When PCM capture, sound recorded abnormally because of RX FIFO threshold settings are missing. So, This patch modify PCM RX FIFO setting codes same as TX. And for DMA, if PCM RXFIFO_DIPSTICK is not '0', it doesn't effect to DMA request, because DMA refer RX_FIFO_EMPTY flag as the DMA request.
Signed-off-by: Seungwhan Youn sw.youn@samsung.com --- sound/soc/s3c24xx/s3c-pcm.c | 3 +++ sound/soc/s3c24xx/s3c-pcm.h | 3 ++- 2 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/sound/soc/s3c24xx/s3c-pcm.c b/sound/soc/s3c24xx/s3c-pcm.c index 43dcc6b..deaa3f2 100644 --- a/sound/soc/s3c24xx/s3c-pcm.c +++ b/sound/soc/s3c24xx/s3c-pcm.c @@ -107,11 +107,14 @@ static void s3c_pcm_snd_rxctrl(struct s3c_pcm_info *pcm, int on)
ctl = readl(regs + S3C_PCM_CTL); clkctl = readl(regs + S3C_PCM_CLKCTL); + ctl &= ~(S3C_PCM_CTL_RXDIPSTICK_MASK + << S3C_PCM_CTL_RXDIPSTICK_SHIFT);
if (on) { ctl |= S3C_PCM_CTL_RXDMA_EN; ctl |= S3C_PCM_CTL_RXFIFO_EN; ctl |= S3C_PCM_CTL_ENABLE; + ctl |= (0x20<<S3C_PCM_CTL_RXDIPSTICK_SHIFT); clkctl |= S3C_PCM_CLKCTL_SERCLK_EN; } else { ctl &= ~S3C_PCM_CTL_RXDMA_EN; diff --git a/sound/soc/s3c24xx/s3c-pcm.h b/sound/soc/s3c24xx/s3c-pcm.h index 3e9bfc9..b85eaf2 100644 --- a/sound/soc/s3c24xx/s3c-pcm.h +++ b/sound/soc/s3c24xx/s3c-pcm.h @@ -22,7 +22,8 @@ /* PCM_CTL Bit-Fields */ #define S3C_PCM_CTL_TXDIPSTICK_MASK (0x3f) #define S3C_PCM_CTL_TXDIPSTICK_SHIFT (13) -#define S3C_PCM_CTL_RXDIPSTICK_MSK (0x3f<<7) +#define S3C_PCM_CTL_RXDIPSTICK_MASK (0x3f) +#define S3C_PCM_CTL_RXDIPSTICK_SHIFT (7) #define S3C_PCM_CTL_TXDMA_EN (0x1<<6) #define S3C_PCM_CTL_RXDMA_EN (0x1<<5) #define S3C_PCM_CTL_TXMSB_AFTER_FSYNC (0x1<<4)
On Fri, 2010-09-10 at 17:20 +0900, Seungwhan Youn wrote:
When PCM capture, sound recorded abnormally because of RX FIFO threshold settings are missing. So, This patch modify PCM RX FIFO setting codes same as TX. And for DMA, if PCM RXFIFO_DIPSTICK is not '0', it doesn't effect to DMA request, because DMA refer RX_FIFO_EMPTY flag as the DMA request.
Signed-off-by: Seungwhan Youn sw.youn@samsung.com
Both
Acked-by: Liam Girdwood lrg@slimlogic.co.uk
On Fri, Sep 10, 2010 at 12:13:39PM +0100, Liam Girdwood wrote:
On Fri, 2010-09-10 at 17:20 +0900, Seungwhan Youn wrote:
Signed-off-by: Seungwhan Youn sw.youn@samsung.com
Both
Acked-by: Liam Girdwood lrg@slimlogic.co.uk
Jassi, are you OK with these?
On Sat, Sep 11, 2010 at 7:07 PM, Mark Brown broonie@opensource.wolfsonmicro.com wrote:
On Fri, Sep 10, 2010 at 12:13:39PM +0100, Liam Girdwood wrote:
On Fri, 2010-09-10 at 17:20 +0900, Seungwhan Youn wrote:
Signed-off-by: Seungwhan Youn sw.youn@samsung.com
Both
Acked-by: Liam Girdwood lrg@slimlogic.co.uk
Jassi, are you OK with these?
Acked-by: Jassi Brar jassi.brar@samsung.com
Thanks
On Sat, Sep 11, 2010 at 07:59:01PM +0900, Jassi Brar wrote:
Acked-by: Jassi Brar jassi.brar@samsung.com
Great, applied both now - thanks.
This patch modify FIFO_DIPSTICK value of PCM TX FIFO to be a optimal one. Privious value (0x20) did not support 'Almost_full' of PCM FIFO for the DMA request.
Signed-off-by: Seungwhan Youn sw.youn@samsung.com --- sound/soc/s3c24xx/s3c-pcm.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/sound/soc/s3c24xx/s3c-pcm.c b/sound/soc/s3c24xx/s3c-pcm.c index c5ca902..df6948f 100644 --- a/sound/soc/s3c24xx/s3c-pcm.c +++ b/sound/soc/s3c24xx/s3c-pcm.c @@ -78,7 +78,7 @@ static void s3c_pcm_snd_txctrl(struct s3c_pcm_info *pcm, int on) ctl |= S3C_PCM_CTL_TXDMA_EN; ctl |= S3C_PCM_CTL_TXFIFO_EN; ctl |= S3C_PCM_CTL_ENABLE; - ctl |= (0x20<<S3C_PCM_CTL_TXDIPSTICK_SHIFT); + ctl |= (0x4<<S3C_PCM_CTL_TXDIPSTICK_SHIFT); clkctl |= S3C_PCM_CLKCTL_SERCLK_EN; } else { ctl &= ~S3C_PCM_CTL_TXDMA_EN;
participants (5)
-
Jassi Brar
-
Liam Girdwood
-
Mark Brown
-
Seungwhan Youn
-
Seungwhan Youn