LF-99 hwmon: mag3110: correct processing order after probe error
Disable regulator first after an error occurs when probe. Remove the directly return code when probe error occurs. Acked-by: Fugang Duan <fugang.duan@nxp.com> Signed-off-by: Clark Wang <xiaoning.wang@nxp.com>
This commit is contained in:
parent
347a845787
commit
d2615a1773
|
@ -450,21 +450,27 @@ static int mag3110_probe(struct i2c_client *client,
|
||||||
if (!i2c_check_functionality(adapter,
|
if (!i2c_check_functionality(adapter,
|
||||||
I2C_FUNC_SMBUS_BYTE |
|
I2C_FUNC_SMBUS_BYTE |
|
||||||
I2C_FUNC_SMBUS_BYTE_DATA |
|
I2C_FUNC_SMBUS_BYTE_DATA |
|
||||||
I2C_FUNC_SMBUS_I2C_BLOCK))
|
I2C_FUNC_SMBUS_I2C_BLOCK)) {
|
||||||
return -EIO;
|
ret = -EIO;
|
||||||
|
goto error_disable_reg;
|
||||||
|
}
|
||||||
|
|
||||||
dev_info(&client->dev, "check mag3110 chip ID\n");
|
dev_info(&client->dev, "check mag3110 chip ID\n");
|
||||||
ret = mag3110_read_reg(client, MAG3110_WHO_AM_I);
|
ret = mag3110_read_reg(client, MAG3110_WHO_AM_I);
|
||||||
|
|
||||||
if (MAG3110_ID != ret) {
|
if (MAG3110_ID != ret) {
|
||||||
dev_err(&client->dev,
|
dev_err(&client->dev,
|
||||||
"read chip ID 0x%x is not equal to 0x%x!\n", ret,
|
"read chip ID 0x%x is not equal to 0x%x!\n", ret,
|
||||||
MAG3110_ID);
|
MAG3110_ID);
|
||||||
return -EINVAL;
|
ret = -EINVAL;
|
||||||
|
goto error_disable_reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
data = kzalloc(sizeof(struct mag3110_data), GFP_KERNEL);
|
data = kzalloc(sizeof(struct mag3110_data), GFP_KERNEL);
|
||||||
if (!data)
|
if (!data) {
|
||||||
return -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
goto error_disable_reg;
|
||||||
|
}
|
||||||
|
|
||||||
data->client = client;
|
data->client = client;
|
||||||
i2c_set_clientdata(client, data);
|
i2c_set_clientdata(client, data);
|
||||||
/* Init queue */
|
/* Init queue */
|
||||||
|
@ -544,15 +550,15 @@ error_rm_poll_dev:
|
||||||
error_free_poll_dev:
|
error_free_poll_dev:
|
||||||
input_free_polled_device(data->poll_dev);
|
input_free_polled_device(data->poll_dev);
|
||||||
error_rm_hwmon_dev:
|
error_rm_hwmon_dev:
|
||||||
if (!IS_ERR(vdd))
|
|
||||||
regulator_disable(vdd);
|
|
||||||
if (!IS_ERR(vdd_io))
|
|
||||||
regulator_disable(vdd_io);
|
|
||||||
|
|
||||||
hwmon_device_unregister(data->hwmon_dev);
|
hwmon_device_unregister(data->hwmon_dev);
|
||||||
|
|
||||||
kfree(data);
|
kfree(data);
|
||||||
mag3110_pdata = NULL;
|
mag3110_pdata = NULL;
|
||||||
|
error_disable_reg:
|
||||||
|
if (!IS_ERR(vdd))
|
||||||
|
regulator_disable(vdd);
|
||||||
|
if (!IS_ERR(vdd_io))
|
||||||
|
regulator_disable(vdd_io);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue