net: phy: smsc: use device-managed clock API
authorHeiner Kallweit <hkallweit1@gmail.com>
Sun, 28 Aug 2022 17:26:55 +0000 (19:26 +0200)
committerJakub Kicinski <kuba@kernel.org>
Wed, 31 Aug 2022 19:19:18 +0000 (12:19 -0700)
Simplify the code by using the device-managed clock API.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/b222be68-ba7e-999d-0a07-eca0ecedf74e@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/smsc.c

index 69423b8..ac7481c 100644 (file)
@@ -46,7 +46,6 @@ static struct smsc_hw_stat smsc_hw_stats[] = {
 struct smsc_phy_priv {
        u16 intmask;
        bool energy_enable;
-       struct clk *refclk;
 };
 
 static int smsc_phy_ack_interrupt(struct phy_device *phydev)
@@ -285,20 +284,12 @@ static void smsc_get_stats(struct phy_device *phydev,
                data[i] = smsc_get_stat(phydev, i);
 }
 
-static void smsc_phy_remove(struct phy_device *phydev)
-{
-       struct smsc_phy_priv *priv = phydev->priv;
-
-       clk_disable_unprepare(priv->refclk);
-       clk_put(priv->refclk);
-}
-
 static int smsc_phy_probe(struct phy_device *phydev)
 {
        struct device *dev = &phydev->mdio.dev;
        struct device_node *of_node = dev->of_node;
        struct smsc_phy_priv *priv;
-       int ret;
+       struct clk *refclk;
 
        priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
        if (!priv)
@@ -312,22 +303,12 @@ static int smsc_phy_probe(struct phy_device *phydev)
        phydev->priv = priv;
 
        /* Make clk optional to keep DTB backward compatibility. */
-       priv->refclk = clk_get_optional(dev, NULL);
-       if (IS_ERR(priv->refclk))
-               return dev_err_probe(dev, PTR_ERR(priv->refclk),
+       refclk = devm_clk_get_optional_enabled(dev, NULL);
+       if (IS_ERR(refclk))
+               return dev_err_probe(dev, PTR_ERR(refclk),
                                     "Failed to request clock\n");
 
-       ret = clk_prepare_enable(priv->refclk);
-       if (ret)
-               return ret;
-
-       ret = clk_set_rate(priv->refclk, 50 * 1000 * 1000);
-       if (ret) {
-               clk_disable_unprepare(priv->refclk);
-               return ret;
-       }
-
-       return 0;
+       return clk_set_rate(refclk, 50 * 1000 * 1000);
 }
 
 static struct phy_driver smsc_phy_driver[] = {
@@ -429,7 +410,6 @@ static struct phy_driver smsc_phy_driver[] = {
        /* PHY_BASIC_FEATURES */
 
        .probe          = smsc_phy_probe,
-       .remove         = smsc_phy_remove,
 
        /* basic functions */
        .read_status    = lan87xx_read_status,