* [PATCH 1/2] ASoC: fsi: bugfix: correct dma area
2012-05-29 6:26 [PATCH 0/2] ASoC: fsi: bugfix for DMAEngine Kuninori Morimoto
@ 2012-05-29 6:27 ` Kuninori Morimoto
2012-05-29 6:28 ` [PATCH 2/2] ASoC: fsi: bugfix: ensure dma is terminated Kuninori Morimoto
2012-05-30 10:04 ` [PATCH 0/2] ASoC: fsi: bugfix for DMAEngine Mark Brown
2 siblings, 0 replies; 4+ messages in thread
From: Kuninori Morimoto @ 2012-05-29 6:27 UTC (permalink / raw)
To: Mark Brown; +Cc: Linux-ALSA, Liam Girdwood, Kuninori Morimoto
FSI driver is using dma_sync_single_xxx(),
but the dma area was not correct.
This patch fix it up.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
-- this is v3.5 bugfix
sound/soc/sh/fsi.c | 18 +++++++++---------
1 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index 0da021a..02ffe79 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -1052,6 +1052,13 @@ static int fsi_dma_quit(struct fsi_priv *fsi, struct fsi_stream *io)
return 0;
}
+static dma_addr_t fsi_dma_get_area(struct fsi_stream *io)
+{
+ struct snd_pcm_runtime *runtime = io->substream->runtime;
+
+ return io->dma + samples_to_bytes(runtime, io->buff_sample_pos);
+}
+
static void fsi_dma_complete(void *data)
{
struct fsi_stream *io = (struct fsi_stream *)data;
@@ -1061,7 +1068,7 @@ static void fsi_dma_complete(void *data)
enum dma_data_direction dir = fsi_stream_is_play(fsi, io) ?
DMA_TO_DEVICE : DMA_FROM_DEVICE;
- dma_sync_single_for_cpu(dai->dev, io->dma,
+ dma_sync_single_for_cpu(dai->dev, fsi_dma_get_area(io),
samples_to_bytes(runtime, io->period_samples), dir);
io->buff_sample_pos += io->period_samples;
@@ -1078,13 +1085,6 @@ static void fsi_dma_complete(void *data)
snd_pcm_period_elapsed(io->substream);
}
-static dma_addr_t fsi_dma_get_area(struct fsi_stream *io)
-{
- struct snd_pcm_runtime *runtime = io->substream->runtime;
-
- return io->dma + samples_to_bytes(runtime, io->buff_sample_pos);
-}
-
static void fsi_dma_do_tasklet(unsigned long data)
{
struct fsi_stream *io = (struct fsi_stream *)data;
@@ -1110,7 +1110,7 @@ static void fsi_dma_do_tasklet(unsigned long data)
len = samples_to_bytes(runtime, io->period_samples);
buf = fsi_dma_get_area(io);
- dma_sync_single_for_device(dai->dev, io->dma, len, dir);
+ dma_sync_single_for_device(dai->dev, buf, len, dir);
sg_init_table(&sg, 1);
sg_set_page(&sg, pfn_to_page(PFN_DOWN(buf)),
--
1.7.5.4
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 2/2] ASoC: fsi: bugfix: ensure dma is terminated
2012-05-29 6:26 [PATCH 0/2] ASoC: fsi: bugfix for DMAEngine Kuninori Morimoto
2012-05-29 6:27 ` [PATCH 1/2] ASoC: fsi: bugfix: correct dma area Kuninori Morimoto
@ 2012-05-29 6:28 ` Kuninori Morimoto
2012-05-30 10:04 ` [PATCH 0/2] ASoC: fsi: bugfix for DMAEngine Mark Brown
2 siblings, 0 replies; 4+ messages in thread
From: Kuninori Morimoto @ 2012-05-29 6:28 UTC (permalink / raw)
To: Mark Brown; +Cc: Linux-ALSA, Liam Girdwood, Kuninori Morimoto
FSI DMAEngine has to be stopped certainly at the start/stop time.
Without this patch, it will include noise on playback.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
this is v3.5 bugfix
sound/soc/sh/fsi.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index 02ffe79..18c920f 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -1178,6 +1178,8 @@ static void fsi_dma_push_start_stop(struct fsi_priv *fsi, struct fsi_stream *io,
fsi_reg_mask_set(fsi, OUT_DMAC, DMA_ON, enable);
+ dmaengine_terminate_all(io->chan);
+
if (fsi_is_clk_master(fsi))
fsi_master_mask_set(master, CLK_RST, clk, (enable) ? clk : 0);
}
--
1.7.5.4
^ permalink raw reply related [flat|nested] 4+ messages in thread