Skip to content

Commit

Permalink
usb: host: ehci-msm: Conditionally call ehci suspend/resume
Browse files Browse the repository at this point in the history
This patch fixes a suspend/resume issue where the driver is blindly
calling ehci_suspend/resume functions when the ehci hasn't been setup.
This results in a crash during suspend/resume operations.

Signed-off-by: Andy Gross <andy.gross@linaro.org>
Tested-by: Pramod Gurav <pramod.gurav@linaro.org>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Andy Gross authored and Greg Kroah-Hartman committed Jun 8, 2016
1 parent 1700bd9 commit 815c9d6
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions drivers/usb/host/ehci-msm.c
Original file line number Diff line number Diff line change
Expand Up @@ -179,22 +179,32 @@ static int ehci_msm_remove(struct platform_device *pdev)
static int ehci_msm_pm_suspend(struct device *dev)
{
struct usb_hcd *hcd = dev_get_drvdata(dev);
struct ehci_hcd *ehci = hcd_to_ehci(hcd);
bool do_wakeup = device_may_wakeup(dev);

dev_dbg(dev, "ehci-msm PM suspend\n");

return ehci_suspend(hcd, do_wakeup);
/* Only call ehci_suspend if ehci_setup has been done */
if (ehci->sbrn)
return ehci_suspend(hcd, do_wakeup);

return 0;
}

static int ehci_msm_pm_resume(struct device *dev)
{
struct usb_hcd *hcd = dev_get_drvdata(dev);
struct ehci_hcd *ehci = hcd_to_ehci(hcd);

dev_dbg(dev, "ehci-msm PM resume\n");
ehci_resume(hcd, false);

/* Only call ehci_resume if ehci_setup has been done */
if (ehci->sbrn)
ehci_resume(hcd, false);

return 0;
}

#else
#define ehci_msm_pm_suspend NULL
#define ehci_msm_pm_resume NULL
Expand Down

0 comments on commit 815c9d6

Please sign in to comment.