[U-Boot] [PATCH v2 3/3] usb: host: xhci-dwc3: Add generic PHY support

Marek Vasut marex at denx.de
Mon May 22 09:13:30 UTC 2017


On 05/22/2017 09:42 AM, patrice.chotard at st.com wrote:
> From: Patrice Chotard <patrice.chotard at st.com>
> 
> Add support of generic PHY framework support
> 
> Signed-off-by: Patrice Chotard <patrice.chotard at st.com>

Reviewed-by: Marek Vasut <marex at denx.de>

> ---
> 
> v2:	_ none
> 
>  drivers/usb/host/xhci-dwc3.c | 32 ++++++++++++++++++++++++++++++++
>  1 file changed, 32 insertions(+)
> 
> diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
> index 8367ba2..76c0024 100644
> --- a/drivers/usb/host/xhci-dwc3.c
> +++ b/drivers/usb/host/xhci-dwc3.c
> @@ -10,6 +10,8 @@
>  
>  #include <common.h>
>  #include <dm.h>
> +#include <fdtdec.h>
> +#include <generic-phy.h>
>  #include <usb.h>
>  
>  #include "xhci.h"
> @@ -19,6 +21,10 @@
>  
>  DECLARE_GLOBAL_DATA_PTR;
>  
> +struct xhci_dwc3_platdata {
> +	struct phy usb_phy;
> +};
> +
>  struct xhci_dwc3_priv {
>  	struct xhci_ctrl ctrl;
>  };
> @@ -116,11 +122,26 @@ static int xhci_dwc3_probe(struct udevice *dev)
>  	struct xhci_hccr *hccr;
>  	struct dwc3 *dwc3_reg;
>  	enum usb_dr_mode dr_mode;
> +	int ret;
>  
>  	hccr = (struct xhci_hccr *)dev_get_addr(dev);
>  	hcor = (struct xhci_hcor *)((phys_addr_t)hccr +
>  			HC_LENGTH(xhci_readl(&(hccr)->cr_capbase)));
>  
> +	ret = generic_phy_get_by_index(dev, 0, &plat->usb_phy);
> +	if (ret) {
> +		if (ret != -ENOENT) {
> +			error("Failed to get USB PHY for %s\n", dev->name);
> +			return ret;
> +		}
> +	} else {
> +		ret = generic_phy_init(&plat->usb_phy);
> +		if (ret) {
> +			error("Can't init USB PHY for %s\n", dev->name);
> +			return ret;
> +		}
> +	}
> +
>  	dwc3_reg = (struct dwc3 *)((char *)(hccr) + DWC3_REG_OFFSET);
>  
>  	dwc3_core_init(dwc3_reg);
> @@ -137,6 +158,17 @@ static int xhci_dwc3_probe(struct udevice *dev)
>  
>  static int xhci_dwc3_remove(struct udevice *dev)
>  {
> +	struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
> +	int ret;
> +
> +	if (plat->usb_phy.dev) {
> +		ret = generic_phy_exit(&plat->usb_phy);
> +		if (ret) {
> +			error("Can't deinit USB PHY for %s\n", dev->name);
> +			return ret;
> +		}
> +	}
> +
>  	return xhci_deregister(dev);
>  }
>  
> 


-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list