Trivial suspend and resume OF OHCI.
On MPC52xx turn off and on power to ports.


Signed-off-by: Domen Puncer <[EMAIL PROTECTED]>

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);
+#ifdef CONFIG_PPC_MPC52xx
+       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);
+#endif
+       return 0;
+}
+static int ohci_hcd_ppc_soc_drv_resume(struct of_device *op)
+{
+       struct usb_hcd *hcd = dev_get_drvdata(&op->dev);
+#ifdef CONFIG_PPC_MPC52xx
+       struct ohci_hcd *ohci = hcd_to_ohci(hcd);
+
+       out_be32(&ohci->regs->roothub.a, descr_a);
+#endif
+       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",
_______________________________________________
Linuxppc-embedded mailing list
[email protected]
https://ozlabs.org/mailman/listinfo/linuxppc-embedded

Reply via email to