Skip to content

Commit

Permalink
usb: xhci: plat: Create both HCDs before adding them
Browse files Browse the repository at this point in the history
As xhci_hcd is now allocated by usb_create_hcd(), we don't
need to add the primary HCD before creating the shared HCD.

Creating the shared HCD before adding the primary HCD is particularly
useful for the OTG use case so that we know at the OTG core if
the HCD is in single configuration or dual (primary + shared)
configuration.

Signed-off-by: Roger Quadros <rogerq@ti.com>
[Mathias: rearranged to fit on top of the Marvell Armada 385 phy changes]
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Roger Quadros authored and Greg Kroah-Hartman committed May 31, 2015
1 parent cd33a32 commit 4ac5308
Showing 1 changed file with 12 additions and 12 deletions.
24 changes: 12 additions & 12 deletions drivers/usb/host/xhci-plat.c
Original file line number Diff line number Diff line change
Expand Up @@ -136,21 +136,15 @@ static int xhci_plat_probe(struct platform_device *pdev)
goto disable_clk;
}

ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
if (ret)
goto disable_clk;

device_wakeup_enable(hcd->self.controller);

/* USB 2.0 roothub is stored in the platform_device now. */
hcd = platform_get_drvdata(pdev);
xhci = hcd_to_xhci(hcd);
xhci->clk = clk;
xhci->shared_hcd = usb_create_shared_hcd(driver, &pdev->dev,
dev_name(&pdev->dev), hcd);
if (!xhci->shared_hcd) {
ret = -ENOMEM;
goto dealloc_usb2_hcd;
goto disable_clk;
}

if ((node && of_property_read_bool(node, "usb3-lpm-capable")) ||
Expand All @@ -172,21 +166,26 @@ static int xhci_plat_probe(struct platform_device *pdev)
goto put_usb3_hcd;
}

ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED);
ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
if (ret)
goto disable_usb_phy;

ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED);
if (ret)
goto dealloc_usb2_hcd;

return 0;


dealloc_usb2_hcd:
usb_remove_hcd(hcd);

disable_usb_phy:
usb_phy_shutdown(hcd->usb_phy);

put_usb3_hcd:
usb_put_hcd(xhci->shared_hcd);

dealloc_usb2_hcd:
usb_remove_hcd(hcd);

disable_clk:
if (!IS_ERR(clk))
clk_disable_unprepare(clk);
Expand All @@ -205,9 +204,10 @@ static int xhci_plat_remove(struct platform_device *dev)

usb_remove_hcd(xhci->shared_hcd);
usb_phy_shutdown(hcd->usb_phy);
usb_put_hcd(xhci->shared_hcd);

usb_remove_hcd(hcd);
usb_put_hcd(xhci->shared_hcd);

if (!IS_ERR(clk))
clk_disable_unprepare(clk);
usb_put_hcd(hcd);
Expand Down

0 comments on commit 4ac5308

Please sign in to comment.