Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 157689
b: refs/heads/master
c: 2122fdc
h: refs/heads/master
i:
  157687: 869b725
v: v3
  • Loading branch information
Eero Nurkkala authored and Mark Brown committed Aug 20, 2009
1 parent 1c8cbe0 commit 33d8529
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 98cb20e88957faf9c99e194242caac7f55dd47e4
refs/heads/master: 2122fdc629f05634537e796c0630028e4db76953
17 changes: 17 additions & 0 deletions trunk/arch/arm/plat-omap/include/mach/mcbsp.h
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@
#define OMAP_MCBSP_REG_THRSH1 0x94
#define OMAP_MCBSP_REG_IRQST 0xA0
#define OMAP_MCBSP_REG_IRQEN 0xA4
#define OMAP_MCBSP_REG_WAKEUPEN 0xA8
#define OMAP_MCBSP_REG_XCCR 0xAC
#define OMAP_MCBSP_REG_RCCR 0xB0

Expand Down Expand Up @@ -253,13 +254,29 @@
#define RDISABLE 0x0001

/********************** McBSP SYSCONFIG bit definitions ********************/
#define SIDLEMODE(value) ((value)<<3)
#define ENAWAKEUP 0x0004
#define SOFTRST 0x0002

/********************** McBSP DMA operating modes **************************/
#define MCBSP_DMA_MODE_ELEMENT 0
#define MCBSP_DMA_MODE_THRESHOLD 1
#define MCBSP_DMA_MODE_FRAME 2

/********************** McBSP WAKEUPEN bit definitions *********************/
#define XEMPTYEOFEN 0x4000
#define XRDYEN 0x0400
#define XEOFEN 0x0200
#define XFSXEN 0x0100
#define XSYNCERREN 0x0080
#define RRDYEN 0x0008
#define REOFEN 0x0004
#define RFSREN 0x0002
#define RSYNCERREN 0x0001
#define WAKEUPEN_ALL (XEMPTYEOFEN | XRDYEN | XEOFEN | XFSXEN | \
XSYNCERREN | RRDYEN | REOFEN | RFSREN | \
RSYNCERREN)

/* we don't do multichannel for now */
struct omap_mcbsp_reg_cfg {
u16 spcr2;
Expand Down
46 changes: 46 additions & 0 deletions trunk/arch/arm/plat-omap/mcbsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,46 @@ int omap_mcbsp_get_dma_op_mode(unsigned int id)
return dma_op_mode;
}
EXPORT_SYMBOL(omap_mcbsp_get_dma_op_mode);

static inline void omap34xx_mcbsp_request(struct omap_mcbsp *mcbsp)
{
/*
* Enable wakup behavior, smart idle and all wakeups
* REVISIT: some wakeups may be unnecessary
*/
if (cpu_is_omap34xx()) {
u16 syscon;

syscon = OMAP_MCBSP_READ(mcbsp->io_base, SYSCON);
syscon &= ~(ENAWAKEUP | SIDLEMODE(0x03));
syscon |= (ENAWAKEUP | SIDLEMODE(0x02));
OMAP_MCBSP_WRITE(mcbsp->io_base, SYSCON, syscon);

OMAP_MCBSP_WRITE(mcbsp->io_base, WAKEUPEN, WAKEUPEN_ALL);
}
}

static inline void omap34xx_mcbsp_free(struct omap_mcbsp *mcbsp)
{
/*
* Disable wakup behavior, smart idle and all wakeups
*/
if (cpu_is_omap34xx()) {
u16 syscon;
u16 wakeupen;

syscon = OMAP_MCBSP_READ(mcbsp->io_base, SYSCON);
syscon &= ~(ENAWAKEUP | SIDLEMODE(0x03));
OMAP_MCBSP_WRITE(mcbsp->io_base, SYSCON, syscon);

wakeupen = OMAP_MCBSP_READ(mcbsp->io_base, WAKEUPEN);
wakeupen &= ~WAKEUPEN_ALL;
OMAP_MCBSP_WRITE(mcbsp->io_base, WAKEUPEN, wakeupen);
}
}
#else
static inline void omap34xx_mcbsp_request(struct omap_mcbsp *mcbsp) {}
static inline void omap34xx_mcbsp_free(struct omap_mcbsp *mcbsp) {}
#endif

/*
Expand Down Expand Up @@ -366,6 +406,9 @@ int omap_mcbsp_request(unsigned int id)
clk_enable(mcbsp->iclk);
clk_enable(mcbsp->fclk);

/* Do procedure specific to omap34xx arch, if applicable */
omap34xx_mcbsp_request(mcbsp);

/*
* Make sure that transmitter, receiver and sample-rate generator are
* not running before activating IRQs.
Expand Down Expand Up @@ -414,6 +457,9 @@ void omap_mcbsp_free(unsigned int id)
if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free)
mcbsp->pdata->ops->free(id);

/* Do procedure specific to omap34xx arch, if applicable */
omap34xx_mcbsp_free(mcbsp);

clk_disable(mcbsp->fclk);
clk_disable(mcbsp->iclk);

Expand Down

0 comments on commit 33d8529

Please sign in to comment.