[PATCH 3/5 v2] mpc52xx suspend: USB
Domen Puncer
domen.puncer at telargo.com
Thu Mar 22 18:44:43 EST 2007
Trivial suspend and resume OF OHCI.
On MPC52xx turn off and on power to ports.
Signed-off-by: Domen Puncer <domen.puncer at telargo.com>
---
drivers/usb/host/ohci-ppc-of.c | 30 ++++++++++++++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
Index: grant.git/drivers/usb/host/ohci-ppc-of.c
===================================================================
--- grant.git.orig/drivers/usb/host/ohci-ppc-of.c
+++ grant.git/drivers/usb/host/ohci-ppc-of.c
@@ -214,6 +214,32 @@ MODULE_DEVICE_TABLE(of, ohci_hcd_ppc_of_
#endif
+#ifdef CONFIG_PM
+static u32 descr_a;
+static int ohci_hcd_ppc_soc_drv_suspend(struct of_device *op,
+ pm_message_t state)
+{
+ struct usb_hcd *hcd = dev_get_drvdata(&op->dev);
+ if (machine_is_compatible("generic-mpc5200")) {
+ struct ohci_hcd *ohci = hcd_to_ohci(hcd);
+
+ descr_a = in_be32(&ohci->regs->roothub.a);
+ out_be32(&ohci->regs->roothub.a, (descr_a & ~0x200) | 0x100);
+ }
+ return 0;
+}
+static int ohci_hcd_ppc_soc_drv_resume(struct of_device *op)
+{
+ struct usb_hcd *hcd = dev_get_drvdata(&op->dev);
+ if (machine_is_compatible("generic-mpc5200")) {
+ struct ohci_hcd *ohci = hcd_to_ohci(hcd);
+
+ out_be32(&ohci->regs->roothub.a, descr_a);
+ }
+ return 0;
+}
+#endif
+
static struct of_platform_driver ohci_hcd_ppc_of_driver = {
.name = "ppc-of-ohci",
.match_table = ohci_hcd_ppc_of_match,
@@ -221,8 +247,8 @@ static struct of_platform_driver ohci_hc
.remove = ohci_hcd_ppc_of_remove,
.shutdown = ohci_hcd_ppc_of_shutdown,
#ifdef CONFIG_PM
- /*.suspend = ohci_hcd_ppc_soc_drv_suspend,*/
- /*.resume = ohci_hcd_ppc_soc_drv_resume,*/
+ .suspend = ohci_hcd_ppc_soc_drv_suspend,
+ .resume = ohci_hcd_ppc_soc_drv_resume,
#endif
.driver = {
.name = "ppc-of-ohci",
More information about the Linuxppc-embedded
mailing list