diff mbox series

[1/2] phy: sun4i-usb: Do not drive VBUS with external VBUS present

Message ID 20220715033454.58556-1-samuel@sholland.org
State Accepted
Commit df202d996d72665c76d031849aa064c4881dc777
Delegated to: Andre Przywara
Headers show
Series [1/2] phy: sun4i-usb: Do not drive VBUS with external VBUS present | expand

Commit Message

Samuel Holland July 15, 2022, 3:34 a.m. UTC
It is possible to use host-side USB with externally-provided VBUS. For
example, some USB OTG cables have an extra power input which powers
both the board and the USB peripheral.

To support this setup, skip enabling the VBUS switch/regulator if VBUS
voltage is already present. This behavior matches the Linux PHY driver.

Signed-off-by: Samuel Holland <samuel@sholland.org>
---

 drivers/phy/allwinner/phy-sun4i-usb.c | 6 ++++++
 1 file changed, 6 insertions(+)
diff mbox series

Patch

diff --git a/drivers/phy/allwinner/phy-sun4i-usb.c b/drivers/phy/allwinner/phy-sun4i-usb.c
index aef2cb8f6f82..e1b01e732515 100644
--- a/drivers/phy/allwinner/phy-sun4i-usb.c
+++ b/drivers/phy/allwinner/phy-sun4i-usb.c
@@ -224,6 +224,12 @@  static int sun4i_usb_phy_power_on(struct phy *phy)
 		initial_usb_scan_delay = 0;
 	}
 
+	/* For phy0 only turn on Vbus if we don't have an ext. Vbus */
+	if (phy->id == 0 && sun4i_usb_phy_vbus_detect(phy)) {
+		dev_warn(phy->dev, "External vbus detected, not enabling our own vbus\n");
+		return 0;
+	}
+
 	if (dm_gpio_is_valid(&usb_phy->gpio_vbus))
 		dm_gpio_set_value(&usb_phy->gpio_vbus, 1);