phy: renesas: phy-rcar-gen3-usb2: Control VBUS for RZ/G2L SoCs
authorBiju Das <biju.das.jz@bp.renesas.com>
Tue, 2 Jul 2024 18:00:17 +0000 (19:00 +0100)
committerPhilipp Zabel <p.zabel@pengutronix.de>
Wed, 3 Jul 2024 08:51:53 +0000 (10:51 +0200)
Use regulator_hardware_enable() for controlling VBUS enable for
RZ/G2L alike SoCs in interrupt context.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Acked-by: Vinod Koul <vkoul@kernel.org>
Link: https://lore.kernel.org/r/20240702180032.207275-4-biju.das.jz@bp.renesas.com
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
drivers/phy/renesas/phy-rcar-gen3-usb2.c

index fbab6ac0f0d10c89a275b68dd8d0094c1943f357..7594f64eb7373e5d616684e11088a7921fc1e7b9 100644 (file)
@@ -188,6 +188,9 @@ static void rcar_gen3_enable_vbus_ctrl(struct rcar_gen3_chan *ch, int vbus)
 
        dev_vdbg(ch->dev, "%s: %08x, %d\n", __func__, val, vbus);
        if (ch->soc_no_adp_ctrl) {
+               if (ch->vbus)
+                       regulator_hardware_enable(ch->vbus, vbus);
+
                vbus_ctrl_reg = USB2_VBCTRL;
                vbus_ctrl_val = USB2_VBCTRL_VBOUT;
        }
@@ -718,7 +721,10 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
                phy_set_drvdata(channel->rphys[i].phy, &channel->rphys[i]);
        }
 
-       channel->vbus = devm_regulator_get_optional(dev, "vbus");
+       if (channel->soc_no_adp_ctrl && channel->is_otg_channel)
+               channel->vbus = devm_regulator_get_exclusive(dev, "vbus");
+       else
+               channel->vbus = devm_regulator_get_optional(dev, "vbus");
        if (IS_ERR(channel->vbus)) {
                if (PTR_ERR(channel->vbus) == -EPROBE_DEFER) {
                        ret = PTR_ERR(channel->vbus);