Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 157719
b: refs/heads/master
c: d09a2af
h: refs/heads/master
i:
  157717: 2095f0a
  157715: db57289
  157711: 81d5395
v: v3
  • Loading branch information
Jarkko Nikula authored and Mark Brown committed Aug 25, 2009
1 parent d683657 commit d6eea9a
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 64 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 32080af7a612e8c56131d6bdcd268cd9e8b0add1
refs/heads/master: d09a2afc9359407114b7062519101f1ee2d05388
2 changes: 0 additions & 2 deletions trunk/arch/arm/plat-omap/include/mach/mcbsp.h
Original file line number Diff line number Diff line change
Expand Up @@ -436,8 +436,6 @@ 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);

Expand Down
84 changes: 28 additions & 56 deletions trunk/arch/arm/plat-omap/mcbsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
}
Expand All @@ -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);
Expand All @@ -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)
{
Expand Down
5 changes: 0 additions & 5 deletions trunk/sound/soc/omap/omap-mcbsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -231,11 +231,6 @@ static int omap_mcbsp_dai_trigger(struct snd_pcm_substream *substream, int cmd,
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
mcbsp_data->active++;
omap_mcbsp_start(mcbsp_data->bus_id, play, !play);
/* Make sure data transfer is frame synchronized */
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
omap_mcbsp_xmit_enable(mcbsp_data->bus_id, 1);
else
omap_mcbsp_recv_enable(mcbsp_data->bus_id, 1);
break;

case SNDRV_PCM_TRIGGER_STOP:
Expand Down

0 comments on commit d6eea9a

Please sign in to comment.