mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
staging: spmi: hisi-spmi-controller: Fix some error handling paths
IN the probe function, if an error occurs after calling 'spmi_controller_alloc()', it must be undone by a corresponding 'spmi_controller_put() call. In the remove function, use 'spmi_controller_put(ctrl)' instead of 'kfree(ctrl)'. While a it fix an error message (s/spmi_add_controller/spmi_controller_add/) Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Link: https://lore.kernel.org/r/20201213151105.137731-1-christophe.jaillet@wanadoo.fr Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5c8fe583cc
commit
12b38ea040
@ -278,21 +278,24 @@ static int spmi_controller_probe(struct platform_device *pdev)
|
||||
iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!iores) {
|
||||
dev_err(&pdev->dev, "can not get resource!\n");
|
||||
return -EINVAL;
|
||||
ret = -EINVAL;
|
||||
goto err_put_controller;
|
||||
}
|
||||
|
||||
spmi_controller->base = devm_ioremap(&pdev->dev, iores->start,
|
||||
resource_size(iores));
|
||||
if (!spmi_controller->base) {
|
||||
dev_err(&pdev->dev, "can not remap base addr!\n");
|
||||
return -EADDRNOTAVAIL;
|
||||
ret = -EADDRNOTAVAIL;
|
||||
goto err_put_controller;
|
||||
}
|
||||
|
||||
ret = of_property_read_u32(pdev->dev.of_node, "spmi-channel",
|
||||
&spmi_controller->channel);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "can not get channel\n");
|
||||
return -ENODEV;
|
||||
ret = -ENODEV;
|
||||
goto err_put_controller;
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, spmi_controller);
|
||||
@ -309,9 +312,15 @@ static int spmi_controller_probe(struct platform_device *pdev)
|
||||
ctrl->write_cmd = spmi_write_cmd;
|
||||
|
||||
ret = spmi_controller_add(ctrl);
|
||||
if (ret)
|
||||
dev_err(&pdev->dev, "spmi_add_controller failed with error %d!\n", ret);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "spmi_controller_add failed with error %d!\n", ret);
|
||||
goto err_put_controller;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_put_controller:
|
||||
spmi_controller_put(ctrl);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -320,7 +329,7 @@ static int spmi_del_controller(struct platform_device *pdev)
|
||||
struct spmi_controller *ctrl = platform_get_drvdata(pdev);
|
||||
|
||||
spmi_controller_remove(ctrl);
|
||||
kfree(ctrl);
|
||||
spmi_controller_put(ctrl);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user