[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