diff options
| -rw-r--r-- | drivers/usb/host/xhci-rockchip.c | 31 | 
1 files changed, 22 insertions, 9 deletions
| diff --git a/drivers/usb/host/xhci-rockchip.c b/drivers/usb/host/xhci-rockchip.c index 38e1c68db75..c4ae55fc390 100644 --- a/drivers/usb/host/xhci-rockchip.c +++ b/drivers/usb/host/xhci-rockchip.c @@ -11,10 +11,10 @@  #include <malloc.h>  #include <usb.h>  #include <watchdog.h> -#include <asm/gpio.h>  #include <linux/errno.h>  #include <linux/compat.h>  #include <linux/usb/dwc3.h> +#include <power/regulator.h>  #include "xhci.h" @@ -23,7 +23,7 @@ DECLARE_GLOBAL_DATA_PTR;  struct rockchip_xhci_platdata {  	fdt_addr_t hcd_base;  	fdt_addr_t phy_base; -	struct gpio_desc vbus_gpio; +	struct udevice *vbus_supply;  };  /* @@ -66,11 +66,13 @@ static int xhci_usb_ofdata_to_platdata(struct udevice *dev)  		return -ENXIO;  	} -	/* Vbus gpio */ -	ret = gpio_request_by_name(dev, "rockchip,vbus-gpio", 0, -				   &plat->vbus_gpio, GPIOD_IS_OUT); +#if defined(CONFIG_DM_USB) && defined(CONFIG_DM_REGULATOR) +	/* Vbus regulator */ +	ret = device_get_supply_regulator(dev, "vbus-supply", +					  &plat->vbus_supply);  	if (ret) -		debug("rockchip,vbus-gpio node missing!"); +		debug("Can't get vbus supply\n"); +#endif  	return 0;  } @@ -153,9 +155,11 @@ static int xhci_usb_probe(struct udevice *dev)  	hcor = (struct xhci_hcor *)((uint64_t)ctx->hcd +  			HC_LENGTH(xhci_readl(&ctx->hcd->cr_capbase))); -	/* setup the Vbus gpio here */ -	if (dm_gpio_is_valid(&plat->vbus_gpio)) -		dm_gpio_set_value(&plat->vbus_gpio, 1); +#if defined(CONFIG_DM_USB) && defined(CONFIG_DM_REGULATOR) +	ret = regulator_set_enable(plat->vbus_supply, true); +	if (ret) +		debug("XHCI: Failed to enable vbus supply\n"); +#endif  	ret = rockchip_xhci_core_init(ctx, dev);  	if (ret) { @@ -168,6 +172,7 @@ static int xhci_usb_probe(struct udevice *dev)  static int xhci_usb_remove(struct udevice *dev)  { +	struct rockchip_xhci_platdata *plat = dev_get_platdata(dev);  	struct rockchip_xhci *ctx = dev_get_priv(dev);  	int ret; @@ -178,11 +183,18 @@ static int xhci_usb_remove(struct udevice *dev)  	if (ret)  		return ret; +#if defined(CONFIG_DM_USB) && defined(CONFIG_DM_REGULATOR) +	ret = regulator_set_enable(plat->vbus_supply, false); +	if (ret) +		debug("XHCI: Failed to disable vbus supply\n"); +#endif +  	return 0;  }  static const struct udevice_id xhci_usb_ids[] = {  	{ .compatible = "rockchip,rk3399-xhci" }, +	{ .compatible = "rockchip,rk3328-xhci" },  	{ }  }; @@ -202,6 +214,7 @@ U_BOOT_DRIVER(usb_xhci) = {  static const struct udevice_id usb_phy_ids[] = {  	{ .compatible = "rockchip,rk3399-usb3-phy" }, +	{ .compatible = "rockchip,rk3328-usb3-phy" },  	{ }  }; | 
