diff options
| author | Jean Delvare <khali@linux-fr.org> | 2005-06-05 14:32:27 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2005-06-22 00:52:04 -0400 |
| commit | bc51ae1159c0c9a34d2400a8449e1fca3ee965b4 (patch) | |
| tree | a7bef5ee693b9b35a34ccf8361caab7578254c30 | |
| parent | 1a86c05121a3f56b4b928ed43f9f8ffc1376d802 (diff) | |
[PATCH] I2C: lm63 uses new sysfs callbacks
I updated the lm63 hardware monitoring driver to take benefit of Yani
Ioannou's new sysfs callback capabilities.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
| -rw-r--r-- | drivers/i2c/chips/lm63.c | 257 |
1 files changed, 137 insertions, 120 deletions
diff --git a/drivers/i2c/chips/lm63.c b/drivers/i2c/chips/lm63.c index 18b2876e8df6..a1fd12bd615f 100644 --- a/drivers/i2c/chips/lm63.c +++ b/drivers/i2c/chips/lm63.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * lm63.c - driver for the National Semiconductor LM63 temperature sensor | 2 | * lm63.c - driver for the National Semiconductor LM63 temperature sensor |
| 3 | * with integrated fan control | 3 | * with integrated fan control |
| 4 | * Copyright (C) 2004 Jean Delvare <khali@linux-fr.org> | 4 | * Copyright (C) 2004-2005 Jean Delvare <khali@linux-fr.org> |
| 5 | * Based on the lm90 driver. | 5 | * Based on the lm90 driver. |
| 6 | * | 6 | * |
| 7 | * The LM63 is a sensor chip made by National Semiconductor. It measures | 7 | * The LM63 is a sensor chip made by National Semiconductor. It measures |
| @@ -43,6 +43,7 @@ | |||
| 43 | #include <linux/jiffies.h> | 43 | #include <linux/jiffies.h> |
| 44 | #include <linux/i2c.h> | 44 | #include <linux/i2c.h> |
| 45 | #include <linux/i2c-sensor.h> | 45 | #include <linux/i2c-sensor.h> |
| 46 | #include <linux/i2c-sysfs.h> | ||
| 46 | 47 | ||
| 47 | /* | 48 | /* |
| 48 | * Addresses to scan | 49 | * Addresses to scan |
| @@ -157,16 +158,16 @@ struct lm63_data { | |||
| 157 | 158 | ||
| 158 | /* registers values */ | 159 | /* registers values */ |
| 159 | u8 config, config_fan; | 160 | u8 config, config_fan; |
| 160 | u16 fan1_input; | 161 | u16 fan[2]; /* 0: input |
| 161 | u16 fan1_low; | 162 | 1: low limit */ |
| 162 | u8 pwm1_freq; | 163 | u8 pwm1_freq; |
| 163 | u8 pwm1_value; | 164 | u8 pwm1_value; |
| 164 | s8 temp1_input; | 165 | s8 temp8[3]; /* 0: local input |
| 165 | s8 temp1_high; | 166 | 1: local high limit |
| 166 | s16 temp2_input; | 167 | 2: remote critical limit */ |
| 167 | s16 temp2_high; | 168 | s16 temp11[3]; /* 0: remote input |
| 168 | s16 temp2_low; | 169 | 1: remote low limit |
| 169 | s8 temp2_crit; | 170 | 2: remote high limit */ |
| 170 | u8 temp2_crit_hyst; | 171 | u8 temp2_crit_hyst; |
| 171 | u8 alarms; | 172 | u8 alarms; |
| 172 | }; | 173 | }; |
| @@ -175,33 +176,33 @@ struct lm63_data { | |||
| 175 | * Sysfs callback functions and files | 176 | * Sysfs callback functions and files |
| 176 | */ | 177 | */ |
| 177 | 178 | ||
| 178 | #define show_fan(value) \ | 179 | static ssize_t show_fan(struct device *dev, struct device_attribute *devattr, |
| 179 | static ssize_t show_##value(struct device *dev, struct device_attribute *attr, char *buf) \ | 180 | char *buf) |
| 180 | { \ | 181 | { |
| 181 | struct lm63_data *data = lm63_update_device(dev); \ | 182 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); |
| 182 | return sprintf(buf, "%d\n", FAN_FROM_REG(data->value)); \ | 183 | struct lm63_data *data = lm63_update_device(dev); |
| 184 | return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[attr->index])); | ||
| 183 | } | 185 | } |
| 184 | show_fan(fan1_input); | ||
| 185 | show_fan(fan1_low); | ||
| 186 | 186 | ||
| 187 | static ssize_t set_fan1_low(struct device *dev, struct device_attribute *attr, const char *buf, | 187 | static ssize_t set_fan(struct device *dev, struct device_attribute *dummy, |
| 188 | size_t count) | 188 | const char *buf, size_t count) |
| 189 | { | 189 | { |
| 190 | struct i2c_client *client = to_i2c_client(dev); | 190 | struct i2c_client *client = to_i2c_client(dev); |
| 191 | struct lm63_data *data = i2c_get_clientdata(client); | 191 | struct lm63_data *data = i2c_get_clientdata(client); |
| 192 | unsigned long val = simple_strtoul(buf, NULL, 10); | 192 | unsigned long val = simple_strtoul(buf, NULL, 10); |
| 193 | 193 | ||
| 194 | down(&data->update_lock); | 194 | down(&data->update_lock); |
| 195 | data->fan1_low = FAN_TO_REG(val); | 195 | data->fan[1] = FAN_TO_REG(val); |
| 196 | i2c_smbus_write_byte_data(client, LM63_REG_TACH_LIMIT_LSB, | 196 | i2c_smbus_write_byte_data(client, LM63_REG_TACH_LIMIT_LSB, |
| 197 | data->fan1_low & 0xFF); | 197 | data->fan[1] & 0xFF); |
| 198 | i2c_smbus_write_byte_data(client, LM63_REG_TACH_LIMIT_MSB, | 198 | i2c_smbus_write_byte_data(client, LM63_REG_TACH_LIMIT_MSB, |
| 199 | data->fan1_low >> 8); | 199 | data->fan[1] >> 8); |
| 200 | up(&data->update_lock); | 200 | up(&data->update_lock); |
| 201 | return count; | 201 | return count; |
| 202 | } | 202 | } |
| 203 | 203 | ||
| 204 | static ssize_t show_pwm1(struct device *dev, struct device_attribute *attr, char *buf) | 204 | static ssize_t show_pwm1(struct device *dev, struct device_attribute *dummy, |
| 205 | char *buf) | ||
| 205 | { | 206 | { |
| 206 | struct lm63_data *data = lm63_update_device(dev); | 207 | struct lm63_data *data = lm63_update_device(dev); |
| 207 | return sprintf(buf, "%d\n", data->pwm1_value >= 2 * data->pwm1_freq ? | 208 | return sprintf(buf, "%d\n", data->pwm1_value >= 2 * data->pwm1_freq ? |
| @@ -209,7 +210,8 @@ static ssize_t show_pwm1(struct device *dev, struct device_attribute *attr, char | |||
| 209 | (2 * data->pwm1_freq)); | 210 | (2 * data->pwm1_freq)); |
| 210 | } | 211 | } |
| 211 | 212 | ||
| 212 | static ssize_t set_pwm1(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) | 213 | static ssize_t set_pwm1(struct device *dev, struct device_attribute *dummy, |
| 214 | const char *buf, size_t count) | ||
| 213 | { | 215 | { |
| 214 | struct i2c_client *client = to_i2c_client(dev); | 216 | struct i2c_client *client = to_i2c_client(dev); |
| 215 | struct lm63_data *data = i2c_get_clientdata(client); | 217 | struct lm63_data *data = i2c_get_clientdata(client); |
| @@ -228,77 +230,83 @@ static ssize_t set_pwm1(struct device *dev, struct device_attribute *attr, const | |||
| 228 | return count; | 230 | return count; |
| 229 | } | 231 | } |
| 230 | 232 | ||
| 231 | static ssize_t show_pwm1_enable(struct device *dev, struct device_attribute *attr, char *buf) | 233 | static ssize_t show_pwm1_enable(struct device *dev, struct device_attribute *dummy, |
| 234 | char *buf) | ||
| 232 | { | 235 | { |
| 233 | struct lm63_data *data = lm63_update_device(dev); | 236 | struct lm63_data *data = lm63_update_device(dev); |
| 234 | return sprintf(buf, "%d\n", data->config_fan & 0x20 ? 1 : 2); | 237 | return sprintf(buf, "%d\n", data->config_fan & 0x20 ? 1 : 2); |
| 235 | } | 238 | } |
| 236 | 239 | ||
| 237 | #define show_temp8(value) \ | 240 | static ssize_t show_temp8(struct device *dev, struct device_attribute *devattr, |
| 238 | static ssize_t show_##value(struct device *dev, struct device_attribute *attr, char *buf) \ | 241 | char *buf) |
| 239 | { \ | 242 | { |
| 240 | struct lm63_data *data = lm63_update_device(dev); \ | 243 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); |
| 241 | return sprintf(buf, "%d\n", TEMP8_FROM_REG(data->value)); \ | 244 | struct lm63_data *data = lm63_update_device(dev); |
| 245 | return sprintf(buf, "%d\n", TEMP8_FROM_REG(data->temp8[attr->index])); | ||
| 242 | } | 246 | } |
| 243 | #define show_temp11(value) \ | 247 | |
| 244 | static ssize_t show_##value(struct device *dev, struct device_attribute *attr, char *buf) \ | 248 | static ssize_t set_temp8(struct device *dev, struct device_attribute *dummy, |
| 245 | { \ | 249 | const char *buf, size_t count) |
| 246 | struct lm63_data *data = lm63_update_device(dev); \ | 250 | { |
| 247 | return sprintf(buf, "%d\n", TEMP11_FROM_REG(data->value)); \ | 251 | struct i2c_client *client = to_i2c_client(dev); |
| 252 | struct lm63_data *data = i2c_get_clientdata(client); | ||
| 253 | long val = simple_strtol(buf, NULL, 10); | ||
| 254 | |||
| 255 | down(&data->update_lock); | ||
| 256 | data->temp8[1] = TEMP8_TO_REG(val); | ||
| 257 | i2c_smbus_write_byte_data(client, LM63_REG_LOCAL_HIGH, data->temp8[1]); | ||
| 258 | up(&data->update_lock); | ||
| 259 | return count; | ||
| 248 | } | 260 | } |
| 249 | show_temp8(temp1_input); | 261 | |
| 250 | show_temp8(temp1_high); | 262 | static ssize_t show_temp11(struct device *dev, struct device_attribute *devattr, |
| 251 | show_temp11(temp2_input); | 263 | char *buf) |
| 252 | show_temp11(temp2_high); | 264 | { |
| 253 | show_temp11(temp2_low); | 265 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); |
| 254 | show_temp8(temp2_crit); | 266 | struct lm63_data *data = lm63_update_device(dev); |
| 255 | 267 | return sprintf(buf, "%d\n", TEMP11_FROM_REG(data->temp11[attr->index])); | |
| 256 | #define set_temp8(value, reg) \ | ||
| 257 | static ssize_t set_##value(struct device *dev, struct device_attribute *attr, const char *buf, \ | ||
| 258 | size_t count) \ | ||
| 259 | { \ | ||
| 260 | struct i2c_client *client = to_i2c_client(dev); \ | ||
| 261 | struct lm63_data *data = i2c_get_clientdata(client); \ | ||
| 262 | long val = simple_strtol(buf, NULL, 10); \ | ||
| 263 | \ | ||
| 264 | down(&data->update_lock); \ | ||
| 265 | data->value = TEMP8_TO_REG(val); \ | ||
| 266 | i2c_smbus_write_byte_data(client, reg, data->value); \ | ||
| 267 | up(&data->update_lock); \ | ||
| 268 | return count; \ | ||
| 269 | } | 268 | } |
| 270 | #define set_temp11(value, reg_msb, reg_lsb) \ | 269 | |
| 271 | static ssize_t set_##value(struct device *dev, struct device_attribute *attr, const char *buf, \ | 270 | static ssize_t set_temp11(struct device *dev, struct device_attribute *devattr, |
| 272 | size_t count) \ | 271 | const char *buf, size_t count) |
| 273 | { \ | 272 | { |
| 274 | struct i2c_client *client = to_i2c_client(dev); \ | 273 | static const u8 reg[4] = { |
| 275 | struct lm63_data *data = i2c_get_clientdata(client); \ | 274 | LM63_REG_REMOTE_LOW_MSB, |
| 276 | long val = simple_strtol(buf, NULL, 10); \ | 275 | LM63_REG_REMOTE_LOW_LSB, |
| 277 | \ | 276 | LM63_REG_REMOTE_HIGH_MSB, |
| 278 | down(&data->update_lock); \ | 277 | LM63_REG_REMOTE_HIGH_LSB, |
| 279 | data->value = TEMP11_TO_REG(val); \ | 278 | }; |
| 280 | i2c_smbus_write_byte_data(client, reg_msb, data->value >> 8); \ | 279 | |
| 281 | i2c_smbus_write_byte_data(client, reg_lsb, data->value & 0xff); \ | 280 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); |
| 282 | up(&data->update_lock); \ | 281 | struct i2c_client *client = to_i2c_client(dev); |
| 283 | return count; \ | 282 | struct lm63_data *data = i2c_get_clientdata(client); |
| 283 | long val = simple_strtol(buf, NULL, 10); | ||
| 284 | int nr = attr->index; | ||
| 285 | |||
| 286 | down(&data->update_lock); | ||
| 287 | data->temp11[nr] = TEMP11_TO_REG(val); | ||
| 288 | i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2], | ||
| 289 | data->temp11[nr] >> 8); | ||
| 290 | i2c_smbus_write_byte_data(client, reg[(nr - 1) * 2 + 1], | ||
| 291 | data->temp11[nr] & 0xff); | ||
| 292 | up(&data->update_lock); | ||
| 293 | return count; | ||
| 284 | } | 294 | } |
| 285 | set_temp8(temp1_high, LM63_REG_LOCAL_HIGH); | ||
| 286 | set_temp11(temp2_high, LM63_REG_REMOTE_HIGH_MSB, LM63_REG_REMOTE_HIGH_LSB); | ||
| 287 | set_temp11(temp2_low, LM63_REG_REMOTE_LOW_MSB, LM63_REG_REMOTE_LOW_LSB); | ||
| 288 | 295 | ||
| 289 | /* Hysteresis register holds a relative value, while we want to present | 296 | /* Hysteresis register holds a relative value, while we want to present |
| 290 | an absolute to user-space */ | 297 | an absolute to user-space */ |
| 291 | static ssize_t show_temp2_crit_hyst(struct device *dev, struct device_attribute *attr, char *buf) | 298 | static ssize_t show_temp2_crit_hyst(struct device *dev, struct device_attribute *dummy, |
| 299 | char *buf) | ||
| 292 | { | 300 | { |
| 293 | struct lm63_data *data = lm63_update_device(dev); | 301 | struct lm63_data *data = lm63_update_device(dev); |
| 294 | return sprintf(buf, "%d\n", TEMP8_FROM_REG(data->temp2_crit) | 302 | return sprintf(buf, "%d\n", TEMP8_FROM_REG(data->temp8[2]) |
| 295 | - TEMP8_FROM_REG(data->temp2_crit_hyst)); | 303 | - TEMP8_FROM_REG(data->temp2_crit_hyst)); |
| 296 | } | 304 | } |
| 297 | 305 | ||
| 298 | /* And now the other way around, user-space provides an absolute | 306 | /* And now the other way around, user-space provides an absolute |
| 299 | hysteresis value and we have to store a relative one */ | 307 | hysteresis value and we have to store a relative one */ |
| 300 | static ssize_t set_temp2_crit_hyst(struct device *dev, struct device_attribute *attr, const char *buf, | 308 | static ssize_t set_temp2_crit_hyst(struct device *dev, struct device_attribute *dummy, |
| 301 | size_t count) | 309 | const char *buf, size_t count) |
| 302 | { | 310 | { |
| 303 | struct i2c_client *client = to_i2c_client(dev); | 311 | struct i2c_client *client = to_i2c_client(dev); |
| 304 | struct lm63_data *data = i2c_get_clientdata(client); | 312 | struct lm63_data *data = i2c_get_clientdata(client); |
| @@ -306,36 +314,37 @@ static ssize_t set_temp2_crit_hyst(struct device *dev, struct device_attribute * | |||
| 306 | long hyst; | 314 | long hyst; |
| 307 | 315 | ||
| 308 | down(&data->update_lock); | 316 | down(&data->update_lock); |
| 309 | hyst = TEMP8_FROM_REG(data->temp2_crit) - val; | 317 | hyst = TEMP8_FROM_REG(data->temp8[2]) - val; |
| 310 | i2c_smbus_write_byte_data(client, LM63_REG_REMOTE_TCRIT_HYST, | 318 | i2c_smbus_write_byte_data(client, LM63_REG_REMOTE_TCRIT_HYST, |
| 311 | HYST_TO_REG(hyst)); | 319 | HYST_TO_REG(hyst)); |
| 312 | up(&data->update_lock); | 320 | up(&data->update_lock); |
| 313 | return count; | 321 | return count; |
| 314 | } | 322 | } |
| 315 | 323 | ||
| 316 | static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf) | 324 | static ssize_t show_alarms(struct device *dev, struct device_attribute *dummy, |
| 325 | char *buf) | ||
| 317 | { | 326 | { |
| 318 | struct lm63_data *data = lm63_update_device(dev); | 327 | struct lm63_data *data = lm63_update_device(dev); |
| 319 | return sprintf(buf, "%u\n", data->alarms); | 328 | return sprintf(buf, "%u\n", data->alarms); |
| 320 | } | 329 | } |
| 321 | 330 | ||
| 322 | static DEVICE_ATTR(fan1_input, S_IRUGO, show_fan1_input, NULL); | 331 | static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0); |
| 323 | static DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan1_low, | 332 | static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan, |
| 324 | set_fan1_low); | 333 | set_fan, 1); |
| 325 | 334 | ||
| 326 | static DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm1, set_pwm1); | 335 | static DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm1, set_pwm1); |
| 327 | static DEVICE_ATTR(pwm1_enable, S_IRUGO, show_pwm1_enable, NULL); | 336 | static DEVICE_ATTR(pwm1_enable, S_IRUGO, show_pwm1_enable, NULL); |
| 328 | 337 | ||
| 329 | static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp1_input, NULL); | 338 | static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp8, NULL, 0); |
| 330 | static DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp1_high, | 339 | static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp8, |
| 331 | set_temp1_high); | 340 | set_temp8, 1); |
| 332 | 341 | ||
| 333 | static DEVICE_ATTR(temp2_input, S_IRUGO, show_temp2_input, NULL); | 342 | static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp11, NULL, 0); |
| 334 | static DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp2_low, | 343 | static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp11, |
| 335 | set_temp2_low); | 344 | set_temp11, 1); |
| 336 | static DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp2_high, | 345 | static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp11, |
| 337 | set_temp2_high); | 346 | set_temp11, 2); |
| 338 | static DEVICE_ATTR(temp2_crit, S_IRUGO, show_temp2_crit, NULL); | 347 | static SENSOR_DEVICE_ATTR(temp2_crit, S_IRUGO, show_temp8, NULL, 2); |
| 339 | static DEVICE_ATTR(temp2_crit_hyst, S_IWUSR | S_IRUGO, show_temp2_crit_hyst, | 348 | static DEVICE_ATTR(temp2_crit_hyst, S_IWUSR | S_IRUGO, show_temp2_crit_hyst, |
| 340 | set_temp2_crit_hyst); | 349 | set_temp2_crit_hyst); |
| 341 | 350 | ||
| @@ -429,17 +438,25 @@ static int lm63_detect(struct i2c_adapter *adapter, int address, int kind) | |||
| 429 | 438 | ||
| 430 | /* Register sysfs hooks */ | 439 | /* Register sysfs hooks */ |
| 431 | if (data->config & 0x04) { /* tachometer enabled */ | 440 | if (data->config & 0x04) { /* tachometer enabled */ |
| 432 | device_create_file(&new_client->dev, &dev_attr_fan1_input); | 441 | device_create_file(&new_client->dev, |
| 433 | device_create_file(&new_client->dev, &dev_attr_fan1_min); | 442 | &sensor_dev_attr_fan1_input.dev_attr); |
| 443 | device_create_file(&new_client->dev, | ||
| 444 | &sensor_dev_attr_fan1_min.dev_attr); | ||
| 434 | } | 445 | } |
| 435 | device_create_file(&new_client->dev, &dev_attr_pwm1); | 446 | device_create_file(&new_client->dev, &dev_attr_pwm1); |
| 436 | device_create_file(&new_client->dev, &dev_attr_pwm1_enable); | 447 | device_create_file(&new_client->dev, &dev_attr_pwm1_enable); |
| 437 | device_create_file(&new_client->dev, &dev_attr_temp1_input); | 448 | device_create_file(&new_client->dev, |
| 438 | device_create_file(&new_client->dev, &dev_attr_temp2_input); | 449 | &sensor_dev_attr_temp1_input.dev_attr); |
| 439 | device_create_file(&new_client->dev, &dev_attr_temp2_min); | 450 | device_create_file(&new_client->dev, |
| 440 | device_create_file(&new_client->dev, &dev_attr_temp1_max); | 451 | &sensor_dev_attr_temp2_input.dev_attr); |
| 441 | device_create_file(&new_client->dev, &dev_attr_temp2_max); | 452 | device_create_file(&new_client->dev, |
| 442 | device_create_file(&new_client->dev, &dev_attr_temp2_crit); | 453 | &sensor_dev_attr_temp2_min.dev_attr); |
| 454 | device_create_file(&new_client->dev, | ||
| 455 | &sensor_dev_attr_temp1_max.dev_attr); | ||
| 456 | device_create_file(&new_client->dev, | ||
| 457 | &sensor_dev_attr_temp2_max.dev_attr); | ||
| 458 | device_create_file(&new_client->dev, | ||
| 459 | &sensor_dev_attr_temp2_crit.dev_attr); | ||
| 443 | device_create_file(&new_client->dev, &dev_attr_temp2_crit_hyst); | 460 | device_create_file(&new_client->dev, &dev_attr_temp2_crit_hyst); |
| 444 | device_create_file(&new_client->dev, &dev_attr_alarms); | 461 | device_create_file(&new_client->dev, &dev_attr_alarms); |
| 445 | 462 | ||
| @@ -510,14 +527,14 @@ static struct lm63_data *lm63_update_device(struct device *dev) | |||
| 510 | if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { | 527 | if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { |
| 511 | if (data->config & 0x04) { /* tachometer enabled */ | 528 | if (data->config & 0x04) { /* tachometer enabled */ |
| 512 | /* order matters for fan1_input */ | 529 | /* order matters for fan1_input */ |
| 513 | data->fan1_input = i2c_smbus_read_byte_data(client, | 530 | data->fan[0] = i2c_smbus_read_byte_data(client, |
| 514 | LM63_REG_TACH_COUNT_LSB) & 0xFC; | 531 | LM63_REG_TACH_COUNT_LSB) & 0xFC; |
| 515 | data->fan1_input |= i2c_smbus_read_byte_data(client, | 532 | data->fan[0] |= i2c_smbus_read_byte_data(client, |
| 516 | LM63_REG_TACH_COUNT_MSB) << 8; | 533 | LM63_REG_TACH_COUNT_MSB) << 8; |
| 517 | data->fan1_low = (i2c_smbus_read_byte_data(client, | 534 | data->fan[1] = (i2c_smbus_read_byte_data(client, |
| 518 | LM63_REG_TACH_LIMIT_LSB) & 0xFC) | 535 | LM63_REG_TACH_LIMIT_LSB) & 0xFC) |
| 519 | | (i2c_smbus_read_byte_data(client, | 536 | | (i2c_smbus_read_byte_data(client, |
| 520 | LM63_REG_TACH_LIMIT_MSB) << 8); | 537 | LM63_REG_TACH_LIMIT_MSB) << 8); |
| 521 | } | 538 | } |
| 522 | 539 | ||
| 523 | data->pwm1_freq = i2c_smbus_read_byte_data(client, | 540 | data->pwm1_freq = i2c_smbus_read_byte_data(client, |
| @@ -527,26 +544,26 @@ static struct lm63_data *lm63_update_device(struct device *dev) | |||
| 527 | data->pwm1_value = i2c_smbus_read_byte_data(client, | 544 | data->pwm1_value = i2c_smbus_read_byte_data(client, |
| 528 | LM63_REG_PWM_VALUE); | 545 | LM63_REG_PWM_VALUE); |
| 529 | 546 | ||
| 530 | data->temp1_input = i2c_smbus_read_byte_data(client, | 547 | data->temp8[0] = i2c_smbus_read_byte_data(client, |
| 531 | LM63_REG_LOCAL_TEMP); | 548 | LM63_REG_LOCAL_TEMP); |
| 532 | data->temp1_high = i2c_smbus_read_byte_data(client, | 549 | data->temp8[1] = i2c_smbus_read_byte_data(client, |
| 533 | LM63_REG_LOCAL_HIGH); | 550 | LM63_REG_LOCAL_HIGH); |
| 534 | 551 | ||
| 535 | /* order matters for temp2_input */ | 552 | /* order matters for temp2_input */ |
| 536 | data->temp2_input = i2c_smbus_read_byte_data(client, | 553 | data->temp11[0] = i2c_smbus_read_byte_data(client, |
| 537 | LM63_REG_REMOTE_TEMP_MSB) << 8; | 554 | LM63_REG_REMOTE_TEMP_MSB) << 8; |
| 538 | data->temp2_input |= i2c_smbus_read_byte_data(client, | 555 | data->temp11[0] |= i2c_smbus_read_byte_data(client, |
| 539 | LM63_REG_REMOTE_TEMP_LSB); | 556 | LM63_REG_REMOTE_TEMP_LSB); |
| 540 | data->temp2_high = (i2c_smbus_read_byte_data(client, | 557 | data->temp11[1] = (i2c_smbus_read_byte_data(client, |
| 541 | LM63_REG_REMOTE_HIGH_MSB) << 8) | ||
| 542 | | i2c_smbus_read_byte_data(client, | ||
| 543 | LM63_REG_REMOTE_HIGH_LSB); | ||
| 544 | data->temp2_low = (i2c_smbus_read_byte_data(client, | ||
| 545 | LM63_REG_REMOTE_LOW_MSB) << 8) | 558 | LM63_REG_REMOTE_LOW_MSB) << 8) |
| 546 | | i2c_smbus_read_byte_data(client, | 559 | | i2c_smbus_read_byte_data(client, |
| 547 | LM63_REG_REMOTE_LOW_LSB); | 560 | LM63_REG_REMOTE_LOW_LSB); |
| 548 | data->temp2_crit = i2c_smbus_read_byte_data(client, | 561 | data->temp11[2] = (i2c_smbus_read_byte_data(client, |
| 549 | LM63_REG_REMOTE_TCRIT); | 562 | LM63_REG_REMOTE_HIGH_MSB) << 8) |
| 563 | | i2c_smbus_read_byte_data(client, | ||
| 564 | LM63_REG_REMOTE_HIGH_LSB); | ||
| 565 | data->temp8[2] = i2c_smbus_read_byte_data(client, | ||
| 566 | LM63_REG_REMOTE_TCRIT); | ||
| 550 | data->temp2_crit_hyst = i2c_smbus_read_byte_data(client, | 567 | data->temp2_crit_hyst = i2c_smbus_read_byte_data(client, |
| 551 | LM63_REG_REMOTE_TCRIT_HYST); | 568 | LM63_REG_REMOTE_TCRIT_HYST); |
| 552 | 569 | ||
