pinctrl: k210: Fix k210_fpioa_probe()

In k210_fpioa_probe(), add missing calls to clk_disable_unprepare() in
case of error after cenabling the clk and pclk clocks. Also add missing
error handling when enabling pclk.

Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Fixes: d4c34d09ab ("pinctrl: Add RISC-V Canaan Kendryte K210 FPIOA driver")
Cc: <stable@vger.kernel.org>
Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Link: https://lore.kernel.org/r/20210806004311.52859-1-damien.lemoal@wdc.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
Damien Le Moal 2021-08-06 09:43:11 +09:00 committed by Linus Walleij
parent d1dee81416
commit 31697ef7f3
1 changed files with 20 additions and 6 deletions

View File

@ -950,23 +950,37 @@ static int k210_fpioa_probe(struct platform_device *pdev)
return ret;
pdata->pclk = devm_clk_get_optional(dev, "pclk");
if (!IS_ERR(pdata->pclk))
clk_prepare_enable(pdata->pclk);
if (!IS_ERR(pdata->pclk)) {
ret = clk_prepare_enable(pdata->pclk);
if (ret)
goto disable_clk;
}
pdata->sysctl_map =
syscon_regmap_lookup_by_phandle_args(np,
"canaan,k210-sysctl-power",
1, &pdata->power_offset);
if (IS_ERR(pdata->sysctl_map))
return PTR_ERR(pdata->sysctl_map);
if (IS_ERR(pdata->sysctl_map)) {
ret = PTR_ERR(pdata->sysctl_map);
goto disable_pclk;
}
k210_fpioa_init_ties(pdata);
pdata->pctl = pinctrl_register(&k210_pinctrl_desc, dev, (void *)pdata);
if (IS_ERR(pdata->pctl))
return PTR_ERR(pdata->pctl);
if (IS_ERR(pdata->pctl)) {
ret = PTR_ERR(pdata->pctl);
goto disable_pclk;
}
return 0;
disable_pclk:
clk_disable_unprepare(pdata->pclk);
disable_clk:
clk_disable_unprepare(pdata->clk);
return ret;
}
static const struct of_device_id k210_fpioa_dt_ids[] = {