1
linux/sound/soc/s3c24xx
Shine Liu faf907c7ba ASoC: S3C platform: Fix s3c2410_dma_started() called at improper time
s3c24xx dma has the auto reload feature, when the the trnasfer is done,
CURR_TC(DSTAT[19:0], current value of transfer count) reaches 0, and DMA
ACK becomes 1, and then, TC(DCON[19:0]) will be loaded into CURR_TC. So
the transmission is repeated.

IRQ is issued while auto reload occurs. We change the DISRC and
DCON[19:0] in the ISR, but at this time, the auto reload has been
performed already. The first block is being re-transmitted by the DMA.

So we need rewrite the DISRC and DCON[19:0] for the next block
immediatly after the this block has been started to be transported.

The function s3c2410_dma_started() is for this perpose, which is called
in the form of "s3c2410_dma_ctrl(prtd->params->channel,
S3C2410_DMAOP_STARTED);" in s3c24xx_pcm_trigger().

But it is not correct. DMA transmission won't start until DMA REQ signal
arrived, it is the time s3c24xx_snd_txctrl(1) or s3c24xx_snd_rxctrl(1)
is called in s3c24xx_i2s_trigger().

In the current framework, s3c24xx_pcm_trigger() is always called before
s3c24xx_pcm_trigger(). So the s3c2410_dma_started() should be called in
s3c24xx_pcm_trigger() after s3c24xx_snd_txctrl(1) or
s3c24xx_snd_rxctrl(1) is called in this function.

However, s3c2410_dma_started() is dma related, to call this function we
should provide the channel number, which is given by
substream->runtime->private_data->params->channel. The private_data
points to a struct s3c24xx_runtime_data object, which is define in
s3c24xx_pcm.c, so s3c2410_dma_started() can't be called in s3c24xx_i2s.c

Fix this by moving the call to signal the DMA started to the DAI
drivers.

Signed-off-by: Shine Liu <liuxian@redflag-linux.com>
Signed-off-by: Shine Liu <shinel@foxmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2009-08-25 13:09:05 +01:00
..
jive_wm8750.c ASoC: Fix jive_wm8750.c build problems 2009-04-16 13:37:25 +01:00
Kconfig ASoC: Select core DMA when building for S3C64xx 2009-08-24 20:42:48 +01:00
lm4857.h
ln2440sbc_alc650.c ASoC: Push platform registration down into the card 2008-12-02 16:03:40 +00:00
Makefile ASoC: S3C24XX: Support for Simtec Hermes boards 2009-08-21 10:53:06 +01:00
neo1973_gta02_wm8753.c ASoC: neo1973_gta02_wm8753: Replace deprecated s3c_gpio calls with gpiolib 2009-07-29 21:29:33 +01:00
neo1973_wm8753.c ASoC: Fix lm4857 control 2009-06-10 13:55:34 +01:00
s3c24xx_simtec_hermes.c ASoC: S3C24XX: Support for Simtec Hermes boards 2009-08-21 10:53:06 +01:00
s3c24xx_simtec_tlv320aic23.c ASoC: S3C24XX: Add audio core and tlv320aic23 for Simtec boards 2009-08-21 10:52:42 +01:00
s3c24xx_simtec.c ASoC: S3C24XX: Add audio core and tlv320aic23 for Simtec boards 2009-08-21 10:52:42 +01:00
s3c24xx_simtec.h ASoC: S3C24XX: Add audio core and tlv320aic23 for Simtec boards 2009-08-21 10:52:42 +01:00
s3c24xx_uda134x.c S3C24XX: Move and update IIS headers 2009-03-05 12:00:59 +00:00
s3c24xx-ac97.h
s3c24xx-i2s.c ASoC: S3C platform: Fix s3c2410_dma_started() called at improper time 2009-08-25 13:09:05 +01:00
s3c24xx-i2s.h
s3c24xx-pcm.c ASoC: S3C platform: Fix s3c2410_dma_started() called at improper time 2009-08-25 13:09:05 +01:00
s3c24xx-pcm.h
s3c64xx-i2s.c ASoC: Use platform device resource for S3C64xx IISv2 2009-04-30 14:08:01 +01:00
s3c64xx-i2s.h ASoC: Make S3C64xx clock export function to return struct clk 2009-04-30 13:24:45 +01:00
s3c2412-i2s.c Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2009-06-14 13:42:43 -07:00
s3c2412-i2s.h ASoC: Split s3c2412-i2s.c into core and SoC specific parts 2009-03-06 13:37:08 +00:00
s3c2443-ac97.c ASoC: S3C platform: Fix s3c2410_dma_started() called at improper time 2009-08-25 13:09:05 +01:00
s3c-i2s-v2.c ASoC: S3C platform: Fix s3c2410_dma_started() called at improper time 2009-08-25 13:09:05 +01:00
s3c-i2s-v2.h ASoC: Split s3c2412-i2s.c into core and SoC specific parts 2009-03-06 13:37:08 +00:00
smdk2443_wm9710.c ASoC: Push platform registration down into the card 2008-12-02 16:03:40 +00:00