mtd: rawnand: ingenic: handle ECC clock enable failures

ingenic_ecc_get() obtains a provider device reference and then enables
the ECC clock before returning the ECC handle.

The clk_prepare_enable() return value is currently ignored.  If enabling
the clock fails, the function still returns the ECC handle and keeps the
provider device reference even though the acquire operation did not
complete.

Return the clock enable error and drop the provider device reference on
that failure path.

Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
This commit is contained in:
Pengpeng Hou
2026-06-15 14:33:32 +08:00
committed by Miquel Raynal
parent 82d9a2b45b
commit 1a8b2951ba

View File

@@ -67,6 +67,7 @@ static struct ingenic_ecc *ingenic_ecc_get(struct device_node *np)
{
struct platform_device *pdev;
struct ingenic_ecc *ecc;
int ret;
pdev = of_find_device_by_node(np);
if (!pdev)
@@ -78,7 +79,11 @@ static struct ingenic_ecc *ingenic_ecc_get(struct device_node *np)
}
ecc = platform_get_drvdata(pdev);
clk_prepare_enable(ecc->clk);
ret = clk_prepare_enable(ecc->clk);
if (ret) {
put_device(&pdev->dev);
return ERR_PTR(ret);
}
return ecc;
}