diff options
author | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | 2016-02-11 07:19:30 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-02-19 11:20:18 -0500 |
commit | 6a9364ca6fa07ec215b0ba7c49d110b8236985d4 (patch) | |
tree | 047c264c555100400b393273ff5474be9197d5ca | |
parent | bbedefb9e8c350bc7e8e7dc4732ba1974789e3e9 (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.c | 22 |
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, |