aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManjunath Goudar <manjunath.goudar@linaro.org>2013-10-04 00:28:09 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-10-05 20:56:41 -0400
commit19d339430403336f2f3c9d502db5f4e51fa21729 (patch)
tree01ee07b841160fa191c5054d52a90f743a4a5f42
parent056ca85dab838bf064485b6cd73ddfcd9bf707e7 (diff)
USB: OHCI: Properly handle ohci-s3c2410 suspend
Suspend scenario in case of ohci-s3c2410 glue was not properly handled as it was not suspending generic part of ohci controller. Alan Stern suggested, properly handle ohci-s3c2410 suspend scenario. Calling explicitly the ohci_suspend() routine in ohci_hcd_s3c2410_drv_suspend() will ensure proper handling of suspend scenario. Signed-off-by: Manjunath Goudar <manjunath.goudar@linaro.org> Signed-off-by: Manjunath Goudar <csmanjuvijay@gmail.com> Acked-by: Alan Stern <stern@rowland.harvard.edu> Cc: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/host/ohci-s3c2410.c21
1 files changed, 4 insertions, 17 deletions
diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c
index be3429e08d90..b5bf9b7a54fc 100644
--- a/drivers/usb/host/ohci-s3c2410.c
+++ b/drivers/usb/host/ohci-s3c2410.c
@@ -426,28 +426,15 @@ static int ohci_hcd_s3c2410_drv_remove(struct platform_device *pdev)
426static int ohci_hcd_s3c2410_drv_suspend(struct device *dev) 426static int ohci_hcd_s3c2410_drv_suspend(struct device *dev)
427{ 427{
428 struct usb_hcd *hcd = dev_get_drvdata(dev); 428 struct usb_hcd *hcd = dev_get_drvdata(dev);
429 struct ohci_hcd *ohci = hcd_to_ohci(hcd);
430 struct platform_device *pdev = to_platform_device(dev); 429 struct platform_device *pdev = to_platform_device(dev);
431 unsigned long flags; 430 bool do_wakeup = device_may_wakeup(dev);
432 int rc = 0; 431 int rc = 0;
433 432
434 /* 433 rc = ohci_suspend(hcd, do_wakeup);
435 * Root hub was already suspended. Disable irq emission and 434 if (rc)
436 * mark HW unaccessible, bail out if RH has been resumed. Use 435 return rc;
437 * the spinlock to properly synchronize with possible pending
438 * RH suspend or resume activity.
439 */
440 spin_lock_irqsave(&ohci->lock, flags);
441 if (ohci->rh_state != OHCI_RH_SUSPENDED) {
442 rc = -EINVAL;
443 goto bail;
444 }
445
446 clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
447 436
448 s3c2410_stop_hc(pdev); 437 s3c2410_stop_hc(pdev);
449bail:
450 spin_unlock_irqrestore(&ohci->lock, flags);
451 438
452 return rc; 439 return rc;
453} 440}