]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
phy: renesas: rcar-gen3-usb2: Factor out VBUS control logic
authorTommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
Mon, 22 Dec 2025 13:43:44 +0000 (14:43 +0100)
committerVinod Koul <vkoul@kernel.org>
Wed, 21 Jan 2026 08:46:02 +0000 (14:16 +0530)
Refactor the VBUS control logic into a new helper function to improve
code clarity and reduce duplication. This makes it easier to handle
different VBUS control register cases and aids future maintenance.

Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
Link: https://patch.msgid.link/2d94c9876b965bdf7cd74cdbbc0c54689e122798.1766405010.git.tommaso.merciai.xr@bp.renesas.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/phy/renesas/phy-rcar-gen3-usb2.c

index 582de10d5beb9623620c4b16677893fb28e63143..4c7a46f1f16b87085e722fd8cf42c555e99e48d5 100644 (file)
@@ -204,28 +204,38 @@ static void rcar_gen3_set_linectrl(struct rcar_gen3_chan *ch, int dp, int dm)
        writel(val, usb2_base + USB2_LINECTRL1);
 }
 
-static void rcar_gen3_enable_vbus_ctrl(struct rcar_gen3_chan *ch, int vbus)
+static void rcar_gen3_phy_usb2_set_vbus(struct rcar_gen3_chan *ch,
+                                       u32 vbus_ctrl_reg,
+                                       u32 vbus_ctrl_val,
+                                       bool enable)
 {
        void __iomem *usb2_base = ch->base;
-       u32 vbus_ctrl_reg = USB2_ADPCTRL;
-       u32 vbus_ctrl_val = USB2_ADPCTRL_DRVVBUS;
        u32 val;
 
+       val = readl(usb2_base + vbus_ctrl_reg);
+       if (enable)
+               val |= vbus_ctrl_val;
+       else
+               val &= ~vbus_ctrl_val;
+       writel(val, usb2_base + vbus_ctrl_reg);
+
+       dev_vdbg(ch->dev, "%s: reg=0x%08x, val=%08x, enable=%d\n",
+                __func__, vbus_ctrl_reg, val, enable);
+}
+
+static void rcar_gen3_enable_vbus_ctrl(struct rcar_gen3_chan *ch, int vbus)
+{
        if (ch->phy_data->no_adp_ctrl || ch->phy_data->vblvl_ctrl) {
                if (ch->vbus)
                        regulator_hardware_enable(ch->vbus, vbus);
 
-               vbus_ctrl_reg = USB2_VBCTRL;
-               vbus_ctrl_val = USB2_VBCTRL_VBOUT;
+               rcar_gen3_phy_usb2_set_vbus(ch, USB2_VBCTRL,
+                                           USB2_VBCTRL_VBOUT, vbus);
+               return;
        }
 
-       val = readl(usb2_base + vbus_ctrl_reg);
-       if (vbus)
-               val |= vbus_ctrl_val;
-       else
-               val &= ~vbus_ctrl_val;
-       dev_vdbg(ch->dev, "%s: %08x, %d\n", __func__, val, vbus);
-       writel(val, usb2_base + vbus_ctrl_reg);
+       rcar_gen3_phy_usb2_set_vbus(ch, USB2_ADPCTRL,
+                                   USB2_ADPCTRL_DRVVBUS, vbus);
 }
 
 static void rcar_gen3_control_otg_irq(struct rcar_gen3_chan *ch, int enable)