hwmon: (w83795) Delay reading limit registers
authorJean Delvare <khali@linux-fr.org>
Thu, 28 Oct 2010 18:31:48 +0000 (20:31 +0200)
committerJean Delvare <khali@endymion.delvare>
Thu, 28 Oct 2010 18:31:48 +0000 (20:31 +0200)
Wait until we need the limit register values, instead of pre-reading
them. This saves 544 ms on modprobe on my test system. Obviously this
time is added when first running "sensors" or any other monitoring
application, but I think it is better than slowing down the boot.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
drivers/hwmon/w83795.c

index 511bced1ee97c64e1f7acd43db5f8716ab31d948..6464a52b134b9ac5ab57662801b69e98b681b019 100644 (file)
@@ -371,6 +371,7 @@ struct w83795_data {
        u8 beeps[6];            /* Register value */
 
        char valid;
+       char valid_limits;
 };
 
 /*
@@ -498,6 +499,8 @@ static void w83795_update_limits(struct i2c_client *client)
        /* Read beep settings */
        for (i = 0; i < ARRAY_SIZE(data->beeps); i++)
                data->beeps[i] = w83795_read(client, W83795_REG_BEEP(i));
+
+       data->valid_limits = 1;
 }
 
 static void w83795_update_pwm_config(struct i2c_client *client)
@@ -564,6 +567,9 @@ static struct w83795_data *w83795_update_device(struct device *dev)
 
        mutex_lock(&data->update_lock);
 
+       if (!data->valid_limits)
+               w83795_update_limits(client);
+
        if (!(time_after(jiffies, data->last_updated + HZ * 2)
              || !data->valid))
                goto END;
@@ -2017,7 +2023,6 @@ static int w83795_probe(struct i2c_client *client,
        }
 
        data->has_gain = w83795_read(client, W83795_REG_VMIGB_CTRL) & 0x0f;
-       w83795_update_limits(client);
 
        /* pwm and smart fan */
        if (data->chip_type == w83795g)