[PATCH 2/4] spi: uniphier: Simplify clock handling with devm_clk_get_enabled()
Pei Xiao
xiaopei01 at kylinos.cn
Mon Apr 6 17:56:31 PDT 2026
在 2026/4/6 20:56, Mark Brown 写道:
> On Sat, Apr 04, 2026 at 11:44:59AM +0800, Pei Xiao wrote:
>> Replace devm_clk_get() followed by clk_prepare_enable() with
>> devm_clk_get_enabled() for the clock. This removes the need for
>> explicit clock enable and disable calls, as the managed API automatically
>> handles clock disabling on device removal or probe failure.
>
> Copying in the maintainers for the driver, you should generally copy
> maintainers when posting patches (and to avoid large CC lists it's often
> better to send patches per driver unless the series is actually related,
> this one isn't).
>
Yes, I only sent it to you to avoid CC'ing too many people.
I will send these patches separately to the corresponding maintainers.
Thank you!
Pei.
>> Remove the now-unnecessary clk_disable_unprepare() calls from the probe
>> error path and the remove callback. Adjust error labels accordingly.
>>
>> Signed-off-by: Pei Xiao <xiaopei01 at kylinos.cn>
>> ---
>> drivers/spi/spi-uniphier.c | 18 ++++--------------
>> 1 file changed, 4 insertions(+), 14 deletions(-)
>>
>> diff --git a/drivers/spi/spi-uniphier.c b/drivers/spi/spi-uniphier.c
>> index 9e1d364a6198..1b815ee2ed1b 100644
>> --- a/drivers/spi/spi-uniphier.c
>> +++ b/drivers/spi/spi-uniphier.c
>> @@ -666,28 +666,24 @@ static int uniphier_spi_probe(struct platform_device *pdev)
>> }
>> priv->base_dma_addr = res->start;
>>
>> - priv->clk = devm_clk_get(&pdev->dev, NULL);
>> + priv->clk = devm_clk_get_enabled(&pdev->dev, NULL);
>> if (IS_ERR(priv->clk)) {
>> dev_err(&pdev->dev, "failed to get clock\n");
>> ret = PTR_ERR(priv->clk);
>> goto out_host_put;
>> }
>>
>> - ret = clk_prepare_enable(priv->clk);
>> - if (ret)
>> - goto out_host_put;
>> -
>> irq = platform_get_irq(pdev, 0);
>> if (irq < 0) {
>> ret = irq;
>> - goto out_disable_clk;
>> + goto out_host_put;
>> }
>>
>> ret = devm_request_irq(&pdev->dev, irq, uniphier_spi_handler,
>> 0, "uniphier-spi", priv);
>> if (ret) {
>> dev_err(&pdev->dev, "failed to request IRQ\n");
>> - goto out_disable_clk;
>> + goto out_host_put;
>> }
>>
>> init_completion(&priv->xfer_done);
>> @@ -716,7 +712,7 @@ static int uniphier_spi_probe(struct platform_device *pdev)
>> if (IS_ERR_OR_NULL(host->dma_tx)) {
>> if (PTR_ERR(host->dma_tx) == -EPROBE_DEFER) {
>> ret = -EPROBE_DEFER;
>> - goto out_disable_clk;
>> + goto out_host_put;
>> }
>> host->dma_tx = NULL;
>> dma_tx_burst = INT_MAX;
>> @@ -766,9 +762,6 @@ static int uniphier_spi_probe(struct platform_device *pdev)
>> host->dma_tx = NULL;
>> }
>>
>> -out_disable_clk:
>> - clk_disable_unprepare(priv->clk);
>> -
>> out_host_put:
>> spi_controller_put(host);
>> return ret;
>> @@ -777,14 +770,11 @@ static int uniphier_spi_probe(struct platform_device *pdev)
>> static void uniphier_spi_remove(struct platform_device *pdev)
>> {
>> struct spi_controller *host = platform_get_drvdata(pdev);
>> - struct uniphier_spi_priv *priv = spi_controller_get_devdata(host);
>>
>> if (host->dma_tx)
>> dma_release_channel(host->dma_tx);
>> if (host->dma_rx)
>> dma_release_channel(host->dma_rx);
>> -
>> - clk_disable_unprepare(priv->clk);
>> }
>>
>> static const struct of_device_id uniphier_spi_match[] = {
>> --
>> 2.25.1
>>
More information about the Linux-mediatek
mailing list