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: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
e42bb9bfbb
commit
4a1b09b79b
@ -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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user