Skip to content

Commit

Permalink
ALSA: rme9652: Convert to the new PCM ops
Browse files Browse the repository at this point in the history
Replace the copy and the silence ops with the new PCM ops.
The conversion is straightforward with standard helper functions.

Reviewed-by: Takashi Sakamoto <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
tiwai committed Jun 2, 2017
1 parent 53945f5 commit 7b6ae34
Showing 1 changed file with 54 additions and 17 deletions.
71 changes: 54 additions & 17 deletions sound/pci/rme9652/rme9652.c
Original file line number Diff line number Diff line change
Expand Up @@ -1883,46 +1883,81 @@ static char *rme9652_channel_buffer_location(struct snd_rme9652 *rme9652,
}
}

static int snd_rme9652_playback_copy(struct snd_pcm_substream *substream, int channel,
snd_pcm_uframes_t pos, void __user *src, snd_pcm_uframes_t count)
static int snd_rme9652_playback_copy(struct snd_pcm_substream *substream,
int channel, unsigned long pos,
void __user *src, unsigned long count)
{
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
char *channel_buf;

if (snd_BUG_ON(pos + count > RME9652_CHANNEL_BUFFER_BYTES / 4))
if (snd_BUG_ON(pos + count > RME9652_CHANNEL_BUFFER_BYTES))
return -EINVAL;

channel_buf = rme9652_channel_buffer_location (rme9652,
substream->pstr->stream,
channel);
if (snd_BUG_ON(!channel_buf))
return -EIO;
if (copy_from_user(channel_buf + pos * 4, src, count * 4))
if (copy_from_user(channel_buf + pos, src, count))
return -EFAULT;
return count;
return 0;
}

static int snd_rme9652_capture_copy(struct snd_pcm_substream *substream, int channel,
snd_pcm_uframes_t pos, void __user *dst, snd_pcm_uframes_t count)
static int snd_rme9652_playback_copy_kernel(struct snd_pcm_substream *substream,
int channel, unsigned long pos,
void *src, unsigned long count)
{
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
char *channel_buf;

if (snd_BUG_ON(pos + count > RME9652_CHANNEL_BUFFER_BYTES / 4))
channel_buf = rme9652_channel_buffer_location(rme9652,
substream->pstr->stream,
channel);
if (snd_BUG_ON(!channel_buf))
return -EIO;
memcpy(channel_buf + pos, src, count);
return 0;
}

static int snd_rme9652_capture_copy(struct snd_pcm_substream *substream,
int channel, unsigned long pos,
void __user *dst, unsigned long count)
{
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
char *channel_buf;

if (snd_BUG_ON(pos + count > RME9652_CHANNEL_BUFFER_BYTES))
return -EINVAL;

channel_buf = rme9652_channel_buffer_location (rme9652,
substream->pstr->stream,
channel);
if (snd_BUG_ON(!channel_buf))
return -EIO;
if (copy_to_user(dst, channel_buf + pos * 4, count * 4))
if (copy_to_user(dst, channel_buf + pos, count))
return -EFAULT;
return count;
return 0;
}

static int snd_rme9652_hw_silence(struct snd_pcm_substream *substream, int channel,
snd_pcm_uframes_t pos, snd_pcm_uframes_t count)
static int snd_rme9652_capture_copy_kernel(struct snd_pcm_substream *substream,
int channel, unsigned long pos,
void *dst, unsigned long count)
{
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
char *channel_buf;

channel_buf = rme9652_channel_buffer_location(rme9652,
substream->pstr->stream,
channel);
if (snd_BUG_ON(!channel_buf))
return -EIO;
memcpy(dst, channel_buf + pos, count);
return 0;
}

static int snd_rme9652_hw_silence(struct snd_pcm_substream *substream,
int channel, unsigned long pos,
unsigned long count)
{
struct snd_rme9652 *rme9652 = snd_pcm_substream_chip(substream);
char *channel_buf;
Expand All @@ -1932,8 +1967,8 @@ static int snd_rme9652_hw_silence(struct snd_pcm_substream *substream, int chann
channel);
if (snd_BUG_ON(!channel_buf))
return -EIO;
memset(channel_buf + pos * 4, 0, count * 4);
return count;
memset(channel_buf + pos, 0, count);
return 0;
}

static int snd_rme9652_reset(struct snd_pcm_substream *substream)
Expand Down Expand Up @@ -2376,8 +2411,9 @@ static const struct snd_pcm_ops snd_rme9652_playback_ops = {
.prepare = snd_rme9652_prepare,
.trigger = snd_rme9652_trigger,
.pointer = snd_rme9652_hw_pointer,
.copy = snd_rme9652_playback_copy,
.silence = snd_rme9652_hw_silence,
.copy_user = snd_rme9652_playback_copy,
.copy_kernel = snd_rme9652_playback_copy_kernel,
.fill_silence = snd_rme9652_hw_silence,
};

static const struct snd_pcm_ops snd_rme9652_capture_ops = {
Expand All @@ -2388,7 +2424,8 @@ static const struct snd_pcm_ops snd_rme9652_capture_ops = {
.prepare = snd_rme9652_prepare,
.trigger = snd_rme9652_trigger,
.pointer = snd_rme9652_hw_pointer,
.copy = snd_rme9652_capture_copy,
.copy_user = snd_rme9652_capture_copy,
.copy_kernel = snd_rme9652_capture_copy_kernel,
};

static int snd_rme9652_create_pcm(struct snd_card *card,
Expand Down

0 comments on commit 7b6ae34

Please sign in to comment.