spi: spi-qpic-snand: simplify clock handling by using devm_clk_get_enabled()
authorGabor Juhos <j4g8y7@gmail.com>
Tue, 16 Sep 2025 17:43:46 +0000 (19:43 +0200)
committerMark Brown <broonie@kernel.org>
Thu, 18 Sep 2025 21:26:57 +0000 (22:26 +0100)
The devm_clk_get_enabled() function prepares and enables the
particular clock, which then automatically gets disabled and
unprepared on probe failure and on device removal.

Use that function instead of devm_clk_get() and remove the
clk_prepare_enable()/clk_disable_unprepare() calls in order
to simplify the code.

This also ensures that the clocks are handled in the correct
order during device removal.

Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
Link: https://patch.msgid.link/20250916-qpic-snand-devm_clk_get_enabled-v1-1-09953493b7f1@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-qpic-snand.c

index 28755db..58ceea1 100644 (file)
@@ -1542,15 +1542,15 @@ static int qcom_spi_probe(struct platform_device *pdev)
 
        snandc->props = dev_data;
 
-       snandc->core_clk = devm_clk_get(dev, "core");
+       snandc->core_clk = devm_clk_get_enabled(dev, "core");
        if (IS_ERR(snandc->core_clk))
                return PTR_ERR(snandc->core_clk);
 
-       snandc->aon_clk = devm_clk_get(dev, "aon");
+       snandc->aon_clk = devm_clk_get_enabled(dev, "aon");
        if (IS_ERR(snandc->aon_clk))
                return PTR_ERR(snandc->aon_clk);
 
-       snandc->qspi->iomacro_clk = devm_clk_get(dev, "iom");
+       snandc->qspi->iomacro_clk = devm_clk_get_enabled(dev, "iom");
        if (IS_ERR(snandc->qspi->iomacro_clk))
                return PTR_ERR(snandc->qspi->iomacro_clk);
 
@@ -1564,18 +1564,6 @@ static int qcom_spi_probe(struct platform_device *pdev)
        if (dma_mapping_error(dev, snandc->base_dma))
                return -ENXIO;
 
-       ret = clk_prepare_enable(snandc->core_clk);
-       if (ret)
-               goto err_dis_core_clk;
-
-       ret = clk_prepare_enable(snandc->aon_clk);
-       if (ret)
-               goto err_dis_aon_clk;
-
-       ret = clk_prepare_enable(snandc->qspi->iomacro_clk);
-       if (ret)
-               goto err_dis_iom_clk;
-
        ret = qcom_nandc_alloc(snandc);
        if (ret)
                goto err_snand_alloc;
@@ -1616,12 +1604,6 @@ err_register_controller:
 err_spi_init:
        qcom_nandc_unalloc(snandc);
 err_snand_alloc:
-       clk_disable_unprepare(snandc->qspi->iomacro_clk);
-err_dis_iom_clk:
-       clk_disable_unprepare(snandc->aon_clk);
-err_dis_aon_clk:
-       clk_disable_unprepare(snandc->core_clk);
-err_dis_core_clk:
        dma_unmap_resource(dev, res->start, resource_size(res),
                           DMA_BIDIRECTIONAL, 0);
        return ret;
@@ -1636,11 +1618,6 @@ static void qcom_spi_remove(struct platform_device *pdev)
        spi_unregister_controller(ctlr);
        nand_ecc_unregister_on_host_hw_engine(&snandc->qspi->ecc_eng);
        qcom_nandc_unalloc(snandc);
-
-       clk_disable_unprepare(snandc->aon_clk);
-       clk_disable_unprepare(snandc->core_clk);
-       clk_disable_unprepare(snandc->qspi->iomacro_clk);
-
        dma_unmap_resource(&pdev->dev, snandc->base_dma, resource_size(res),
                           DMA_BIDIRECTIONAL, 0);
 }