]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
hwmon: (jc42) Don't reset hysteresis on device removal
authorJean Delvare <khali@linux-fr.org>
Thu, 26 Jul 2012 20:18:43 +0000 (22:18 +0200)
committerGuenter Roeck <linux@roeck-us.net>
Fri, 27 Jul 2012 20:59:22 +0000 (13:59 -0700)
Restoring the configuration register on device removal has the side
effect of also resetting the hysteresis value. This is inconsistent as
the other limits are not reset, only hysteresis. So, following the
principle of least surprise, preserve the hysteresis value when
restoring the configuration register.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Cc: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/jc42.c

index 44f189ed414ab439734d1da86a8553c108bd9334..e21e43c13156911989267fb555d24e5b98ddb67e 100644 (file)
@@ -534,9 +534,16 @@ static int jc42_remove(struct i2c_client *client)
        struct jc42_data *data = i2c_get_clientdata(client);
        hwmon_device_unregister(data->hwmon_dev);
        sysfs_remove_group(&client->dev.kobj, &jc42_group);
-       if (data->config != data->orig_config)
-               i2c_smbus_write_word_swapped(client, JC42_REG_CONFIG,
-                                            data->orig_config);
+
+       /* Restore original configuration except hysteresis */
+       if ((data->config & ~JC42_CFG_HYST_MASK) !=
+           (data->orig_config & ~JC42_CFG_HYST_MASK)) {
+               int config;
+
+               config = (data->orig_config & ~JC42_CFG_HYST_MASK)
+                 | (data->config & JC42_CFG_HYST_MASK);
+               i2c_smbus_write_word_swapped(client, JC42_REG_CONFIG, config);
+       }
        return 0;
 }