usb: xhci: plat: Add USB phy support
The Marvell Armada 385 AP needs a dumb phy in order to enable the USB3 VBUS. Add a call to retrieve a USB PHY to XHCI plat in order to support this. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e5401bf37a
commit
7b8ef22ea5
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/usb/phy.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/usb/xhci_pdriver.h>
|
#include <linux/usb/xhci_pdriver.h>
|
||||||
|
|
||||||
|
@ -155,12 +156,27 @@ static int xhci_plat_probe(struct platform_device *pdev)
|
||||||
if (HCC_MAX_PSA(xhci->hcc_params) >= 4)
|
if (HCC_MAX_PSA(xhci->hcc_params) >= 4)
|
||||||
xhci->shared_hcd->can_do_streams = 1;
|
xhci->shared_hcd->can_do_streams = 1;
|
||||||
|
|
||||||
|
hcd->usb_phy = devm_usb_get_phy_by_phandle(&pdev->dev, "usb-phy", 0);
|
||||||
|
if (IS_ERR(hcd->usb_phy)) {
|
||||||
|
ret = PTR_ERR(hcd->usb_phy);
|
||||||
|
if (ret == -EPROBE_DEFER)
|
||||||
|
goto put_usb3_hcd;
|
||||||
|
hcd->usb_phy = NULL;
|
||||||
|
} else {
|
||||||
|
ret = usb_phy_init(hcd->usb_phy);
|
||||||
|
if (ret)
|
||||||
|
goto put_usb3_hcd;
|
||||||
|
}
|
||||||
|
|
||||||
ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED);
|
ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto put_usb3_hcd;
|
goto disable_usb_phy;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
disable_usb_phy:
|
||||||
|
usb_phy_shutdown(hcd->usb_phy);
|
||||||
|
|
||||||
put_usb3_hcd:
|
put_usb3_hcd:
|
||||||
usb_put_hcd(xhci->shared_hcd);
|
usb_put_hcd(xhci->shared_hcd);
|
||||||
|
|
||||||
|
@ -184,6 +200,7 @@ static int xhci_plat_remove(struct platform_device *dev)
|
||||||
struct clk *clk = xhci->clk;
|
struct clk *clk = xhci->clk;
|
||||||
|
|
||||||
usb_remove_hcd(xhci->shared_hcd);
|
usb_remove_hcd(xhci->shared_hcd);
|
||||||
|
usb_phy_shutdown(hcd->usb_phy);
|
||||||
usb_put_hcd(xhci->shared_hcd);
|
usb_put_hcd(xhci->shared_hcd);
|
||||||
|
|
||||||
usb_remove_hcd(hcd);
|
usb_remove_hcd(hcd);
|
||||||
|
|
Loading…
Reference in New Issue