aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc
diff options
context:
space:
mode:
authorHebbar, Gururaja <gururaja.hebbar@ti.com>2012-09-03 04:10:40 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-09-05 20:20:33 -0400
commite5ec69da24803c68f5c035662a68d367359a4132 (patch)
tree4d9986ae6f6f0ce4b9c32c316317696463f86c52 /sound/soc
parent85da89f562579b001831b71d49946bfa0a93529d (diff)
ASoC: Davinci: McASP: add support new McASP IP Variant
The OMAP2+ variant of McASP is different from Davinci variant w.r.to some register offset. Changes - Add new MCASP_VERSION_3 to identify new variant. New DT compatible "ti,omap2-mcasp-audio" to identify version 3 controller. - The register offsets are handled depending on the version. Note: DMA parameters (dma fifo offset) are not updated and will be done later. Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc')
-rw-r--r--sound/soc/davinci/davinci-mcasp.c86
1 files changed, 73 insertions, 13 deletions
diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c
index c3eae1d8e077..714e51e5be5b 100644
--- a/sound/soc/davinci/davinci-mcasp.c
+++ b/sound/soc/davinci/davinci-mcasp.c
@@ -111,6 +111,10 @@
111#define DAVINCI_MCASP_WFIFOSTS (0x1014) 111#define DAVINCI_MCASP_WFIFOSTS (0x1014)
112#define DAVINCI_MCASP_RFIFOCTL (0x1018) 112#define DAVINCI_MCASP_RFIFOCTL (0x1018)
113#define DAVINCI_MCASP_RFIFOSTS (0x101C) 113#define DAVINCI_MCASP_RFIFOSTS (0x101C)
114#define MCASP_VER3_WFIFOCTL (0x1000)
115#define MCASP_VER3_WFIFOSTS (0x1004)
116#define MCASP_VER3_RFIFOCTL (0x1008)
117#define MCASP_VER3_RFIFOSTS (0x100C)
114 118
115/* 119/*
116 * DAVINCI_MCASP_PWREMUMGT_REG - Power Down and Emulation Management 120 * DAVINCI_MCASP_PWREMUMGT_REG - Power Down and Emulation Management
@@ -384,18 +388,36 @@ static void davinci_mcasp_start(struct davinci_audio_dev *dev, int stream)
384{ 388{
385 if (stream == SNDRV_PCM_STREAM_PLAYBACK) { 389 if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
386 if (dev->txnumevt) { /* enable FIFO */ 390 if (dev->txnumevt) { /* enable FIFO */
387 mcasp_clr_bits(dev->base + DAVINCI_MCASP_WFIFOCTL, 391 switch (dev->version) {
392 case MCASP_VERSION_3:
393 mcasp_clr_bits(dev->base + MCASP_VER3_WFIFOCTL,
388 FIFO_ENABLE); 394 FIFO_ENABLE);
389 mcasp_set_bits(dev->base + DAVINCI_MCASP_WFIFOCTL, 395 mcasp_set_bits(dev->base + MCASP_VER3_WFIFOCTL,
390 FIFO_ENABLE); 396 FIFO_ENABLE);
397 break;
398 default:
399 mcasp_clr_bits(dev->base +
400 DAVINCI_MCASP_WFIFOCTL, FIFO_ENABLE);
401 mcasp_set_bits(dev->base +
402 DAVINCI_MCASP_WFIFOCTL, FIFO_ENABLE);
403 }
391 } 404 }
392 mcasp_start_tx(dev); 405 mcasp_start_tx(dev);
393 } else { 406 } else {
394 if (dev->rxnumevt) { /* enable FIFO */ 407 if (dev->rxnumevt) { /* enable FIFO */
395 mcasp_clr_bits(dev->base + DAVINCI_MCASP_RFIFOCTL, 408 switch (dev->version) {
409 case MCASP_VERSION_3:
410 mcasp_clr_bits(dev->base + MCASP_VER3_RFIFOCTL,
396 FIFO_ENABLE); 411 FIFO_ENABLE);
397 mcasp_set_bits(dev->base + DAVINCI_MCASP_RFIFOCTL, 412 mcasp_set_bits(dev->base + MCASP_VER3_RFIFOCTL,
398 FIFO_ENABLE); 413 FIFO_ENABLE);
414 break;
415 default:
416 mcasp_clr_bits(dev->base +
417 DAVINCI_MCASP_RFIFOCTL, FIFO_ENABLE);
418 mcasp_set_bits(dev->base +
419 DAVINCI_MCASP_RFIFOCTL, FIFO_ENABLE);
420 }
399 } 421 }
400 mcasp_start_rx(dev); 422 mcasp_start_rx(dev);
401 } 423 }
@@ -416,14 +438,31 @@ static void mcasp_stop_tx(struct davinci_audio_dev *dev)
416static void davinci_mcasp_stop(struct davinci_audio_dev *dev, int stream) 438static void davinci_mcasp_stop(struct davinci_audio_dev *dev, int stream)
417{ 439{
418 if (stream == SNDRV_PCM_STREAM_PLAYBACK) { 440 if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
419 if (dev->txnumevt) /* disable FIFO */ 441 if (dev->txnumevt) { /* disable FIFO */
420 mcasp_clr_bits(dev->base + DAVINCI_MCASP_WFIFOCTL, 442 switch (dev->version) {
443 case MCASP_VERSION_3:
444 mcasp_clr_bits(dev->base + MCASP_VER3_WFIFOCTL,
421 FIFO_ENABLE); 445 FIFO_ENABLE);
446 break;
447 default:
448 mcasp_clr_bits(dev->base +
449 DAVINCI_MCASP_WFIFOCTL, FIFO_ENABLE);
450 }
451 }
422 mcasp_stop_tx(dev); 452 mcasp_stop_tx(dev);
423 } else { 453 } else {
424 if (dev->rxnumevt) /* disable FIFO */ 454 if (dev->rxnumevt) { /* disable FIFO */
425 mcasp_clr_bits(dev->base + DAVINCI_MCASP_RFIFOCTL, 455 switch (dev->version) {
456 case MCASP_VERSION_3:
457 mcasp_clr_bits(dev->base + MCASP_VER3_RFIFOCTL,
426 FIFO_ENABLE); 458 FIFO_ENABLE);
459 break;
460
461 default:
462 mcasp_clr_bits(dev->base +
463 DAVINCI_MCASP_RFIFOCTL, FIFO_ENABLE);
464 }
465 }
427 mcasp_stop_rx(dev); 466 mcasp_stop_rx(dev);
428 } 467 }
429} 468}
@@ -622,20 +661,37 @@ static void davinci_hw_common_param(struct davinci_audio_dev *dev, int stream)
622 if (dev->txnumevt * tx_ser > 64) 661 if (dev->txnumevt * tx_ser > 64)
623 dev->txnumevt = 1; 662 dev->txnumevt = 1;
624 663
625 mcasp_mod_bits(dev->base + DAVINCI_MCASP_WFIFOCTL, tx_ser, 664 switch (dev->version) {
665 case MCASP_VERSION_3:
666 mcasp_mod_bits(dev->base + MCASP_VER3_WFIFOCTL, tx_ser,
626 NUMDMA_MASK); 667 NUMDMA_MASK);
627 mcasp_mod_bits(dev->base + DAVINCI_MCASP_WFIFOCTL, 668 mcasp_mod_bits(dev->base + MCASP_VER3_WFIFOCTL,
628 ((dev->txnumevt * tx_ser) << 8), NUMEVT_MASK); 669 ((dev->txnumevt * tx_ser) << 8), NUMEVT_MASK);
670 break;
671 default:
672 mcasp_mod_bits(dev->base + DAVINCI_MCASP_WFIFOCTL,
673 tx_ser, NUMDMA_MASK);
674 mcasp_mod_bits(dev->base + DAVINCI_MCASP_WFIFOCTL,
675 ((dev->txnumevt * tx_ser) << 8), NUMEVT_MASK);
676 }
629 } 677 }
630 678
631 if (dev->rxnumevt && stream == SNDRV_PCM_STREAM_CAPTURE) { 679 if (dev->rxnumevt && stream == SNDRV_PCM_STREAM_CAPTURE) {
632 if (dev->rxnumevt * rx_ser > 64) 680 if (dev->rxnumevt * rx_ser > 64)
633 dev->rxnumevt = 1; 681 dev->rxnumevt = 1;
634 682 switch (dev->version) {
635 mcasp_mod_bits(dev->base + DAVINCI_MCASP_RFIFOCTL, rx_ser, 683 case MCASP_VERSION_3:
684 mcasp_mod_bits(dev->base + MCASP_VER3_RFIFOCTL, rx_ser,
636 NUMDMA_MASK); 685 NUMDMA_MASK);
637 mcasp_mod_bits(dev->base + DAVINCI_MCASP_RFIFOCTL, 686 mcasp_mod_bits(dev->base + MCASP_VER3_RFIFOCTL,
687 ((dev->rxnumevt * rx_ser) << 8), NUMEVT_MASK);
688 break;
689 default:
690 mcasp_mod_bits(dev->base + DAVINCI_MCASP_RFIFOCTL,
691 rx_ser, NUMDMA_MASK);
692 mcasp_mod_bits(dev->base + DAVINCI_MCASP_RFIFOCTL,
638 ((dev->rxnumevt * rx_ser) << 8), NUMEVT_MASK); 693 ((dev->rxnumevt * rx_ser) << 8), NUMEVT_MASK);
694 }
639 } 695 }
640} 696}
641 697
@@ -874,6 +930,10 @@ static const struct of_device_id mcasp_dt_ids[] = {
874 .compatible = "ti,da830-mcasp-audio", 930 .compatible = "ti,da830-mcasp-audio",
875 .data = (void *)MCASP_VERSION_2, 931 .data = (void *)MCASP_VERSION_2,
876 }, 932 },
933 {
934 .compatible = "ti,omap2-mcasp-audio",
935 .data = (void *)MCASP_VERSION_3,
936 },
877 { /* sentinel */ } 937 { /* sentinel */ }
878}; 938};
879MODULE_DEVICE_TABLE(of, mcasp_dt_ids); 939MODULE_DEVICE_TABLE(of, mcasp_dt_ids);