aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/omap/omap-mcbsp.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
index aebd3af2ab79..88ca71c57c2b 100644
--- a/sound/soc/omap/omap-mcbsp.c
+++ b/sound/soc/omap/omap-mcbsp.c
@@ -348,11 +348,13 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
348 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; 348 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
349 struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data); 349 struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
350 struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs; 350 struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs;
351 int dma, bus_id = mcbsp_data->bus_id, id = cpu_dai->id; 351 struct omap_pcm_dma_data *dma_data;
352 int dma, bus_id = mcbsp_data->bus_id;
352 int wlen, channels, wpf, sync_mode = OMAP_DMA_SYNC_ELEMENT; 353 int wlen, channels, wpf, sync_mode = OMAP_DMA_SYNC_ELEMENT;
353 unsigned long port; 354 unsigned long port;
354 unsigned int format, div, framesize, master; 355 unsigned int format, div, framesize, master;
355 356
357 dma_data = &omap_mcbsp_dai_dma_params[cpu_dai->id][substream->stream];
356 if (cpu_class_is_omap1()) { 358 if (cpu_class_is_omap1()) {
357 dma = omap1_dma_reqs[bus_id][substream->stream]; 359 dma = omap1_dma_reqs[bus_id][substream->stream];
358 port = omap1_mcbsp_port[bus_id][substream->stream]; 360 port = omap1_mcbsp_port[bus_id][substream->stream];
@@ -365,8 +367,7 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
365 } else if (cpu_is_omap343x()) { 367 } else if (cpu_is_omap343x()) {
366 dma = omap24xx_dma_reqs[bus_id][substream->stream]; 368 dma = omap24xx_dma_reqs[bus_id][substream->stream];
367 port = omap34xx_mcbsp_port[bus_id][substream->stream]; 369 port = omap34xx_mcbsp_port[bus_id][substream->stream];
368 omap_mcbsp_dai_dma_params[id][substream->stream].set_threshold = 370 dma_data->set_threshold = omap_mcbsp_set_threshold;
369 omap_mcbsp_set_threshold;
370 /* TODO: Currently, MODE_ELEMENT == MODE_FRAME */ 371 /* TODO: Currently, MODE_ELEMENT == MODE_FRAME */
371 if (omap_mcbsp_get_dma_op_mode(bus_id) == 372 if (omap_mcbsp_get_dma_op_mode(bus_id) ==
372 MCBSP_DMA_MODE_THRESHOLD) 373 MCBSP_DMA_MODE_THRESHOLD)
@@ -374,26 +375,22 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
374 } else { 375 } else {
375 return -ENODEV; 376 return -ENODEV;
376 } 377 }
377 omap_mcbsp_dai_dma_params[id][substream->stream].name = 378 dma_data->name = substream->stream ? "Audio Capture" : "Audio Playback";
378 substream->stream ? "Audio Capture" : "Audio Playback"; 379 dma_data->dma_req = dma;
379 omap_mcbsp_dai_dma_params[id][substream->stream].dma_req = dma; 380 dma_data->port_addr = port;
380 omap_mcbsp_dai_dma_params[id][substream->stream].port_addr = port; 381 dma_data->sync_mode = sync_mode;
381 omap_mcbsp_dai_dma_params[id][substream->stream].sync_mode = sync_mode;
382 switch (params_format(params)) { 382 switch (params_format(params)) {
383 case SNDRV_PCM_FORMAT_S16_LE: 383 case SNDRV_PCM_FORMAT_S16_LE:
384 omap_mcbsp_dai_dma_params[id][substream->stream].data_type = 384 dma_data->data_type = OMAP_DMA_DATA_TYPE_S16;
385 OMAP_DMA_DATA_TYPE_S16;
386 break; 385 break;
387 case SNDRV_PCM_FORMAT_S32_LE: 386 case SNDRV_PCM_FORMAT_S32_LE:
388 omap_mcbsp_dai_dma_params[id][substream->stream].data_type = 387 dma_data->data_type = OMAP_DMA_DATA_TYPE_S32;
389 OMAP_DMA_DATA_TYPE_S32;
390 break; 388 break;
391 default: 389 default:
392 return -EINVAL; 390 return -EINVAL;
393 } 391 }
394 392
395 snd_soc_dai_set_dma_data(cpu_dai, substream, 393 snd_soc_dai_set_dma_data(cpu_dai, substream, dma_data);
396 &omap_mcbsp_dai_dma_params[id][substream->stream]);
397 394
398 if (mcbsp_data->configured) { 395 if (mcbsp_data->configured) {
399 /* McBSP already configured by another stream */ 396 /* McBSP already configured by another stream */