FAILED: patch "[PATCH] spi: st-ssc4: fix controller deregistration" failed to apply to 6.6-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x 19857374010d06ca6a2f7c2c53464122eb804df0
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026051546-fable-equator-195c@gregkh' --subject-prefix 'PATCH 6.6.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 19857374010d06ca6a2f7c2c53464122eb804df0 Mon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Fri, 10 Apr 2026 10:17:47 +0200
Subject: [PATCH] spi: st-ssc4: fix controller deregistration
Make sure to deregister the controller before disabling underlying resources like clocks during driver unbind.
drivers/spi/spi-st-ssc4.c +7 -1
@@ -349,7 +349,7 @@ static int spi_st_probe(struct platform_device *pdev)platform_set_drvdata (pdev, host); - ret =devm_spi_register_controller (&pdev->dev, host); + ret =spi_register_controller (host);if (ret) {dev_err (&pdev->dev,"Failed to register host\n" ); goto rpm_disable;
@@ -371,10 +371,16 @@ static void spi_st_remove(struct platform_device *pdev)struct spi_controller *host =platform_get_drvdata (pdev);struct spi_st *spi_st =spi_controller_get_devdata (host); +spi_controller_get (host); + +spi_unregister_controller (host); +pm_runtime_disable (&pdev->dev);clk_disable_unprepare (spi_st->clk); +spi_controller_put (host); +pinctrl_pm_select_sleep_state (&pdev->dev); }
Sasha Levin
maintainerPATCH 1/2 spi: st-ssc4: switch to use modern name
From: Yang Yingliang <[email protected]>
[ Upstream commit e6b7e64cb11966b26646a362677ca5a08481157e ]
Change legacy name master/slave to modern name host/target or controller.
No functional changed.
Stable-dep-of: 19857374010d ("spi: st-ssc4: fix controller deregistration")
--- drivers/spi/spi-st-ssc4.c | 70 +++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 35 deletions(-)
drivers/spi/spi-st-ssc4.c +35 -35
@@ -6,7 +6,7 @@* Patrice Chotard <[email protected]> * Lee Jones <[email protected]> * -* SPI master mode controller driver, used in STMicroelectronics devices. +* SPI host mode controller driver, used in STMicroelectronics devices. */ #include <linux/clk.h>
@@ -115,10 +115,10 @@ static void ssc_read_rx_fifo(struct spi_st *spi_st) spi_st->words_remaining -= count; } -static int spi_st_transfer_one (struct spi_master *master, +static int spi_st_transfer_one (struct spi_controller *host,struct spi_device *spi,struct spi_transfer *t) { -struct spi_st *spi_st =spi_master_get_devdata (master); +struct spi_st *spi_st =spi_controller_get_devdata (host);uint32_t ctl =0 ;/* Setup transfer */
@@ -165,7 +165,7 @@ static int spi_st_transfer_one(struct spi_master *master,if (ctl)writel_relaxed (ctl, spi_st->base +SSC_CTL ); -spi_finalize_current_transfer (spi->master); +spi_finalize_current_transfer (spi->controller);return t->len; }
@@ -174,7 +174,7 @@ static int spi_st_transfer_one(struct spi_master *master,#define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST | SPI_LOOP | SPI_CS_HIGH)static int spi_st_setup (struct spi_device *spi) { -struct spi_st *spi_st =spi_master_get_devdata (spi->master); +struct spi_st *spi_st =spi_controller_get_devdata (spi->controller);u32 spi_st_clk, sscbrg, var;u32 hz = spi->max_speed_hz;
@@ -274,35 +274,35 @@ static irqreturn_t spi_st_irq(int irq, void *dev_id)static int spi_st_probe (struct platform_device *pdev) {struct device_node *np = pdev->dev.of_node; -struct spi_master *master; +struct spi_controller *host;struct spi_st *spi_st;int irq, ret =0 ;u32 var; - master =spi_alloc_master (&pdev->dev,sizeof (*spi_st)); -if (!master) + host =spi_alloc_host (&pdev->dev,sizeof (*spi_st)); +if (!host)return -ENOMEM ; - master->dev.of_node = np; - master->mode_bits =MODEBITS ; - master->setup = spi_st_setup; - master->transfer_one = spi_st_transfer_one; - master->bits_per_word_mask =SPI_BPW_MASK (8 ) |SPI_BPW_MASK (16 ); - master->auto_runtime_pm = true; - master->bus_num = pdev->id; - master->use_gpio_descriptors = true; - spi_st =spi_master_get_devdata (master); + host->dev.of_node = np; + host->mode_bits =MODEBITS ; + host->setup = spi_st_setup; + host->transfer_one = spi_st_transfer_one; + host->bits_per_word_mask =SPI_BPW_MASK (8 ) |SPI_BPW_MASK (16 ); + host->auto_runtime_pm = true; + host->bus_num = pdev->id; + host->use_gpio_descriptors = true; + spi_st =spi_controller_get_devdata (host); spi_st->clk =devm_clk_get (&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_master; + goto put_host; } ret =clk_prepare_enable (spi_st->clk);if (ret) - goto put_master; + goto put_host;init_completion (&spi_st->done);
@@ -324,7 +324,7 @@ static int spi_st_probe(struct platform_device *pdev) var &= ~SSC_CTL_SR ;writel_relaxed (var, spi_st->base +SSC_CTL ); -/* Set SSC into slave mode before reconfiguring PIO pins */ +/* Set SSC into target mode before reconfiguring PIO pins */ var =readl_relaxed (spi_st->base +SSC_CTL ); var &= ~SSC_CTL_MS ;writel_relaxed (var, spi_st->base +SSC_CTL );
@@ -347,11 +347,11 @@ static int spi_st_probe(struct platform_device *pdev)pm_runtime_set_active (&pdev->dev);pm_runtime_enable (&pdev->dev); -platform_set_drvdata (pdev, master); +platform_set_drvdata (pdev, host); - ret =devm_spi_register_master (&pdev->dev, master); + ret =devm_spi_register_controller (&pdev->dev, host);if (ret) { -dev_err (&pdev->dev,"Failed to register master\n" ); +dev_err (&pdev->dev,"Failed to register host\n" ); goto rpm_disable; }
@@ -361,15 +361,15 @@ static int spi_st_probe(struct platform_device *pdev)pm_runtime_disable (&pdev->dev); clk_disable:clk_disable_unprepare (spi_st->clk); -put_master: -spi_master_put (master); +put_host: +spi_controller_put (host);return ret; }static void spi_st_remove (struct platform_device *pdev) { -struct spi_master *master =platform_get_drvdata (pdev); -struct spi_st *spi_st =spi_master_get_devdata (master); +struct spi_controller *host =platform_get_drvdata (pdev); +struct spi_st *spi_st =spi_controller_get_devdata (host);pm_runtime_disable (&pdev->dev);
@@ -381,8 +381,8 @@ static void spi_st_remove(struct platform_device *pdev)#ifdef CONFIG_PM static int spi_st_runtime_suspend (struct device *dev) { -struct spi_master *master =dev_get_drvdata (dev); -struct spi_st *spi_st =spi_master_get_devdata (master); +struct spi_controller *host =dev_get_drvdata (dev); +struct spi_st *spi_st =spi_controller_get_devdata (host);writel_relaxed (0 , spi_st->base +SSC_IEN );pinctrl_pm_select_sleep_state (dev);
@@ -394,8 +394,8 @@ static int spi_st_runtime_suspend(struct device *dev)static int spi_st_runtime_resume (struct device *dev) { -struct spi_master *master =dev_get_drvdata (dev); -struct spi_st *spi_st =spi_master_get_devdata (master); +struct spi_controller *host =dev_get_drvdata (dev); +struct spi_st *spi_st =spi_controller_get_devdata (host);int ret; ret =clk_prepare_enable (spi_st->clk);
@@ -408,10 +408,10 @@ static int spi_st_runtime_resume(struct device *dev)#ifdef CONFIG_PM_SLEEP static int spi_st_suspend (struct device *dev) { -struct spi_master *master =dev_get_drvdata (dev); +struct spi_controller *host =dev_get_drvdata (dev);int ret; - ret =spi_master_suspend (master); + ret =spi_controller_suspend (host);if (ret)return ret;
@@ -420,10 +420,10 @@ static int spi_st_suspend(struct device *dev)static int spi_st_resume (struct device *dev) { -struct spi_master *master =dev_get_drvdata (dev); +struct spi_controller *host =dev_get_drvdata (dev);int ret; - ret =spi_master_resume (master); + ret =spi_controller_resume (host);if (ret)return ret;
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/2 spi: st-ssc4: fix controller deregistration
From: Johan Hovold <[email protected]>
[ Upstream commit 19857374010d06ca6a2f7c2c53464122eb804df0 ]
Make sure to deregister the controller before disabling underlying resources like clocks during driver unbind.
--- drivers/spi/spi-st-ssc4.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
drivers/spi/spi-st-ssc4.c +7 -1
@@ -349,7 +349,7 @@ static int spi_st_probe(struct platform_device *pdev)platform_set_drvdata (pdev, host); - ret =devm_spi_register_controller (&pdev->dev, host); + ret =spi_register_controller (host);if (ret) {dev_err (&pdev->dev,"Failed to register host\n" ); goto rpm_disable;
@@ -371,10 +371,16 @@ static void spi_st_remove(struct platform_device *pdev)struct spi_controller *host =platform_get_drvdata (pdev);struct spi_st *spi_st =spi_controller_get_devdata (host); +spi_controller_get (host); + +spi_unregister_controller (host); +pm_runtime_disable (&pdev->dev);clk_disable_unprepare (spi_st->clk); +spi_controller_put (host); +pinctrl_pm_select_sleep_state (&pdev->dev); }
Signature · 1 line
2.53.0