From f5ac851512e048aadbb77a37f9ae310914715f72 Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Thu, 28 Oct 2010 20:31:47 +0200 Subject: [PATCH] --- yaml --- r: 220493 b: refs/heads/master c: c1a792a6eea42d88a99e6ace215b22fbdb76c7b6 h: refs/heads/master i: 220491: 478ffa6bee1780efc9108734c54cb6982da8935a v: v3 --- [refs] | 2 +- trunk/drivers/hwmon/w83795.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index fd929f8028d5..a2fd958ead24 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 02728ffef9c2cf067e654e832b8c282a8a4d0b16 +refs/heads/master: c1a792a6eea42d88a99e6ace215b22fbdb76c7b6 diff --git a/trunk/drivers/hwmon/w83795.c b/trunk/drivers/hwmon/w83795.c index fd70a7b46295..aea3275f5dae 100644 --- a/trunk/drivers/hwmon/w83795.c +++ b/trunk/drivers/hwmon/w83795.c @@ -1986,6 +1986,9 @@ static int w83795_probe(struct i2c_client *client, data->in[i][IN_READ] = tmp; } for (i = 0; i < IN_LSB_REG_NUM; i++) { + if ((i == 2 && data->chip_type == w83795adg) || + (i >= 4 && !(data->has_in & (1 << (i + 11))))) + continue; data->in_lsb[i][IN_MAX] = w83795_read(client, IN_LSB_REG(i, IN_MAX)); data->in_lsb[i][IN_LOW] = @@ -1995,13 +1998,17 @@ static int w83795_probe(struct i2c_client *client, /* First update fan and limits */ for (i = 0; i < ARRAY_SIZE(data->fan); i++) { + /* Each register contains LSB for 2 fans, but we want to + * read it only once to save time */ + if ((i & 1) == 0 && (data->has_fan & (3 << i))) + tmp = w83795_read(client, W83795_REG_FAN_MIN_LSB(i)); + if (!(data->has_fan & (1 << i))) continue; data->fan_min[i] = w83795_read(client, W83795_REG_FAN_MIN_HL(i)) << 4; data->fan_min[i] |= - (w83795_read(client, W83795_REG_FAN_MIN_LSB(i)) >> - W83795_REG_FAN_MIN_LSB_SHIFT(i)) & 0x0F; + (tmp >> W83795_REG_FAN_MIN_LSB_SHIFT(i)) & 0x0F; data->fan[i] = w83795_read(client, W83795_REG_FAN(i)) << 4; data->fan[i] |= (w83795_read(client, W83795_REG_VRLSB) >> 4) & 0x0F;