Merge git://git.denx.de/u-boot-usb

This commit is contained in:
Tom Rini 2018-04-26 22:09:11 -04:00
commit ec37f05ec0
2 changed files with 17 additions and 11 deletions

View File

@ -838,6 +838,9 @@ unknown:
ctrl->bRequestType, ctrl->bRequest, ctrl->bRequestType, ctrl->bRequest,
w_value, w_index, w_length); w_value, w_index, w_length);
if (!cdev->config)
goto done;
/* /*
* functions always handle their interfaces and endpoints... * functions always handle their interfaces and endpoints...
* punt other recipients (other, WUSB, ...) to the current * punt other recipients (other, WUSB, ...) to the current
@ -882,7 +885,7 @@ unknown:
value = f->setup(f, ctrl); value = f->setup(f, ctrl);
else { else {
c = cdev->config; c = cdev->config;
if (c && c->setup) if (c->setup)
value = c->setup(c, ctrl); value = c->setup(c, ctrl);
} }

View File

@ -113,16 +113,21 @@ void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val)
} }
#ifdef CONFIG_DM_USB #ifdef CONFIG_DM_USB
static int xhci_dwc3_setup_phy(struct udevice *dev, int count) static int xhci_dwc3_setup_phy(struct udevice *dev)
{ {
struct xhci_dwc3_platdata *plat = dev_get_platdata(dev); struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
int i, ret; int i, ret, count;
if (!count) /* Return if no phy declared */
if (!dev_read_prop(dev, "phys", NULL))
return 0; return 0;
count = dev_count_phandle_with_args(dev, "phys", "#phy-cells");
if (count <= 0)
return count;
plat->usb_phys = devm_kcalloc(dev, count, sizeof(struct phy), plat->usb_phys = devm_kcalloc(dev, count, sizeof(struct phy),
GFP_KERNEL); GFP_KERNEL);
if (!plat->usb_phys) if (!plat->usb_phys)
return -ENOMEM; return -ENOMEM;
@ -136,7 +141,7 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count)
++plat->num_phys; ++plat->num_phys;
} }
for (i = 0; i < plat->num_phys; i++) { for (i = 0; i < plat->num_phys; i++) {
ret = generic_phy_init(&plat->usb_phys[i]); ret = generic_phy_init(&plat->usb_phys[i]);
if (ret) { if (ret) {
@ -145,7 +150,7 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count)
goto phys_init_err; goto phys_init_err;
} }
} }
for (i = 0; i < plat->num_phys; i++) { for (i = 0; i < plat->num_phys; i++) {
ret = generic_phy_power_on(&plat->usb_phys[i]); ret = generic_phy_power_on(&plat->usb_phys[i]);
if (ret) { if (ret) {
@ -157,7 +162,6 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count)
return 0; return 0;
phys_poweron_err: phys_poweron_err:
for (; i >= 0; i--) for (; i >= 0; i--)
generic_phy_power_off(&plat->usb_phys[i]); generic_phy_power_off(&plat->usb_phys[i]);
@ -187,7 +191,7 @@ static int xhci_dwc3_shutdown_phy(struct udevice *dev)
ret |= generic_phy_exit(&plat->usb_phys[i]); ret |= generic_phy_exit(&plat->usb_phys[i]);
if (ret) { if (ret) {
pr_err("Can't shutdown USB PHY%d for %s\n", pr_err("Can't shutdown USB PHY%d for %s\n",
i, dev->name); i, dev->name);
} }
} }
@ -206,8 +210,7 @@ static int xhci_dwc3_probe(struct udevice *dev)
hcor = (struct xhci_hcor *)((uintptr_t)hccr + hcor = (struct xhci_hcor *)((uintptr_t)hccr +
HC_LENGTH(xhci_readl(&(hccr)->cr_capbase))); HC_LENGTH(xhci_readl(&(hccr)->cr_capbase)));
ret = xhci_dwc3_setup_phy(dev, dev_count_phandle_with_args( ret = xhci_dwc3_setup_phy(dev);
dev, "phys", "#phy-cells"));
if (ret) if (ret)
return ret; return ret;