提交 4a1b09b7 编写于 作者: K Kuninori Morimoto 提交者: Mark Brown

ASoC: fsi: bugfix: correct dma area

FSI driver is using dma_sync_single_xxx(),
but the dma area was not correct.
This patch fix it up.
Signed-off-by: NKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
上级 e42bb9bf
...@@ -1052,6 +1052,13 @@ static int fsi_dma_quit(struct fsi_priv *fsi, struct fsi_stream *io) ...@@ -1052,6 +1052,13 @@ static int fsi_dma_quit(struct fsi_priv *fsi, struct fsi_stream *io)
return 0; 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) static void fsi_dma_complete(void *data)
{ {
struct fsi_stream *io = (struct fsi_stream *)data; struct fsi_stream *io = (struct fsi_stream *)data;
...@@ -1061,7 +1068,7 @@ static void fsi_dma_complete(void *data) ...@@ -1061,7 +1068,7 @@ static void fsi_dma_complete(void *data)
enum dma_data_direction dir = fsi_stream_is_play(fsi, io) ? enum dma_data_direction dir = fsi_stream_is_play(fsi, io) ?
DMA_TO_DEVICE : DMA_FROM_DEVICE; 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); samples_to_bytes(runtime, io->period_samples), dir);
io->buff_sample_pos += io->period_samples; io->buff_sample_pos += io->period_samples;
...@@ -1078,13 +1085,6 @@ static void fsi_dma_complete(void *data) ...@@ -1078,13 +1085,6 @@ static void fsi_dma_complete(void *data)
snd_pcm_period_elapsed(io->substream); 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) static void fsi_dma_do_tasklet(unsigned long data)
{ {
struct fsi_stream *io = (struct fsi_stream *)data; struct fsi_stream *io = (struct fsi_stream *)data;
...@@ -1110,7 +1110,7 @@ static void fsi_dma_do_tasklet(unsigned long data) ...@@ -1110,7 +1110,7 @@ static void fsi_dma_do_tasklet(unsigned long data)
len = samples_to_bytes(runtime, io->period_samples); len = samples_to_bytes(runtime, io->period_samples);
buf = fsi_dma_get_area(io); 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_init_table(&sg, 1);
sg_set_page(&sg, pfn_to_page(PFN_DOWN(buf)), sg_set_page(&sg, pfn_to_page(PFN_DOWN(buf)),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册