Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 815c9d6a authored by Andy Gross's avatar Andy Gross Committed by Greg Kroah-Hartman
Browse files

usb: host: ehci-msm: Conditionally call ehci suspend/resume



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: default avatarAndy Gross <andy.gross@linaro.org>
Tested-by: default avatarPramod Gurav <pramod.gurav@linaro.org>
Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1700bd98
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -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");

	/* 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");

	/* 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