Skip to content

Commit 1c28c94

Browse files
tititiou36AngeloGioacchino Del Regno
authored andcommitted
soc: mediatek: pwrap: Use devm_clk_bulk_get_all_enable()
Use devm_clk_bulk_get_all_enable() to simplify the code and to make sure that clk_disable_unprepare() is called if the driver is unloaded. Fixes: 5592415 ("soc: mediatek: pwrap: add support for sys & tmr clocks") Fixes: 1f022d8 ("soc: mediatek: Add PMIC wrapper for MT8135 and MT8173 SoCs") Suggested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Link: https://lore.kernel.org/r/5b1114c538dd5230728592855f89942aec8ef83b.1720331018.git.christophe.jaillet@wanadoo.fr Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
1 parent 10c1ea1 commit 1c28c94

1 file changed

Lines changed: 12 additions & 70 deletions

File tree

drivers/soc/mediatek/mtk-pmic-wrap.c

Lines changed: 12 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1366,10 +1366,6 @@ struct pmic_wrapper {
13661366
struct regmap *regmap;
13671367
const struct pmic_wrapper_type *master;
13681368
const struct pwrap_slv_type *slave;
1369-
struct clk *clk_spi;
1370-
struct clk *clk_wrap;
1371-
struct clk *clk_sys;
1372-
struct clk *clk_tmr;
13731369
struct reset_control *rstc;
13741370

13751371
struct reset_control *rstc_bridge;
@@ -2472,6 +2468,7 @@ static int pwrap_probe(struct platform_device *pdev)
24722468
int ret, irq;
24732469
u32 mask_done;
24742470
struct pmic_wrapper *wrp;
2471+
struct clk_bulk_data *clk;
24752472
struct device_node *np = pdev->dev.of_node;
24762473
const struct of_device_id *of_slave_id = NULL;
24772474

@@ -2521,49 +2518,10 @@ static int pwrap_probe(struct platform_device *pdev)
25212518
}
25222519
}
25232520

2524-
wrp->clk_spi = devm_clk_get(wrp->dev, "spi");
2525-
if (IS_ERR(wrp->clk_spi)) {
2526-
dev_dbg(wrp->dev, "failed to get clock: %ld\n",
2527-
PTR_ERR(wrp->clk_spi));
2528-
return PTR_ERR(wrp->clk_spi);
2529-
}
2530-
2531-
wrp->clk_wrap = devm_clk_get(wrp->dev, "wrap");
2532-
if (IS_ERR(wrp->clk_wrap)) {
2533-
dev_dbg(wrp->dev, "failed to get clock: %ld\n",
2534-
PTR_ERR(wrp->clk_wrap));
2535-
return PTR_ERR(wrp->clk_wrap);
2536-
}
2537-
2538-
wrp->clk_sys = devm_clk_get_optional(wrp->dev, "sys");
2539-
if (IS_ERR(wrp->clk_sys)) {
2540-
return dev_err_probe(wrp->dev, PTR_ERR(wrp->clk_sys),
2541-
"failed to get clock: %pe\n",
2542-
wrp->clk_sys);
2543-
}
2544-
2545-
wrp->clk_tmr = devm_clk_get_optional(wrp->dev, "tmr");
2546-
if (IS_ERR(wrp->clk_tmr)) {
2547-
return dev_err_probe(wrp->dev, PTR_ERR(wrp->clk_tmr),
2548-
"failed to get clock: %pe\n",
2549-
wrp->clk_tmr);
2550-
}
2551-
2552-
ret = clk_prepare_enable(wrp->clk_spi);
2553-
if (ret)
2554-
return ret;
2555-
2556-
ret = clk_prepare_enable(wrp->clk_wrap);
2521+
ret = devm_clk_bulk_get_all_enable(wrp->dev, &clk);
25572522
if (ret)
2558-
goto err_out1;
2559-
2560-
ret = clk_prepare_enable(wrp->clk_sys);
2561-
if (ret)
2562-
goto err_out2;
2563-
2564-
ret = clk_prepare_enable(wrp->clk_tmr);
2565-
if (ret)
2566-
goto err_out3;
2523+
return dev_err_probe(wrp->dev, ret,
2524+
"failed to get clocks\n");
25672525

25682526
/* Enable internal dynamic clock */
25692527
if (HAS_CAP(wrp->master->caps, PWRAP_CAP_DCM)) {
@@ -2579,7 +2537,7 @@ static int pwrap_probe(struct platform_device *pdev)
25792537
ret = pwrap_init(wrp);
25802538
if (ret) {
25812539
dev_dbg(wrp->dev, "init failed with %d\n", ret);
2582-
goto err_out4;
2540+
return ret;
25832541
}
25842542
}
25852543

@@ -2592,8 +2550,7 @@ static int pwrap_probe(struct platform_device *pdev)
25922550

25932551
if (!(pwrap_readl(wrp, PWRAP_WACS2_RDATA) & mask_done)) {
25942552
dev_dbg(wrp->dev, "initialization isn't finished\n");
2595-
ret = -ENODEV;
2596-
goto err_out4;
2553+
return -ENODEV;
25972554
}
25982555

25992556
/* Initialize watchdog, may not be done by the bootloader */
@@ -2622,42 +2579,27 @@ static int pwrap_probe(struct platform_device *pdev)
26222579
pwrap_writel(wrp, wrp->master->int1_en_all, PWRAP_INT1_EN);
26232580

26242581
irq = platform_get_irq(pdev, 0);
2625-
if (irq < 0) {
2626-
ret = irq;
2627-
goto err_out2;
2628-
}
2582+
if (irq < 0)
2583+
return irq;
26292584

26302585
ret = devm_request_irq(wrp->dev, irq, pwrap_interrupt,
26312586
IRQF_TRIGGER_HIGH,
26322587
"mt-pmic-pwrap", wrp);
26332588
if (ret)
2634-
goto err_out4;
2589+
return ret;
26352590

26362591
wrp->regmap = devm_regmap_init(wrp->dev, NULL, wrp, wrp->slave->regops->regmap);
2637-
if (IS_ERR(wrp->regmap)) {
2638-
ret = PTR_ERR(wrp->regmap);
2639-
goto err_out2;
2640-
}
2592+
if (IS_ERR(wrp->regmap))
2593+
return PTR_ERR(wrp->regmap);
26412594

26422595
ret = of_platform_populate(np, NULL, NULL, wrp->dev);
26432596
if (ret) {
26442597
dev_dbg(wrp->dev, "failed to create child devices at %pOF\n",
26452598
np);
2646-
goto err_out4;
2599+
return ret;
26472600
}
26482601

26492602
return 0;
2650-
2651-
err_out4:
2652-
clk_disable_unprepare(wrp->clk_tmr);
2653-
err_out3:
2654-
clk_disable_unprepare(wrp->clk_sys);
2655-
err_out2:
2656-
clk_disable_unprepare(wrp->clk_wrap);
2657-
err_out1:
2658-
clk_disable_unprepare(wrp->clk_spi);
2659-
2660-
return ret;
26612603
}
26622604

26632605
static struct platform_driver pwrap_drv = {

0 commit comments

Comments
 (0)