1

i2c: emev2: Use devm_clk_get_enabled() helpers

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>
This commit is contained in:
Rong Qianfeng 2024-08-27 11:48:39 +08:00 committed by Andi Shyti
parent d0f8e97866
commit f1f3dd1a0a

View File

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