diff options
author | Sakethram Bommisetti <sakethram.bommisetti@stericsson.com> | 2011-03-03 15:20:00 +0530 |
---|---|---|
committer | Jonas ABERG <jonas.aberg@stericsson.com> | 2011-03-03 14:01:37 +0100 |
commit | 0e899378ce26b5bb7bb074a17892d47da99f9638 (patch) | |
tree | 3990c74435ca3d7b7b9f043c9469553000a903ef /drivers/usb | |
parent | 81e068e655d3cfb993512b2ab68b5df8cb1c919a (diff) |
ux500:USB:Fix for Deep Sleep from USB side
During restoring of musb context ,musb clock is disabled
(peripheral clock).Enabling and disabling of peripheral clock correctly.
ST-EricssonID : ER 326730
Change-Id: I55b4b14bfc5e76b618d045eaad756d49f1cf6a1a
Signed-off-by: Sakethram Bommisetti <sakethram.bommisetti@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/17505
Reviewed-by: Praveena NADAHALLY <praveen.nadahally@stericsson.com>
Reviewed-by: QATOOLS
Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/musb/musb_core.c | 4 | ||||
-rw-r--r-- | drivers/usb/musb/stm_musb.c | 32 |
2 files changed, 33 insertions, 3 deletions
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 0468a66e638..e02c2a5817f 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -2483,12 +2483,14 @@ static int musb_suspend(struct device *dev) } } +#ifndef CONFIG_ARCH_U8500 musb_save_context(musb); if (musb->set_clock) musb->set_clock(musb->clock, 0); else clk_disable(musb->clock); +#endif spin_unlock_irqrestore(&musb->lock, flags); return 0; } @@ -2501,12 +2503,14 @@ static int musb_resume(struct device *dev) if (!musb->clock) return 0; +#ifndef CONFIG_ARCH_U8500 if (musb->set_clock) musb->set_clock(musb->clock, 1); else clk_enable(musb->clock); musb_restore_context(musb); +#endif /* for static cmos like DaVinci, register values were preserved * unless for some reason the whole soc powered down or the USB diff --git a/drivers/usb/musb/stm_musb.c b/drivers/usb/musb/stm_musb.c index eb9f1c2cdf0..8b368e82895 100644 --- a/drivers/usb/musb/stm_musb.c +++ b/drivers/usb/musb/stm_musb.c @@ -34,6 +34,9 @@ static spinlock_t musb_ulpi_spinlock; static unsigned musb_power; static int userrequest; +#define PERI5_CLK_ENABLE 1 +#define PERI5_CLK_DISABLE 0 + /** * musb_set_session() - Start the USB session * @@ -55,12 +58,35 @@ void musb_set_session(void) } EXPORT_SYMBOL(musb_set_session); +void stm_set_peripheral_clock(int enable) +{ + if (enable) { + if (musb_status->set_clock) + musb_status->set_clock(musb_status->clock, 1); + else + clk_enable(musb_status->clock); + } else { + if (musb_status->set_clock) + musb_status->set_clock(musb_status->clock, 0); + else + clk_disable(musb_status->clock); + } +} + #ifdef CONFIG_PM -void stm_restore_musb_context() +void stm_musb_context(int enable) { - musb_restore_context(musb_status); + void __iomem *regs; + u8 val; + + if (enable) { + stm_set_peripheral_clock(PERI5_CLK_ENABLE); + musb_restore_context(musb_status); + regs = musb_status->mregs; + } else + stm_set_peripheral_clock(PERI5_CLK_DISABLE); } -EXPORT_SYMBOL(stm_restore_musb_context); +EXPORT_SYMBOL(stm_musb_context); #endif void |