Commit 9abea08e authored by Eero Nurkkala's avatar Eero Nurkkala Committed by Mark Brown

OMAP: McBSP: Provide functions for ASoC frame syncronization

ASoC has an annoying bug letting either L or R channel to be
played on L channel. In other words, L and R channels can
switch at random. This provides McBSP funtionality that may
be used to fix this feature.
Signed-off-by: default avatarEero Nurkkala <ext-eero.nurkkala@nokia.com>
Acked-by: default avatarTony Lindgren <tony@atomide.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent a4d7d550
...@@ -389,6 +389,8 @@ int omap_mcbsp_request(unsigned int id); ...@@ -389,6 +389,8 @@ int omap_mcbsp_request(unsigned int id);
void omap_mcbsp_free(unsigned int id); void omap_mcbsp_free(unsigned int id);
void omap_mcbsp_start(unsigned int id, int tx, int rx); void omap_mcbsp_start(unsigned int id, int tx, int rx);
void omap_mcbsp_stop(unsigned int id, int tx, int rx); void omap_mcbsp_stop(unsigned int id, int tx, int rx);
void omap_mcbsp_xmit_enable(unsigned int id, u8 enable);
void omap_mcbsp_recv_enable(unsigned int id, u8 enable);
void omap_mcbsp_xmit_word(unsigned int id, u32 word); void omap_mcbsp_xmit_word(unsigned int id, u32 word);
u32 omap_mcbsp_recv_word(unsigned int id); u32 omap_mcbsp_recv_word(unsigned int id);
......
...@@ -412,6 +412,58 @@ void omap_mcbsp_stop(unsigned int id, int tx, int rx) ...@@ -412,6 +412,58 @@ void omap_mcbsp_stop(unsigned int id, int tx, int rx)
} }
EXPORT_SYMBOL(omap_mcbsp_stop); 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 */ /* polled mcbsp i/o operations */
int omap_mcbsp_pollwrite(unsigned int id, u16 buf) int omap_mcbsp_pollwrite(unsigned int id, u16 buf)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment