mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
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:
committed by
Miquel Raynal
parent
82d9a2b45b
commit
1a8b2951ba
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user