hwmon: (max6650) Simplify alarm handling
authorGuenter Roeck <linux@roeck-us.net>
Fri, 7 Jun 2019 17:23:21 +0000 (10:23 -0700)
committerGuenter Roeck <linux@roeck-us.net>
Mon, 24 Jun 2019 01:33:01 +0000 (18:33 -0700)
Instead of re-reading the alarm register after reporting an alarm,
mark cached values as invalid. While this results in always reading all
data on subsequent reads, it is quite unlikely that such reads will
actually happen before the cache times out. The upside is avoiding
unnecessary unconditional i2c read operations.

Cc: Jean-Francois Dagenais <jeff.dagenais@gmail.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/max6650.c

index 2edee4ca5cae9f97b5dc589289c758469a9edf1b..045e67f738461730f28d8cf52d79b15af161248d 100644 (file)
@@ -512,15 +512,12 @@ static ssize_t alarm_show(struct device *dev,
 {
        struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
        struct max6650_data *data = max6650_update_device(dev);
-       struct i2c_client *client = data->client;
-       int alarm = 0;
+       bool alarm = data->alarm & attr->index;
 
-       if (data->alarm & attr->index) {
+       if (alarm) {
                mutex_lock(&data->update_lock);
-               alarm = 1;
                data->alarm &= ~attr->index;
-               data->alarm |= i2c_smbus_read_byte_data(client,
-                                                       MAX6650_REG_ALARM);
+               data->valid = false;
                mutex_unlock(&data->update_lock);
        }