mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-29 01:51:39 +00:00
ARM: OMAP: mcbsp: Make wakeup control generic
Currently wakeup control code is compiled only when CONFIG_ARCH_OMAP3 is set even it should be available for CONFIG_ARCH_OMAP4 only builds also. Fix this by making wakeup control generic so that it is executed whenever new feature flag has_wakeup in platform data is set. Currently flag is set for McBSP config types 3 and 4. Remove also old comments about idle mode settings and HW bug workarounds that were not updated during hwmod conversion. Signed-off-by: Jarkko Nikula <jarkko.nikula@bitmer.com> Acked-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Tested-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
parent
cdc71514a0
commit
1a6458847d
3 changed files with 15 additions and 34 deletions
|
@ -141,6 +141,9 @@ static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused)
|
||||||
pdata->buffer_size = 0x80;
|
pdata->buffer_size = 0x80;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (oh->class->rev >= MCBSP_CONFIG_TYPE3)
|
||||||
|
pdata->has_wakeup = true;
|
||||||
|
|
||||||
oh_device[0] = oh;
|
oh_device[0] = oh;
|
||||||
|
|
||||||
if (oh->dev_attr) {
|
if (oh->dev_attr) {
|
||||||
|
|
|
@ -317,6 +317,9 @@ struct omap_mcbsp_platform_data {
|
||||||
u16 buffer_size;
|
u16 buffer_size;
|
||||||
u8 reg_size;
|
u8 reg_size;
|
||||||
u8 reg_step;
|
u8 reg_step;
|
||||||
|
|
||||||
|
/* McBSP platform and instance specific features */
|
||||||
|
bool has_wakeup; /* Wakeup capability */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct omap_mcbsp_st_data {
|
struct omap_mcbsp_st_data {
|
||||||
|
|
|
@ -659,35 +659,7 @@ int omap_mcbsp_get_dma_op_mode(unsigned int id)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(omap_mcbsp_get_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() || cpu_is_omap44xx()) {
|
|
||||||
MCBSP_WRITE(mcbsp, WAKEUPEN, XRDYEN | RRDYEN);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void omap34xx_mcbsp_free(struct omap_mcbsp *mcbsp)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Disable wakup behavior, smart idle and all wakeups
|
|
||||||
*/
|
|
||||||
if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
|
|
||||||
/*
|
|
||||||
* HW bug workaround - If no_idle mode is taken, we need to
|
|
||||||
* go to smart_idle before going to always_idle, or the
|
|
||||||
* device will not hit retention anymore.
|
|
||||||
*/
|
|
||||||
|
|
||||||
MCBSP_WRITE(mcbsp, WAKEUPEN, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
static inline void omap34xx_mcbsp_request(struct omap_mcbsp *mcbsp) {}
|
|
||||||
static inline void omap34xx_mcbsp_free(struct omap_mcbsp *mcbsp) {}
|
|
||||||
static inline void omap_st_start(struct omap_mcbsp *mcbsp) {}
|
static inline void omap_st_start(struct omap_mcbsp *mcbsp) {}
|
||||||
static inline void omap_st_stop(struct omap_mcbsp *mcbsp) {}
|
static inline void omap_st_stop(struct omap_mcbsp *mcbsp) {}
|
||||||
#endif
|
#endif
|
||||||
|
@ -726,8 +698,9 @@ int omap_mcbsp_request(unsigned int id)
|
||||||
|
|
||||||
pm_runtime_get_sync(mcbsp->dev);
|
pm_runtime_get_sync(mcbsp->dev);
|
||||||
|
|
||||||
/* Do procedure specific to omap34xx arch, if applicable */
|
/* Enable wakeup behavior */
|
||||||
omap34xx_mcbsp_request(mcbsp);
|
if (mcbsp->pdata->has_wakeup)
|
||||||
|
MCBSP_WRITE(mcbsp, WAKEUPEN, XRDYEN | RRDYEN);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure that transmitter, receiver and sample-rate generator are
|
* Make sure that transmitter, receiver and sample-rate generator are
|
||||||
|
@ -764,8 +737,9 @@ err_clk_disable:
|
||||||
if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free)
|
if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free)
|
||||||
mcbsp->pdata->ops->free(id);
|
mcbsp->pdata->ops->free(id);
|
||||||
|
|
||||||
/* Do procedure specific to omap34xx arch, if applicable */
|
/* Disable wakeup behavior */
|
||||||
omap34xx_mcbsp_free(mcbsp);
|
if (mcbsp->pdata->has_wakeup)
|
||||||
|
MCBSP_WRITE(mcbsp, WAKEUPEN, 0);
|
||||||
|
|
||||||
pm_runtime_put_sync(mcbsp->dev);
|
pm_runtime_put_sync(mcbsp->dev);
|
||||||
|
|
||||||
|
@ -794,8 +768,9 @@ void omap_mcbsp_free(unsigned int id)
|
||||||
if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free)
|
if (mcbsp->pdata && mcbsp->pdata->ops && mcbsp->pdata->ops->free)
|
||||||
mcbsp->pdata->ops->free(id);
|
mcbsp->pdata->ops->free(id);
|
||||||
|
|
||||||
/* Do procedure specific to omap34xx arch, if applicable */
|
/* Disable wakeup behavior */
|
||||||
omap34xx_mcbsp_free(mcbsp);
|
if (mcbsp->pdata->has_wakeup)
|
||||||
|
MCBSP_WRITE(mcbsp, WAKEUPEN, 0);
|
||||||
|
|
||||||
pm_runtime_put_sync(mcbsp->dev);
|
pm_runtime_put_sync(mcbsp->dev);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue