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>

authored by Christophe JAILLET and committed by Greg Kroah-Hartman 12b38ea0 5c8fe583

+15 -6
+15 -6
drivers/staging/hikey9xx/hisi-spmi-controller.c
··· 278 278 iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); 279 279 if (!iores) { 280 280 dev_err(&pdev->dev, "can not get resource!\n"); 281 - return -EINVAL; 281 + ret = -EINVAL; 282 + goto err_put_controller; 282 283 } 283 284 284 285 spmi_controller->base = devm_ioremap(&pdev->dev, iores->start, 285 286 resource_size(iores)); 286 287 if (!spmi_controller->base) { 287 288 dev_err(&pdev->dev, "can not remap base addr!\n"); 288 - return -EADDRNOTAVAIL; 289 + ret = -EADDRNOTAVAIL; 290 + goto err_put_controller; 289 291 } 290 292 291 293 ret = of_property_read_u32(pdev->dev.of_node, "spmi-channel", 292 294 &spmi_controller->channel); 293 295 if (ret) { 294 296 dev_err(&pdev->dev, "can not get channel\n"); 295 - return -ENODEV; 297 + ret = -ENODEV; 298 + goto err_put_controller; 296 299 } 297 300 298 301 platform_set_drvdata(pdev, spmi_controller); ··· 312 309 ctrl->write_cmd = spmi_write_cmd; 313 310 314 311 ret = spmi_controller_add(ctrl); 315 - if (ret) 316 - dev_err(&pdev->dev, "spmi_add_controller failed with error %d!\n", ret); 312 + if (ret) { 313 + dev_err(&pdev->dev, "spmi_controller_add failed with error %d!\n", ret); 314 + goto err_put_controller; 315 + } 317 316 317 + return 0; 318 + 319 + err_put_controller: 320 + spmi_controller_put(ctrl); 318 321 return ret; 319 322 } 320 323 ··· 329 320 struct spmi_controller *ctrl = platform_get_drvdata(pdev); 330 321 331 322 spmi_controller_remove(ctrl); 332 - kfree(ctrl); 323 + spmi_controller_put(ctrl); 333 324 return 0; 334 325 } 335 326