mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
crypto: amlogic - Use devm APIs for clock management
The driver currently gets the core clock and manually enables it using clk_prepare_enable(). This requires matching calls to clk_disable_unprepare() in the error paths and remove function. Switch to devm_clk_get_enabled() instead. This lets the kernel handle enabling and disabling the clock automatically, which allow us to drop the manual cleanup code and keeps the probe function simple. Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202608310329.QgxCCMs1-lkp@intel.com/ Signed-off-by: Mohamad Raizudeen <raizudeen.kerneldev@gmail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
bbdc0b7a8e
commit
e273759a0e
|
|
@ -243,33 +243,29 @@ static int meson_crypto_probe(struct platform_device *pdev)
|
|||
if (IS_ERR(mc->base))
|
||||
return PTR_ERR(mc->base);
|
||||
|
||||
mc->busclk = devm_clk_get(&pdev->dev, "blkmv");
|
||||
mc->busclk = devm_clk_get_enabled(&pdev->dev, "blkmv");
|
||||
if (IS_ERR(mc->busclk)) {
|
||||
err = PTR_ERR(mc->busclk);
|
||||
dev_err(&pdev->dev, "Cannot get core clock err=%d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
for (i = 0; i < MAXFLOW; i++) {
|
||||
mc->irqs[i] = platform_get_irq(pdev, i);
|
||||
if (mc->irqs[i] < 0)
|
||||
return mc->irqs[i];
|
||||
|
||||
err = devm_request_irq(&pdev->dev, mc->irqs[i], meson_irq_handler, 0,
|
||||
"gxl-crypto", mc);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
err = clk_prepare_enable(mc->busclk);
|
||||
if (err != 0) {
|
||||
dev_err(&pdev->dev, "Cannot prepare_enable busclk\n");
|
||||
dev_err(&pdev->dev, "Cannot get/enable core clock err=%d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = meson_allocate_chanlist(mc);
|
||||
if (err)
|
||||
goto error_flow;
|
||||
return err;
|
||||
|
||||
for (i = 0; i < MAXFLOW; i++) {
|
||||
mc->irqs[i] = platform_get_irq(pdev, i);
|
||||
if (mc->irqs[i] < 0) {
|
||||
err = mc->irqs[i];
|
||||
goto error_chanlist;
|
||||
}
|
||||
|
||||
err = devm_request_irq(&pdev->dev, mc->irqs[i], meson_irq_handler, 0,
|
||||
"gxl-crypto", mc);
|
||||
if (err < 0)
|
||||
goto error_chanlist;
|
||||
}
|
||||
|
||||
err = meson_register_algs(mc);
|
||||
if (err)
|
||||
|
|
@ -289,9 +285,8 @@ static int meson_crypto_probe(struct platform_device *pdev)
|
|||
return 0;
|
||||
error_alg:
|
||||
meson_unregister_algs(mc);
|
||||
error_chanlist:
|
||||
meson_free_chanlist(mc, MAXFLOW - 1);
|
||||
error_flow:
|
||||
clk_disable_unprepare(mc->busclk);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
@ -306,8 +301,6 @@ static void meson_crypto_remove(struct platform_device *pdev)
|
|||
meson_unregister_algs(mc);
|
||||
|
||||
meson_free_chanlist(mc, MAXFLOW - 1);
|
||||
|
||||
clk_disable_unprepare(mc->busclk);
|
||||
}
|
||||
|
||||
static const struct of_device_id meson_crypto_of_match_table[] = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user