i2c: emev2: Use devm_clk_get_enabled() helpers
authorRong Qianfeng <rongqianfeng@vivo.com>
Tue, 27 Aug 2024 03:48:39 +0000 (11:48 +0800)
committerAndi Shyti <andi.shyti@kernel.org>
Mon, 9 Sep 2024 22:36:48 +0000 (00:36 +0200)
The devm_clk_get_enabled() helpers:
    - call devm_clk_get()
    - call clk_prepare_enable() and register what is needed in order to
     call clk_disable_unprepare() when needed, as a managed resource.

This simplifies the code and avoids the calls to clk_disable_unprepare().

While at it, no need to save clk pointer, drop sclk from struct
em_i2c_device.

Signed-off-by: Rong Qianfeng <rongqianfeng@vivo.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
drivers/i2c/busses/i2c-emev2.c

index 5574094104457ad2a8e1faa730653056326b459b..d08be3f3cede3d44b3a96488afc9e298b465a7b0 100644 (file)
@@ -67,7 +67,6 @@ struct em_i2c_device {
        void __iomem *base;
        struct i2c_adapter adap;
        struct completion msg_done;
-       struct clk *sclk;
        struct i2c_client *slave;
        int irq;
 };
@@ -361,6 +360,7 @@ static const struct i2c_algorithm em_i2c_algo = {
 static int em_i2c_probe(struct platform_device *pdev)
 {
        struct em_i2c_device *priv;
+       struct clk *sclk;
        int ret;
 
        priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
@@ -373,13 +373,9 @@ static int em_i2c_probe(struct platform_device *pdev)
 
        strscpy(priv->adap.name, "EMEV2 I2C", sizeof(priv->adap.name));
 
-       priv->sclk = devm_clk_get(&pdev->dev, "sclk");
-       if (IS_ERR(priv->sclk))
-               return PTR_ERR(priv->sclk);
-
-       ret = clk_prepare_enable(priv->sclk);
-       if (ret)
-               return ret;
+       sclk = devm_clk_get_enabled(&pdev->dev, "sclk");
+       if (IS_ERR(sclk))
+               return PTR_ERR(sclk);
 
        priv->adap.timeout = msecs_to_jiffies(100);
        priv->adap.retries = 5;
@@ -397,26 +393,22 @@ static int em_i2c_probe(struct platform_device *pdev)
 
        ret = platform_get_irq(pdev, 0);
        if (ret < 0)
-               goto err_clk;
+               return ret;
        priv->irq = ret;
+
        ret = devm_request_irq(&pdev->dev, priv->irq, em_i2c_irq_handler, 0,
                                "em_i2c", priv);
        if (ret)
-               goto err_clk;
+               return ret;
 
        ret = i2c_add_adapter(&priv->adap);
-
        if (ret)
-               goto err_clk;
+               return ret;
 
        dev_info(&pdev->dev, "Added i2c controller %d, irq %d\n", priv->adap.nr,
                 priv->irq);
 
        return 0;
-
-err_clk:
-       clk_disable_unprepare(priv->sclk);
-       return ret;
 }
 
 static void em_i2c_remove(struct platform_device *dev)
@@ -424,7 +416,6 @@ static void em_i2c_remove(struct platform_device *dev)
        struct em_i2c_device *priv = platform_get_drvdata(dev);
 
        i2c_del_adapter(&priv->adap);
-       clk_disable_unprepare(priv->sclk);
 }
 
 static const struct of_device_id em_i2c_ids[] = {