]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
phy: rockchip: snps-pcie3: Refactor to use a phy_init ops
authorJonas Karlman <jonas@kwiboo.se>
Wed, 2 Aug 2023 19:04:30 +0000 (19:04 +0000)
committerKever Yang <kever.yang@rock-chips.com>
Sat, 7 Oct 2023 02:23:12 +0000 (10:23 +0800)
Add a phy_init ops in preparation for upcoming support of a RK3588
variant in the driver.

Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
drivers/phy/rockchip/phy-rockchip-snps-pcie3.c

index 3053543a3329ca7099309664d65f2172f1d12441..b76b5386bef0f3606102e5579ffbb848317c42fd 100644 (file)
@@ -35,8 +35,32 @@ struct rockchip_p3phy_priv {
        struct clk_bulk clks;
 };
 
+struct rockchip_p3phy_ops {
+       int (*phy_init)(struct phy *phy);
+};
+
+static int rockchip_p3phy_rk3568_init(struct phy *phy)
+{
+       struct rockchip_p3phy_priv *priv = dev_get_priv(phy->dev);
+
+       /* Deassert PCIe PMA output clamp mode */
+       regmap_write(priv->phy_grf, GRF_PCIE30PHY_CON9,
+                    (0x1 << 15) | (0x1 << 31));
+
+       reset_deassert(&priv->p30phy);
+       udelay(1);
+
+       return 0;
+}
+
+static const struct rockchip_p3phy_ops rk3568_ops = {
+       .phy_init = rockchip_p3phy_rk3568_init,
+};
+
 static int rochchip_p3phy_init(struct phy *phy)
 {
+       struct rockchip_p3phy_ops *ops =
+               (struct rockchip_p3phy_ops *)dev_get_driver_data(phy->dev);
        struct rockchip_p3phy_priv *priv = dev_get_priv(phy->dev);
        int ret;
 
@@ -47,14 +71,11 @@ static int rochchip_p3phy_init(struct phy *phy)
        reset_assert(&priv->p30phy);
        udelay(1);
 
-       /* Deassert PCIe PMA output clamp mode */
-       regmap_write(priv->phy_grf, GRF_PCIE30PHY_CON9,
-                    (0x1 << 15) | (0x1 << 31));
-
-       reset_deassert(&priv->p30phy);
-       udelay(1);
+       ret = ops->phy_init(phy);
+       if (ret)
+               clk_disable_bulk(&priv->clks);
 
-       return 0;
+       return ret;
 }
 
 static int rochchip_p3phy_exit(struct phy *phy)
@@ -103,7 +124,10 @@ static struct phy_ops rochchip_p3phy_ops = {
 };
 
 static const struct udevice_id rockchip_p3phy_of_match[] = {
-       { .compatible = "rockchip,rk3568-pcie3-phy" },
+       {
+               .compatible = "rockchip,rk3568-pcie3-phy",
+               .data = (ulong)&rk3568_ops,
+       },
        { },
 };