]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
spi: mtk-snfi: unregister ECC engine on probe failure and remove() callback
authorPei Xiao <xiaopei01@kylinos.cn>
Tue, 7 Apr 2026 07:26:59 +0000 (15:26 +0800)
committerMark Brown <broonie@kernel.org>
Fri, 10 Apr 2026 12:46:19 +0000 (13:46 +0100)
mtk_snand_probe() registers the on-host NAND ECC engine, but teardown was
missing from both probe unwind and remove-time cleanup. Add a devm cleanup
action after successful registration so
nand_ecc_unregister_on_host_hw_engine() runs automatically on probe
failures and during device removal.

Fixes: 764f1b748164 ("spi: add driver for MTK SPI NAND Flash Interface")
Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
Link: https://patch.msgid.link/20263f885f1a9c9d559f95275298cd6de4b11ed5.1775546401.git.xiaopei01@kylinos.cn
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-mtk-snfi.c

index 437edbd658aa2fd25154dd1c4fcf3da7b4791c6c..73fa84475f0e445c217fce29ff481671392649a6 100644 (file)
@@ -1303,6 +1303,13 @@ static const struct spi_controller_mem_caps mtk_snand_mem_caps = {
        .ecc = true,
 };
 
+static void mtk_unregister_ecc_engine(void *data)
+{
+       struct nand_ecc_engine *eng = data;
+
+       nand_ecc_unregister_on_host_hw_engine(eng);
+}
+
 static irqreturn_t mtk_snand_irq(int irq, void *id)
 {
        struct mtk_snand *snf = id;
@@ -1443,6 +1450,13 @@ static int mtk_snand_probe(struct platform_device *pdev)
                goto release_ecc;
        }
 
+       ret = devm_add_action_or_reset(&pdev->dev, mtk_unregister_ecc_engine,
+                                      &ms->ecc_eng);
+       if (ret) {
+               dev_err_probe(&pdev->dev, ret, "failed to add ECC unregister action\n");
+               goto release_ecc;
+       }
+
        ctlr->num_chipselect = 1;
        ctlr->mem_ops = &mtk_snand_mem_ops;
        ctlr->mem_caps = &mtk_snand_mem_caps;