Signed-off-by: Jules Maselbas <jmaselbas@xxxxxxxxx> --- drivers/usb/dwc2/core.h | 2 ++ drivers/usb/dwc2/dwc2.c | 21 +++++++++++++++++++++ drivers/usb/dwc2/dwc2.h | 1 + 3 files changed, 24 insertions(+) diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h index 090ca15fe..b9845b552 100644 --- a/drivers/usb/dwc2/core.h +++ b/drivers/usb/dwc2/core.h @@ -466,6 +466,8 @@ struct dwc2 { struct dwc2_hw_params hw_params; struct dwc2_core_params params; + struct phy *phy; /* optional */ + #ifdef CONFIG_USB_DWC2_HOST struct usb_host host; u8 in_data_toggle[MAX_DEVICE][MAX_ENDPOINT]; diff --git a/drivers/usb/dwc2/dwc2.c b/drivers/usb/dwc2/dwc2.c index 282e6754b..ae144698c 100644 --- a/drivers/usb/dwc2/dwc2.c +++ b/drivers/usb/dwc2/dwc2.c @@ -50,6 +50,17 @@ static int dwc2_probe(struct device_d *dev) dwc2->regs = IOMEM(iores->start); dwc2->dev = dev; + dwc2->phy = phy_optional_get(dev, "usb2-phy"); + if (!dwc2->phy) + dwc2->phy = phy_optional_get(dev, "usb-phy"); + if (dwc2->phy) { + ret = phy_power_on(dwc2->phy); + if (ret == 0) + ret = phy_init(dwc2->phy); + if (ret) + goto error; + } + ret = dwc2_core_snpsid(dwc2); if (ret) goto error; @@ -78,15 +89,25 @@ static int dwc2_probe(struct device_d *dev) ret = dwc2_set_mode(dwc2, dwc2->dr_mode); error: + if (dwc2->phy) + phy_power_off(dwc2->phy); + return ret; } static void dwc2_remove(struct device_d *dev) { struct dwc2 *dwc2 = dev->priv; + int ret; dwc2_host_uninit(dwc2); dwc2_gadget_uninit(dwc2); + + if (dwc2->phy) { + ret = phy_exit(dwc2->phy); + if (ret == 0) + phy_power_off(dwc2->phy); + } } static const struct of_device_id dwc2_platform_dt_ids[] = { diff --git a/drivers/usb/dwc2/dwc2.h b/drivers/usb/dwc2/dwc2.h index 30ad90665..196f4a07f 100644 --- a/drivers/usb/dwc2/dwc2.h +++ b/drivers/usb/dwc2/dwc2.h @@ -2,6 +2,7 @@ #include <usb/usb.h> #include <usb/usb_defs.h> #include <usb/gadget.h> +#include <linux/phy/phy.h> #include "regs.h" #include "core.h" -- 2.17.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox