]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
phy: sun4i-usb: Determine VBUS detection pin from devicetree
authorAndre Przywara <andre.przywara@arm.com>
Sun, 30 Mar 2025 16:13:23 +0000 (17:13 +0100)
committerTom Rini <trini@konsulko.com>
Mon, 28 Apr 2025 18:45:44 +0000 (12:45 -0600)
So far Allwinner boards controlled the USB VBUS detection via the
respective GPIO pin specified in Kconfig, as a string. All boards should
have the same GPIO already specified in the devicetree, in the
usb0_vbus_det-gpios property.

Convert the usage of the Kconfig configured GPIO over to query that
information from the devicetree, then use the existing DM GPIO
infrastructure to request the GPIO.
Only PHY0 supports USB-OTG, so limit the GPIO request to that PHY, to
avoid claiming it multiple times.

This removes the need to name that GPIO in the defconfig file.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
drivers/phy/allwinner/phy-sun4i-usb.c

index 2def87897d4dc490534c6ec1b017414734f76a47..42e67b47328c6b7dd38a2ebaa3d46a352673658f 100644 (file)
@@ -86,23 +86,18 @@ struct sun4i_usb_phy_cfg {
 };
 
 struct sun4i_usb_phy_info {
-       const char *gpio_vbus_det;
        const char *gpio_id_det;
 } phy_info[] = {
        {
-               .gpio_vbus_det = CONFIG_USB0_VBUS_DET,
                .gpio_id_det = CONFIG_USB0_ID_DET,
        },
        {
-               .gpio_vbus_det = NULL,
                .gpio_id_det = NULL,
        },
        {
-               .gpio_vbus_det = NULL,
                .gpio_id_det = NULL,
        },
        {
-               .gpio_vbus_det = NULL,
                .gpio_id_det = NULL,
        },
 };
@@ -494,17 +489,16 @@ static int sun4i_usb_phy_probe(struct udevice *dev)
                                return ret;
                }
 
-               ret = dm_gpio_lookup_name(info->gpio_vbus_det,
-                                         &phy->gpio_vbus_det);
-               if (ret == 0) {
-                       ret = dm_gpio_request(&phy->gpio_vbus_det,
-                                             "usb_vbus_det");
-                       if (ret)
-                               return ret;
-                       ret = dm_gpio_set_dir_flags(&phy->gpio_vbus_det,
-                                                   GPIOD_IS_IN);
-                       if (ret)
+               if (i == 0) {
+                       ret = gpio_request_by_name(dev, "usb0_vbus_det-gpios",
+                                                  0, &phy->gpio_vbus_det,
+                                                  GPIOD_IS_IN);
+                       if (ret && ret != -ENOENT) {
+                               dev_err(dev,
+                                       "failed to get VBUS detect GPIO: %d\n",
+                                       ret);
                                return ret;
+                       }
                }
 
                ret = dm_gpio_lookup_name(info->gpio_id_det, &phy->gpio_id_det);