mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
ASoC: SOF: compress: Add copy function for capture case
Added a new copy function used to copy data to user buffer in the case of compress capture. Reviewed-by: Paul Olaru <paul.olaru@nxp.com> Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com> Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com> Link: https://lore.kernel.org/r/20220822101502.17644-3-laurentiu.mihalcea@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
272ff8828f
commit
1a01e19278
|
|
@ -318,6 +318,27 @@ static int sof_compr_copy_playback(struct snd_compr_runtime *rtd,
|
|||
return count - ret;
|
||||
}
|
||||
|
||||
static int sof_compr_copy_capture(struct snd_compr_runtime *rtd,
|
||||
char __user *buf, size_t count)
|
||||
{
|
||||
void *ptr;
|
||||
unsigned int offset, n;
|
||||
int ret;
|
||||
|
||||
div_u64_rem(rtd->total_bytes_transferred, rtd->buffer_size, &offset);
|
||||
ptr = rtd->dma_area + offset;
|
||||
n = rtd->buffer_size - offset;
|
||||
|
||||
if (count < n) {
|
||||
ret = copy_to_user(buf, ptr, count);
|
||||
} else {
|
||||
ret = copy_to_user(buf, ptr, n);
|
||||
ret += copy_to_user(buf + n, rtd->dma_area, count - n);
|
||||
}
|
||||
|
||||
return count - ret;
|
||||
}
|
||||
|
||||
static int sof_compr_copy(struct snd_soc_component *component,
|
||||
struct snd_compr_stream *cstream,
|
||||
char __user *buf, size_t count)
|
||||
|
|
@ -327,7 +348,10 @@ static int sof_compr_copy(struct snd_soc_component *component,
|
|||
if (count > rtd->buffer_size)
|
||||
count = rtd->buffer_size;
|
||||
|
||||
return sof_compr_copy_playback(rtd, buf, count);
|
||||
if (cstream->direction == SND_COMPRESS_PLAYBACK)
|
||||
return sof_compr_copy_playback(rtd, buf, count);
|
||||
else
|
||||
return sof_compr_copy_capture(rtd, buf, count);
|
||||
}
|
||||
|
||||
static int sof_compr_pointer(struct snd_soc_component *component,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user