nvmem: mxs-ocotp: Use devm_add_action_or_reset() for cleanup
Use devm_add_action_or_reset() for cleanup to call clk_unprepare(), which can simplify the error handling in .probe, and .remove callback can be dropped. Signed-off-by: Anson Huang <Anson.Huang@nxp.com> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Link: https://lore.kernel.org/r/20200323150007.7487-5-srinivas.kandagatla@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
4bd5a15d93
Коммит
bbde5709ee
|
@ -130,6 +130,11 @@ static const struct of_device_id mxs_ocotp_match[] = {
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, mxs_ocotp_match);
|
MODULE_DEVICE_TABLE(of, mxs_ocotp_match);
|
||||||
|
|
||||||
|
static void mxs_ocotp_action(void *data)
|
||||||
|
{
|
||||||
|
clk_unprepare(data);
|
||||||
|
}
|
||||||
|
|
||||||
static int mxs_ocotp_probe(struct platform_device *pdev)
|
static int mxs_ocotp_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
|
@ -160,39 +165,26 @@ static int mxs_ocotp_probe(struct platform_device *pdev)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = devm_add_action_or_reset(&pdev->dev, mxs_ocotp_action, otp->clk);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
data = match->data;
|
data = match->data;
|
||||||
|
|
||||||
ocotp_config.size = data->size;
|
ocotp_config.size = data->size;
|
||||||
ocotp_config.priv = otp;
|
ocotp_config.priv = otp;
|
||||||
ocotp_config.dev = dev;
|
ocotp_config.dev = dev;
|
||||||
otp->nvmem = devm_nvmem_register(dev, &ocotp_config);
|
otp->nvmem = devm_nvmem_register(dev, &ocotp_config);
|
||||||
if (IS_ERR(otp->nvmem)) {
|
if (IS_ERR(otp->nvmem))
|
||||||
ret = PTR_ERR(otp->nvmem);
|
return PTR_ERR(otp->nvmem);
|
||||||
goto err_clk;
|
|
||||||
}
|
|
||||||
|
|
||||||
platform_set_drvdata(pdev, otp);
|
platform_set_drvdata(pdev, otp);
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
err_clk:
|
|
||||||
clk_unprepare(otp->clk);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int mxs_ocotp_remove(struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
struct mxs_ocotp *otp = platform_get_drvdata(pdev);
|
|
||||||
|
|
||||||
clk_unprepare(otp->clk);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct platform_driver mxs_ocotp_driver = {
|
static struct platform_driver mxs_ocotp_driver = {
|
||||||
.probe = mxs_ocotp_probe,
|
.probe = mxs_ocotp_probe,
|
||||||
.remove = mxs_ocotp_remove,
|
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "mxs-ocotp",
|
.name = "mxs-ocotp",
|
||||||
.of_match_table = mxs_ocotp_match,
|
.of_match_table = mxs_ocotp_match,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче