Skip to content

Commit 3d36dd1

Browse files
michalsimekAndi Shyti
authored andcommitted
i2c: cadence: Simplify using devm_clk_get_enabled()
Clock handling can be very simplified with using devm_clk_get_enabled() as was done by commit 8d2aaf4 ("gpio: zynq: Simplify using devm_clk_get_enabled()"). And also fix issue in connection to incorrect sequence when err_clk_dis label is called. When reset_control_deassert() fails it jumps to err_clk_dis label which disables clock and also disable pm_runtime setup but nothing has been setup at this time of failure because initialization is done below reset_control_deassert() call. Signed-off-by: Michal Simek <michal.simek@amd.com> Signed-off-by: Manikanta Guntupalli <manikanta.guntupalli@amd.com> Signed-off-by: Andi Shyti <andi.shyti@kernel.org> Link: https://lore.kernel.org/r/20250206115708.1085523-2-manikanta.guntupalli@amd.com
1 parent ff885b6 commit 3d36dd1

File tree

1 file changed

+4
-13
lines changed

1 file changed

+4
-13
lines changed

drivers/i2c/busses/i2c-cadence.c

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,7 +1541,7 @@ static int cdns_i2c_probe(struct platform_device *pdev)
15411541
snprintf(id->adap.name, sizeof(id->adap.name),
15421542
"Cadence I2C at %08lx", (unsigned long)r_mem->start);
15431543

1544-
id->clk = devm_clk_get(&pdev->dev, NULL);
1544+
id->clk = devm_clk_get_enabled(&pdev->dev, NULL);
15451545
if (IS_ERR(id->clk))
15461546
return dev_err_probe(&pdev->dev, PTR_ERR(id->clk),
15471547
"input clock not found.\n");
@@ -1551,16 +1551,10 @@ static int cdns_i2c_probe(struct platform_device *pdev)
15511551
return dev_err_probe(&pdev->dev, PTR_ERR(id->reset),
15521552
"Failed to request reset.\n");
15531553

1554-
ret = clk_prepare_enable(id->clk);
1555-
if (ret)
1556-
dev_err(&pdev->dev, "Unable to enable clock.\n");
1557-
15581554
ret = reset_control_deassert(id->reset);
1559-
if (ret) {
1560-
dev_err_probe(&pdev->dev, ret,
1561-
"Failed to de-assert reset.\n");
1562-
goto err_clk_dis;
1563-
}
1555+
if (ret)
1556+
return dev_err_probe(&pdev->dev, ret,
1557+
"Failed to de-assert reset.\n");
15641558

15651559
pm_runtime_set_autosuspend_delay(id->dev, CNDS_I2C_PM_TIMEOUT);
15661560
pm_runtime_use_autosuspend(id->dev);
@@ -1616,8 +1610,6 @@ static int cdns_i2c_probe(struct platform_device *pdev)
16161610
err_clk_notifier_unregister:
16171611
clk_notifier_unregister(id->clk, &id->clk_rate_change_nb);
16181612
reset_control_assert(id->reset);
1619-
err_clk_dis:
1620-
clk_disable_unprepare(id->clk);
16211613
pm_runtime_disable(&pdev->dev);
16221614
pm_runtime_set_suspended(&pdev->dev);
16231615
return ret;
@@ -1642,7 +1634,6 @@ static void cdns_i2c_remove(struct platform_device *pdev)
16421634
i2c_del_adapter(&id->adap);
16431635
clk_notifier_unregister(id->clk, &id->clk_rate_change_nb);
16441636
reset_control_assert(id->reset);
1645-
clk_disable_unprepare(id->clk);
16461637
}
16471638

16481639
static struct platform_driver cdns_i2c_drv = {

0 commit comments

Comments
 (0)