|
@@ -529,11 +529,13 @@ void omap_mcbsp_start(unsigned int id, int tx, int rx)
|
|
|
}
|
|
|
|
|
|
/* Enable transmitter and receiver */
|
|
|
+ tx &= 1;
|
|
|
w = OMAP_MCBSP_READ(io_base, SPCR2);
|
|
|
- OMAP_MCBSP_WRITE(io_base, SPCR2, w | (tx & 1));
|
|
|
+ OMAP_MCBSP_WRITE(io_base, SPCR2, w | tx);
|
|
|
|
|
|
+ rx &= 1;
|
|
|
w = OMAP_MCBSP_READ(io_base, SPCR1);
|
|
|
- OMAP_MCBSP_WRITE(io_base, SPCR1, w | (rx & 1));
|
|
|
+ OMAP_MCBSP_WRITE(io_base, SPCR1, w | rx);
|
|
|
|
|
|
/*
|
|
|
* Worst case: CLKSRG*2 = 8000khz: (1/8000) * 2 * 2 usec
|
|
@@ -549,6 +551,16 @@ void omap_mcbsp_start(unsigned int id, int tx, int rx)
|
|
|
OMAP_MCBSP_WRITE(io_base, SPCR2, w | (1 << 7));
|
|
|
}
|
|
|
|
|
|
+ if (cpu_is_omap2430() || cpu_is_omap34xx()) {
|
|
|
+ /* Release the transmitter and receiver */
|
|
|
+ w = OMAP_MCBSP_READ(io_base, XCCR);
|
|
|
+ w &= ~(tx ? XDISABLE : 0);
|
|
|
+ OMAP_MCBSP_WRITE(io_base, XCCR, w);
|
|
|
+ w = OMAP_MCBSP_READ(io_base, RCCR);
|
|
|
+ w &= ~(rx ? RDISABLE : 0);
|
|
|
+ OMAP_MCBSP_WRITE(io_base, RCCR, w);
|
|
|
+ }
|
|
|
+
|
|
|
/* Dump McBSP Regs */
|
|
|
omap_mcbsp_dump_reg(id);
|
|
|
}
|
|
@@ -570,12 +582,24 @@ void omap_mcbsp_stop(unsigned int id, int tx, int rx)
|
|
|
io_base = mcbsp->io_base;
|
|
|
|
|
|
/* Reset transmitter */
|
|
|
+ tx &= 1;
|
|
|
+ if (cpu_is_omap2430() || cpu_is_omap34xx()) {
|
|
|
+ w = OMAP_MCBSP_READ(io_base, XCCR);
|
|
|
+ w |= (tx ? XDISABLE : 0);
|
|
|
+ OMAP_MCBSP_WRITE(io_base, XCCR, w);
|
|
|
+ }
|
|
|
w = OMAP_MCBSP_READ(io_base, SPCR2);
|
|
|
- OMAP_MCBSP_WRITE(io_base, SPCR2, w & ~(tx & 1));
|
|
|
+ OMAP_MCBSP_WRITE(io_base, SPCR2, w & ~tx);
|
|
|
|
|
|
/* Reset receiver */
|
|
|
+ rx &= 1;
|
|
|
+ if (cpu_is_omap2430() || cpu_is_omap34xx()) {
|
|
|
+ w = OMAP_MCBSP_READ(io_base, RCCR);
|
|
|
+ w |= (tx ? RDISABLE : 0);
|
|
|
+ OMAP_MCBSP_WRITE(io_base, RCCR, w);
|
|
|
+ }
|
|
|
w = OMAP_MCBSP_READ(io_base, SPCR1);
|
|
|
- OMAP_MCBSP_WRITE(io_base, SPCR1, w & ~(rx & 1));
|
|
|
+ OMAP_MCBSP_WRITE(io_base, SPCR1, w & ~rx);
|
|
|
|
|
|
idle = !((OMAP_MCBSP_READ(io_base, SPCR2) |
|
|
|
OMAP_MCBSP_READ(io_base, SPCR1)) & 1);
|
|
@@ -588,58 +612,6 @@ void omap_mcbsp_stop(unsigned int id, int tx, int rx)
|
|
|
}
|
|
|
EXPORT_SYMBOL(omap_mcbsp_stop);
|
|
|
|
|
|
-void omap_mcbsp_xmit_enable(unsigned int id, u8 enable)
|
|
|
-{
|
|
|
- struct omap_mcbsp *mcbsp;
|
|
|
- void __iomem *io_base;
|
|
|
- u16 w;
|
|
|
-
|
|
|
- if (!(cpu_is_omap2430() || cpu_is_omap34xx()))
|
|
|
- return;
|
|
|
-
|
|
|
- if (!omap_mcbsp_check_valid_id(id)) {
|
|
|
- printk(KERN_ERR "%s: Invalid id (%d)\n", __func__, id + 1);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- mcbsp = id_to_mcbsp_ptr(id);
|
|
|
- io_base = mcbsp->io_base;
|
|
|
-
|
|
|
- w = OMAP_MCBSP_READ(io_base, XCCR);
|
|
|
-
|
|
|
- if (enable)
|
|
|
- OMAP_MCBSP_WRITE(io_base, XCCR, w & ~(XDISABLE));
|
|
|
- else
|
|
|
- OMAP_MCBSP_WRITE(io_base, XCCR, w | XDISABLE);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(omap_mcbsp_xmit_enable);
|
|
|
-
|
|
|
-void omap_mcbsp_recv_enable(unsigned int id, u8 enable)
|
|
|
-{
|
|
|
- struct omap_mcbsp *mcbsp;
|
|
|
- void __iomem *io_base;
|
|
|
- u16 w;
|
|
|
-
|
|
|
- if (!(cpu_is_omap2430() || cpu_is_omap34xx()))
|
|
|
- return;
|
|
|
-
|
|
|
- if (!omap_mcbsp_check_valid_id(id)) {
|
|
|
- printk(KERN_ERR "%s: Invalid id (%d)\n", __func__, id + 1);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- mcbsp = id_to_mcbsp_ptr(id);
|
|
|
- io_base = mcbsp->io_base;
|
|
|
-
|
|
|
- w = OMAP_MCBSP_READ(io_base, RCCR);
|
|
|
-
|
|
|
- if (enable)
|
|
|
- OMAP_MCBSP_WRITE(io_base, RCCR, w & ~(RDISABLE));
|
|
|
- else
|
|
|
- OMAP_MCBSP_WRITE(io_base, RCCR, w | RDISABLE);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(omap_mcbsp_recv_enable);
|
|
|
-
|
|
|
/* polled mcbsp i/o operations */
|
|
|
int omap_mcbsp_pollwrite(unsigned int id, u16 buf)
|
|
|
{
|