* [PATCH 00/19] spi: switch to managed controller allocation (part 1/3)
@ 2026-04-29 9:13 Johan Hovold
2026-04-29 9:13 ` [PATCH 01/19] spi: at91-usart: switch to managed controller allocation Johan Hovold
` (19 more replies)
0 siblings, 20 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
In preparation for fixing the SPI controller API so that it no longer
drops a reference when deregistering (non-managed) controllers (cf.
[1]), this series converts drivers using non-managed registration to use
managed allocation.
This will be followed by a second set of 20 patches, and then a third
set of 12 patches for drivers using managed registration.
That leaves us with 18 drivers using non-managed allocation, which is
few enough to be able to fix the API in tree-wide change.
Johan
[1] https://lore.kernel.org/lkml/20260325145319.1132072-1-johan@kernel.org/
Johan Hovold (19):
spi: at91-usart: switch to managed controller allocation
spi: atmel: switch to managed controller allocation
spi: bcm63xx: switch to managed controller allocation
spi: bcm63xx-hsspi: switch to managed controller allocation
spi: cadence: switch to managed controller allocation
spi: octeon: switch to managed controller allocation
spi: cavium-thunderx: switch to managed controller allocation
spi: coldfire-qspi: switch to managed controller allocation
spi: dln2: switch to managed controller allocation
spi: ep93xx: switch to managed controller allocation
spi: fsl: switch to managed controller allocation
spi: fsl-espi: switch to managed controller allocation
spi: img-spfi: switch to managed controller allocation
spi: lantiq-ssc: switch to managed controller allocation
spi: meson-spicc: switch to managed controller allocation
spi: mxs: switch to managed controller allocation
spi: npcm-pspi: switch to managed controller allocation
spi: omap2-mcspi: switch to managed controller allocation
spi: orion: switch to managed controller allocation
drivers/spi/spi-at91-usart.c | 24 ++++++-----------
drivers/spi/spi-atmel.c | 34 +++++++++---------------
drivers/spi/spi-bcm63xx-hsspi.c | 17 ++++--------
drivers/spi/spi-bcm63xx.c | 23 +++++------------
drivers/spi/spi-cadence.c | 28 +++++++-------------
drivers/spi/spi-cavium-octeon.c | 17 +++---------
drivers/spi/spi-cavium-thunderx.c | 32 ++++++-----------------
drivers/spi/spi-coldfire-qspi.c | 28 ++++++--------------
drivers/spi/spi-dln2.c | 26 +++++++------------
drivers/spi/spi-ep93xx.c | 22 +++++-----------
drivers/spi/spi-fsl-espi.c | 20 +++++---------
drivers/spi/spi-fsl-spi.c | 14 ++--------
drivers/spi/spi-img-spfi.c | 40 +++++++++++-----------------
drivers/spi/spi-lantiq-ssc.c | 28 ++++++--------------
drivers/spi/spi-meson-spicc.c | 43 ++++++++++---------------------
drivers/spi/spi-mxs.c | 14 +++-------
drivers/spi/spi-npcm-pspi.c | 19 ++++----------
drivers/spi/spi-omap2-mcspi.c | 25 +++++++-----------
drivers/spi/spi-orion.c | 26 ++++++-------------
19 files changed, 147 insertions(+), 333 deletions(-)
--
2.53.0
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH 01/19] spi: at91-usart: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 02/19] spi: atmel: " Johan Hovold
` (18 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-at91-usart.c | 24 ++++++++----------------
1 file changed, 8 insertions(+), 16 deletions(-)
diff --git a/drivers/spi/spi-at91-usart.c b/drivers/spi/spi-at91-usart.c
index 79edc1cd13c0..32fee5a7ffdf 100644
--- a/drivers/spi/spi-at91-usart.c
+++ b/drivers/spi/spi-at91-usart.c
@@ -496,14 +496,13 @@ static int at91_usart_spi_probe(struct platform_device *pdev)
if (IS_ERR(clk))
return PTR_ERR(clk);
- ret = -ENOMEM;
- controller = spi_alloc_host(&pdev->dev, sizeof(*aus));
+ controller = devm_spi_alloc_host(&pdev->dev, sizeof(*aus));
if (!controller)
- goto at91_usart_spi_probe_fail;
+ return -ENOMEM;
ret = at91_usart_gpio_setup(pdev);
if (ret)
- goto at91_usart_spi_probe_fail;
+ return ret;
controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP | SPI_CS_HIGH;
controller->dev.of_node = pdev->dev.parent->of_node;
@@ -525,10 +524,8 @@ static int at91_usart_spi_probe(struct platform_device *pdev)
aus->dev = &pdev->dev;
aus->regs = devm_ioremap_resource(&pdev->dev, regs);
- if (IS_ERR(aus->regs)) {
- ret = PTR_ERR(aus->regs);
- goto at91_usart_spi_probe_fail;
- }
+ if (IS_ERR(aus->regs))
+ return PTR_ERR(aus->regs);
aus->irq = irq;
aus->clk = clk;
@@ -536,11 +533,11 @@ static int at91_usart_spi_probe(struct platform_device *pdev)
ret = devm_request_irq(&pdev->dev, irq, at91_usart_spi_interrupt, 0,
dev_name(&pdev->dev), controller);
if (ret)
- goto at91_usart_spi_probe_fail;
+ return ret;
ret = clk_prepare_enable(clk);
if (ret)
- goto at91_usart_spi_probe_fail;
+ return ret;
aus->spi_clk = clk_get_rate(clk);
at91_usart_spi_init(aus);
@@ -571,8 +568,7 @@ static int at91_usart_spi_probe(struct platform_device *pdev)
at91_usart_spi_release_dma(controller);
at91_usart_fail_dma:
clk_disable_unprepare(clk);
-at91_usart_spi_probe_fail:
- spi_controller_put(controller);
+
return ret;
}
@@ -634,14 +630,10 @@ static void at91_usart_spi_remove(struct platform_device *pdev)
struct spi_controller *ctlr = platform_get_drvdata(pdev);
struct at91_usart_spi *aus = spi_controller_get_devdata(ctlr);
- spi_controller_get(ctlr);
-
spi_unregister_controller(ctlr);
at91_usart_spi_release_dma(ctlr);
clk_disable_unprepare(aus->clk);
-
- spi_controller_put(ctlr);
}
static const struct dev_pm_ops at91_usart_spi_pm_ops = {
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 02/19] spi: atmel: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
2026-04-29 9:13 ` [PATCH 01/19] spi: at91-usart: switch to managed controller allocation Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 03/19] spi: bcm63xx: " Johan Hovold
` (17 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-atmel.c | 34 ++++++++++++----------------------
1 file changed, 12 insertions(+), 22 deletions(-)
diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c
index 42db85d7ff8e..25aa294631c8 100644
--- a/drivers/spi/spi-atmel.c
+++ b/drivers/spi/spi-atmel.c
@@ -1528,7 +1528,7 @@ static int atmel_spi_probe(struct platform_device *pdev)
return PTR_ERR(clk);
/* setup spi core then atmel-specific driver state */
- host = spi_alloc_host(&pdev->dev, sizeof(*as));
+ host = devm_spi_alloc_host(&pdev->dev, sizeof(*as));
if (!host)
return -ENOMEM;
@@ -1555,18 +1555,15 @@ static int atmel_spi_probe(struct platform_device *pdev)
as->pdev = pdev;
as->regs = devm_platform_get_and_ioremap_resource(pdev, 0, ®s);
- if (IS_ERR(as->regs)) {
- ret = PTR_ERR(as->regs);
- goto out_unmap_regs;
- }
+ if (IS_ERR(as->regs))
+ return PTR_ERR(as->regs);
+
as->phybase = regs->start;
as->irq = irq;
as->clk = clk;
as->gclk = devm_clk_get_optional(&pdev->dev, "spi_gclk");
- if (IS_ERR(as->gclk)) {
- ret = PTR_ERR(as->gclk);
- goto out_unmap_regs;
- }
+ if (IS_ERR(as->gclk))
+ return PTR_ERR(as->gclk);
init_completion(&as->xfer_completion);
@@ -1576,11 +1573,10 @@ static int atmel_spi_probe(struct platform_device *pdev)
as->use_pdc = false;
if (as->caps.has_dma_support) {
ret = atmel_spi_configure_dma(host, as);
- if (ret == 0) {
+ if (ret == 0)
as->use_dma = true;
- } else if (ret == -EPROBE_DEFER) {
- goto out_unmap_regs;
- }
+ else if (ret == -EPROBE_DEFER)
+ return ret;
} else if (as->caps.has_pdc_support) {
as->use_pdc = true;
}
@@ -1620,12 +1616,12 @@ static int atmel_spi_probe(struct platform_device *pdev)
0, dev_name(&pdev->dev), host);
}
if (ret)
- goto out_unmap_regs;
+ return ret;
/* Initialize the hardware */
ret = clk_prepare_enable(clk);
if (ret)
- goto out_free_irq;
+ return ret;
/*
* In cases where the peripheral clock is higher,the FLEX_SPI_CSRx.SCBR
@@ -1677,9 +1673,7 @@ static int atmel_spi_probe(struct platform_device *pdev)
clk_disable_unprepare(as->gclk);
out_disable_clk:
clk_disable_unprepare(clk);
-out_free_irq:
-out_unmap_regs:
- spi_controller_put(host);
+
return ret;
}
@@ -1688,8 +1682,6 @@ static void atmel_spi_remove(struct platform_device *pdev)
struct spi_controller *host = platform_get_drvdata(pdev);
struct atmel_spi *as = spi_controller_get_devdata(host);
- spi_controller_get(host);
-
pm_runtime_get_sync(&pdev->dev);
spi_unregister_controller(host);
@@ -1720,8 +1712,6 @@ static void atmel_spi_remove(struct platform_device *pdev)
pm_runtime_put_noidle(&pdev->dev);
pm_runtime_disable(&pdev->dev);
-
- spi_controller_put(host);
}
static int atmel_spi_runtime_suspend(struct device *dev)
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 03/19] spi: bcm63xx: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
2026-04-29 9:13 ` [PATCH 01/19] spi: at91-usart: switch to managed controller allocation Johan Hovold
2026-04-29 9:13 ` [PATCH 02/19] spi: atmel: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 04/19] spi: bcm63xx-hsspi: " Johan Hovold
` (16 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-bcm63xx.c | 23 +++++++----------------
1 file changed, 7 insertions(+), 16 deletions(-)
diff --git a/drivers/spi/spi-bcm63xx.c b/drivers/spi/spi-bcm63xx.c
index 40cd7efc4b54..f8cfe535b2a3 100644
--- a/drivers/spi/spi-bcm63xx.c
+++ b/drivers/spi/spi-bcm63xx.c
@@ -541,11 +541,9 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
if (IS_ERR(reset))
return PTR_ERR(reset);
- host = spi_alloc_host(dev, sizeof(*bs));
- if (!host) {
- dev_err(dev, "out of memory\n");
+ host = devm_spi_alloc_host(dev, sizeof(*bs));
+ if (!host)
return -ENOMEM;
- }
bs = spi_controller_get_devdata(host);
init_completion(&bs->done);
@@ -554,10 +552,8 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
bs->pdev = pdev;
bs->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &r);
- if (IS_ERR(bs->regs)) {
- ret = PTR_ERR(bs->regs);
- goto out_err;
- }
+ if (IS_ERR(bs->regs))
+ return PTR_ERR(bs->regs);
bs->irq = irq;
bs->clk = clk;
@@ -568,7 +564,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
pdev->name, host);
if (ret) {
dev_err(dev, "unable to request irq\n");
- goto out_err;
+ return ret;
}
host->bus_num = bus_num;
@@ -587,7 +583,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
/* Initialize hardware */
ret = clk_prepare_enable(bs->clk);
if (ret)
- goto out_err;
+ return ret;
ret = reset_control_reset(reset);
if (ret) {
@@ -615,8 +611,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
out_clk_disable:
clk_disable_unprepare(clk);
-out_err:
- spi_controller_put(host);
+
return ret;
}
@@ -625,8 +620,6 @@ static void bcm63xx_spi_remove(struct platform_device *pdev)
struct spi_controller *host = platform_get_drvdata(pdev);
struct bcm63xx_spi *bs = spi_controller_get_devdata(host);
- spi_controller_get(host);
-
spi_unregister_controller(host);
/* reset spi block */
@@ -634,8 +627,6 @@ static void bcm63xx_spi_remove(struct platform_device *pdev)
/* HW shutdown */
clk_disable_unprepare(bs->clk);
-
- spi_controller_put(host);
}
static int bcm63xx_spi_suspend(struct device *dev)
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 04/19] spi: bcm63xx-hsspi: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (2 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 03/19] spi: bcm63xx: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 18:13 ` William Zhang
2026-04-29 9:13 ` [PATCH 05/19] spi: cadence: " Johan Hovold
` (15 subsequent siblings)
19 siblings, 1 reply; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-bcm63xx-hsspi.c | 17 +++++------------
1 file changed, 5 insertions(+), 12 deletions(-)
diff --git a/drivers/spi/spi-bcm63xx-hsspi.c b/drivers/spi/spi-bcm63xx-hsspi.c
index e935e8ab9cfd..58012e1b5ae7 100644
--- a/drivers/spi/spi-bcm63xx-hsspi.c
+++ b/drivers/spi/spi-bcm63xx-hsspi.c
@@ -783,7 +783,7 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)
"failed get pll clk rate\n");
}
- host = spi_alloc_host(&pdev->dev, sizeof(*bs));
+ host = devm_spi_alloc_host(&pdev->dev, sizeof(*bs));
if (!host)
return dev_err_probe(dev, -ENOMEM, "alloc host no mem\n");
@@ -796,10 +796,8 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)
bs->fifo = (u8 __iomem *)(bs->regs + HSSPI_FIFO_REG(0));
bs->wait_mode = HSSPI_WAIT_MODE_POLLING;
bs->prepend_buf = devm_kzalloc(dev, HSSPI_BUFFER_LEN, GFP_KERNEL);
- if (!bs->prepend_buf) {
- ret = -ENOMEM;
- goto out_put_host;
- }
+ if (!bs->prepend_buf)
+ return -ENOMEM;
mutex_init(&bs->bus_mutex);
mutex_init(&bs->msg_mutex);
@@ -845,7 +843,7 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)
pdev->name, bs);
if (ret)
- goto out_put_host;
+ return ret;
}
pm_runtime_enable(&pdev->dev);
@@ -869,8 +867,7 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)
sysfs_remove_group(&pdev->dev.kobj, &bcm63xx_hsspi_group);
out_pm_disable:
pm_runtime_disable(&pdev->dev);
-out_put_host:
- spi_controller_put(host);
+
return ret;
}
@@ -880,15 +877,11 @@ static void bcm63xx_hsspi_remove(struct platform_device *pdev)
struct spi_controller *host = platform_get_drvdata(pdev);
struct bcm63xx_hsspi *bs = spi_controller_get_devdata(host);
- spi_controller_get(host);
-
spi_unregister_controller(host);
/* reset the hardware and block queue progress */
__raw_writel(0, bs->regs + HSSPI_INT_MASK_REG);
sysfs_remove_group(&pdev->dev.kobj, &bcm63xx_hsspi_group);
-
- spi_controller_put(host);
}
#ifdef CONFIG_PM_SLEEP
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 05/19] spi: cadence: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (3 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 04/19] spi: bcm63xx-hsspi: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 06/19] spi: octeon: " Johan Hovold
` (14 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-cadence.c | 28 +++++++++-------------------
1 file changed, 9 insertions(+), 19 deletions(-)
diff --git a/drivers/spi/spi-cadence.c b/drivers/spi/spi-cadence.c
index d108e89fda22..9b4e5b7013ae 100644
--- a/drivers/spi/spi-cadence.c
+++ b/drivers/spi/spi-cadence.c
@@ -643,9 +643,9 @@ static int cdns_spi_probe(struct platform_device *pdev)
target = of_property_read_bool(pdev->dev.of_node, "spi-slave");
if (target)
- ctlr = spi_alloc_target(&pdev->dev, sizeof(*xspi));
+ ctlr = devm_spi_alloc_target(&pdev->dev, sizeof(*xspi));
else
- ctlr = spi_alloc_host(&pdev->dev, sizeof(*xspi));
+ ctlr = devm_spi_alloc_host(&pdev->dev, sizeof(*xspi));
if (!ctlr)
return -ENOMEM;
@@ -654,23 +654,19 @@ static int cdns_spi_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, ctlr);
xspi->regs = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(xspi->regs)) {
- ret = PTR_ERR(xspi->regs);
- goto err_put_ctlr;
- }
+ if (IS_ERR(xspi->regs))
+ return PTR_ERR(xspi->regs);
xspi->pclk = devm_clk_get_enabled(&pdev->dev, "pclk");
if (IS_ERR(xspi->pclk)) {
dev_err(&pdev->dev, "pclk clock not found.\n");
- ret = PTR_ERR(xspi->pclk);
- goto err_put_ctlr;
+ return PTR_ERR(xspi->pclk);
}
xspi->rstc = devm_reset_control_get_optional_exclusive(&pdev->dev, "spi");
if (IS_ERR(xspi->rstc)) {
- ret = dev_err_probe(&pdev->dev, PTR_ERR(xspi->rstc),
- "Cannot get SPI reset.\n");
- goto err_put_ctlr;
+ return dev_err_probe(&pdev->dev, PTR_ERR(xspi->rstc),
+ "Cannot get SPI reset.\n");
}
reset_control_assert(xspi->rstc);
@@ -679,8 +675,7 @@ static int cdns_spi_probe(struct platform_device *pdev)
xspi->ref_clk = devm_clk_get_enabled(&pdev->dev, "ref_clk");
if (IS_ERR(xspi->ref_clk)) {
dev_err(&pdev->dev, "ref_clk clock not found.\n");
- ret = PTR_ERR(xspi->ref_clk);
- goto err_put_ctlr;
+ return PTR_ERR(xspi->ref_clk);
}
if (!spi_controller_is_target(ctlr)) {
@@ -763,8 +758,7 @@ static int cdns_spi_probe(struct platform_device *pdev)
pm_runtime_put_noidle(&pdev->dev);
pm_runtime_dont_use_autosuspend(&pdev->dev);
}
-err_put_ctlr:
- spi_controller_put(ctlr);
+
return ret;
}
@@ -785,8 +779,6 @@ static void cdns_spi_remove(struct platform_device *pdev)
if (!spi_controller_is_target(ctlr))
ret = pm_runtime_get_sync(&pdev->dev);
- spi_controller_get(ctlr);
-
spi_unregister_controller(ctlr);
if (ret >= 0)
@@ -798,8 +790,6 @@ static void cdns_spi_remove(struct platform_device *pdev)
pm_runtime_put_noidle(&pdev->dev);
pm_runtime_dont_use_autosuspend(&pdev->dev);
}
-
- spi_controller_put(ctlr);
}
/**
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 06/19] spi: octeon: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (4 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 05/19] spi: cadence: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 07/19] spi: cavium-thunderx: " Johan Hovold
` (13 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-cavium-octeon.c | 17 ++++-------------
1 file changed, 4 insertions(+), 13 deletions(-)
diff --git a/drivers/spi/spi-cavium-octeon.c b/drivers/spi/spi-cavium-octeon.c
index b95bfa6a3013..28c922c72068 100644
--- a/drivers/spi/spi-cavium-octeon.c
+++ b/drivers/spi/spi-cavium-octeon.c
@@ -23,17 +23,15 @@ static int octeon_spi_probe(struct platform_device *pdev)
struct octeon_spi *p;
int err = -ENOENT;
- host = spi_alloc_host(&pdev->dev, sizeof(struct octeon_spi));
+ host = devm_spi_alloc_host(&pdev->dev, sizeof(struct octeon_spi));
if (!host)
return -ENOMEM;
p = spi_controller_get_devdata(host);
platform_set_drvdata(pdev, host);
reg_base = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(reg_base)) {
- err = PTR_ERR(reg_base);
- goto fail;
- }
+ if (IS_ERR(reg_base))
+ return PTR_ERR(reg_base);
p->register_base = reg_base;
p->sys_freq = octeon_get_io_clock_rate();
@@ -57,15 +55,12 @@ static int octeon_spi_probe(struct platform_device *pdev)
err = spi_register_controller(host);
if (err) {
dev_err(&pdev->dev, "register host failed: %d\n", err);
- goto fail;
+ return err;
}
dev_info(&pdev->dev, "OCTEON SPI bus driver\n");
return 0;
-fail:
- spi_controller_put(host);
- return err;
}
static void octeon_spi_remove(struct platform_device *pdev)
@@ -73,14 +68,10 @@ static void octeon_spi_remove(struct platform_device *pdev)
struct spi_controller *host = platform_get_drvdata(pdev);
struct octeon_spi *p = spi_controller_get_devdata(host);
- spi_controller_get(host);
-
spi_unregister_controller(host);
/* Clear the CSENA* and put everything in a known state. */
writeq(0, p->register_base + OCTEON_SPI_CFG(p));
-
- spi_controller_put(host);
}
static const struct of_device_id octeon_spi_match[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 07/19] spi: cavium-thunderx: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (5 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 06/19] spi: octeon: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 08/19] spi: coldfire-qspi: " Johan Hovold
` (12 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-cavium-thunderx.c | 32 ++++++++-----------------------
1 file changed, 8 insertions(+), 24 deletions(-)
diff --git a/drivers/spi/spi-cavium-thunderx.c b/drivers/spi/spi-cavium-thunderx.c
index f1a9aa696c87..529b4066c922 100644
--- a/drivers/spi/spi-cavium-thunderx.c
+++ b/drivers/spi/spi-cavium-thunderx.c
@@ -24,7 +24,7 @@ static int thunderx_spi_probe(struct pci_dev *pdev,
struct octeon_spi *p;
int ret;
- host = spi_alloc_host(dev, sizeof(struct octeon_spi));
+ host = devm_spi_alloc_host(dev, sizeof(struct octeon_spi));
if (!host)
return -ENOMEM;
@@ -32,17 +32,15 @@ static int thunderx_spi_probe(struct pci_dev *pdev,
ret = pcim_enable_device(pdev);
if (ret)
- goto error;
+ return ret;
ret = pcim_request_all_regions(pdev, DRV_NAME);
if (ret)
- goto error;
+ return ret;
p->register_base = pcim_iomap(pdev, 0, pci_resource_len(pdev, 0));
- if (!p->register_base) {
- ret = -EINVAL;
- goto error;
- }
+ if (!p->register_base)
+ return -EINVAL;
p->regs.config = 0x1000;
p->regs.status = 0x1008;
@@ -50,10 +48,8 @@ static int thunderx_spi_probe(struct pci_dev *pdev,
p->regs.data = 0x1080;
p->clk = devm_clk_get_enabled(dev, NULL);
- if (IS_ERR(p->clk)) {
- ret = PTR_ERR(p->clk);
- goto error;
- }
+ if (IS_ERR(p->clk))
+ return PTR_ERR(p->clk);
p->sys_freq = clk_get_rate(p->clk);
if (!p->sys_freq)
@@ -70,15 +66,7 @@ static int thunderx_spi_probe(struct pci_dev *pdev,
pci_set_drvdata(pdev, host);
- ret = spi_register_controller(host);
- if (ret)
- goto error;
-
- return 0;
-
-error:
- spi_controller_put(host);
- return ret;
+ return spi_register_controller(host);
}
static void thunderx_spi_remove(struct pci_dev *pdev)
@@ -90,14 +78,10 @@ static void thunderx_spi_remove(struct pci_dev *pdev)
if (!p)
return;
- spi_controller_get(host);
-
spi_unregister_controller(host);
/* Put everything in a known state. */
writeq(0, p->register_base + OCTEON_SPI_CFG(p));
-
- spi_controller_put(host);
}
static const struct pci_device_id thunderx_spi_pci_id_table[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 08/19] spi: coldfire-qspi: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (6 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 07/19] spi: cavium-thunderx: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 09/19] spi: dln2: " Johan Hovold
` (11 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-coldfire-qspi.c | 28 ++++++++--------------------
1 file changed, 8 insertions(+), 20 deletions(-)
diff --git a/drivers/spi/spi-coldfire-qspi.c b/drivers/spi/spi-coldfire-qspi.c
index b45f44de85dc..3b175c1da36b 100644
--- a/drivers/spi/spi-coldfire-qspi.c
+++ b/drivers/spi/spi-coldfire-qspi.c
@@ -353,39 +353,33 @@ static int mcfqspi_probe(struct platform_device *pdev)
return -EINVAL;
}
- host = spi_alloc_host(&pdev->dev, sizeof(*mcfqspi));
- if (host == NULL) {
- dev_dbg(&pdev->dev, "spi_alloc_host failed\n");
+ host = devm_spi_alloc_host(&pdev->dev, sizeof(*mcfqspi));
+ if (host == NULL)
return -ENOMEM;
- }
mcfqspi = spi_controller_get_devdata(host);
mcfqspi->iobase = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(mcfqspi->iobase)) {
- status = PTR_ERR(mcfqspi->iobase);
- goto fail0;
- }
+ if (IS_ERR(mcfqspi->iobase))
+ return PTR_ERR(mcfqspi->iobase);
mcfqspi->irq = platform_get_irq(pdev, 0);
if (mcfqspi->irq < 0) {
dev_dbg(&pdev->dev, "platform_get_irq failed\n");
- status = -ENXIO;
- goto fail0;
+ return -ENXIO;
}
status = devm_request_irq(&pdev->dev, mcfqspi->irq, mcfqspi_irq_handler,
0, pdev->name, mcfqspi);
if (status) {
dev_dbg(&pdev->dev, "request_irq failed\n");
- goto fail0;
+ return status;
}
mcfqspi->clk = devm_clk_get_enabled(&pdev->dev, "qspi_clk");
if (IS_ERR(mcfqspi->clk)) {
dev_dbg(&pdev->dev, "clk_get failed\n");
- status = PTR_ERR(mcfqspi->clk);
- goto fail0;
+ return PTR_ERR(mcfqspi->clk);
}
host->bus_num = pdata->bus_num;
@@ -395,7 +389,7 @@ static int mcfqspi_probe(struct platform_device *pdev)
status = mcfqspi_cs_setup(mcfqspi);
if (status) {
dev_dbg(&pdev->dev, "error initializing cs_control\n");
- goto fail0;
+ return status;
}
init_waitqueue_head(&mcfqspi->waitq);
@@ -423,8 +417,6 @@ static int mcfqspi_probe(struct platform_device *pdev)
fail1:
pm_runtime_disable(&pdev->dev);
mcfqspi_cs_teardown(mcfqspi);
-fail0:
- spi_controller_put(host);
dev_dbg(&pdev->dev, "Coldfire QSPI probe failed\n");
@@ -436,8 +428,6 @@ static void mcfqspi_remove(struct platform_device *pdev)
struct spi_controller *host = platform_get_drvdata(pdev);
struct mcfqspi *mcfqspi = spi_controller_get_devdata(host);
- spi_controller_get(host);
-
spi_unregister_controller(host);
pm_runtime_disable(&pdev->dev);
@@ -445,8 +435,6 @@ static void mcfqspi_remove(struct platform_device *pdev)
mcfqspi_wr_qmr(mcfqspi, MCFQSPI_QMR_MSTR);
mcfqspi_cs_teardown(mcfqspi);
-
- spi_controller_put(host);
}
#ifdef CONFIG_PM_SLEEP
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 09/19] spi: dln2: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (7 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 08/19] spi: coldfire-qspi: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 10/19] spi: ep93xx: " Johan Hovold
` (10 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-dln2.c | 26 +++++++++-----------------
1 file changed, 9 insertions(+), 17 deletions(-)
diff --git a/drivers/spi/spi-dln2.c b/drivers/spi/spi-dln2.c
index 392f0d05f508..8333dda7d1e8 100644
--- a/drivers/spi/spi-dln2.c
+++ b/drivers/spi/spi-dln2.c
@@ -684,7 +684,7 @@ static int dln2_spi_probe(struct platform_device *pdev)
struct dln2_platform_data *pdata = dev_get_platdata(&pdev->dev);
int ret;
- host = spi_alloc_host(&pdev->dev, sizeof(*dln2));
+ host = devm_spi_alloc_host(&pdev->dev, sizeof(*dln2));
if (!host)
return -ENOMEM;
@@ -693,10 +693,8 @@ static int dln2_spi_probe(struct platform_device *pdev)
dln2 = spi_controller_get_devdata(host);
dln2->buf = devm_kmalloc(&pdev->dev, DLN2_SPI_BUF_SIZE, GFP_KERNEL);
- if (!dln2->buf) {
- ret = -ENOMEM;
- goto exit_free_host;
- }
+ if (!dln2->buf)
+ return -ENOMEM;
dln2->host = host;
dln2->pdev = pdev;
@@ -709,13 +707,13 @@ static int dln2_spi_probe(struct platform_device *pdev)
ret = dln2_spi_enable(dln2, false);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to disable SPI module\n");
- goto exit_free_host;
+ return ret;
}
ret = dln2_spi_get_cs_num(dln2, &host->num_chipselect);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to get number of CS pins\n");
- goto exit_free_host;
+ return ret;
}
ret = dln2_spi_get_speed_range(dln2,
@@ -723,20 +721,20 @@ static int dln2_spi_probe(struct platform_device *pdev)
&host->max_speed_hz);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to read bus min/max freqs\n");
- goto exit_free_host;
+ return ret;
}
ret = dln2_spi_get_supported_frame_sizes(dln2,
&host->bits_per_word_mask);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to read supported frame sizes\n");
- goto exit_free_host;
+ return ret;
}
ret = dln2_spi_cs_enable_all(dln2, true);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to enable CS pins\n");
- goto exit_free_host;
+ return ret;
}
host->bus_num = -1;
@@ -749,7 +747,7 @@ static int dln2_spi_probe(struct platform_device *pdev)
ret = dln2_spi_enable(dln2, true);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to enable SPI module\n");
- goto exit_free_host;
+ return ret;
}
pm_runtime_set_autosuspend_delay(&pdev->dev,
@@ -772,8 +770,6 @@ static int dln2_spi_probe(struct platform_device *pdev)
if (dln2_spi_enable(dln2, false) < 0)
dev_err(&pdev->dev, "Failed to disable SPI module\n");
-exit_free_host:
- spi_controller_put(host);
return ret;
}
@@ -783,16 +779,12 @@ static void dln2_spi_remove(struct platform_device *pdev)
struct spi_controller *host = platform_get_drvdata(pdev);
struct dln2_spi *dln2 = spi_controller_get_devdata(host);
- spi_controller_get(host);
-
spi_unregister_controller(host);
pm_runtime_disable(&pdev->dev);
if (dln2_spi_enable(dln2, false) < 0)
dev_err(&pdev->dev, "Failed to disable SPI module\n");
-
- spi_controller_put(host);
}
#ifdef CONFIG_PM_SLEEP
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 10/19] spi: ep93xx: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (8 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 09/19] spi: dln2: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 11/19] spi: fsl: " Johan Hovold
` (9 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-ep93xx.c | 22 +++++++---------------
1 file changed, 7 insertions(+), 15 deletions(-)
diff --git a/drivers/spi/spi-ep93xx.c b/drivers/spi/spi-ep93xx.c
index db50018050e5..d7e82d80c35a 100644
--- a/drivers/spi/spi-ep93xx.c
+++ b/drivers/spi/spi-ep93xx.c
@@ -629,7 +629,7 @@ static int ep93xx_spi_probe(struct platform_device *pdev)
if (irq < 0)
return irq;
- host = spi_alloc_host(&pdev->dev, sizeof(*espi));
+ host = devm_spi_alloc_host(&pdev->dev, sizeof(*espi));
if (!host)
return -ENOMEM;
@@ -654,8 +654,7 @@ static int ep93xx_spi_probe(struct platform_device *pdev)
espi->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(espi->clk)) {
dev_err(&pdev->dev, "unable to get spi clock\n");
- error = PTR_ERR(espi->clk);
- goto fail_release_host;
+ return PTR_ERR(espi->clk);
}
/*
@@ -666,22 +665,21 @@ static int ep93xx_spi_probe(struct platform_device *pdev)
host->min_speed_hz = clk_get_rate(espi->clk) / (254 * 256);
espi->mmio = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
- if (IS_ERR(espi->mmio)) {
- error = PTR_ERR(espi->mmio);
- goto fail_release_host;
- }
+ if (IS_ERR(espi->mmio))
+ return PTR_ERR(espi->mmio);
+
espi->sspdr_phys = res->start + SSPDR;
error = devm_request_irq(&pdev->dev, irq, ep93xx_spi_interrupt,
0, "ep93xx-spi", host);
if (error) {
dev_err(&pdev->dev, "failed to request irq\n");
- goto fail_release_host;
+ return error;
}
error = ep93xx_spi_setup_dma(&pdev->dev, espi);
if (error == -EPROBE_DEFER)
- goto fail_release_host;
+ return error;
if (error)
dev_warn(&pdev->dev, "DMA setup failed. Falling back to PIO\n");
@@ -702,8 +700,6 @@ static int ep93xx_spi_probe(struct platform_device *pdev)
fail_free_dma:
ep93xx_spi_release_dma(espi);
-fail_release_host:
- spi_controller_put(host);
return error;
}
@@ -713,13 +709,9 @@ static void ep93xx_spi_remove(struct platform_device *pdev)
struct spi_controller *host = platform_get_drvdata(pdev);
struct ep93xx_spi *espi = spi_controller_get_devdata(host);
- spi_controller_get(host);
-
spi_unregister_controller(host);
ep93xx_spi_release_dma(espi);
-
- spi_controller_put(host);
}
static const struct of_device_id ep93xx_spi_of_ids[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 11/19] spi: fsl: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (9 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 10/19] spi: ep93xx: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 12/19] spi: fsl-espi: " Johan Hovold
` (8 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-fsl-spi.c | 14 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)
diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c
index 1252c41c206f..e45816ef7b65 100644
--- a/drivers/spi/spi-fsl-spi.c
+++ b/drivers/spi/spi-fsl-spi.c
@@ -535,7 +535,7 @@ static struct spi_controller *fsl_spi_probe(struct device *dev,
u32 regval;
int ret = 0;
- host = spi_alloc_host(dev, sizeof(struct mpc8xxx_spi));
+ host = devm_spi_alloc_host(dev, sizeof(struct mpc8xxx_spi));
if (host == NULL) {
ret = -ENOMEM;
goto err;
@@ -559,7 +559,7 @@ static struct spi_controller *fsl_spi_probe(struct device *dev,
ret = fsl_spi_cpm_init(mpc8xxx_spi);
if (ret)
- goto err_cpm_init;
+ goto err;
mpc8xxx_spi->reg_base = devm_ioremap_resource(dev, mem);
if (IS_ERR(mpc8xxx_spi->reg_base)) {
@@ -625,8 +625,6 @@ static struct spi_controller *fsl_spi_probe(struct device *dev,
err_probe:
fsl_spi_cpm_free(mpc8xxx_spi);
-err_cpm_init:
- spi_controller_put(host);
err:
return ERR_PTR(ret);
}
@@ -705,13 +703,9 @@ static void of_fsl_spi_remove(struct platform_device *ofdev)
struct spi_controller *host = platform_get_drvdata(ofdev);
struct mpc8xxx_spi *mpc8xxx_spi = spi_controller_get_devdata(host);
- spi_controller_get(host);
-
spi_unregister_controller(host);
fsl_spi_cpm_free(mpc8xxx_spi);
-
- spi_controller_put(host);
}
static struct platform_driver of_fsl_spi_driver = {
@@ -757,13 +751,9 @@ static void plat_mpc8xxx_spi_remove(struct platform_device *pdev)
struct spi_controller *host = platform_get_drvdata(pdev);
struct mpc8xxx_spi *mpc8xxx_spi = spi_controller_get_devdata(host);
- spi_controller_get(host);
-
spi_unregister_controller(host);
fsl_spi_cpm_free(mpc8xxx_spi);
-
- spi_controller_put(host);
}
MODULE_ALIAS("platform:mpc8xxx_spi");
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 12/19] spi: fsl-espi: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (10 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 11/19] spi: fsl: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 13/19] spi: img-spfi: " Johan Hovold
` (7 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-fsl-espi.c | 20 ++++++--------------
1 file changed, 6 insertions(+), 14 deletions(-)
diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c
index 45b9974ae911..f560bd537f7d 100644
--- a/drivers/spi/spi-fsl-espi.c
+++ b/drivers/spi/spi-fsl-espi.c
@@ -667,7 +667,7 @@ static int fsl_espi_probe(struct device *dev, struct resource *mem,
struct fsl_espi *espi;
int ret;
- host = spi_alloc_host(dev, sizeof(struct fsl_espi));
+ host = devm_spi_alloc_host(dev, sizeof(struct fsl_espi));
if (!host)
return -ENOMEM;
@@ -690,8 +690,7 @@ static int fsl_espi_probe(struct device *dev, struct resource *mem,
espi->spibrg = fsl_get_sys_freq();
if (espi->spibrg == -1) {
dev_err(dev, "Can't get sys frequency!\n");
- ret = -EINVAL;
- goto err_probe;
+ return -EINVAL;
}
/* determined by clock divider fields DIV16/PM in register SPMODEx */
host->min_speed_hz = DIV_ROUND_UP(espi->spibrg, 4 * 16 * 16);
@@ -700,15 +699,13 @@ static int fsl_espi_probe(struct device *dev, struct resource *mem,
init_completion(&espi->done);
espi->reg_base = devm_ioremap_resource(dev, mem);
- if (IS_ERR(espi->reg_base)) {
- ret = PTR_ERR(espi->reg_base);
- goto err_probe;
- }
+ if (IS_ERR(espi->reg_base))
+ return PTR_ERR(espi->reg_base);
/* Register for SPI Interrupt */
ret = devm_request_irq(dev, irq, fsl_espi_irq, 0, "fsl_espi", espi);
if (ret)
- goto err_probe;
+ return ret;
fsl_espi_init_regs(dev, true);
@@ -732,8 +729,7 @@ static int fsl_espi_probe(struct device *dev, struct resource *mem,
pm_runtime_put_noidle(dev);
pm_runtime_disable(dev);
pm_runtime_set_suspended(dev);
-err_probe:
- spi_controller_put(host);
+
return ret;
}
@@ -784,13 +780,9 @@ static void of_fsl_espi_remove(struct platform_device *dev)
{
struct spi_controller *host = platform_get_drvdata(dev);
- spi_controller_get(host);
-
spi_unregister_controller(host);
pm_runtime_disable(&dev->dev);
-
- spi_controller_put(host);
}
#ifdef CONFIG_PM_SLEEP
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 13/19] spi: img-spfi: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (11 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 12/19] spi: fsl-espi: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 14/19] spi: lantiq-ssc: " Johan Hovold
` (6 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-img-spfi.c | 40 ++++++++++++++------------------------
1 file changed, 15 insertions(+), 25 deletions(-)
diff --git a/drivers/spi/spi-img-spfi.c b/drivers/spi/spi-img-spfi.c
index 57625a3ce2f2..aec724e3f824 100644
--- a/drivers/spi/spi-img-spfi.c
+++ b/drivers/spi/spi-img-spfi.c
@@ -530,7 +530,7 @@ static int img_spfi_probe(struct platform_device *pdev)
int ret;
u32 max_speed_hz;
- host = spi_alloc_host(&pdev->dev, sizeof(*spfi));
+ host = devm_spi_alloc_host(&pdev->dev, sizeof(*spfi));
if (!host)
return -ENOMEM;
platform_set_drvdata(pdev, host);
@@ -541,36 +541,32 @@ static int img_spfi_probe(struct platform_device *pdev)
spin_lock_init(&spfi->lock);
spfi->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
- if (IS_ERR(spfi->regs)) {
- ret = PTR_ERR(spfi->regs);
- goto put_spi;
- }
+ if (IS_ERR(spfi->regs))
+ return PTR_ERR(spfi->regs);
+
spfi->phys = res->start;
spfi->irq = platform_get_irq(pdev, 0);
- if (spfi->irq < 0) {
- ret = spfi->irq;
- goto put_spi;
- }
+ if (spfi->irq < 0)
+ return spfi->irq;
+
ret = devm_request_irq(spfi->dev, spfi->irq, img_spfi_irq,
IRQ_TYPE_LEVEL_HIGH, dev_name(spfi->dev), spfi);
if (ret)
- goto put_spi;
+ return ret;
spfi->sys_clk = devm_clk_get(spfi->dev, "sys");
- if (IS_ERR(spfi->sys_clk)) {
- ret = PTR_ERR(spfi->sys_clk);
- goto put_spi;
- }
+ if (IS_ERR(spfi->sys_clk))
+ return PTR_ERR(spfi->sys_clk);
+
spfi->spfi_clk = devm_clk_get(spfi->dev, "spfi");
- if (IS_ERR(spfi->spfi_clk)) {
- ret = PTR_ERR(spfi->spfi_clk);
- goto put_spi;
- }
+ if (IS_ERR(spfi->spfi_clk))
+ return PTR_ERR(spfi->spfi_clk);
ret = clk_prepare_enable(spfi->sys_clk);
if (ret)
- goto put_spi;
+ return ret;
+
ret = clk_prepare_enable(spfi->spfi_clk);
if (ret)
goto disable_pclk;
@@ -658,8 +654,6 @@ static int img_spfi_probe(struct platform_device *pdev)
clk_disable_unprepare(spfi->spfi_clk);
disable_pclk:
clk_disable_unprepare(spfi->sys_clk);
-put_spi:
- spi_controller_put(host);
return ret;
}
@@ -669,8 +663,6 @@ static void img_spfi_remove(struct platform_device *pdev)
struct spi_controller *host = platform_get_drvdata(pdev);
struct img_spfi *spfi = spi_controller_get_devdata(host);
- spi_controller_get(host);
-
spi_unregister_controller(host);
if (spfi->tx_ch)
@@ -683,8 +675,6 @@ static void img_spfi_remove(struct platform_device *pdev)
clk_disable_unprepare(spfi->spfi_clk);
clk_disable_unprepare(spfi->sys_clk);
}
-
- spi_controller_put(host);
}
#ifdef CONFIG_PM
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 14/19] spi: lantiq-ssc: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (12 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 13/19] spi: img-spfi: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 15/19] spi: meson-spicc: " Johan Hovold
` (5 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-lantiq-ssc.c | 28 ++++++++--------------------
1 file changed, 8 insertions(+), 20 deletions(-)
diff --git a/drivers/spi/spi-lantiq-ssc.c b/drivers/spi/spi-lantiq-ssc.c
index 75b9af8cb5db..ecae50a50b14 100644
--- a/drivers/spi/spi-lantiq-ssc.c
+++ b/drivers/spi/spi-lantiq-ssc.c
@@ -913,7 +913,7 @@ static int lantiq_ssc_probe(struct platform_device *pdev)
hwcfg = of_device_get_match_data(dev);
- host = spi_alloc_host(dev, sizeof(struct lantiq_ssc_spi));
+ host = devm_spi_alloc_host(dev, sizeof(struct lantiq_ssc_spi));
if (!host)
return -ENOMEM;
@@ -923,20 +923,16 @@ static int lantiq_ssc_probe(struct platform_device *pdev)
spi->hwcfg = hwcfg;
platform_set_drvdata(pdev, spi);
spi->regbase = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(spi->regbase)) {
- err = PTR_ERR(spi->regbase);
- goto err_host_put;
- }
+ if (IS_ERR(spi->regbase))
+ return PTR_ERR(spi->regbase);
err = hwcfg->cfg_irq(pdev, spi);
if (err)
- goto err_host_put;
+ return err;
spi->spi_clk = devm_clk_get_enabled(dev, "gate");
- if (IS_ERR(spi->spi_clk)) {
- err = PTR_ERR(spi->spi_clk);
- goto err_host_put;
- }
+ if (IS_ERR(spi->spi_clk))
+ return PTR_ERR(spi->spi_clk);
/*
* Use the old clk_get_fpi() function on Lantiq platform, till it
@@ -947,10 +943,8 @@ static int lantiq_ssc_probe(struct platform_device *pdev)
#else
spi->fpi_clk = clk_get(dev, "freq");
#endif
- if (IS_ERR(spi->fpi_clk)) {
- err = PTR_ERR(spi->fpi_clk);
- goto err_host_put;
- }
+ if (IS_ERR(spi->fpi_clk))
+ return PTR_ERR(spi->fpi_clk);
num_cs = 8;
of_property_read_u32(pdev->dev.of_node, "num-cs", &num_cs);
@@ -1006,8 +1000,6 @@ static int lantiq_ssc_probe(struct platform_device *pdev)
destroy_workqueue(spi->wq);
err_clk_put:
clk_put(spi->fpi_clk);
-err_host_put:
- spi_controller_put(host);
return err;
}
@@ -1016,8 +1008,6 @@ static void lantiq_ssc_remove(struct platform_device *pdev)
{
struct lantiq_ssc_spi *spi = platform_get_drvdata(pdev);
- spi_controller_get(spi->host);
-
spi_unregister_controller(spi->host);
lantiq_ssc_writel(spi, 0, LTQ_SPI_IRNEN);
@@ -1028,8 +1018,6 @@ static void lantiq_ssc_remove(struct platform_device *pdev)
destroy_workqueue(spi->wq);
clk_put(spi->fpi_clk);
-
- spi_controller_put(spi->host);
}
static struct platform_driver lantiq_ssc_driver = {
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 15/19] spi: meson-spicc: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (13 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 14/19] spi: lantiq-ssc: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 16/19] spi: mxs: " Johan Hovold
` (4 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-meson-spicc.c | 43 +++++++++++------------------------
1 file changed, 13 insertions(+), 30 deletions(-)
diff --git a/drivers/spi/spi-meson-spicc.c b/drivers/spi/spi-meson-spicc.c
index b80f9f457b66..8ad2ad0c97e2 100644
--- a/drivers/spi/spi-meson-spicc.c
+++ b/drivers/spi/spi-meson-spicc.c
@@ -982,7 +982,7 @@ static int meson_spicc_probe(struct platform_device *pdev)
struct meson_spicc_device *spicc;
int ret, irq;
- host = spi_alloc_host(&pdev->dev, sizeof(*spicc));
+ host = devm_spi_alloc_host(&pdev->dev, sizeof(*spicc));
if (!host) {
dev_err(&pdev->dev, "host allocation failed\n");
return -ENOMEM;
@@ -993,8 +993,7 @@ static int meson_spicc_probe(struct platform_device *pdev)
spicc->data = of_device_get_match_data(&pdev->dev);
if (!spicc->data) {
dev_err(&pdev->dev, "failed to get match data\n");
- ret = -EINVAL;
- goto out_host;
+ return -EINVAL;
}
spicc->pdev = pdev;
@@ -1005,8 +1004,7 @@ static int meson_spicc_probe(struct platform_device *pdev)
spicc->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(spicc->base)) {
dev_err(&pdev->dev, "io resource mapping failed\n");
- ret = PTR_ERR(spicc->base);
- goto out_host;
+ return PTR_ERR(spicc->base);
}
/* Set master mode and enable controller */
@@ -1017,39 +1015,33 @@ static int meson_spicc_probe(struct platform_device *pdev)
writel_relaxed(0, spicc->base + SPICC_INTREG);
irq = platform_get_irq(pdev, 0);
- if (irq < 0) {
- ret = irq;
- goto out_host;
- }
+ if (irq < 0)
+ return irq;
ret = devm_request_irq(&pdev->dev, irq, meson_spicc_irq,
0, NULL, spicc);
if (ret) {
dev_err(&pdev->dev, "irq request failed\n");
- goto out_host;
+ return ret;
}
spicc->core = devm_clk_get_enabled(&pdev->dev, "core");
if (IS_ERR(spicc->core)) {
dev_err(&pdev->dev, "core clock request failed\n");
- ret = PTR_ERR(spicc->core);
- goto out_host;
+ return PTR_ERR(spicc->core);
}
if (spicc->data->has_pclk) {
spicc->pclk = devm_clk_get_enabled(&pdev->dev, "pclk");
if (IS_ERR(spicc->pclk)) {
dev_err(&pdev->dev, "pclk clock request failed\n");
- ret = PTR_ERR(spicc->pclk);
- goto out_host;
+ return PTR_ERR(spicc->pclk);
}
}
spicc->pinctrl = devm_pinctrl_get(&pdev->dev);
- if (IS_ERR(spicc->pinctrl)) {
- ret = PTR_ERR(spicc->pinctrl);
- goto out_host;
- }
+ if (IS_ERR(spicc->pinctrl))
+ return PTR_ERR(spicc->pinctrl);
device_reset_optional(&pdev->dev);
@@ -1070,43 +1062,34 @@ static int meson_spicc_probe(struct platform_device *pdev)
ret = meson_spicc_pow2_clk_init(spicc);
if (ret) {
dev_err(&pdev->dev, "pow2 clock registration failed\n");
- goto out_host;
+ return ret;
}
if (spicc->data->has_enhance_clk_div) {
ret = meson_spicc_enh_clk_init(spicc);
if (ret) {
dev_err(&pdev->dev, "clock registration failed\n");
- goto out_host;
+ return ret;
}
}
ret = spi_register_controller(host);
if (ret) {
dev_err(&pdev->dev, "spi registration failed\n");
- goto out_host;
+ return ret;
}
return 0;
-
-out_host:
- spi_controller_put(host);
-
- return ret;
}
static void meson_spicc_remove(struct platform_device *pdev)
{
struct meson_spicc_device *spicc = platform_get_drvdata(pdev);
- spi_controller_get(spicc->host);
-
spi_unregister_controller(spicc->host);
/* Disable SPI */
writel(0, spicc->base + SPICC_CONREG);
-
- spi_controller_put(spicc->host);
}
static const struct meson_spicc_data meson_spicc_gx_data = {
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 16/19] spi: mxs: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (14 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 15/19] spi: meson-spicc: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 17/19] spi: npcm-pspi: " Johan Hovold
` (3 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-mxs.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/drivers/spi/spi-mxs.c b/drivers/spi/spi-mxs.c
index 0164e04d59a1..fda1d260b296 100644
--- a/drivers/spi/spi-mxs.c
+++ b/drivers/spi/spi-mxs.c
@@ -563,7 +563,7 @@ static int mxs_spi_probe(struct platform_device *pdev)
if (ret)
clk_freq = clk_freq_default;
- host = spi_alloc_host(&pdev->dev, sizeof(*spi));
+ host = devm_spi_alloc_host(&pdev->dev, sizeof(*spi));
if (!host)
return -ENOMEM;
@@ -589,13 +589,12 @@ static int mxs_spi_probe(struct platform_device *pdev)
ret = devm_request_irq(&pdev->dev, irq_err, mxs_ssp_irq_handler, 0,
dev_name(&pdev->dev), ssp);
if (ret)
- goto out_host_free;
+ return ret;
ssp->dmach = dma_request_chan(&pdev->dev, "rx-tx");
if (IS_ERR(ssp->dmach)) {
dev_err(ssp->dev, "Failed to request DMA\n");
- ret = PTR_ERR(ssp->dmach);
- goto out_host_free;
+ return PTR_ERR(ssp->dmach);
}
pm_runtime_enable(ssp->dev);
@@ -635,8 +634,7 @@ static int mxs_spi_probe(struct platform_device *pdev)
pm_runtime_disable(ssp->dev);
out_dma_release:
dma_release_channel(ssp->dmach);
-out_host_free:
- spi_controller_put(host);
+
return ret;
}
@@ -650,8 +648,6 @@ static void mxs_spi_remove(struct platform_device *pdev)
spi = spi_controller_get_devdata(host);
ssp = &spi->ssp;
- spi_controller_get(host);
-
spi_unregister_controller(host);
pm_runtime_disable(&pdev->dev);
@@ -659,8 +655,6 @@ static void mxs_spi_remove(struct platform_device *pdev)
mxs_spi_runtime_suspend(&pdev->dev);
dma_release_channel(ssp->dmach);
-
- spi_controller_put(host);
}
static struct platform_driver mxs_spi_driver = {
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 17/19] spi: npcm-pspi: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (15 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 16/19] spi: mxs: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 18/19] spi: omap2-mcspi: " Johan Hovold
` (2 subsequent siblings)
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-npcm-pspi.c | 19 +++++--------------
1 file changed, 5 insertions(+), 14 deletions(-)
diff --git a/drivers/spi/spi-npcm-pspi.c b/drivers/spi/spi-npcm-pspi.c
index cffef0a5977d..a437a30d636c 100644
--- a/drivers/spi/spi-npcm-pspi.c
+++ b/drivers/spi/spi-npcm-pspi.c
@@ -345,7 +345,7 @@ static int npcm_pspi_probe(struct platform_device *pdev)
int irq;
int ret;
- host = spi_alloc_host(&pdev->dev, sizeof(*priv));
+ host = devm_spi_alloc_host(&pdev->dev, sizeof(*priv));
if (!host)
return -ENOMEM;
@@ -356,21 +356,18 @@ static int npcm_pspi_probe(struct platform_device *pdev)
priv->is_save_param = false;
priv->base = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(priv->base)) {
- ret = PTR_ERR(priv->base);
- goto out_host_put;
- }
+ if (IS_ERR(priv->base))
+ return PTR_ERR(priv->base);
priv->clk = devm_clk_get(&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;
+ return PTR_ERR(priv->clk);
}
ret = clk_prepare_enable(priv->clk);
if (ret)
- goto out_host_put;
+ return ret;
irq = platform_get_irq(pdev, 0);
if (irq < 0) {
@@ -424,8 +421,6 @@ static int npcm_pspi_probe(struct platform_device *pdev)
out_disable_clk:
clk_disable_unprepare(priv->clk);
-out_host_put:
- spi_controller_put(host);
return ret;
}
@@ -434,14 +429,10 @@ static void npcm_pspi_remove(struct platform_device *pdev)
struct spi_controller *host = platform_get_drvdata(pdev);
struct npcm_pspi *priv = spi_controller_get_devdata(host);
- spi_controller_get(host);
-
spi_unregister_controller(host);
npcm_pspi_reset_hw(priv);
clk_disable_unprepare(priv->clk);
-
- spi_controller_put(host);
}
static const struct of_device_id npcm_pspi_match[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 18/19] spi: omap2-mcspi: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (16 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 17/19] spi: npcm-pspi: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-04-30 0:30 ` Mark Brown
2026-04-29 9:13 ` [PATCH 19/19] spi: orion: " Johan Hovold
2026-05-04 13:09 ` (subset) [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Mark Brown
19 siblings, 1 reply; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-omap2-mcspi.c | 25 +++++++++----------------
1 file changed, 9 insertions(+), 16 deletions(-)
diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
index 56b30ff58771..0426adc94ee1 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -1484,9 +1484,9 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
const struct of_device_id *match;
if (of_property_read_bool(node, "spi-slave"))
- ctlr = spi_alloc_target(&pdev->dev, sizeof(*mcspi));
+ ctlr = devm_spi_alloc_target(&pdev->dev, sizeof(*mcspi));
else
- ctlr = spi_alloc_host(&pdev->dev, sizeof(*mcspi));
+ ctlr = devm_spi_alloc_host(&pdev->dev, sizeof(*mcspi));
if (!ctlr)
return -ENOMEM;
@@ -1530,10 +1530,9 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
}
mcspi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &r);
- if (IS_ERR(mcspi->base)) {
- status = PTR_ERR(mcspi->base);
- goto free_ctlr;
- }
+ if (IS_ERR(mcspi->base))
+ return PTR_ERR(mcspi->base);
+
mcspi->phys = r->start + regs_offset;
mcspi->base += regs_offset;
@@ -1544,10 +1543,8 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
mcspi->dma_channels = devm_kcalloc(&pdev->dev, ctlr->num_chipselect,
sizeof(struct omap2_mcspi_dma),
GFP_KERNEL);
- if (mcspi->dma_channels == NULL) {
- status = -ENOMEM;
- goto free_ctlr;
- }
+ if (mcspi->dma_channels == NULL)
+ return -ENOMEM;
for (i = 0; i < ctlr->num_chipselect; i++) {
sprintf(mcspi->dma_channels[i].dma_rx_ch_name, "rx%d", i);
@@ -1556,7 +1553,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
status = omap2_mcspi_request_dma(mcspi,
&mcspi->dma_channels[i]);
if (status == -EPROBE_DEFER)
- goto free_ctlr;
+ return status;
}
status = platform_get_irq(pdev, 0);
@@ -1604,7 +1601,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
pm_runtime_disable(&pdev->dev);
free_ctlr:
omap2_mcspi_release_dma(ctlr);
- spi_controller_put(ctlr);
+
return status;
}
@@ -1613,8 +1610,6 @@ static void omap2_mcspi_remove(struct platform_device *pdev)
struct spi_controller *ctlr = platform_get_drvdata(pdev);
struct omap2_mcspi *mcspi = spi_controller_get_devdata(ctlr);
- spi_controller_get(ctlr);
-
spi_unregister_controller(ctlr);
omap2_mcspi_release_dma(ctlr);
@@ -1622,8 +1617,6 @@ static void omap2_mcspi_remove(struct platform_device *pdev)
pm_runtime_dont_use_autosuspend(mcspi->dev);
pm_runtime_put_sync(mcspi->dev);
pm_runtime_disable(&pdev->dev);
-
- spi_controller_put(ctlr);
}
/* work with hotplug and coldplug */
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH 19/19] spi: orion: switch to managed controller allocation
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (17 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 18/19] spi: omap2-mcspi: " Johan Hovold
@ 2026-04-29 9:13 ` Johan Hovold
2026-05-04 13:09 ` (subset) [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Mark Brown
19 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-29 9:13 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel, Johan Hovold
Switch to device managed controller allocation to simplify error
handling and to avoid having to take another reference during
deregistration.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/spi/spi-orion.c | 26 ++++++++------------------
1 file changed, 8 insertions(+), 18 deletions(-)
diff --git a/drivers/spi/spi-orion.c b/drivers/spi/spi-orion.c
index 64bf215c1804..265708a94984 100644
--- a/drivers/spi/spi-orion.c
+++ b/drivers/spi/spi-orion.c
@@ -651,11 +651,9 @@ static int orion_spi_probe(struct platform_device *pdev)
struct device_node *np;
int status;
- host = spi_alloc_host(&pdev->dev, sizeof(*spi));
- if (host == NULL) {
- dev_dbg(&pdev->dev, "host allocation failed\n");
+ host = devm_spi_alloc_host(&pdev->dev, sizeof(*spi));
+ if (host == NULL)
return -ENOMEM;
- }
if (pdev->id != -1)
host->bus_num = pdev->id;
@@ -689,17 +687,14 @@ static int orion_spi_probe(struct platform_device *pdev)
spi->devdata = devdata;
spi->clk = devm_clk_get_enabled(&pdev->dev, NULL);
- if (IS_ERR(spi->clk)) {
- status = PTR_ERR(spi->clk);
- goto out;
- }
+ if (IS_ERR(spi->clk))
+ return PTR_ERR(spi->clk);
/* The following clock is only used by some SoCs */
spi->axi_clk = devm_clk_get(&pdev->dev, "axi");
- if (PTR_ERR(spi->axi_clk) == -EPROBE_DEFER) {
- status = -EPROBE_DEFER;
- goto out;
- }
+ if (PTR_ERR(spi->axi_clk) == -EPROBE_DEFER)
+ return -EPROBE_DEFER;
+
if (!IS_ERR(spi->axi_clk))
clk_prepare_enable(spi->axi_clk);
@@ -796,8 +791,7 @@ static int orion_spi_probe(struct platform_device *pdev)
pm_runtime_dont_use_autosuspend(&pdev->dev);
out_rel_axi_clk:
clk_disable_unprepare(spi->axi_clk);
-out:
- spi_controller_put(host);
+
return status;
}
@@ -807,15 +801,11 @@ static void orion_spi_remove(struct platform_device *pdev)
struct spi_controller *host = platform_get_drvdata(pdev);
struct orion_spi *spi = spi_controller_get_devdata(host);
- spi_controller_get(host);
-
spi_unregister_controller(host);
pm_runtime_get_sync(&pdev->dev);
clk_disable_unprepare(spi->axi_clk);
- spi_controller_put(host);
-
pm_runtime_disable(&pdev->dev);
pm_runtime_put_noidle(&pdev->dev);
pm_runtime_set_suspended(&pdev->dev);
--
2.53.0
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [PATCH 04/19] spi: bcm63xx-hsspi: switch to managed controller allocation
2026-04-29 9:13 ` [PATCH 04/19] spi: bcm63xx-hsspi: " Johan Hovold
@ 2026-04-29 18:13 ` William Zhang
0 siblings, 0 replies; 26+ messages in thread
From: William Zhang @ 2026-04-29 18:13 UTC (permalink / raw)
To: Johan Hovold
Cc: Mark Brown, Radu Pirea, Ryan Wanner, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 2857 bytes --]
On Wed, Apr 29, 2026 at 2:14 AM Johan Hovold <johan@kernel.org> wrote:
>
> Switch to device managed controller allocation to simplify error
> handling and to avoid having to take another reference during
> deregistration.
>
> Signed-off-by: Johan Hovold <johan@kernel.org>
> ---
> drivers/spi/spi-bcm63xx-hsspi.c | 17 +++++------------
> 1 file changed, 5 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/spi/spi-bcm63xx-hsspi.c b/drivers/spi/spi-bcm63xx-hsspi.c
> index e935e8ab9cfd..58012e1b5ae7 100644
> --- a/drivers/spi/spi-bcm63xx-hsspi.c
> +++ b/drivers/spi/spi-bcm63xx-hsspi.c
> @@ -783,7 +783,7 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)
> "failed get pll clk rate\n");
> }
>
> - host = spi_alloc_host(&pdev->dev, sizeof(*bs));
> + host = devm_spi_alloc_host(&pdev->dev, sizeof(*bs));
> if (!host)
> return dev_err_probe(dev, -ENOMEM, "alloc host no mem\n");
>
> @@ -796,10 +796,8 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)
> bs->fifo = (u8 __iomem *)(bs->regs + HSSPI_FIFO_REG(0));
> bs->wait_mode = HSSPI_WAIT_MODE_POLLING;
> bs->prepend_buf = devm_kzalloc(dev, HSSPI_BUFFER_LEN, GFP_KERNEL);
> - if (!bs->prepend_buf) {
> - ret = -ENOMEM;
> - goto out_put_host;
> - }
> + if (!bs->prepend_buf)
> + return -ENOMEM;
>
> mutex_init(&bs->bus_mutex);
> mutex_init(&bs->msg_mutex);
> @@ -845,7 +843,7 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)
> pdev->name, bs);
>
> if (ret)
> - goto out_put_host;
> + return ret;
> }
>
> pm_runtime_enable(&pdev->dev);
> @@ -869,8 +867,7 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev)
> sysfs_remove_group(&pdev->dev.kobj, &bcm63xx_hsspi_group);
> out_pm_disable:
> pm_runtime_disable(&pdev->dev);
> -out_put_host:
> - spi_controller_put(host);
> +
> return ret;
> }
>
> @@ -880,15 +877,11 @@ static void bcm63xx_hsspi_remove(struct platform_device *pdev)
> struct spi_controller *host = platform_get_drvdata(pdev);
> struct bcm63xx_hsspi *bs = spi_controller_get_devdata(host);
>
> - spi_controller_get(host);
> -
> spi_unregister_controller(host);
>
> /* reset the hardware and block queue progress */
> __raw_writel(0, bs->regs + HSSPI_INT_MASK_REG);
> sysfs_remove_group(&pdev->dev.kobj, &bcm63xx_hsspi_group);
> -
> - spi_controller_put(host);
> }
>
> #ifdef CONFIG_PM_SLEEP
> --
> 2.53.0
>
Acked-by: William Zhang <william.zhang@broadcom.com>
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 5473 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 18/19] spi: omap2-mcspi: switch to managed controller allocation
2026-04-29 9:13 ` [PATCH 18/19] spi: omap2-mcspi: " Johan Hovold
@ 2026-04-30 0:30 ` Mark Brown
2026-04-30 7:12 ` Johan Hovold
0 siblings, 1 reply; 26+ messages in thread
From: Mark Brown @ 2026-04-30 0:30 UTC (permalink / raw)
To: Johan Hovold
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 875 bytes --]
On Wed, Apr 29, 2026 at 11:13:32AM +0200, Johan Hovold wrote:
> Switch to device managed controller allocation to simplify error
> handling and to avoid having to take another reference during
> deregistration.
> @@ -1556,7 +1553,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
> status = omap2_mcspi_request_dma(mcspi,
> &mcspi->dma_channels[i]);
> if (status == -EPROBE_DEFER)
> - goto free_ctlr;
> + return status;
> }
Here we return directly...
> @@ -1604,7 +1601,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
> pm_runtime_disable(&pdev->dev);
> free_ctlr:
> omap2_mcspi_release_dma(ctlr);
> - spi_controller_put(ctlr);
...which skips the _release_dma() as well as the put - I think the label
needs a rename and the goto keeping (or some more refactoring to also
use devm for the DMA, but that's more work).
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 18/19] spi: omap2-mcspi: switch to managed controller allocation
2026-04-30 0:30 ` Mark Brown
@ 2026-04-30 7:12 ` Johan Hovold
2026-04-30 10:05 ` Mark Brown
0 siblings, 1 reply; 26+ messages in thread
From: Johan Hovold @ 2026-04-30 7:12 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1320 bytes --]
On Thu, Apr 30, 2026 at 09:30:40AM +0900, Mark Brown wrote:
> On Wed, Apr 29, 2026 at 11:13:32AM +0200, Johan Hovold wrote:
> > Switch to device managed controller allocation to simplify error
> > handling and to avoid having to take another reference during
> > deregistration.
>
> > @@ -1556,7 +1553,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
> > status = omap2_mcspi_request_dma(mcspi,
> > &mcspi->dma_channels[i]);
> > if (status == -EPROBE_DEFER)
> > - goto free_ctlr;
> > + return status;
> > }
>
> Here we return directly...
>
> > @@ -1604,7 +1601,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
> > pm_runtime_disable(&pdev->dev);
> > free_ctlr:
> > omap2_mcspi_release_dma(ctlr);
> > - spi_controller_put(ctlr);
>
> ...which skips the _release_dma() as well as the put - I think the label
> needs a rename and the goto keeping (or some more refactoring to also
> use devm for the DMA, but that's more work).
This works as intended since omap2_mcspi_request_dma() cleans up after
itself on failure.
I can send a follow-up renaming the error label as this is arguably not
an issue introduced by this patch even if it makes it more noticeable.
Or do you prefer a v2 (posted separately from the series)?
Johan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 265 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 18/19] spi: omap2-mcspi: switch to managed controller allocation
2026-04-30 7:12 ` Johan Hovold
@ 2026-04-30 10:05 ` Mark Brown
2026-04-30 10:12 ` Johan Hovold
0 siblings, 1 reply; 26+ messages in thread
From: Mark Brown @ 2026-04-30 10:05 UTC (permalink / raw)
To: Johan Hovold
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 880 bytes --]
On Thu, Apr 30, 2026 at 09:12:49AM +0200, Johan Hovold wrote:
> On Thu, Apr 30, 2026 at 09:30:40AM +0900, Mark Brown wrote:
> > On Wed, Apr 29, 2026 at 11:13:32AM +0200, Johan Hovold wrote:
> > > @@ -1556,7 +1553,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
> > > status = omap2_mcspi_request_dma(mcspi,
> > > &mcspi->dma_channels[i]);
> > > if (status == -EPROBE_DEFER)
> > > - goto free_ctlr;
> > > + return status;
> > > }
> > Here we return directly...
> > ...which skips the _release_dma() as well as the put - I think the label
> > needs a rename and the goto keeping (or some more refactoring to also
> > use devm for the DMA, but that's more work).
> This works as intended since omap2_mcspi_request_dma() cleans up after
> itself on failure.
This is in a loop so there might be previous calls that succeeded and
need unwinding.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 18/19] spi: omap2-mcspi: switch to managed controller allocation
2026-04-30 10:05 ` Mark Brown
@ 2026-04-30 10:12 ` Johan Hovold
0 siblings, 0 replies; 26+ messages in thread
From: Johan Hovold @ 2026-04-30 10:12 UTC (permalink / raw)
To: Mark Brown
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1095 bytes --]
On Thu, Apr 30, 2026 at 07:05:11PM +0900, Mark Brown wrote:
> On Thu, Apr 30, 2026 at 09:12:49AM +0200, Johan Hovold wrote:
> > On Thu, Apr 30, 2026 at 09:30:40AM +0900, Mark Brown wrote:
> > > On Wed, Apr 29, 2026 at 11:13:32AM +0200, Johan Hovold wrote:
> > > > @@ -1556,7 +1553,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
> > > > status = omap2_mcspi_request_dma(mcspi,
> > > > &mcspi->dma_channels[i]);
> > > > if (status == -EPROBE_DEFER)
> > > > - goto free_ctlr;
> > > > + return status;
> > > > }
>
> > > Here we return directly...
>
> > > ...which skips the _release_dma() as well as the put - I think the label
> > > needs a rename and the goto keeping (or some more refactoring to also
> > > use devm for the DMA, but that's more work).
>
> > This works as intended since omap2_mcspi_request_dma() cleans up after
> > itself on failure.
>
> This is in a loop so there might be previous calls that succeeded and
> need unwinding.
Ah, sorry, I missed that. I'll send a v2 separate from the rest of
series.
Johan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 265 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: (subset) [PATCH 00/19] spi: switch to managed controller allocation (part 1/3)
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
` (18 preceding siblings ...)
2026-04-29 9:13 ` [PATCH 19/19] spi: orion: " Johan Hovold
@ 2026-05-04 13:09 ` Mark Brown
19 siblings, 0 replies; 26+ messages in thread
From: Mark Brown @ 2026-05-04 13:09 UTC (permalink / raw)
To: Johan Hovold
Cc: Radu Pirea, Ryan Wanner, William Zhang, Kursad Oney, Jonas Gorski,
linux-spi, linux-kernel
On Wed, 29 Apr 2026 11:13:14 +0200, Johan Hovold wrote:
> spi: switch to managed controller allocation (part 1/3)
>
> In preparation for fixing the SPI controller API so that it no longer
> drops a reference when deregistering (non-managed) controllers (cf.
> [1]), this series converts drivers using non-managed registration to use
> managed allocation.
>
> [...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-7.2
Thanks!
[01/19] spi: at91-usart: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/5113e2307710
[02/19] spi: atmel: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/ebf99aebc458
[03/19] spi: bcm63xx: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/414c359e7295
[04/19] spi: bcm63xx-hsspi: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/fe010594a857
[05/19] spi: cadence: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/83c4ded3917d
[06/19] spi: octeon: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/eab6ce941217
[07/19] spi: cavium-thunderx: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/fcca78c08638
[08/19] spi: coldfire-qspi: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/079c7a626c7d
[09/19] spi: dln2: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/6bd505e710aa
[10/19] spi: ep93xx: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/01500b2cb05a
[11/19] spi: fsl: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/6afe041c2ce9
[12/19] spi: fsl-espi: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/9979501afa4a
[13/19] spi: img-spfi: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/8015cac85a69
[14/19] spi: lantiq-ssc: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/8cecd707d535
[15/19] spi: meson-spicc: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/69fb8784c81e
[16/19] spi: mxs: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/f7c857559eb2
[17/19] spi: npcm-pspi: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/c0c6875f0b7d
[19/19] spi: orion: switch to managed controller allocation
https://git.kernel.org/broonie/spi/c/bdab3707ddfd
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2026-05-05 1:09 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-29 9:13 [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Johan Hovold
2026-04-29 9:13 ` [PATCH 01/19] spi: at91-usart: switch to managed controller allocation Johan Hovold
2026-04-29 9:13 ` [PATCH 02/19] spi: atmel: " Johan Hovold
2026-04-29 9:13 ` [PATCH 03/19] spi: bcm63xx: " Johan Hovold
2026-04-29 9:13 ` [PATCH 04/19] spi: bcm63xx-hsspi: " Johan Hovold
2026-04-29 18:13 ` William Zhang
2026-04-29 9:13 ` [PATCH 05/19] spi: cadence: " Johan Hovold
2026-04-29 9:13 ` [PATCH 06/19] spi: octeon: " Johan Hovold
2026-04-29 9:13 ` [PATCH 07/19] spi: cavium-thunderx: " Johan Hovold
2026-04-29 9:13 ` [PATCH 08/19] spi: coldfire-qspi: " Johan Hovold
2026-04-29 9:13 ` [PATCH 09/19] spi: dln2: " Johan Hovold
2026-04-29 9:13 ` [PATCH 10/19] spi: ep93xx: " Johan Hovold
2026-04-29 9:13 ` [PATCH 11/19] spi: fsl: " Johan Hovold
2026-04-29 9:13 ` [PATCH 12/19] spi: fsl-espi: " Johan Hovold
2026-04-29 9:13 ` [PATCH 13/19] spi: img-spfi: " Johan Hovold
2026-04-29 9:13 ` [PATCH 14/19] spi: lantiq-ssc: " Johan Hovold
2026-04-29 9:13 ` [PATCH 15/19] spi: meson-spicc: " Johan Hovold
2026-04-29 9:13 ` [PATCH 16/19] spi: mxs: " Johan Hovold
2026-04-29 9:13 ` [PATCH 17/19] spi: npcm-pspi: " Johan Hovold
2026-04-29 9:13 ` [PATCH 18/19] spi: omap2-mcspi: " Johan Hovold
2026-04-30 0:30 ` Mark Brown
2026-04-30 7:12 ` Johan Hovold
2026-04-30 10:05 ` Mark Brown
2026-04-30 10:12 ` Johan Hovold
2026-04-29 9:13 ` [PATCH 19/19] spi: orion: " Johan Hovold
2026-05-04 13:09 ` (subset) [PATCH 00/19] spi: switch to managed controller allocation (part 1/3) Mark Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox