mirror of
https://github.com/torvalds/linux.git
synced 2024-12-14 23:25:54 +00:00
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: Eero Nurkkala <ext-eero.nurkkala@nokia.com> Acked-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
a4d7d550a9
commit
9abea08e43
@ -389,6 +389,8 @@ int omap_mcbsp_request(unsigned int id);
|
||||
void omap_mcbsp_free(unsigned int id);
|
||||
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_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);
|
||||
u32 omap_mcbsp_recv_word(unsigned int id);
|
||||
|
||||
|
@ -412,6 +412,58 @@ 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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user