aboutsummaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorSakethram Bommisetti <sakethram.bommisetti@stericsson.com>2011-03-03 15:20:00 +0530
committerJonas ABERG <jonas.aberg@stericsson.com>2011-03-03 14:01:37 +0100
commit0e899378ce26b5bb7bb074a17892d47da99f9638 (patch)
tree3990c74435ca3d7b7b9f043c9469553000a903ef /drivers/usb
parent81e068e655d3cfb993512b2ab68b5df8cb1c919a (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.c4
-rw-r--r--drivers/usb/musb/stm_musb.c32
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