Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

spi: spi-qpic-snand: simplify clock handling by using devm_clk_get_enabled()

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>

authored by

Gabor Juhos and committed by
Mark Brown
a24802b0 ab63e991

+3 -26
+3 -26
drivers/spi/spi-qpic-snand.c
··· 1542 1542 1543 1543 snandc->props = dev_data; 1544 1544 1545 - snandc->core_clk = devm_clk_get(dev, "core"); 1545 + snandc->core_clk = devm_clk_get_enabled(dev, "core"); 1546 1546 if (IS_ERR(snandc->core_clk)) 1547 1547 return PTR_ERR(snandc->core_clk); 1548 1548 1549 - snandc->aon_clk = devm_clk_get(dev, "aon"); 1549 + snandc->aon_clk = devm_clk_get_enabled(dev, "aon"); 1550 1550 if (IS_ERR(snandc->aon_clk)) 1551 1551 return PTR_ERR(snandc->aon_clk); 1552 1552 1553 - snandc->qspi->iomacro_clk = devm_clk_get(dev, "iom"); 1553 + snandc->qspi->iomacro_clk = devm_clk_get_enabled(dev, "iom"); 1554 1554 if (IS_ERR(snandc->qspi->iomacro_clk)) 1555 1555 return PTR_ERR(snandc->qspi->iomacro_clk); 1556 1556 ··· 1563 1563 DMA_BIDIRECTIONAL, 0); 1564 1564 if (dma_mapping_error(dev, snandc->base_dma)) 1565 1565 return -ENXIO; 1566 - 1567 - ret = clk_prepare_enable(snandc->core_clk); 1568 - if (ret) 1569 - goto err_dis_core_clk; 1570 - 1571 - ret = clk_prepare_enable(snandc->aon_clk); 1572 - if (ret) 1573 - goto err_dis_aon_clk; 1574 - 1575 - ret = clk_prepare_enable(snandc->qspi->iomacro_clk); 1576 - if (ret) 1577 - goto err_dis_iom_clk; 1578 1566 1579 1567 ret = qcom_nandc_alloc(snandc); 1580 1568 if (ret) ··· 1604 1616 err_spi_init: 1605 1617 qcom_nandc_unalloc(snandc); 1606 1618 err_snand_alloc: 1607 - clk_disable_unprepare(snandc->qspi->iomacro_clk); 1608 - err_dis_iom_clk: 1609 - clk_disable_unprepare(snandc->aon_clk); 1610 - err_dis_aon_clk: 1611 - clk_disable_unprepare(snandc->core_clk); 1612 - err_dis_core_clk: 1613 1619 dma_unmap_resource(dev, res->start, resource_size(res), 1614 1620 DMA_BIDIRECTIONAL, 0); 1615 1621 return ret; ··· 1618 1636 spi_unregister_controller(ctlr); 1619 1637 nand_ecc_unregister_on_host_hw_engine(&snandc->qspi->ecc_eng); 1620 1638 qcom_nandc_unalloc(snandc); 1621 - 1622 - clk_disable_unprepare(snandc->aon_clk); 1623 - clk_disable_unprepare(snandc->core_clk); 1624 - clk_disable_unprepare(snandc->qspi->iomacro_clk); 1625 - 1626 1639 dma_unmap_resource(&pdev->dev, snandc->base_dma, resource_size(res), 1627 1640 DMA_BIDIRECTIONAL, 0); 1628 1641 }