Trivial suspend and resume OF OHCI. On MPC52xx turn off and on power to ports.
Signed-off-by: Domen Puncer <[EMAIL PROTECTED]> --- 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", _______________________________________________ Linuxppc-embedded mailing list Linuxppc-embedded@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-embedded