Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1323339 > unrolled thread
| Started by | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> |
|---|---|
| First post | 2016-02-01 18:30 +0100 |
| Last post | 2016-02-03 10:00 +0100 |
| Articles | 3 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH RFC 01/15] ASoC: qcom: use snd_dma_alloc/free* apis Srinivas Kandagatla <srinivas.kandagatla@linaro.org> - 2016-02-01 18:30 +0100
Re: [alsa-devel] [PATCH RFC 01/15] ASoC: qcom: use snd_dma_alloc/free* apis Kenneth Westfield <kwestfie@codeaurora.org> - 2016-02-03 01:40 +0100
Re: [alsa-devel] [PATCH RFC 01/15] ASoC: qcom: use snd_dma_alloc/free* apis Srinivas Kandagatla <srinivas.kandagatla@linaro.org> - 2016-02-03 10:00 +0100
| From | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> |
|---|---|
| Date | 2016-02-01 18:30 +0100 |
| Subject | [PATCH RFC 01/15] ASoC: qcom: use snd_dma_alloc/free* apis |
| Message-ID | <qXqsy-6bL-13@gated-at.bofh.it> |
There is no point in having local allocation functions when the driver
can use snd_dma_alloc/free() apis. This patch replaces the local versions
of the dma allocation apis with the snd_dma_alloc/free() apis.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
sound/soc/qcom/lpass-platform.c | 41 +++++------------------------------------
1 file changed, 5 insertions(+), 36 deletions(-)
diff --git a/sound/soc/qcom/lpass-platform.c b/sound/soc/qcom/lpass-platform.c
index 4aeb8e1..a6dce1b 100644
--- a/sound/soc/qcom/lpass-platform.c
+++ b/sound/soc/qcom/lpass-platform.c
@@ -439,39 +439,6 @@ static irqreturn_t lpass_platform_lpaif_irq(int irq, void *data)
return IRQ_HANDLED;
}
-static int lpass_platform_alloc_buffer(struct snd_pcm_substream *substream,
- struct snd_soc_pcm_runtime *rt)
-{
- struct snd_dma_buffer *buf = &substream->dma_buffer;
- size_t size = lpass_platform_pcm_hardware.buffer_bytes_max;
-
- buf->dev.type = SNDRV_DMA_TYPE_DEV;
- buf->dev.dev = rt->platform->dev;
- buf->private_data = NULL;
- buf->area = dma_alloc_coherent(rt->platform->dev, size, &buf->addr,
- GFP_KERNEL);
- if (!buf->area) {
- dev_err(rt->platform->dev, "%s: Could not allocate DMA buffer\n",
- __func__);
- return -ENOMEM;
- }
- buf->bytes = size;
-
- return 0;
-}
-
-static void lpass_platform_free_buffer(struct snd_pcm_substream *substream,
- struct snd_soc_pcm_runtime *rt)
-{
- struct snd_dma_buffer *buf = &substream->dma_buffer;
-
- if (buf->area) {
- dma_free_coherent(rt->dev, buf->bytes, buf->area,
- buf->addr);
- }
- buf->area = NULL;
-}
-
static int lpass_platform_pcm_new(struct snd_soc_pcm_runtime *soc_runtime)
{
struct snd_pcm *pcm = soc_runtime->pcm;
@@ -483,6 +450,7 @@ static int lpass_platform_pcm_new(struct snd_soc_pcm_runtime *soc_runtime)
struct lpass_variant *v = drvdata->variant;
int ret;
struct lpass_pcm_data *data;
+ size_t size = lpass_platform_pcm_hardware.buffer_bytes_max;
data = devm_kzalloc(soc_runtime->dev, sizeof(*data), GFP_KERNEL);
if (!data)
@@ -499,7 +467,8 @@ static int lpass_platform_pcm_new(struct snd_soc_pcm_runtime *soc_runtime)
snd_soc_pcm_set_drvdata(soc_runtime, data);
- ret = lpass_platform_alloc_buffer(substream, soc_runtime);
+ ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, pcm->card->dev,
+ size, &substream->dma_buffer);
if (ret)
return ret;
@@ -514,7 +483,7 @@ static int lpass_platform_pcm_new(struct snd_soc_pcm_runtime *soc_runtime)
return 0;
err_buf:
- lpass_platform_free_buffer(substream, soc_runtime);
+ snd_dma_free_pages(&substream->dma_buffer);
return ret;
}
@@ -533,7 +502,7 @@ static void lpass_platform_pcm_free(struct snd_pcm *pcm)
if (v->free_dma_channel)
v->free_dma_channel(drvdata, data->rdma_ch);
- lpass_platform_free_buffer(substream, soc_runtime);
+ snd_dma_free_pages(&substream->dma_buffer);
}
static struct snd_soc_platform_driver lpass_platform_driver = {
--
1.9.1
[toc] | [next] | [standalone]
| From | Kenneth Westfield <kwestfie@codeaurora.org> |
|---|---|
| Date | 2016-02-03 01:40 +0100 |
| Subject | Re: [alsa-devel] [PATCH RFC 01/15] ASoC: qcom: use snd_dma_alloc/free* apis |
| Message-ID | <qXTEe-2Um-11@gated-at.bofh.it> |
| In reply to | #1323339 |
On Mon, Feb 01, 2016 at 09:27:59AM -0800, Srinivas Kandagatla wrote:
> diff --git a/sound/soc/qcom/lpass-platform.c
> b/sound/soc/qcom/lpass-platform.c
> index 4aeb8e1..a6dce1b 100644
> --- a/sound/soc/qcom/lpass-platform.c
> +++ b/sound/soc/qcom/lpass-platform.c
> @@ -439,39 +439,6 @@ static irqreturn_t lpass_platform_lpaif_irq(int irq,
> void *data)
> return IRQ_HANDLED;
> }
>
> -static int lpass_platform_alloc_buffer(struct snd_pcm_substream
> *substream,
> - struct snd_soc_pcm_runtime *rt)
> -{
> - struct snd_dma_buffer *buf = &substream->dma_buffer;
> - size_t size = lpass_platform_pcm_hardware.buffer_bytes_max;
> -
> - buf->dev.type = SNDRV_DMA_TYPE_DEV;
> - buf->dev.dev = rt->platform->dev;
> - buf->private_data = NULL;
> - buf->area = dma_alloc_coherent(rt->platform->dev, size,
> &buf->addr,
> - GFP_KERNEL);
> - if (!buf->area) {
> - dev_err(rt->platform->dev, "%s: Could not allocate DMA
> buffer\n",
> - __func__);
> - return -ENOMEM;
> - }
...
> @@ -499,7 +467,8 @@ static int lpass_platform_pcm_new(struct
> snd_soc_pcm_runtime *soc_runtime)
>
> snd_soc_pcm_set_drvdata(soc_runtime, data);
>
> - ret = lpass_platform_alloc_buffer(substream, soc_runtime);
> + ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, pcm->card->dev,
> + size, &substream->dma_buffer);
> if (ret)
> return ret;
>
Is there a particular reason for using the soundcard device (pcm-card->dev)
rather than the platform device (rt->platform->dev) for memory
allocation? Especially considering you posted a fix for this several
weeks ago (ASoC: qcom: use correct device pointer in dma allocation).
--
Kenneth Westfield
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
[toc] | [prev] | [next] | [standalone]
| From | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> |
|---|---|
| Date | 2016-02-03 10:00 +0100 |
| Subject | Re: [alsa-devel] [PATCH RFC 01/15] ASoC: qcom: use snd_dma_alloc/free* apis |
| Message-ID | <qY1s6-83z-3@gated-at.bofh.it> |
| In reply to | #1324768 |
On 03/02/16 00:35, Kenneth Westfield wrote:
> On Mon, Feb 01, 2016 at 09:27:59AM -0800, Srinivas Kandagatla wrote:
>> diff --git a/sound/soc/qcom/lpass-platform.c
>> b/sound/soc/qcom/lpass-platform.c
>> index 4aeb8e1..a6dce1b 100644
>> --- a/sound/soc/qcom/lpass-platform.c
>> +++ b/sound/soc/qcom/lpass-platform.c
>> @@ -439,39 +439,6 @@ static irqreturn_t lpass_platform_lpaif_irq(int irq,
>> void *data)
>> return IRQ_HANDLED;
>> }
>>
>> -static int lpass_platform_alloc_buffer(struct snd_pcm_substream
>> *substream,
>> - struct snd_soc_pcm_runtime *rt)
>> -{
>> - struct snd_dma_buffer *buf = &substream->dma_buffer;
>> - size_t size = lpass_platform_pcm_hardware.buffer_bytes_max;
>> -
>> - buf->dev.type = SNDRV_DMA_TYPE_DEV;
>> - buf->dev.dev = rt->platform->dev;
>> - buf->private_data = NULL;
>> - buf->area = dma_alloc_coherent(rt->platform->dev, size,
>> &buf->addr,
>> - GFP_KERNEL);
>> - if (!buf->area) {
>> - dev_err(rt->platform->dev, "%s: Could not allocate DMA
>> buffer\n",
>> - __func__);
>> - return -ENOMEM;
>> - }
>
> ...
>
>> @@ -499,7 +467,8 @@ static int lpass_platform_pcm_new(struct
>> snd_soc_pcm_runtime *soc_runtime)
>>
>> snd_soc_pcm_set_drvdata(soc_runtime, data);
>>
>> - ret = lpass_platform_alloc_buffer(substream, soc_runtime);
>> + ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, pcm->card->dev,
>> + size, &substream->dma_buffer);
>> if (ret)
>> return ret;
>>
>
> Is there a particular reason for using the soundcard device (pcm-card->dev)
> rather than the platform device (rt->platform->dev) for memory
> allocation? Especially considering you posted a fix for this several
> weeks ago (ASoC: qcom: use correct device pointer in dma allocation).
Thanks for spotting this, I will fix it and resend it with platform->dev.
>
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web