summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/gadget/composite.c5
-rw-r--r--drivers/usb/host/xhci-dwc3.c23
2 files changed, 17 insertions, 11 deletions
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index d0ee7847b9..a87639def9 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -838,6 +838,9 @@ unknown:
ctrl->bRequestType, ctrl->bRequest,
w_value, w_index, w_length);
+ if (!cdev->config)
+ goto done;
+
/*
* functions always handle their interfaces and endpoints...
* punt other recipients (other, WUSB, ...) to the current
@@ -882,7 +885,7 @@ unknown:
value = f->setup(f, ctrl);
else {
c = cdev->config;
- if (c && c->setup)
+ if (c->setup)
value = c->setup(c, ctrl);
}
diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
index c1007350b7..adfa4a75cd 100644
--- a/drivers/usb/host/xhci-dwc3.c
+++ b/drivers/usb/host/xhci-dwc3.c
@@ -113,16 +113,21 @@ void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val)
}
#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);
- int i, ret;
+ int i, ret, count;
- if (!count)
+ /* Return if no phy declared */
+ if (!dev_read_prop(dev, "phys", NULL))
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),
- GFP_KERNEL);
+ GFP_KERNEL);
if (!plat->usb_phys)
return -ENOMEM;
@@ -136,7 +141,7 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count)
++plat->num_phys;
}
-
+
for (i = 0; i < plat->num_phys; i++) {
ret = generic_phy_init(&plat->usb_phys[i]);
if (ret) {
@@ -145,7 +150,7 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count)
goto phys_init_err;
}
}
-
+
for (i = 0; i < plat->num_phys; i++) {
ret = generic_phy_power_on(&plat->usb_phys[i]);
if (ret) {
@@ -157,7 +162,6 @@ static int xhci_dwc3_setup_phy(struct udevice *dev, int count)
return 0;
-
phys_poweron_err:
for (; i >= 0; 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]);
if (ret) {
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 +
HC_LENGTH(xhci_readl(&(hccr)->cr_capbase)));
- ret = xhci_dwc3_setup_phy(dev, dev_count_phandle_with_args(
- dev, "phys", "#phy-cells"));
+ ret = xhci_dwc3_setup_phy(dev);
if (ret)
return ret;