ASoC: update snd_pcm_ops copy interface in platform drivers

snd_pcm_ops copy interface used by msm platform drivers is replaced
with copy_user in msm-4.14. Unit of two input variables is changed
from frame count to byte.
Update all the related msm platform drivers to adapt to this change.

Change-Id: Icecd0454c7a80e5ee90407c64aaf1ca76d2d9815
Signed-off-by: Meng Wang <mwang@codeaurora.org>
This commit is contained in:
Meng Wang
2017-10-30 16:46:16 +08:00
parent 3c88f61439
commit ac147b705e
8 changed files with 89 additions and 109 deletions

View File

@@ -1,4 +1,4 @@
/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -778,7 +778,7 @@ err:
}
static int msm_pcm_playback_copy(struct snd_pcm_substream *substream, int a,
snd_pcm_uframes_t hwoff, void __user *buf, snd_pcm_uframes_t frames)
unsigned long hwoff, void __user *buf, unsigned long fbytes)
{
int ret = 0;
struct voip_buf_node *buf_node = NULL;
@@ -786,9 +786,7 @@ static int msm_pcm_playback_copy(struct snd_pcm_substream *substream, int a,
struct voip_drv_info *prtd = runtime->private_data;
unsigned long dsp_flags;
int count = frames_to_bytes(runtime, frames);
pr_debug("%s: count = %d, frames=%d\n", __func__, count, (int)frames);
pr_debug("%s: fbytes=%lu\n", __func__, fbytes);
if (prtd->voip_reset) {
pr_debug("%s: RESET event happened during VoIP\n", __func__);
@@ -805,7 +803,7 @@ static int msm_pcm_playback_copy(struct snd_pcm_substream *substream, int a,
}
if (ret > 0) {
if (count <= VOIP_MAX_VOC_PKT_SIZE) {
if (fbytes <= VOIP_MAX_VOC_PKT_SIZE) {
spin_lock_irqsave(&prtd->dsp_lock, dsp_flags);
buf_node =
list_first_entry(&prtd->free_in_queue,
@@ -814,23 +812,23 @@ static int msm_pcm_playback_copy(struct snd_pcm_substream *substream, int a,
spin_unlock_irqrestore(&prtd->dsp_lock, dsp_flags);
if (prtd->mode == MODE_PCM) {
ret = copy_from_user(&buf_node->frame.voc_pkt,
buf, count);
buf, fbytes);
if (ret) {
pr_err("%s: copy from user failed %d\n",
__func__, ret);
return -EFAULT;
}
buf_node->frame.pktlen = count;
buf_node->frame.pktlen = fbytes;
} else {
ret = copy_from_user(&buf_node->frame,
buf, count);
buf, fbytes);
if (ret) {
pr_err("%s: copy from user failed %d\n",
__func__, ret);
return -EFAULT;
}
if (buf_node->frame.pktlen >= count)
buf_node->frame.pktlen = count -
if (buf_node->frame.pktlen >= fbytes)
buf_node->frame.pktlen = fbytes -
(sizeof(buf_node->frame.frm_hdr) +
sizeof(buf_node->frame.pktlen));
}
@@ -838,8 +836,8 @@ static int msm_pcm_playback_copy(struct snd_pcm_substream *substream, int a,
list_add_tail(&buf_node->list, &prtd->in_queue);
spin_unlock_irqrestore(&prtd->dsp_lock, dsp_flags);
} else {
pr_err("%s: Write cnt %d is > VOIP_MAX_VOC_PKT_SIZE\n",
__func__, count);
pr_err("%s: Write cnt %lu is > VOIP_MAX_VOC_PKT_SIZE\n",
__func__, fbytes);
ret = -ENOMEM;
}
@@ -853,20 +851,17 @@ static int msm_pcm_playback_copy(struct snd_pcm_substream *substream, int a,
return ret;
}
static int msm_pcm_capture_copy(struct snd_pcm_substream *substream,
int channel, snd_pcm_uframes_t hwoff, void __user *buf,
snd_pcm_uframes_t frames)
int channel, unsigned long hwoff, void __user *buf,
unsigned long fbytes)
{
int ret = 0;
int count = 0;
struct voip_buf_node *buf_node = NULL;
struct snd_pcm_runtime *runtime = substream->runtime;
struct voip_drv_info *prtd = runtime->private_data;
unsigned long dsp_flags;
int size;
count = frames_to_bytes(runtime, frames);
pr_debug("%s: count = %d\n", __func__, count);
pr_debug("%s: fbytes = %lu\n", __func__, fbytes);
if (prtd->voip_reset) {
pr_debug("%s: RESET event happened during VoIP\n", __func__);
@@ -885,7 +880,7 @@ static int msm_pcm_capture_copy(struct snd_pcm_substream *substream,
if (ret > 0) {
if (count <= VOIP_MAX_VOC_PKT_SIZE) {
if (fbytes <= VOIP_MAX_VOC_PKT_SIZE) {
spin_lock_irqsave(&prtd->dsp_ul_lock, dsp_flags);
buf_node = list_first_entry(&prtd->out_queue,
struct voip_buf_node, list);
@@ -914,8 +909,8 @@ static int msm_pcm_capture_copy(struct snd_pcm_substream *substream,
&prtd->free_out_queue);
spin_unlock_irqrestore(&prtd->dsp_ul_lock, dsp_flags);
} else {
pr_err("%s: Read count %d > VOIP_MAX_VOC_PKT_SIZE\n",
__func__, count);
pr_err("%s: Read fbytes %lu > VOIP_MAX_VOC_PKT_SIZE\n",
__func__, fbytes);
ret = -ENOMEM;
}
@@ -930,14 +925,14 @@ static int msm_pcm_capture_copy(struct snd_pcm_substream *substream,
return ret;
}
static int msm_pcm_copy(struct snd_pcm_substream *substream, int a,
snd_pcm_uframes_t hwoff, void __user *buf, snd_pcm_uframes_t frames)
unsigned long hwoff, void __user *buf, unsigned long fbytes)
{
int ret = 0;
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
ret = msm_pcm_playback_copy(substream, a, hwoff, buf, frames);
ret = msm_pcm_playback_copy(substream, a, hwoff, buf, fbytes);
else if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
ret = msm_pcm_capture_copy(substream, a, hwoff, buf, frames);
ret = msm_pcm_capture_copy(substream, a, hwoff, buf, fbytes);
return ret;
}
@@ -1598,7 +1593,7 @@ static int voip_get_media_type(uint32_t mode, uint32_t rate_type,
static const struct snd_pcm_ops msm_pcm_ops = {
.open = msm_pcm_open,
.copy = msm_pcm_copy,
.copy_user = msm_pcm_copy,
.hw_params = msm_pcm_hw_params,
.close = msm_pcm_close,
.prepare = msm_pcm_prepare,