diff options
-rw-r--r-- | drivers/hwmon/lm90.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c index 3309a511e8e..22b14a68e35 100644 --- a/drivers/hwmon/lm90.c +++ b/drivers/hwmon/lm90.c | |||
@@ -1336,6 +1336,15 @@ static void lm90_remove_files(struct i2c_client *client, struct lm90_data *data) | |||
1336 | sysfs_remove_group(&dev->kobj, &lm90_group); | 1336 | sysfs_remove_group(&dev->kobj, &lm90_group); |
1337 | } | 1337 | } |
1338 | 1338 | ||
1339 | static void lm90_restore_conf(struct i2c_client *client, struct lm90_data *data) | ||
1340 | { | ||
1341 | /* Restore initial configuration */ | ||
1342 | i2c_smbus_write_byte_data(client, LM90_REG_W_CONVRATE, | ||
1343 | data->convrate_orig); | ||
1344 | i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, | ||
1345 | data->config_orig); | ||
1346 | } | ||
1347 | |||
1339 | static void lm90_init_client(struct i2c_client *client) | 1348 | static void lm90_init_client(struct i2c_client *client) |
1340 | { | 1349 | { |
1341 | u8 config, convrate; | 1350 | u8 config, convrate; |
@@ -1424,7 +1433,7 @@ static int lm90_probe(struct i2c_client *client, | |||
1424 | /* Register sysfs hooks */ | 1433 | /* Register sysfs hooks */ |
1425 | err = sysfs_create_group(&dev->kobj, &lm90_group); | 1434 | err = sysfs_create_group(&dev->kobj, &lm90_group); |
1426 | if (err) | 1435 | if (err) |
1427 | goto exit_free; | 1436 | goto exit_restore; |
1428 | if (client->flags & I2C_CLIENT_PEC) { | 1437 | if (client->flags & I2C_CLIENT_PEC) { |
1429 | err = device_create_file(dev, &dev_attr_pec); | 1438 | err = device_create_file(dev, &dev_attr_pec); |
1430 | if (err) | 1439 | if (err) |
@@ -1463,7 +1472,8 @@ static int lm90_probe(struct i2c_client *client, | |||
1463 | 1472 | ||
1464 | exit_remove_files: | 1473 | exit_remove_files: |
1465 | lm90_remove_files(client, data); | 1474 | lm90_remove_files(client, data); |
1466 | exit_free: | 1475 | exit_restore: |
1476 | lm90_restore_conf(client, data); | ||
1467 | kfree(data); | 1477 | kfree(data); |
1468 | exit: | 1478 | exit: |
1469 | return err; | 1479 | return err; |
@@ -1475,12 +1485,7 @@ static int lm90_remove(struct i2c_client *client) | |||
1475 | 1485 | ||
1476 | hwmon_device_unregister(data->hwmon_dev); | 1486 | hwmon_device_unregister(data->hwmon_dev); |
1477 | lm90_remove_files(client, data); | 1487 | lm90_remove_files(client, data); |
1478 | 1488 | lm90_restore_conf(client, data); | |
1479 | /* Restore initial configuration */ | ||
1480 | i2c_smbus_write_byte_data(client, LM90_REG_W_CONVRATE, | ||
1481 | data->convrate_orig); | ||
1482 | i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, | ||
1483 | data->config_orig); | ||
1484 | 1489 | ||
1485 | kfree(data); | 1490 | kfree(data); |
1486 | return 0; | 1491 | return 0; |