* [PATCH 01/17] spi: axiado: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
@ 2026-03-12 9:28 ` Pei Xiao
2026-03-12 9:28 ` [PATCH 02/17] spi: bcm63xx-hsspi: " Pei Xiao
` (15 subsequent siblings)
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:28 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-axiado.c | 23 ++++-------------------
1 file changed, 4 insertions(+), 19 deletions(-)
diff --git a/drivers/spi/spi-axiado.c b/drivers/spi/spi-axiado.c
index 8cea81432c5b..4ba8f0e6909f 100644
--- a/drivers/spi/spi-axiado.c
+++ b/drivers/spi/spi-axiado.c
@@ -770,32 +770,20 @@ static int ax_spi_probe(struct platform_device *pdev)
goto remove_ctlr;
}
- xspi->pclk = devm_clk_get(&pdev->dev, "pclk");
+ xspi->pclk = devm_clk_get_enabled(&pdev->dev, "pclk");
if (IS_ERR(xspi->pclk)) {
- dev_err(&pdev->dev, "pclk clock not found.\n");
+ dev_err(&pdev->dev, "Unable to enable APB clock.\n");
ret = PTR_ERR(xspi->pclk);
goto remove_ctlr;
}
- xspi->ref_clk = devm_clk_get(&pdev->dev, "ref");
+ xspi->ref_clk = devm_clk_get_enabled(&pdev->dev, "ref");
if (IS_ERR(xspi->ref_clk)) {
- dev_err(&pdev->dev, "ref clock not found.\n");
+ dev_err(&pdev->dev, "Unable to enable device clock.\n");
ret = PTR_ERR(xspi->ref_clk);
goto remove_ctlr;
}
- ret = clk_prepare_enable(xspi->pclk);
- if (ret) {
- dev_err(&pdev->dev, "Unable to enable APB clock.\n");
- goto remove_ctlr;
- }
-
- ret = clk_prepare_enable(xspi->ref_clk);
- if (ret) {
- dev_err(&pdev->dev, "Unable to enable device clock.\n");
- goto clk_dis_apb;
- }
-
pm_runtime_use_autosuspend(&pdev->dev);
pm_runtime_set_autosuspend_delay(&pdev->dev, SPI_AUTOSUSPEND_TIMEOUT);
pm_runtime_get_noresume(&pdev->dev);
@@ -866,9 +854,6 @@ static int ax_spi_probe(struct platform_device *pdev)
clk_dis_all:
pm_runtime_set_suspended(&pdev->dev);
pm_runtime_disable(&pdev->dev);
- clk_disable_unprepare(xspi->ref_clk);
-clk_dis_apb:
- clk_disable_unprepare(xspi->pclk);
remove_ctlr:
spi_controller_put(ctlr);
return ret;
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 02/17] spi: bcm63xx-hsspi: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
2026-03-12 9:28 ` [PATCH 01/17] spi: axiado: Use helper function devm_clk_get_enabled() Pei Xiao
@ 2026-03-12 9:28 ` Pei Xiao
2026-03-12 12:56 ` Mark Brown
2026-03-12 9:28 ` [PATCH 03/17] spi: bcmbca-hsspi: " Pei Xiao
` (14 subsequent siblings)
16 siblings, 1 reply; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:28 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-bcm63xx-hsspi.c | 44 +++++++++------------------------
1 file changed, 12 insertions(+), 32 deletions(-)
diff --git a/drivers/spi/spi-bcm63xx-hsspi.c b/drivers/spi/spi-bcm63xx-hsspi.c
index 612f8802e690..7449e582e8c8 100644
--- a/drivers/spi/spi-bcm63xx-hsspi.c
+++ b/drivers/spi/spi-bcm63xx-hsspi.c
@@ -758,8 +758,7 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)
if (IS_ERR(regs))
return PTR_ERR(regs);
- clk = devm_clk_get(dev, "hsspi");
-
+ clk = devm_clk_get_enabled(dev, "hsspi");
if (IS_ERR(clk))
return PTR_ERR(clk);
@@ -767,41 +766,26 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)
if (IS_ERR(reset))
return PTR_ERR(reset);
- ret = clk_prepare_enable(clk);
- if (ret)
- return ret;
-
ret = reset_control_reset(reset);
- if (ret) {
- dev_err(dev, "unable to reset device: %d\n", ret);
- goto out_disable_clk;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "unable to reset device: %d\n", ret);
rate = clk_get_rate(clk);
if (!rate) {
- pll_clk = devm_clk_get(dev, "pll");
-
- if (IS_ERR(pll_clk)) {
- ret = PTR_ERR(pll_clk);
- goto out_disable_clk;
- }
-
- ret = clk_prepare_enable(pll_clk);
- if (ret)
- goto out_disable_clk;
+ pll_clk = devm_clk_get_enabled(dev, "pll");
+ if (IS_ERR(pll_clk))
+ return dev_err_probe(dev, PTR_ERR(pll_clk), "failed
+ enable pll clk\n");
rate = clk_get_rate(pll_clk);
- if (!rate) {
- ret = -EINVAL;
- goto out_disable_pll_clk;
- }
+ if (!rate)
+ return dev_err_probe(dev, -EINVAL, "failed get pll
+ clk rate\n");
}
host = spi_alloc_host(&pdev->dev, sizeof(*bs));
- if (!host) {
- ret = -ENOMEM;
- goto out_disable_pll_clk;
- }
+ if (!host)
+ return dev_err_probe(dev, -ENOMEM, "no mem\n");
bs = spi_controller_get_devdata(host);
bs->pdev = pdev;
@@ -887,10 +871,6 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)
pm_runtime_disable(&pdev->dev);
out_put_host:
spi_controller_put(host);
-out_disable_pll_clk:
- clk_disable_unprepare(pll_clk);
-out_disable_clk:
- clk_disable_unprepare(clk);
return ret;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* Re: [PATCH 02/17] spi: bcm63xx-hsspi: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 ` [PATCH 02/17] spi: bcm63xx-hsspi: " Pei Xiao
@ 2026-03-12 12:56 ` Mark Brown
0 siblings, 0 replies; 21+ messages in thread
From: Mark Brown @ 2026-03-12 12:56 UTC (permalink / raw)
To: Pei Xiao
Cc: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32
[-- Attachment #1: Type: text/plain, Size: 470 bytes --]
On Thu, Mar 12, 2026 at 05:28:54PM +0800, Pei Xiao wrote:
> - ret = clk_prepare_enable(pll_clk);
> - if (ret)
> - goto out_disable_clk;
> + pll_clk = devm_clk_get_enabled(dev, "pll");
> + if (IS_ERR(pll_clk))
> + return dev_err_probe(dev, PTR_ERR(pll_clk), "failed
> + enable pll clk\n");
It's nice to print an error message but having a line break in the
middle of a string not so much, put the "failed bit on the same line as
the rest of the error.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 03/17] spi: bcmbca-hsspi: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
2026-03-12 9:28 ` [PATCH 01/17] spi: axiado: Use helper function devm_clk_get_enabled() Pei Xiao
2026-03-12 9:28 ` [PATCH 02/17] spi: bcm63xx-hsspi: " Pei Xiao
@ 2026-03-12 9:28 ` Pei Xiao
2026-03-12 9:28 ` [PATCH 04/17] spi: img-spfi: " Pei Xiao
` (13 subsequent siblings)
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:28 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-bcmbca-hsspi.c | 47 ++++++++++++----------------------
1 file changed, 16 insertions(+), 31 deletions(-)
diff --git a/drivers/spi/spi-bcmbca-hsspi.c b/drivers/spi/spi-bcmbca-hsspi.c
index ece22260f570..08d12606e91d 100644
--- a/drivers/spi/spi-bcmbca-hsspi.c
+++ b/drivers/spi/spi-bcmbca-hsspi.c
@@ -452,39 +452,30 @@ static int bcmbca_hsspi_probe(struct platform_device *pdev)
if (IS_ERR(spim_ctrl))
return PTR_ERR(spim_ctrl);
- clk = devm_clk_get(dev, "hsspi");
+ clk = devm_clk_get_enabled(dev, "hsspi");
if (IS_ERR(clk))
- return PTR_ERR(clk);
-
- ret = clk_prepare_enable(clk);
- if (ret)
- return ret;
+ return dev_err_probe(dev, PTR_ERR(clk),
+ "Failed to get hsspi clock\n");
rate = clk_get_rate(clk);
if (!rate) {
- pll_clk = devm_clk_get(dev, "pll");
+ pll_clk = devm_clk_get_enabled(dev, "pll");
if (IS_ERR(pll_clk)) {
- ret = PTR_ERR(pll_clk);
- goto out_disable_clk;
+ return dev_err_probe(dev, PTR_ERR(pll_clk),
+ "Failed to get pll clock\n");
}
- ret = clk_prepare_enable(pll_clk);
- if (ret)
- goto out_disable_clk;
-
rate = clk_get_rate(pll_clk);
- if (!rate) {
- ret = -EINVAL;
- goto out_disable_pll_clk;
- }
+ if (!rate)
+ return dev_err_probe(dev, -EINVAL,
+ "Failed to get pll clock rate\n");
}
host = devm_spi_alloc_host(&pdev->dev, sizeof(*bs));
- if (!host) {
- ret = -ENOMEM;
- goto out_disable_pll_clk;
- }
+ if (!host)
+ return dev_err_probe(dev, -ENOMEM,
+ "Failed alloc spi host\n");
bs = spi_controller_get_devdata(host);
bs->pdev = pdev;
@@ -535,18 +526,16 @@ static int bcmbca_hsspi_probe(struct platform_device *pdev)
ret = devm_request_irq(dev, irq, bcmbca_hsspi_interrupt, IRQF_SHARED,
pdev->name, bs);
if (ret)
- goto out_disable_pll_clk;
+ return dev_err_probe(dev, ret, "Failed request irq\n");
}
ret = devm_pm_runtime_enable(&pdev->dev);
if (ret)
- goto out_disable_pll_clk;
+ return dev_err_probe(dev, ret, "Failed pm runtime enable\n");
ret = sysfs_create_group(&pdev->dev.kobj, &bcmbca_hsspi_group);
- if (ret) {
- dev_err(&pdev->dev, "couldn't register sysfs group\n");
- goto out_disable_pll_clk;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "couldn't register sysfs group\n");
/* register and we are done */
ret = devm_spi_register_controller(dev, host);
@@ -559,10 +548,6 @@ static int bcmbca_hsspi_probe(struct platform_device *pdev)
out_sysgroup_disable:
sysfs_remove_group(&pdev->dev.kobj, &bcmbca_hsspi_group);
-out_disable_pll_clk:
- clk_disable_unprepare(pll_clk);
-out_disable_clk:
- clk_disable_unprepare(clk);
return ret;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 04/17] spi: img-spfi: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (2 preceding siblings ...)
2026-03-12 9:28 ` [PATCH 03/17] spi: bcmbca-hsspi: " Pei Xiao
@ 2026-03-12 9:28 ` Pei Xiao
2026-03-12 9:28 ` [PATCH 05/17] spi: imx: " Pei Xiao
` (12 subsequent siblings)
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:28 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-img-spfi.c | 14 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)
diff --git a/drivers/spi/spi-img-spfi.c b/drivers/spi/spi-img-spfi.c
index 902fb64815c9..a227cff5da70 100644
--- a/drivers/spi/spi-img-spfi.c
+++ b/drivers/spi/spi-img-spfi.c
@@ -557,24 +557,17 @@ static int img_spfi_probe(struct platform_device *pdev)
if (ret)
goto put_spi;
- spfi->sys_clk = devm_clk_get(spfi->dev, "sys");
+ spfi->sys_clk = devm_clk_get_enabled(spfi->dev, "sys");
if (IS_ERR(spfi->sys_clk)) {
ret = PTR_ERR(spfi->sys_clk);
goto put_spi;
}
- spfi->spfi_clk = devm_clk_get(spfi->dev, "spfi");
+ spfi->spfi_clk = devm_clk_get_enabled(spfi->dev, "spfi");
if (IS_ERR(spfi->spfi_clk)) {
ret = PTR_ERR(spfi->spfi_clk);
goto put_spi;
}
- ret = clk_prepare_enable(spfi->sys_clk);
- if (ret)
- goto put_spi;
- ret = clk_prepare_enable(spfi->spfi_clk);
- if (ret)
- goto disable_pclk;
-
spfi_reset(spfi);
/*
* Only enable the error (IACCESS) interrupt. In PIO mode we'll
@@ -655,9 +648,6 @@ static int img_spfi_probe(struct platform_device *pdev)
dma_release_channel(spfi->rx_ch);
if (spfi->tx_ch)
dma_release_channel(spfi->tx_ch);
- clk_disable_unprepare(spfi->spfi_clk);
-disable_pclk:
- clk_disable_unprepare(spfi->sys_clk);
put_spi:
spi_controller_put(host);
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 05/17] spi: imx: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (3 preceding siblings ...)
2026-03-12 9:28 ` [PATCH 04/17] spi: img-spfi: " Pei Xiao
@ 2026-03-12 9:28 ` Pei Xiao
2026-03-12 9:28 ` [PATCH 06/17] spi: npcm-pspi: " Pei Xiao
` (11 subsequent siblings)
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:28 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-imx.c | 15 ++-------------
1 file changed, 2 insertions(+), 13 deletions(-)
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
index 64c6c09e1e7b..a01c466818de 100644
--- a/drivers/spi/spi-imx.c
+++ b/drivers/spi/spi-imx.c
@@ -2323,26 +2323,18 @@ static int spi_imx_probe(struct platform_device *pdev)
goto out_controller_put;
}
- spi_imx->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
+ spi_imx->clk_ipg = devm_clk_get_enabled(&pdev->dev, "ipg");
if (IS_ERR(spi_imx->clk_ipg)) {
ret = PTR_ERR(spi_imx->clk_ipg);
goto out_controller_put;
}
- spi_imx->clk_per = devm_clk_get(&pdev->dev, "per");
+ spi_imx->clk_per = devm_clk_get_enabled(&pdev->dev, "per");
if (IS_ERR(spi_imx->clk_per)) {
ret = PTR_ERR(spi_imx->clk_per);
goto out_controller_put;
}
- ret = clk_prepare_enable(spi_imx->clk_per);
- if (ret)
- goto out_controller_put;
-
- ret = clk_prepare_enable(spi_imx->clk_ipg);
- if (ret)
- goto out_put_per;
-
pm_runtime_set_autosuspend_delay(spi_imx->dev, MXC_RPM_TIMEOUT);
pm_runtime_use_autosuspend(spi_imx->dev);
pm_runtime_get_noresume(spi_imx->dev);
@@ -2386,9 +2378,6 @@ static int spi_imx_probe(struct platform_device *pdev)
pm_runtime_disable(spi_imx->dev);
pm_runtime_set_suspended(&pdev->dev);
- clk_disable_unprepare(spi_imx->clk_ipg);
-out_put_per:
- clk_disable_unprepare(spi_imx->clk_per);
out_controller_put:
spi_controller_put(controller);
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 06/17] spi: npcm-pspi: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (4 preceding siblings ...)
2026-03-12 9:28 ` [PATCH 05/17] spi: imx: " Pei Xiao
@ 2026-03-12 9:28 ` Pei Xiao
2026-03-12 9:28 ` [PATCH 07/17] spi: orion: " Pei Xiao
` (10 subsequent siblings)
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:28 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-npcm-pspi.c | 19 ++++++-------------
1 file changed, 6 insertions(+), 13 deletions(-)
diff --git a/drivers/spi/spi-npcm-pspi.c b/drivers/spi/spi-npcm-pspi.c
index e60b3cc398ec..99fa866f4efc 100644
--- a/drivers/spi/spi-npcm-pspi.c
+++ b/drivers/spi/spi-npcm-pspi.c
@@ -361,27 +361,23 @@ static int npcm_pspi_probe(struct platform_device *pdev)
goto out_host_put;
}
- 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");
+ dev_err(&pdev->dev, "failed to enable 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;
}
priv->reset = devm_reset_control_get(&pdev->dev, NULL);
if (IS_ERR(priv->reset)) {
ret = PTR_ERR(priv->reset);
- goto out_disable_clk;
+ goto out_host_put;
}
/* reset SPI-HW block */
@@ -391,7 +387,7 @@ static int npcm_pspi_probe(struct platform_device *pdev)
"npcm-pspi", 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);
@@ -415,15 +411,12 @@ static int npcm_pspi_probe(struct platform_device *pdev)
ret = devm_spi_register_controller(&pdev->dev, host);
if (ret)
- goto out_disable_clk;
+ goto out_host_put;
pr_info("NPCM Peripheral SPI %d probed\n", host->bus_num);
return 0;
-out_disable_clk:
- clk_disable_unprepare(priv->clk);
-
out_host_put:
spi_controller_put(host);
return ret;
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 07/17] spi: orion: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (5 preceding siblings ...)
2026-03-12 9:28 ` [PATCH 06/17] spi: npcm-pspi: " Pei Xiao
@ 2026-03-12 9:28 ` Pei Xiao
2026-03-12 9:29 ` [PATCH 08/17] spi: rockchip-sfc: " Pei Xiao
` (9 subsequent siblings)
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:28 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-orion.c | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/spi/spi-orion.c b/drivers/spi/spi-orion.c
index 7a2186b51b4c..69e41421dc88 100644
--- a/drivers/spi/spi-orion.c
+++ b/drivers/spi/spi-orion.c
@@ -695,13 +695,11 @@ static int orion_spi_probe(struct platform_device *pdev)
}
/* The following clock is only used by some SoCs */
- spi->axi_clk = devm_clk_get(&pdev->dev, "axi");
+ spi->axi_clk = devm_clk_get_enabled(&pdev->dev, "axi");
if (PTR_ERR(spi->axi_clk) == -EPROBE_DEFER) {
status = -EPROBE_DEFER;
goto out;
}
- if (!IS_ERR(spi->axi_clk))
- clk_prepare_enable(spi->axi_clk);
tclk_hz = clk_get_rate(spi->clk);
@@ -726,7 +724,7 @@ static int orion_spi_probe(struct platform_device *pdev)
spi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &r);
if (IS_ERR(spi->base)) {
status = PTR_ERR(spi->base);
- goto out_rel_axi_clk;
+ goto out;
}
for_each_available_child_of_node(pdev->dev.of_node, np) {
@@ -764,7 +762,7 @@ static int orion_spi_probe(struct platform_device *pdev)
if (!dir_acc->vaddr) {
status = -ENOMEM;
of_node_put(np);
- goto out_rel_axi_clk;
+ goto out;
}
dir_acc->size = PAGE_SIZE;
@@ -788,8 +786,6 @@ static int orion_spi_probe(struct platform_device *pdev)
out_rel_pm:
pm_runtime_disable(&pdev->dev);
-out_rel_axi_clk:
- clk_disable_unprepare(spi->axi_clk);
out:
spi_controller_put(host);
return status;
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 08/17] spi: rockchip-sfc: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (6 preceding siblings ...)
2026-03-12 9:28 ` [PATCH 07/17] spi: orion: " Pei Xiao
@ 2026-03-12 9:29 ` Pei Xiao
2026-03-12 9:29 ` [PATCH 09/17] spi: sifive: " Pei Xiao
` (8 subsequent siblings)
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:29 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-rockchip-sfc.c | 20 ++------------------
1 file changed, 2 insertions(+), 18 deletions(-)
diff --git a/drivers/spi/spi-rockchip-sfc.c b/drivers/spi/spi-rockchip-sfc.c
index 174995042f53..ef6956f2c918 100644
--- a/drivers/spi/spi-rockchip-sfc.c
+++ b/drivers/spi/spi-rockchip-sfc.c
@@ -635,13 +635,13 @@ static int rockchip_sfc_probe(struct platform_device *pdev)
return PTR_ERR(sfc->regbase);
if (!has_acpi_companion(&pdev->dev))
- sfc->clk = devm_clk_get(&pdev->dev, "clk_sfc");
+ sfc->clk = devm_clk_get_enabled(&pdev->dev, "clk_sfc");
if (IS_ERR(sfc->clk))
return dev_err_probe(&pdev->dev, PTR_ERR(sfc->clk),
"Failed to get sfc interface clk\n");
if (!has_acpi_companion(&pdev->dev))
- sfc->hclk = devm_clk_get(&pdev->dev, "hclk_sfc");
+ sfc->hclk = devm_clk_get_enabled(&pdev->dev, "hclk_sfc");
if (IS_ERR(sfc->hclk))
return dev_err_probe(&pdev->dev, PTR_ERR(sfc->hclk),
"Failed to get sfc ahb clk\n");
@@ -657,18 +657,6 @@ static int rockchip_sfc_probe(struct platform_device *pdev)
sfc->use_dma = !of_property_read_bool(sfc->dev->of_node, "rockchip,sfc-no-dma");
- ret = clk_prepare_enable(sfc->hclk);
- if (ret) {
- dev_err(&pdev->dev, "Failed to enable ahb clk\n");
- goto err_hclk;
- }
-
- ret = clk_prepare_enable(sfc->clk);
- if (ret) {
- dev_err(&pdev->dev, "Failed to enable interface clk\n");
- goto err_clk;
- }
-
/* Find the irq */
ret = platform_get_irq(pdev, 0);
if (ret < 0)
@@ -730,10 +718,6 @@ static int rockchip_sfc_probe(struct platform_device *pdev)
pm_runtime_set_suspended(dev);
pm_runtime_dont_use_autosuspend(dev);
err_irq:
- clk_disable_unprepare(sfc->clk);
-err_clk:
- clk_disable_unprepare(sfc->hclk);
-err_hclk:
return ret;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 09/17] spi: sifive: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (7 preceding siblings ...)
2026-03-12 9:29 ` [PATCH 08/17] spi: rockchip-sfc: " Pei Xiao
@ 2026-03-12 9:29 ` Pei Xiao
2026-03-12 9:29 ` [PATCH 10/17] spi: slave-mt27xx: " Pei Xiao
` (7 subsequent siblings)
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:29 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-sifive.c | 20 ++++++--------------
1 file changed, 6 insertions(+), 14 deletions(-)
diff --git a/drivers/spi/spi-sifive.c b/drivers/spi/spi-sifive.c
index 6c7aba8befa0..3d45105f2e41 100644
--- a/drivers/spi/spi-sifive.c
+++ b/drivers/spi/spi-sifive.c
@@ -312,7 +312,8 @@ static int sifive_spi_probe(struct platform_device *pdev)
goto put_host;
}
- spi->clk = devm_clk_get(&pdev->dev, NULL);
+ /* Spin up the bus clock before hitting registers */
+ spi->clk = devm_clk_get_enabled(&pdev->dev, NULL);
if (IS_ERR(spi->clk)) {
dev_err(&pdev->dev, "Unable to find bus clock\n");
ret = PTR_ERR(spi->clk);
@@ -342,13 +343,6 @@ static int sifive_spi_probe(struct platform_device *pdev)
goto put_host;
}
- /* Spin up the bus clock before hitting registers */
- ret = clk_prepare_enable(spi->clk);
- if (ret) {
- dev_err(&pdev->dev, "Unable to enable bus clock\n");
- goto put_host;
- }
-
/* probe the number of CS lines */
spi->cs_inactive = sifive_spi_read(spi, SIFIVE_SPI_REG_CSDEF);
sifive_spi_write(spi, SIFIVE_SPI_REG_CSDEF, 0xffffffffU);
@@ -357,14 +351,14 @@ static int sifive_spi_probe(struct platform_device *pdev)
if (!cs_bits) {
dev_err(&pdev->dev, "Could not auto probe CS lines\n");
ret = -EINVAL;
- goto disable_clk;
+ goto put_host;
}
num_cs = ilog2(cs_bits) + 1;
if (num_cs > SIFIVE_SPI_MAX_CS) {
dev_err(&pdev->dev, "Invalid number of spi targets\n");
ret = -EINVAL;
- goto disable_clk;
+ goto put_host;
}
/* Define our host */
@@ -392,7 +386,7 @@ static int sifive_spi_probe(struct platform_device *pdev)
dev_name(&pdev->dev), spi);
if (ret) {
dev_err(&pdev->dev, "Unable to bind to interrupt\n");
- goto disable_clk;
+ goto put_host;
}
dev_info(&pdev->dev, "mapped; irq=%d, cs=%d\n",
@@ -401,13 +395,11 @@ static int sifive_spi_probe(struct platform_device *pdev)
ret = devm_spi_register_controller(&pdev->dev, host);
if (ret < 0) {
dev_err(&pdev->dev, "spi_register_host failed\n");
- goto disable_clk;
+ goto put_host;
}
return 0;
-disable_clk:
- clk_disable_unprepare(spi->clk);
put_host:
spi_controller_put(host);
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 10/17] spi: slave-mt27xx: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (8 preceding siblings ...)
2026-03-12 9:29 ` [PATCH 09/17] spi: sifive: " Pei Xiao
@ 2026-03-12 9:29 ` Pei Xiao
2026-03-12 9:29 ` [PATCH 11/17] spi: st: " Pei Xiao
` (6 subsequent siblings)
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:29 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-slave-mt27xx.c | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/drivers/spi/spi-slave-mt27xx.c b/drivers/spi/spi-slave-mt27xx.c
index ce889cb33228..8ec886918165 100644
--- a/drivers/spi/spi-slave-mt27xx.c
+++ b/drivers/spi/spi-slave-mt27xx.c
@@ -438,19 +438,13 @@ static int mtk_spi_slave_probe(struct platform_device *pdev)
goto err_put_ctlr;
}
- mdata->spi_clk = devm_clk_get(&pdev->dev, "spi");
+ mdata->spi_clk = devm_clk_get_enabled(&pdev->dev, "spi");
if (IS_ERR(mdata->spi_clk)) {
ret = PTR_ERR(mdata->spi_clk);
dev_err(&pdev->dev, "failed to get spi-clk: %d\n", ret);
goto err_put_ctlr;
}
- ret = clk_prepare_enable(mdata->spi_clk);
- if (ret < 0) {
- dev_err(&pdev->dev, "failed to enable spi_clk (%d)\n", ret);
- goto err_put_ctlr;
- }
-
pm_runtime_enable(&pdev->dev);
ret = devm_spi_register_controller(&pdev->dev, ctlr);
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 11/17] spi: st: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (9 preceding siblings ...)
2026-03-12 9:29 ` [PATCH 10/17] spi: slave-mt27xx: " Pei Xiao
@ 2026-03-12 9:29 ` Pei Xiao
2026-03-12 9:29 ` [PATCH 12/17] spi: stm32-qspi: " Pei Xiao
` (5 subsequent siblings)
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:29 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-st-ssc4.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/drivers/spi/spi-st-ssc4.c b/drivers/spi/spi-st-ssc4.c
index b173ef70d77e..e7237082abbc 100644
--- a/drivers/spi/spi-st-ssc4.c
+++ b/drivers/spi/spi-st-ssc4.c
@@ -293,24 +293,20 @@ static int spi_st_probe(struct platform_device *pdev)
host->use_gpio_descriptors = true;
spi_st = spi_controller_get_devdata(host);
- spi_st->clk = devm_clk_get(&pdev->dev, "ssc");
+ spi_st->clk = devm_clk_get_enabled(&pdev->dev, "ssc");
if (IS_ERR(spi_st->clk)) {
dev_err(&pdev->dev, "Unable to request clock\n");
ret = PTR_ERR(spi_st->clk);
goto put_host;
}
- ret = clk_prepare_enable(spi_st->clk);
- if (ret)
- goto put_host;
-
init_completion(&spi_st->done);
/* Get resources */
spi_st->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(spi_st->base)) {
ret = PTR_ERR(spi_st->base);
- goto clk_disable;
+ goto put_host;
}
/* Disable I2C and Reset SSC */
@@ -333,14 +329,14 @@ static int spi_st_probe(struct platform_device *pdev)
if (!irq) {
dev_err(&pdev->dev, "IRQ missing or invalid\n");
ret = -EINVAL;
- goto clk_disable;
+ goto put_host;
}
ret = devm_request_irq(&pdev->dev, irq, spi_st_irq, 0,
pdev->name, spi_st);
if (ret) {
dev_err(&pdev->dev, "Failed to request irq %d\n", irq);
- goto clk_disable;
+ goto put_host;
}
/* by default the device is on */
@@ -359,8 +355,6 @@ static int spi_st_probe(struct platform_device *pdev)
rpm_disable:
pm_runtime_disable(&pdev->dev);
-clk_disable:
- clk_disable_unprepare(spi_st->clk);
put_host:
spi_controller_put(host);
return ret;
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 12/17] spi: stm32-qspi: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (10 preceding siblings ...)
2026-03-12 9:29 ` [PATCH 11/17] spi: st: " Pei Xiao
@ 2026-03-12 9:29 ` Pei Xiao
2026-03-12 9:29 ` [PATCH 13/17] spi: stm32: " Pei Xiao
` (4 subsequent siblings)
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:29 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-stm32-qspi.c | 17 +++++------------
1 file changed, 5 insertions(+), 12 deletions(-)
diff --git a/drivers/spi/spi-stm32-qspi.c b/drivers/spi/spi-stm32-qspi.c
index df1bbacec90a..9ff9975edef4 100644
--- a/drivers/spi/spi-stm32-qspi.c
+++ b/drivers/spi/spi-stm32-qspi.c
@@ -819,25 +819,19 @@ static int stm32_qspi_probe(struct platform_device *pdev)
init_completion(&qspi->match_completion);
- qspi->clk = devm_clk_get(dev, NULL);
+ qspi->clk = devm_clk_get_enabled(dev, NULL);
if (IS_ERR(qspi->clk))
- return PTR_ERR(qspi->clk);
-
+ return dev_err_probe(dev, PTR_ERR(qspi->clk),
+ "can not enable the clock\n");
qspi->clk_rate = clk_get_rate(qspi->clk);
if (!qspi->clk_rate)
return -EINVAL;
- ret = clk_prepare_enable(qspi->clk);
- if (ret) {
- dev_err(dev, "can not enable the clock\n");
- return ret;
- }
-
rstc = devm_reset_control_get_exclusive(dev, NULL);
if (IS_ERR(rstc)) {
ret = PTR_ERR(rstc);
if (ret == -EPROBE_DEFER)
- goto err_clk_disable;
+ goto err_defer;
} else {
reset_control_assert(rstc);
udelay(2);
@@ -886,8 +880,7 @@ static int stm32_qspi_probe(struct platform_device *pdev)
pm_runtime_dont_use_autosuspend(qspi->dev);
err_dma_free:
stm32_qspi_dma_free(qspi);
-err_clk_disable:
- clk_disable_unprepare(qspi->clk);
+err_defer:
return ret;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 13/17] spi: stm32: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (11 preceding siblings ...)
2026-03-12 9:29 ` [PATCH 12/17] spi: stm32-qspi: " Pei Xiao
@ 2026-03-12 9:29 ` Pei Xiao
2026-03-12 13:02 ` Mark Brown
2026-03-12 19:18 ` Frank Li
2026-03-12 9:29 ` [PATCH 14/17] spi: sunplus-sp7021: " Pei Xiao
` (3 subsequent siblings)
16 siblings, 2 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:29 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-stm32.c | 59 +++++++++++++----------------------------
1 file changed, 19 insertions(+), 40 deletions(-)
diff --git a/drivers/spi/spi-stm32.c b/drivers/spi/spi-stm32.c
index 8a7f5a10d4af..b347caeee0dc 100644
--- a/drivers/spi/spi-stm32.c
+++ b/drivers/spi/spi-stm32.c
@@ -2360,25 +2360,22 @@ static int stm32_spi_probe(struct platform_device *pdev)
int ret;
cfg = of_device_get_match_data(&pdev->dev);
- if (!cfg) {
- dev_err(&pdev->dev, "Failed to get match data for platform\n");
- return -ENODEV;
- }
+ if (!cfg)
+ return dev_err_probe(&pdev->dev, -ENODEV, "Failed to get
+ match data for platform\n");
device_mode = of_property_read_bool(np, "spi-slave");
- if (!cfg->has_device_mode && device_mode) {
- dev_err(&pdev->dev, "spi-slave not supported\n");
- return -EPERM;
- }
+ if (!cfg->has_device_mode && device_mode)
+ return dev_err_probe(&pdev->dev, -EPERM, "spi-slave not
+ supported\n");
if (device_mode)
ctrl = devm_spi_alloc_target(&pdev->dev, sizeof(struct stm32_spi));
else
ctrl = devm_spi_alloc_host(&pdev->dev, sizeof(struct stm32_spi));
- if (!ctrl) {
- dev_err(&pdev->dev, "spi controller allocation failed\n");
- return -ENOMEM;
- }
+ if (!ctrl)
+ return dev_err_probe(&pdev->dev, -ENOMEM, "spi controller
+ allocation failed\n");
platform_set_drvdata(pdev, ctrl);
spi = spi_controller_get_devdata(ctrl);
@@ -2409,32 +2406,19 @@ static int stm32_spi_probe(struct platform_device *pdev)
return ret;
}
- spi->clk = devm_clk_get(&pdev->dev, NULL);
- if (IS_ERR(spi->clk)) {
- ret = PTR_ERR(spi->clk);
- dev_err(&pdev->dev, "clk get failed: %d\n", ret);
- return ret;
- }
+ spi->clk = devm_clk_get_enabled(&pdev->dev, NULL);
+ if (IS_ERR(spi->clk))
+ return dev_err_probe(&pdev->dev, PTR_ERR(spi->clk), "clk get failed: %d\n", ret);
- ret = clk_prepare_enable(spi->clk);
- if (ret) {
- dev_err(&pdev->dev, "clk enable failed: %d\n", ret);
- return ret;
- }
spi->clk_rate = clk_get_rate(spi->clk);
- if (!spi->clk_rate) {
- dev_err(&pdev->dev, "clk rate = 0\n");
- ret = -EINVAL;
- goto err_clk_disable;
- }
+ if (!spi->clk_rate)
+ return dev_err_probe(&pdev->dev, -EINVAL, "clk rate = 0\n");
rst = devm_reset_control_get_optional_exclusive(&pdev->dev, NULL);
if (rst) {
- if (IS_ERR(rst)) {
+ if (IS_ERR(rst))
ret = dev_err_probe(&pdev->dev, PTR_ERR(rst),
"failed to get reset\n");
- goto err_clk_disable;
- }
reset_control_assert(rst);
udelay(2);
@@ -2461,11 +2445,9 @@ static int stm32_spi_probe(struct platform_device *pdev)
dev_dbg(spi->dev, "one message max size %d\n", spi->t_size_max);
ret = spi->cfg->config(spi);
- if (ret) {
- dev_err(&pdev->dev, "controller configuration failed: %d\n",
- ret);
- goto err_clk_disable;
- }
+ if (ret)
+ return dev_err_probe(&pdev->dev, "controller configuration
+ failed: %d\n", ret);
ctrl->auto_runtime_pm = true;
ctrl->bus_num = pdev->id;
@@ -2490,8 +2472,7 @@ static int stm32_spi_probe(struct platform_device *pdev)
dev_info(&pdev->dev, "tx dma disabled\n");
spi->dma_tx = NULL;
} else {
- dev_err_probe(&pdev->dev, ret, "failed to request tx dma channel\n");
- goto err_clk_disable;
+ return dev_err_probe(&pdev->dev, ret, "failed to request tx dma channel\n");
}
} else {
ctrl->dma_tx = spi->dma_tx;
@@ -2579,8 +2560,6 @@ static int stm32_spi_probe(struct platform_device *pdev)
err_dma_tx_release:
if (spi->dma_tx)
dma_release_channel(spi->dma_tx);
-err_clk_disable:
- clk_disable_unprepare(spi->clk);
return ret;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* Re: [PATCH 13/17] spi: stm32: Use helper function devm_clk_get_enabled()
2026-03-12 9:29 ` [PATCH 13/17] spi: stm32: " Pei Xiao
@ 2026-03-12 13:02 ` Mark Brown
2026-03-12 19:18 ` Frank Li
1 sibling, 0 replies; 21+ messages in thread
From: Mark Brown @ 2026-03-12 13:02 UTC (permalink / raw)
To: Pei Xiao
Cc: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32
[-- Attachment #1: Type: text/plain, Size: 229 bytes --]
On Thu, Mar 12, 2026 at 05:29:05PM +0800, Pei Xiao wrote:
> + if (!cfg->has_device_mode && device_mode)
> + return dev_err_probe(&pdev->dev, -EPERM, "spi-slave not
> + supported\n");
Similar thing in this driver here.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 13/17] spi: stm32: Use helper function devm_clk_get_enabled()
2026-03-12 9:29 ` [PATCH 13/17] spi: stm32: " Pei Xiao
2026-03-12 13:02 ` Mark Brown
@ 2026-03-12 19:18 ` Frank Li
1 sibling, 0 replies; 21+ messages in thread
From: Frank Li @ 2026-03-12 19:18 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Frank Li, Pei Xiao
From: Frank Li (AI-BOT) <frank.li@nxp.com>
> + spi->clk = devm_clk_get_enabled(&pdev->dev, NULL);
> + if (IS_ERR(spi->clk))
> + return dev_err_probe(&pdev->dev, PTR_ERR(spi->clk), "clk get failed: %d\n", ret);
AI: Bug: format string references undefined variable 'ret'. Should use
PTR_ERR(spi->clk) directly or remove the %d format specifier.
> + if (ret)
> + return dev_err_probe(&pdev->dev, "controller configuration
> + failed: %d\n", ret);
AI: Missing error code argument to dev_err_probe(). Should be:
return dev_err_probe(&pdev->dev, ret, "controller configuration failed\n");
Frank
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 14/17] spi: sunplus-sp7021: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (12 preceding siblings ...)
2026-03-12 9:29 ` [PATCH 13/17] spi: stm32: " Pei Xiao
@ 2026-03-12 9:29 ` Pei Xiao
2026-03-12 9:29 ` [PATCH 15/17] spi: uniphier: " Pei Xiao
` (2 subsequent siblings)
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:29 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-sunplus-sp7021.c | 15 +--------------
1 file changed, 1 insertion(+), 14 deletions(-)
diff --git a/drivers/spi/spi-sunplus-sp7021.c b/drivers/spi/spi-sunplus-sp7021.c
index 789b092fe8c0..35601212fb78 100644
--- a/drivers/spi/spi-sunplus-sp7021.c
+++ b/drivers/spi/spi-sunplus-sp7021.c
@@ -389,11 +389,6 @@ static int sp7021_spi_target_transfer_one(struct spi_controller *ctlr, struct sp
return ret;
}
-static void sp7021_spi_disable_unprepare(void *data)
-{
- clk_disable_unprepare(data);
-}
-
static void sp7021_spi_reset_control_assert(void *data)
{
reset_control_assert(data);
@@ -460,7 +455,7 @@ static int sp7021_spi_controller_probe(struct platform_device *pdev)
if (pspim->s_irq < 0)
return pspim->s_irq;
- pspim->spi_clk = devm_clk_get(dev, NULL);
+ pspim->spi_clk = devm_clk_get_enabled(dev, NULL);
if (IS_ERR(pspim->spi_clk))
return dev_err_probe(dev, PTR_ERR(pspim->spi_clk), "clk get fail\n");
@@ -468,14 +463,6 @@ static int sp7021_spi_controller_probe(struct platform_device *pdev)
if (IS_ERR(pspim->rstc))
return dev_err_probe(dev, PTR_ERR(pspim->rstc), "rst get fail\n");
- ret = clk_prepare_enable(pspim->spi_clk);
- if (ret)
- return dev_err_probe(dev, ret, "failed to enable clk\n");
-
- ret = devm_add_action_or_reset(dev, sp7021_spi_disable_unprepare, pspim->spi_clk);
- if (ret)
- return ret;
-
ret = reset_control_deassert(pspim->rstc);
if (ret)
return dev_err_probe(dev, ret, "failed to deassert reset\n");
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 15/17] spi: uniphier: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (13 preceding siblings ...)
2026-03-12 9:29 ` [PATCH 14/17] spi: sunplus-sp7021: " Pei Xiao
@ 2026-03-12 9:29 ` Pei Xiao
2026-03-12 9:29 ` [PATCH 16/17] spi: zynq-qspi: " Pei Xiao
2026-03-12 9:29 ` [PATCH 17/17] spi: zynqmp-gqspi: " Pei Xiao
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:29 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-uniphier.c | 15 ++++-----------
1 file changed, 4 insertions(+), 11 deletions(-)
diff --git a/drivers/spi/spi-uniphier.c b/drivers/spi/spi-uniphier.c
index 9e1d364a6198..f6fe5ab9f893 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;
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 16/17] spi: zynq-qspi: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (14 preceding siblings ...)
2026-03-12 9:29 ` [PATCH 15/17] spi: uniphier: " Pei Xiao
@ 2026-03-12 9:29 ` Pei Xiao
2026-03-12 9:29 ` [PATCH 17/17] spi: zynqmp-gqspi: " Pei Xiao
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:29 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-zynq-qspi.c | 28 ++++++----------------------
1 file changed, 6 insertions(+), 22 deletions(-)
diff --git a/drivers/spi/spi-zynq-qspi.c b/drivers/spi/spi-zynq-qspi.c
index 5232483c4a3a..f887c55337ae 100644
--- a/drivers/spi/spi-zynq-qspi.c
+++ b/drivers/spi/spi-zynq-qspi.c
@@ -661,7 +661,7 @@ static int zynq_qspi_probe(struct platform_device *pdev)
goto remove_ctlr;
}
- xqspi->pclk = devm_clk_get(&pdev->dev, "pclk");
+ xqspi->pclk = devm_clk_get_enabled(&pdev->dev, "pclk");
if (IS_ERR(xqspi->pclk)) {
dev_err(&pdev->dev, "pclk clock not found.\n");
ret = PTR_ERR(xqspi->pclk);
@@ -670,36 +670,24 @@ static int zynq_qspi_probe(struct platform_device *pdev)
init_completion(&xqspi->data_completion);
- xqspi->refclk = devm_clk_get(&pdev->dev, "ref_clk");
+ xqspi->refclk = devm_clk_get_enabled(&pdev->dev, "ref_clk");
if (IS_ERR(xqspi->refclk)) {
dev_err(&pdev->dev, "ref_clk clock not found.\n");
ret = PTR_ERR(xqspi->refclk);
goto remove_ctlr;
}
- ret = clk_prepare_enable(xqspi->pclk);
- if (ret) {
- dev_err(&pdev->dev, "Unable to enable APB clock.\n");
- goto remove_ctlr;
- }
-
- ret = clk_prepare_enable(xqspi->refclk);
- if (ret) {
- dev_err(&pdev->dev, "Unable to enable device clock.\n");
- goto clk_dis_pclk;
- }
-
xqspi->irq = platform_get_irq(pdev, 0);
if (xqspi->irq < 0) {
ret = xqspi->irq;
- goto clk_dis_all;
+ goto remove_ctlr;
}
ret = devm_request_irq(&pdev->dev, xqspi->irq, zynq_qspi_irq,
0, pdev->name, xqspi);
if (ret != 0) {
ret = -ENXIO;
dev_err(&pdev->dev, "request_irq failed\n");
- goto clk_dis_all;
+ goto remove_ctlr;
}
ret = of_property_read_u32(np, "num-cs",
@@ -709,7 +697,7 @@ static int zynq_qspi_probe(struct platform_device *pdev)
} else if (num_cs > ZYNQ_QSPI_MAX_NUM_CS) {
ret = -EINVAL;
dev_err(&pdev->dev, "only 2 chip selects are available\n");
- goto clk_dis_all;
+ goto remove_ctlr;
} else {
ctlr->num_chipselect = num_cs;
}
@@ -728,15 +716,11 @@ static int zynq_qspi_probe(struct platform_device *pdev)
ret = devm_spi_register_controller(&pdev->dev, ctlr);
if (ret) {
dev_err(&pdev->dev, "devm_spi_register_controller failed\n");
- goto clk_dis_all;
+ goto remove_ctlr;
}
return ret;
-clk_dis_all:
- clk_disable_unprepare(xqspi->refclk);
-clk_dis_pclk:
- clk_disable_unprepare(xqspi->pclk);
remove_ctlr:
spi_controller_put(ctlr);
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread* [PATCH 17/17] spi: zynqmp-gqspi: Use helper function devm_clk_get_enabled()
2026-03-12 9:28 [PATCH 00/17] cleanup in spi by use devm_clk_get_enabled Pei Xiao
` (15 preceding siblings ...)
2026-03-12 9:29 ` [PATCH 16/17] spi: zynq-qspi: " Pei Xiao
@ 2026-03-12 9:29 ` Pei Xiao
16 siblings, 0 replies; 21+ messages in thread
From: Pei Xiao @ 2026-03-12 9:29 UTC (permalink / raw)
To: linux-spi, linux-kernel, linux-arm-kernel, imx, openbmc,
linux-rockchip, linux-riscv, linux-mediatek, linux-stm32, broonie
Cc: Pei Xiao
devm_clk_get() and clk_prepare_enable() can now be replaced by
devm_clk_get_enabled() when driver enables the clocks. Moreover, it is no
longer necessary to unprepare and disable the clocks explicitly.
Simplify code.
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
---
drivers/spi/spi-zynqmp-gqspi.c | 17 ++---------------
1 file changed, 2 insertions(+), 15 deletions(-)
diff --git a/drivers/spi/spi-zynqmp-gqspi.c b/drivers/spi/spi-zynqmp-gqspi.c
index 502fd5eccc83..a88b07956c33 100644
--- a/drivers/spi/spi-zynqmp-gqspi.c
+++ b/drivers/spi/spi-zynqmp-gqspi.c
@@ -1244,26 +1244,16 @@ static int zynqmp_qspi_probe(struct platform_device *pdev)
if (IS_ERR(xqspi->regs))
return PTR_ERR(xqspi->regs);
- xqspi->pclk = devm_clk_get(&pdev->dev, "pclk");
+ xqspi->pclk = devm_clk_get_enabled(&pdev->dev, "pclk");
if (IS_ERR(xqspi->pclk))
return dev_err_probe(dev, PTR_ERR(xqspi->pclk),
"pclk clock not found.\n");
- xqspi->refclk = devm_clk_get(&pdev->dev, "ref_clk");
+ xqspi->refclk = devm_clk_get_enabled(&pdev->dev, "ref_clk");
if (IS_ERR(xqspi->refclk))
return dev_err_probe(dev, PTR_ERR(xqspi->refclk),
"ref_clk clock not found.\n");
- ret = clk_prepare_enable(xqspi->pclk);
- if (ret)
- return dev_err_probe(dev, ret, "Unable to enable APB clock.\n");
-
- ret = clk_prepare_enable(xqspi->refclk);
- if (ret) {
- dev_err(dev, "Unable to enable device clock.\n");
- goto clk_dis_pclk;
- }
-
init_completion(&xqspi->data_completion);
mutex_init(&xqspi->op_lock);
@@ -1339,9 +1329,6 @@ static int zynqmp_qspi_probe(struct platform_device *pdev)
pm_runtime_dont_use_autosuspend(&pdev->dev);
pm_runtime_put_noidle(&pdev->dev);
pm_runtime_set_suspended(&pdev->dev);
- clk_disable_unprepare(xqspi->refclk);
-clk_dis_pclk:
- clk_disable_unprepare(xqspi->pclk);
return ret;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread