Commit 12b38ea0 authored by Christophe JAILLET's avatar Christophe JAILLET Committed by Greg Kroah-Hartman
Browse files

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: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/20201213151105.137731-1-christophe.jaillet@wanadoo.fr


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5c8fe583
Loading
Loading
Loading
Loading
+15 −6
Original line number Original line Diff line number Diff line
@@ -278,21 +278,24 @@ static int spmi_controller_probe(struct platform_device *pdev)
	iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!iores) {
	if (!iores) {
		dev_err(&pdev->dev, "can not get resource!\n");
		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,
	spmi_controller->base = devm_ioremap(&pdev->dev, iores->start,
					     resource_size(iores));
					     resource_size(iores));
	if (!spmi_controller->base) {
	if (!spmi_controller->base) {
		dev_err(&pdev->dev, "can not remap base addr!\n");
		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",
	ret = of_property_read_u32(pdev->dev.of_node, "spmi-channel",
				   &spmi_controller->channel);
				   &spmi_controller->channel);
	if (ret) {
	if (ret) {
		dev_err(&pdev->dev, "can not get channel\n");
		dev_err(&pdev->dev, "can not get channel\n");
		return -ENODEV;
		ret = -ENODEV;
		goto err_put_controller;
	}
	}


	platform_set_drvdata(pdev, spmi_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;
	ctrl->write_cmd = spmi_write_cmd;


	ret = spmi_controller_add(ctrl);
	ret = spmi_controller_add(ctrl);
	if (ret)
	if (ret) {
		dev_err(&pdev->dev, "spmi_add_controller failed with error %d!\n", 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;
	return ret;
}
}


@@ -320,7 +329,7 @@ static int spmi_del_controller(struct platform_device *pdev)
	struct spmi_controller *ctrl = platform_get_drvdata(pdev);
	struct spmi_controller *ctrl = platform_get_drvdata(pdev);


	spmi_controller_remove(ctrl);
	spmi_controller_remove(ctrl);
	kfree(ctrl);
	spmi_controller_put(ctrl);
	return 0;
	return 0;
}
}