From eb22f895f4058f6cb395354aea9b778eb3908ff2 Mon Sep 17 00:00:00 2001 From: Zhang Yubing Date: Wed, 26 Jun 2024 09:25:28 +0800 Subject: [PATCH] phy: rockchip-typec: Try to turn the DP PHY on several times Change-Id: I945abf00bfd2b56600f25a8ee256988790f0a2dc Signed-off-by: Zhang Yubing --- drivers/phy/rockchip/phy-rockchip-typec.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/phy/rockchip/phy-rockchip-typec.c b/drivers/phy/rockchip/phy-rockchip-typec.c index b8f644df1566..782cafceffce 100644 --- a/drivers/phy/rockchip/phy-rockchip-typec.c +++ b/drivers/phy/rockchip/phy-rockchip-typec.c @@ -1467,9 +1467,8 @@ static const struct phy_ops rockchip_usb3_phy_ops = { .owner = THIS_MODULE, }; -static int rockchip_dp_phy_power_on(struct phy *phy) +static int _rockchip_dp_phy_power_on(struct rockchip_typec_phy *tcphy) { - struct rockchip_typec_phy *tcphy = phy_get_drvdata(phy); const struct rockchip_usb3phy_port_cfg *cfg = tcphy->port_cfgs; int new_mode, ret = 0; u32 val; @@ -1532,6 +1531,24 @@ unlock_ret: return ret; } +static int rockchip_dp_phy_power_on(struct phy *phy) +{ + struct rockchip_typec_phy *tcphy = phy_get_drvdata(phy); + int ret; + int tries; + + for (tries = 0; tries < POWER_ON_TRIES; tries++) { + ret = _rockchip_dp_phy_power_on(tcphy); + if (!ret) + break; + } + + if (tries && !ret) + dev_info(tcphy->dev, "Needed %d loops to turn on dp phy\n", tries); + + return ret; +} + static int rockchip_dp_phy_power_off(struct phy *phy) { struct rockchip_typec_phy *tcphy = phy_get_drvdata(phy);