Commit 032db751 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: rme32: Convert to the new PCM copy ops

Replace the copy and the silence ops with the new ops.
The conversion is straightforward with standard helper functions, and
now we can drop the bytes <-> frames conversions in callbacks.
Reviewed-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 6c6ba11f
...@@ -254,39 +254,46 @@ static inline unsigned int snd_rme32_pcm_byteptr(struct rme32 * rme32) ...@@ -254,39 +254,46 @@ static inline unsigned int snd_rme32_pcm_byteptr(struct rme32 * rme32)
} }
/* silence callback for halfduplex mode */ /* silence callback for halfduplex mode */
static int snd_rme32_playback_silence(struct snd_pcm_substream *substream, int channel, /* not used (interleaved data) */ static int snd_rme32_playback_silence(struct snd_pcm_substream *substream,
snd_pcm_uframes_t pos, int channel, unsigned long pos,
snd_pcm_uframes_t count) unsigned long count)
{ {
struct rme32 *rme32 = snd_pcm_substream_chip(substream); struct rme32 *rme32 = snd_pcm_substream_chip(substream);
count <<= rme32->playback_frlog;
pos <<= rme32->playback_frlog;
memset_io(rme32->iobase + RME32_IO_DATA_BUFFER + pos, 0, count); memset_io(rme32->iobase + RME32_IO_DATA_BUFFER + pos, 0, count);
return 0; return 0;
} }
/* copy callback for halfduplex mode */ /* copy callback for halfduplex mode */
static int snd_rme32_playback_copy(struct snd_pcm_substream *substream, int channel, /* not used (interleaved data) */ static int snd_rme32_playback_copy(struct snd_pcm_substream *substream,
snd_pcm_uframes_t pos, int channel, unsigned long pos,
void __user *src, snd_pcm_uframes_t count) void __user *src, unsigned long count)
{ {
struct rme32 *rme32 = snd_pcm_substream_chip(substream); struct rme32 *rme32 = snd_pcm_substream_chip(substream);
count <<= rme32->playback_frlog;
pos <<= rme32->playback_frlog;
if (copy_from_user_toio(rme32->iobase + RME32_IO_DATA_BUFFER + pos, if (copy_from_user_toio(rme32->iobase + RME32_IO_DATA_BUFFER + pos,
src, count)) src, count))
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
static int snd_rme32_playback_copy_kernel(struct snd_pcm_substream *substream,
int channel, unsigned long pos,
void *src, unsigned long count)
{
struct rme32 *rme32 = snd_pcm_substream_chip(substream);
memcpy_toio(rme32->iobase + RME32_IO_DATA_BUFFER + pos, src, count);
return 0;
}
/* copy callback for halfduplex mode */ /* copy callback for halfduplex mode */
static int snd_rme32_capture_copy(struct snd_pcm_substream *substream, int channel, /* not used (interleaved data) */ static int snd_rme32_capture_copy(struct snd_pcm_substream *substream,
snd_pcm_uframes_t pos, int channel, unsigned long pos,
void __user *dst, snd_pcm_uframes_t count) void __user *dst, unsigned long count)
{ {
struct rme32 *rme32 = snd_pcm_substream_chip(substream); struct rme32 *rme32 = snd_pcm_substream_chip(substream);
count <<= rme32->capture_frlog;
pos <<= rme32->capture_frlog;
if (copy_to_user_fromio(dst, if (copy_to_user_fromio(dst,
rme32->iobase + RME32_IO_DATA_BUFFER + pos, rme32->iobase + RME32_IO_DATA_BUFFER + pos,
count)) count))
...@@ -294,6 +301,16 @@ static int snd_rme32_capture_copy(struct snd_pcm_substream *substream, int chann ...@@ -294,6 +301,16 @@ static int snd_rme32_capture_copy(struct snd_pcm_substream *substream, int chann
return 0; return 0;
} }
static int snd_rme32_capture_copy_kernel(struct snd_pcm_substream *substream,
int channel, unsigned long pos,
void *dst, unsigned long count)
{
struct rme32 *rme32 = snd_pcm_substream_chip(substream);
memcpy_fromio(dst, rme32->iobase + RME32_IO_DATA_BUFFER + pos, count);
return 0;
}
/* /*
* SPDIF I/O capabilities (half-duplex mode) * SPDIF I/O capabilities (half-duplex mode)
*/ */
...@@ -1203,8 +1220,9 @@ static const struct snd_pcm_ops snd_rme32_playback_spdif_ops = { ...@@ -1203,8 +1220,9 @@ static const struct snd_pcm_ops snd_rme32_playback_spdif_ops = {
.prepare = snd_rme32_playback_prepare, .prepare = snd_rme32_playback_prepare,
.trigger = snd_rme32_pcm_trigger, .trigger = snd_rme32_pcm_trigger,
.pointer = snd_rme32_playback_pointer, .pointer = snd_rme32_playback_pointer,
.copy = snd_rme32_playback_copy, .copy_user = snd_rme32_playback_copy,
.silence = snd_rme32_playback_silence, .copy_kernel = snd_rme32_playback_copy_kernel,
.fill_silence = snd_rme32_playback_silence,
.mmap = snd_pcm_lib_mmap_iomem, .mmap = snd_pcm_lib_mmap_iomem,
}; };
...@@ -1217,7 +1235,8 @@ static const struct snd_pcm_ops snd_rme32_capture_spdif_ops = { ...@@ -1217,7 +1235,8 @@ static const struct snd_pcm_ops snd_rme32_capture_spdif_ops = {
.prepare = snd_rme32_capture_prepare, .prepare = snd_rme32_capture_prepare,
.trigger = snd_rme32_pcm_trigger, .trigger = snd_rme32_pcm_trigger,
.pointer = snd_rme32_capture_pointer, .pointer = snd_rme32_capture_pointer,
.copy = snd_rme32_capture_copy, .copy_user = snd_rme32_capture_copy,
.copy_kernel = snd_rme32_capture_copy_kernel,
.mmap = snd_pcm_lib_mmap_iomem, .mmap = snd_pcm_lib_mmap_iomem,
}; };
...@@ -1229,8 +1248,9 @@ static const struct snd_pcm_ops snd_rme32_playback_adat_ops = { ...@@ -1229,8 +1248,9 @@ static const struct snd_pcm_ops snd_rme32_playback_adat_ops = {
.prepare = snd_rme32_playback_prepare, .prepare = snd_rme32_playback_prepare,
.trigger = snd_rme32_pcm_trigger, .trigger = snd_rme32_pcm_trigger,
.pointer = snd_rme32_playback_pointer, .pointer = snd_rme32_playback_pointer,
.copy = snd_rme32_playback_copy, .copy_user = snd_rme32_playback_copy,
.silence = snd_rme32_playback_silence, .copy_kernel = snd_rme32_playback_copy_kernel,
.fill_silence = snd_rme32_playback_silence,
.mmap = snd_pcm_lib_mmap_iomem, .mmap = snd_pcm_lib_mmap_iomem,
}; };
...@@ -1242,7 +1262,8 @@ static const struct snd_pcm_ops snd_rme32_capture_adat_ops = { ...@@ -1242,7 +1262,8 @@ static const struct snd_pcm_ops snd_rme32_capture_adat_ops = {
.prepare = snd_rme32_capture_prepare, .prepare = snd_rme32_capture_prepare,
.trigger = snd_rme32_pcm_trigger, .trigger = snd_rme32_pcm_trigger,
.pointer = snd_rme32_capture_pointer, .pointer = snd_rme32_capture_pointer,
.copy = snd_rme32_capture_copy, .copy_user = snd_rme32_capture_copy,
.copy_kernel = snd_rme32_capture_copy_kernel,
.mmap = snd_pcm_lib_mmap_iomem, .mmap = snd_pcm_lib_mmap_iomem,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment