aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2016-02-11 07:19:30 -0500
committerMark Brown <broonie@kernel.org>2016-02-19 11:20:18 -0500
commit6a9364ca6fa07ec215b0ba7c49d110b8236985d4 (patch)
tree047c264c555100400b393273ff5474be9197d5ca
parentbbedefb9e8c350bc7e8e7dc4732ba1974789e3e9 (diff)
ASoC: qcom: apq8016: add wrdma support
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> Acked-by: Kenneth Westfield <kwestfie@codeaurora.org> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/qcom/lpass-apq8016.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/sound/soc/qcom/lpass-apq8016.c b/sound/soc/qcom/lpass-apq8016.c
index ca3bbd58c81a..3eef0c37ba50 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,
137 int direction) 137 int direction)
138{ 138{
139 struct lpass_variant *v = drvdata->variant; 139 struct lpass_variant *v = drvdata->variant;
140 int chan = find_first_zero_bit(&drvdata->dma_ch_bit_map, 140 int chan = 0;
141
142 if (direction == SNDRV_PCM_STREAM_PLAYBACK) {
143 chan = find_first_zero_bit(&drvdata->dma_ch_bit_map,
141 v->rdma_channels); 144 v->rdma_channels);
142 145
143 if (chan >= v->rdma_channels) 146 if (chan >= v->rdma_channels)
144 return -EBUSY; 147 return -EBUSY;
148 } else {
149 chan = find_next_zero_bit(&drvdata->dma_ch_bit_map,
150 v->wrdma_channel_start +
151 v->wrdma_channels,
152 v->wrdma_channel_start);
153
154 if (chan >= v->wrdma_channel_start + v->wrdma_channels)
155 return -EBUSY;
156 }
145 157
146 set_bit(chan, &drvdata->dma_ch_bit_map); 158 set_bit(chan, &drvdata->dma_ch_bit_map);
147 159
@@ -214,6 +226,10 @@ static struct lpass_variant apq8016_data = {
214 .rdma_reg_stride = 0x1000, 226 .rdma_reg_stride = 0x1000,
215 .rdma_channels = 2, 227 .rdma_channels = 2,
216 .dmactl_audif_start = 1, 228 .dmactl_audif_start = 1,
229 .wrdma_reg_base = 0xB000,
230 .wrdma_reg_stride = 0x1000,
231 .wrdma_channel_start = 5,
232 .wrdma_channels = 2,
217 .dai_driver = apq8016_lpass_cpu_dai_driver, 233 .dai_driver = apq8016_lpass_cpu_dai_driver,
218 .num_dai = ARRAY_SIZE(apq8016_lpass_cpu_dai_driver), 234 .num_dai = ARRAY_SIZE(apq8016_lpass_cpu_dai_driver),
219 .init = apq8016_lpass_init, 235 .init = apq8016_lpass_init,