]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ASoC: qcom: apq8016: add wrdma support
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Thu, 28 Jan 2016 15:28:40 +0000 (15:28 +0000)
committerSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Fri, 5 Feb 2016 08:12:56 +0000 (08:12 +0000)
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

index df44f09431fc42e453a68579cd9272c6b80f6bdd..3eef0c37ba50d6d4d568727917f4d93348584247 100644 (file)
@@ -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,