diff mbox

[RFC,10/15] ASoC: qcom: apq8016: add wrdma support

Message ID 1454347760-10856-1-git-send-email-srinivas.kandagatla@linaro.org (mailing list archive)
State New, archived
Headers show

Commit Message

Srinivas Kandagatla Feb. 1, 2016, 5:29 p.m. UTC
This patch adds wrdma support in lpass-apq8016 by providing the register
offsets and adding support in dma channel allocation callback.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 sound/soc/qcom/lpass-apq8016.c | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

Comments

Kenneth Westfield Feb. 3, 2016, 12:37 a.m. UTC | #1
On Mon, Feb 01, 2016 at 09:29:20AM -0800, Srinivas Kandagatla wrote:
> diff --git a/sound/soc/qcom/lpass-apq8016.c
> b/sound/soc/qcom/lpass-apq8016.c
> index df44f09..3eef0c3 100644
> --- a/sound/soc/qcom/lpass-apq8016.c
> +++ b/sound/soc/qcom/lpass-apq8016.c

...

> @@ -213,7 +225,11 @@ static struct lpass_variant apq8016_data = {
>  	.rdma_reg_base		= 0x8400,
>  	.rdma_reg_stride	= 0x1000,
>  	.rdma_channels		= 2,
> -	.rdmactl_audif_start	= 1,
> +	.dmactl_audif_start	= 1,

Changing rdma.. to dma.. should be done in patch 3 (ASoC: qcom: rename
rdmactl_audif_start to dmactrl_audif_start).  The build should
fail otherwise if bisecting between this patch and patch 3.
Srinivas Kandagatla Feb. 3, 2016, 8:48 a.m. UTC | #2
On 03/02/16 00:37, Kenneth Westfield wrote:
> On Mon, Feb 01, 2016 at 09:29:20AM -0800, Srinivas Kandagatla wrote:
>> diff --git a/sound/soc/qcom/lpass-apq8016.c
>> b/sound/soc/qcom/lpass-apq8016.c
>> index df44f09..3eef0c3 100644
>> --- a/sound/soc/qcom/lpass-apq8016.c
>> +++ b/sound/soc/qcom/lpass-apq8016.c
>
> ...
>
>> @@ -213,7 +225,11 @@ static struct lpass_variant apq8016_data = {
>>   	.rdma_reg_base		= 0x8400,
>>   	.rdma_reg_stride	= 0x1000,
>>   	.rdma_channels		= 2,
>> -	.rdmactl_audif_start	= 1,
>> +	.dmactl_audif_start	= 1,
>
> Changing rdma.. to dma.. should be done in patch 3 (ASoC: qcom: rename
> rdmactl_audif_start to dmactrl_audif_start).  The build should
> fail otherwise if bisecting between this patch and patch 3.
Agreed, will sort this out in next version.
>
diff mbox

Patch

diff --git a/sound/soc/qcom/lpass-apq8016.c b/sound/soc/qcom/lpass-apq8016.c
index df44f09..3eef0c3 100644
--- a/sound/soc/qcom/lpass-apq8016.c
+++ b/sound/soc/qcom/lpass-apq8016.c
@@ -137,11 +137,23 @@  static int apq8016_lpass_alloc_dma_channel(struct lpass_data *drvdata,
 					   int direction)
 {
 	struct lpass_variant *v = drvdata->variant;
-	int chan = find_first_zero_bit(&drvdata->dma_ch_bit_map,
+	int chan = 0;
+
+	if (direction == SNDRV_PCM_STREAM_PLAYBACK) {
+		chan = find_first_zero_bit(&drvdata->dma_ch_bit_map,
 					v->rdma_channels);
 
-	if (chan >= v->rdma_channels)
-		return -EBUSY;
+		if (chan >= v->rdma_channels)
+			return -EBUSY;
+	} else {
+		chan = find_next_zero_bit(&drvdata->dma_ch_bit_map,
+					v->wrdma_channel_start +
+					v->wrdma_channels,
+					v->wrdma_channel_start);
+
+		if (chan >=  v->wrdma_channel_start + v->wrdma_channels)
+			return -EBUSY;
+	}
 
 	set_bit(chan, &drvdata->dma_ch_bit_map);
 
@@ -213,7 +225,11 @@  static struct lpass_variant apq8016_data = {
 	.rdma_reg_base		= 0x8400,
 	.rdma_reg_stride	= 0x1000,
 	.rdma_channels		= 2,
-	.rdmactl_audif_start	= 1,
+	.dmactl_audif_start	= 1,
+	.wrdma_reg_base		= 0xB000,
+	.wrdma_reg_stride	= 0x1000,
+	.wrdma_channel_start	= 5,
+	.wrdma_channels		= 2,
 	.dai_driver		= apq8016_lpass_cpu_dai_driver,
 	.num_dai		= ARRAY_SIZE(apq8016_lpass_cpu_dai_driver),
 	.init			= apq8016_lpass_init,