[PATCH v2] usb: xhci-mvebu: use regulator_set_enable_if_allowed()
Bruno Banelli <[email protected]>
| Newsgroups | gmane.comp.boot-loaders.u-boot.general,gmane.comp.boot-loaders.u-boot |
|---|---|
| Message-ID | <[email protected]> |
Since commit 4fcba5d556b4 ("regulator: implement basic reference
counter") regulator_set_enable() returns -EALREADY when a fixed or
GPIO regulator has already been enabled. On boards whose VBUS
regulator carries regulator-always-on or regulator-boot-on -
armada-8040-mcbin.dts is one - regulator_autoset() enables it during
the regulator's own probe, so the subsequent enable in xhci_usb_probe()
fails and the controller is never registered:
starting USB...
Failed to turn ON the VBUS regulator
Bus usb3@500000: probe failed, error -114
No USB controllers found
Use regulator_set_enable_if_allowed(), which tolerates -EALREADY, in
the same way as commit 0830333c4743 ("usb: ehci-generic: Use
regulator_set_enable_if_allowed") and the other drivers converted
after the reference counter was introduced. Also tolerate -ENOSYS,
which include/power/regulator.h returns unconditionally from its
!DM_REGULATOR stub, matching the check ehci-generic.c already makes.
Tested on a SolidRun MACCHIATObin (Armada 8040), where USB mass
storage now enumerates.
Fixes: 4fcba5d556b4 ("regulator: implement basic reference counter")
Signed-off-by: Bruno Banelli <[email protected]>
---
drivers/usb/host/xhci-mvebu.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/host/xhci-mvebu.c b/drivers/usb/host/xhci-mvebu.c
index c294a56b3c..f932acf848 100644
--- a/drivers/usb/host/xhci-mvebu.c
+++ b/drivers/usb/host/xhci-mvebu.c
@@ -51,8 +51,8 @@ static int xhci_usb_probe(struct udevice *dev)
ret = device_get_supply_regulator(dev, "vbus-supply", ®ulator);
if (!ret) {
- ret = regulator_set_enable(regulator, true);
- if (ret) {
+ ret = regulator_set_enable_if_allowed(regulator, true);
+ if (ret && ret != -ENOSYS) {
printf("Failed to turn ON the VBUS regulator\n");
return ret;
}
--
2.43.0