aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-omap/mcbsp.c
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@nokia.com>2010-03-03 08:08:08 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-03-12 06:12:25 -0500
commit7dc976ed38a927fc9880bd3dc498a6a903d1ba74 (patch)
tree3c1ac1b744c62412decaf7eef0d007dde4643e79 /arch/arm/plat-omap/mcbsp.c
parenteeb309a8a6ff86ce462e072bc95ecbe85618505e (diff)
OMAP3: McBSP: Add interface for FIFO caused delay query
New functions for querying the FIFO caused delay on both TX and RX path. On TX path the return value shows the number of used locations in the FIFO. On RX papth it returns the number of locations to be filled to reach the threshold value (DMA will be triggered to read the data out from the FIFO). Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com> Acked-by: Tony Lindgren <tony@atomide.com> Acked-by: Jarkko Nikula <jhnikula@gmail.com> Acked-by: Liam Girdwood <lrg@slimlogic.co.uk> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'arch/arm/plat-omap/mcbsp.c')
-rw-r--r--arch/arm/plat-omap/mcbsp.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c
index e47686e0a633..5e6d3096c725 100644
--- a/arch/arm/plat-omap/mcbsp.c
+++ b/arch/arm/plat-omap/mcbsp.c
@@ -561,6 +561,61 @@ u16 omap_mcbsp_get_max_rx_threshold(unsigned int id)
561} 561}
562EXPORT_SYMBOL(omap_mcbsp_get_max_rx_threshold); 562EXPORT_SYMBOL(omap_mcbsp_get_max_rx_threshold);
563 563
564#define MCBSP2_FIFO_SIZE 0x500 /* 1024 + 256 locations */
565#define MCBSP1345_FIFO_SIZE 0x80 /* 128 locations */
566/*
567 * omap_mcbsp_get_tx_delay returns the number of used slots in the McBSP FIFO
568 */
569u16 omap_mcbsp_get_tx_delay(unsigned int id)
570{
571 struct omap_mcbsp *mcbsp;
572 u16 buffstat;
573
574 if (!omap_mcbsp_check_valid_id(id)) {
575 printk(KERN_ERR "%s: Invalid id (%d)\n", __func__, id + 1);
576 return -ENODEV;
577 }
578 mcbsp = id_to_mcbsp_ptr(id);
579
580 /* Returns the number of free locations in the buffer */
581 buffstat = MCBSP_READ(mcbsp, XBUFFSTAT);
582
583 /* Number of slots are different in McBSP ports */
584 if (mcbsp->id == 2)
585 return MCBSP2_FIFO_SIZE - buffstat;
586 else
587 return MCBSP1345_FIFO_SIZE - buffstat;
588}
589EXPORT_SYMBOL(omap_mcbsp_get_tx_delay);
590
591/*
592 * omap_mcbsp_get_rx_delay returns the number of free slots in the McBSP FIFO
593 * to reach the threshold value (when the DMA will be triggered to read it)
594 */
595u16 omap_mcbsp_get_rx_delay(unsigned int id)
596{
597 struct omap_mcbsp *mcbsp;
598 u16 buffstat, threshold;
599
600 if (!omap_mcbsp_check_valid_id(id)) {
601 printk(KERN_ERR "%s: Invalid id (%d)\n", __func__, id + 1);
602 return -ENODEV;
603 }
604 mcbsp = id_to_mcbsp_ptr(id);
605
606 /* Returns the number of used locations in the buffer */
607 buffstat = MCBSP_READ(mcbsp, RBUFFSTAT);
608 /* RX threshold */
609 threshold = MCBSP_READ(mcbsp, THRSH1);
610
611 /* Return the number of location till we reach the threshold limit */
612 if (threshold <= buffstat)
613 return 0;
614 else
615 return threshold - buffstat;
616}
617EXPORT_SYMBOL(omap_mcbsp_get_rx_delay);
618
564/* 619/*
565 * omap_mcbsp_get_dma_op_mode just return the current configured 620 * omap_mcbsp_get_dma_op_mode just return the current configured
566 * operating mode for the mcbsp channel 621 * operating mode for the mcbsp channel