aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/rockchip/rockchip_i2s.c
diff options
context:
space:
mode:
authorJianqun <jay.xu@rock-chips.com>2014-09-12 20:41:38 -0400
committerMark Brown <broonie@kernel.org>2014-09-13 12:38:16 -0400
commit3b40a80216e941c518426f7b86705e52acbd413f (patch)
treea27ac2821ba197b00cbd8493e3def355acc2d4b8 /sound/soc/rockchip/rockchip_i2s.c
parent38306afc107c53c379757e7f3146a6418328ebc9 (diff)
ASoC: rockchip-i2s: add dma data to snd_soc_dai
Add playback/capture dma data to snd_soc_dai. Test on RK3288 with max98090. Signed-off-by: Jianqun Xu <jay.xu@rock-chips.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/rockchip/rockchip_i2s.c')
-rw-r--r--sound/soc/rockchip/rockchip_i2s.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/sound/soc/rockchip/rockchip_i2s.c b/sound/soc/rockchip/rockchip_i2s.c
index dd423c611d96..c8172dda8c7d 100644
--- a/sound/soc/rockchip/rockchip_i2s.c
+++ b/sound/soc/rockchip/rockchip_i2s.c
@@ -243,16 +243,6 @@ static int rockchip_i2s_hw_params(struct snd_pcm_substream *substream,
243 regmap_update_bits(i2s->regmap, I2S_TXCR, I2S_TXCR_VDW_MASK, val); 243 regmap_update_bits(i2s->regmap, I2S_TXCR, I2S_TXCR_VDW_MASK, val);
244 regmap_update_bits(i2s->regmap, I2S_RXCR, I2S_RXCR_VDW_MASK, val); 244 regmap_update_bits(i2s->regmap, I2S_RXCR, I2S_RXCR_VDW_MASK, val);
245 245
246 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
247 dai->playback_dma_data = &i2s->playback_dma_data;
248 regmap_update_bits(i2s->regmap, I2S_DMACR, I2S_DMACR_TDL_MASK,
249 I2S_DMACR_TDL(1) | I2S_DMACR_TDE_ENABLE);
250 } else {
251 dai->capture_dma_data = &i2s->capture_dma_data;
252 regmap_update_bits(i2s->regmap, I2S_DMACR, I2S_DMACR_RDL_MASK,
253 I2S_DMACR_RDL(1) | I2S_DMACR_RDE_ENABLE);
254 }
255
256 return 0; 246 return 0;
257} 247}
258 248
@@ -300,6 +290,16 @@ static int rockchip_i2s_set_sysclk(struct snd_soc_dai *cpu_dai, int clk_id,
300 return ret; 290 return ret;
301} 291}
302 292
293static int rockchip_i2s_dai_probe(struct snd_soc_dai *dai)
294{
295 struct rk_i2s_dev *i2s = snd_soc_dai_get_drvdata(dai);
296
297 dai->capture_dma_data = &i2s->capture_dma_data;
298 dai->playback_dma_data = &i2s->playback_dma_data;
299
300 return 0;
301}
302
303static const struct snd_soc_dai_ops rockchip_i2s_dai_ops = { 303static const struct snd_soc_dai_ops rockchip_i2s_dai_ops = {
304 .hw_params = rockchip_i2s_hw_params, 304 .hw_params = rockchip_i2s_hw_params,
305 .set_sysclk = rockchip_i2s_set_sysclk, 305 .set_sysclk = rockchip_i2s_set_sysclk,
@@ -308,7 +308,9 @@ static const struct snd_soc_dai_ops rockchip_i2s_dai_ops = {
308}; 308};
309 309
310static struct snd_soc_dai_driver rockchip_i2s_dai = { 310static struct snd_soc_dai_driver rockchip_i2s_dai = {
311 .probe = rockchip_i2s_dai_probe,
311 .playback = { 312 .playback = {
313 .stream_name = "Playback",
312 .channels_min = 2, 314 .channels_min = 2,
313 .channels_max = 8, 315 .channels_max = 8,
314 .rates = SNDRV_PCM_RATE_8000_192000, 316 .rates = SNDRV_PCM_RATE_8000_192000,
@@ -318,6 +320,7 @@ static struct snd_soc_dai_driver rockchip_i2s_dai = {
318 SNDRV_PCM_FMTBIT_S24_LE), 320 SNDRV_PCM_FMTBIT_S24_LE),
319 }, 321 },
320 .capture = { 322 .capture = {
323 .stream_name = "Capture",
321 .channels_min = 2, 324 .channels_min = 2,
322 .channels_max = 2, 325 .channels_max = 2,
323 .rates = SNDRV_PCM_RATE_8000_192000, 326 .rates = SNDRV_PCM_RATE_8000_192000,