diff mbox series

mtd: rawnand: arasan: Fix missing de-registration of NAND chip-selects

Message ID Z021Z-cFOJ-Vw3ud@UBUNTU-PF54DSY0
State New
Headers show
Series mtd: rawnand: arasan: Fix missing de-registration of NAND chip-selects | expand

Commit Message

Maciej Andrzejewski Dec. 2, 2024, 1:25 p.m. UTC
The NAND chip-selects are registered for the Arasan driver during
initialization but are not de-registered when the driver is unloaded. As a
result, if the driver is loaded again, the chip-selects remain registered
and busy, making them unavailable for use.

Fixes: 197b88fecc50ee3c7a22415db81eae0b9126f20e ("mtd: rawnand: arasan: Add new Arasan NAND controller")
Cc: stable@vger.kernel.org
Signed-off-by: Maciej Andrzejewski ICEYE <maciej.andrzejewski@m-works.net>
---
 drivers/mtd/nand/raw/arasan-nand-controller.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Miquel Raynal Dec. 2, 2024, 1:46 p.m. UTC | #1
Hi Maciej,

On 02/12/2024 at 14:25:59 +01, Maciej Andrzejewski <maciej.andrzejewski@m-works.net> wrote:

> The NAND chip-selects are registered for the Arasan driver during
> initialization but are not de-registered when the driver is unloaded. As a
> result, if the driver is loaded again, the chip-selects remain registered
> and busy, making them unavailable for use.

Good point!

> Fixes: 197b88fecc50ee3c7a22415db81eae0b9126f20e ("mtd: rawnand: arasan: Add new Arasan NAND controller")

This should be a 12-digit sha only. FYI in my .gitconfig I have the
following alias:

     fixes = show -s --format='Fixes: %h (\"%s\")'

It was correct in your previous patch :)

> Cc: stable@vger.kernel.org
> Signed-off-by: Maciej Andrzejewski ICEYE <maciej.andrzejewski@m-works.net>

Otherwise looks good to me!

Thanks,
Miquèl
diff mbox series

Patch

diff --git a/drivers/mtd/nand/raw/arasan-nand-controller.c b/drivers/mtd/nand/raw/arasan-nand-controller.c
index 5436ec4a8fde..36c23fa186f2 100644
--- a/drivers/mtd/nand/raw/arasan-nand-controller.c
+++ b/drivers/mtd/nand/raw/arasan-nand-controller.c
@@ -1478,8 +1478,15 @@  static int anfc_probe(struct platform_device *pdev)
 
 static void anfc_remove(struct platform_device *pdev)
 {
+	int i;
 	struct arasan_nfc *nfc = platform_get_drvdata(pdev);
 
+	for (i = 0; i < nfc->ncs; i++) {
+		if (nfc->cs_array[i]) {
+			gpiod_put(nfc->cs_array[i]);
+		}
+	}
+
 	anfc_chips_cleanup(nfc);
 }