Commit 07ee02a2 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: es1938: Convert to generic PCM copy ops

This patch converts the es1938 driver code to use the new unified PCM
copy callback.  It's a straightforward conversion from *_user() to
*_iter() variants in most parts.

Note that copy_from/to_iter() returns the copied bytes, hence the
error condition is adjusted accordingly.

Link: https://lore.kernel.org/r/20230815190136.8987-8-tiwai@suse.de


Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 9d0fdc60
Loading
Loading
Loading
Loading
+5 −25
Original line number Diff line number Diff line
@@ -824,7 +824,7 @@ static snd_pcm_uframes_t snd_es1938_playback_pointer(struct snd_pcm_substream *s

static int snd_es1938_capture_copy(struct snd_pcm_substream *substream,
				   int channel, unsigned long pos,
				   void __user *dst, unsigned long count)
				   struct iov_iter *dst, unsigned long count)
{
	struct snd_pcm_runtime *runtime = substream->runtime;
	struct es1938 *chip = snd_pcm_substream_chip(substream);
@@ -832,36 +832,17 @@ static int snd_es1938_capture_copy(struct snd_pcm_substream *substream,
	if (snd_BUG_ON(pos + count > chip->dma1_size))
		return -EINVAL;
	if (pos + count < chip->dma1_size) {
		if (copy_to_user(dst, runtime->dma_area + pos + 1, count))
		if (copy_to_iter(runtime->dma_area + pos + 1, count, dst) != count)
			return -EFAULT;
	} else {
		if (copy_to_user(dst, runtime->dma_area + pos + 1, count - 1))
		if (copy_to_iter(runtime->dma_area + pos + 1, count - 1, dst) != count - 1)
			return -EFAULT;
		if (put_user(runtime->dma_area[0],
			     ((unsigned char __user *)dst) + count - 1))
		if (copy_to_iter(runtime->dma_area, 1, dst) != 1)
			return -EFAULT;
	}
	return 0;
}

static int snd_es1938_capture_copy_kernel(struct snd_pcm_substream *substream,
					  int channel, unsigned long pos,
					  void *dst, unsigned long count)
{
	struct snd_pcm_runtime *runtime = substream->runtime;
	struct es1938 *chip = snd_pcm_substream_chip(substream);

	if (snd_BUG_ON(pos + count > chip->dma1_size))
		return -EINVAL;
	if (pos + count < chip->dma1_size) {
		memcpy(dst, runtime->dma_area + pos + 1, count);
	} else {
		memcpy(dst, runtime->dma_area + pos + 1, count - 1);
		runtime->dma_area[0] = *((unsigned char *)dst + count - 1);
	}
	return 0;
}

/* ----------------------------------------------------------------------
 * Audio1 Capture (ADC)
 * ----------------------------------------------------------------------*/
@@ -987,8 +968,7 @@ static const struct snd_pcm_ops snd_es1938_capture_ops = {
	.prepare =	snd_es1938_capture_prepare,
	.trigger =	snd_es1938_capture_trigger,
	.pointer =	snd_es1938_capture_pointer,
	.copy_user =	snd_es1938_capture_copy,
	.copy_kernel =	snd_es1938_capture_copy_kernel,
	.copy =		snd_es1938_capture_copy,
};

static int snd_es1938_new_pcm(struct es1938 *chip, int device)