diff options
author | Manjunath Goudar <manjunath.goudar@linaro.org> | 2013-10-04 00:28:09 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-10-05 20:56:41 -0400 |
commit | 19d339430403336f2f3c9d502db5f4e51fa21729 (patch) | |
tree | 01ee07b841160fa191c5054d52a90f743a4a5f42 /drivers/usb/host/ohci-s3c2410.c | |
parent | 056ca85dab838bf064485b6cd73ddfcd9bf707e7 (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>
Diffstat (limited to 'drivers/usb/host/ohci-s3c2410.c')
-rw-r--r-- | drivers/usb/host/ohci-s3c2410.c | 21 |
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) | |||
426 | static int ohci_hcd_s3c2410_drv_suspend(struct device *dev) | 426 | static 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); |
449 | bail: | ||
450 | spin_unlock_irqrestore(&ohci->lock, flags); | ||
451 | 438 | ||
452 | return rc; | 439 | return rc; |
453 | } | 440 | } |