summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorThierry Reding <thierry.reding@gmail.com>2013-06-14 11:21:21 (GMT)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-06-17 20:56:25 (GMT)
commit8fefcfdd276be1459aaa2b2648037d2c0e1a3caa (patch)
tree059f36d675a7c52b9fe2990a173c7979e8b4ebd1 /drivers/usb
parentc19d14d6d0120e73418294e6a30db0566e5daf02 (diff)
downloadlinux-fsl-qoriq-8fefcfdd276be1459aaa2b2648037d2c0e1a3caa.tar.xz
USB: EHCI: tegra: Fix oops in error cleanup
Under some circumstances it happens that the connected PHY can't be powered up properly, in which case the cleanup path currently crashes because it checks the tegra->transceiver field using !IS_ERR(), which will succeed because it is in fact NULL. Dereferencing that pointer causes an oops in tegra_ehci_probe(). This patch fixes the issue by adding an additional label into the cleanup path to separately take down the PHY and the transceiver. Signed-off-by: Thierry Reding <thierry.reding@gmail.com> Reviewed-by: Stephen Warren <swarren@nvidia.com> Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/host/ehci-tegra.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
index 8dac5e4..6ee7ef7 100644
--- a/drivers/usb/host/ehci-tegra.c
+++ b/drivers/usb/host/ehci-tegra.c
@@ -478,15 +478,15 @@ static int tegra_ehci_probe(struct platform_device *pdev)
err = usb_add_hcd(hcd, irq, IRQF_SHARED);
if (err) {
dev_err(&pdev->dev, "Failed to add USB HCD\n");
- goto cleanup_phy;
+ goto cleanup_transceiver;
}
return err;
-cleanup_phy:
+cleanup_transceiver:
if (!IS_ERR(tegra->transceiver))
otg_set_host(tegra->transceiver->otg, NULL);
-
+cleanup_phy:
usb_phy_shutdown(hcd->phy);
cleanup_clk_en:
clk_disable_unprepare(tegra->clk);