aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hwmon/lm90.c21
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
1339static 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
1339static void lm90_init_client(struct i2c_client *client) 1348static 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
1464exit_remove_files: 1473exit_remove_files:
1465 lm90_remove_files(client, data); 1474 lm90_remove_files(client, data);
1466exit_free: 1475exit_restore:
1476 lm90_restore_conf(client, data);
1467 kfree(data); 1477 kfree(data);
1468exit: 1478exit:
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;