UPSTREAM: usb: host: dwc3: fix phys init
When no PHYs are declared in the dwc3 node, the phy init fails.
This patch checks if the "phys" property is presend and reports
the error returned by dev_count_phandle_with_args().
This patchs also fixes the styles issues added in last commit.
This patch should fix the DWC3 support on the UniPhier SoC family.
Change-Id: I59c50f81dfd695a2a8047ed13c1af21af64b044b
Fixes: 7c839ea70c49 ("usb: host: dwc3: Add support for multiple PHYs")
Reported-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
(cherry picked from commit 003659bda94a1444ebdfefea3f0928f8e90f9d8f)
This commit is contained in:
parent
2aad62fa1b
commit
3056fcd356
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue