| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: Peter Rosin <peda@axentia.se> |
| Date: Sun, 7 May 2017 07:16:30 +0200 |
| Subject: i2c: mux: reg: put away the parent i2c adapter on probe failure |
| |
| From: Peter Rosin <peda@axentia.se> |
| |
| |
| [ Upstream commit 68118e0e73aa3a6291c8b9eb1ee708e05f110cea ] |
| |
| It is only prudent to let go of resources that are not used. |
| |
| Fixes: b3fdd32799d8 ("i2c: mux: Add register-based mux i2c-mux-reg") |
| Signed-off-by: Peter Rosin <peda@axentia.se> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/i2c/muxes/i2c-mux-reg.c | 17 ++++++++++++----- |
| 1 file changed, 12 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/i2c/muxes/i2c-mux-reg.c |
| +++ b/drivers/i2c/muxes/i2c-mux-reg.c |
| @@ -196,20 +196,25 @@ static int i2c_mux_reg_probe(struct plat |
| res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| mux->data.reg_size = resource_size(res); |
| mux->data.reg = devm_ioremap_resource(&pdev->dev, res); |
| - if (IS_ERR(mux->data.reg)) |
| - return PTR_ERR(mux->data.reg); |
| + if (IS_ERR(mux->data.reg)) { |
| + ret = PTR_ERR(mux->data.reg); |
| + goto err_put_parent; |
| + } |
| } |
| |
| if (mux->data.reg_size != 4 && mux->data.reg_size != 2 && |
| mux->data.reg_size != 1) { |
| dev_err(&pdev->dev, "Invalid register size\n"); |
| - return -EINVAL; |
| + ret = -EINVAL; |
| + goto err_put_parent; |
| } |
| |
| muxc = i2c_mux_alloc(parent, &pdev->dev, mux->data.n_values, 0, 0, |
| i2c_mux_reg_select, NULL); |
| - if (!muxc) |
| - return -ENOMEM; |
| + if (!muxc) { |
| + ret = -ENOMEM; |
| + goto err_put_parent; |
| + } |
| muxc->priv = mux; |
| |
| platform_set_drvdata(pdev, muxc); |
| @@ -235,6 +240,8 @@ static int i2c_mux_reg_probe(struct plat |
| |
| add_adapter_failed: |
| i2c_mux_del_adapters(muxc); |
| +err_put_parent: |
| + i2c_put_adapter(parent); |
| |
| return ret; |
| } |