diff options
| author | Guenter Roeck <linux@roeck-us.net> | 2012-12-19 16:17:00 -0500 |
|---|---|---|
| committer | Jean Delvare <khali@endymion.delvare> | 2012-12-19 16:17:00 -0500 |
| commit | 929c6a5696f5efe7f4213cf9d8b12144a0c0c650 (patch) | |
| tree | 39ffc4b0703a6b680789c8775ae07208f7eb4851 | |
| parent | 60ca385a530405ab501773ef4c9e222825a6cd40 (diff) | |
hwmon: (it87) Save voltage register values in 2-dimensional array
Reduces code size (more than 600 bytes on x86_64),
and gets rid of some checkpatch errors.
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
| -rw-r--r-- | drivers/hwmon/it87.c | 147 |
1 files changed, 66 insertions, 81 deletions
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index 76ab1d0e42d0..79a1229d3499 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c | |||
| @@ -258,9 +258,7 @@ struct it87_data { | |||
| 258 | unsigned long last_updated; /* In jiffies */ | 258 | unsigned long last_updated; /* In jiffies */ |
| 259 | 259 | ||
| 260 | u16 in_scaled; /* Internal voltage sensors are scaled */ | 260 | u16 in_scaled; /* Internal voltage sensors are scaled */ |
| 261 | u8 in[9]; /* Register value */ | 261 | u8 in[9][3]; /* [nr][0]=in, [1]=min, [2]=max */ |
| 262 | u8 in_max[8]; /* Register value */ | ||
| 263 | u8 in_min[8]; /* Register value */ | ||
| 264 | u8 has_fan; /* Bitfield, fans enabled */ | 262 | u8 has_fan; /* Bitfield, fans enabled */ |
| 265 | u16 fan[5]; /* Register values, possibly combined */ | 263 | u16 fan[5]; /* Register values, possibly combined */ |
| 266 | u16 fan_min[5]; /* Register values, possibly combined */ | 264 | u16 fan_min[5]; /* Register values, possibly combined */ |
| @@ -445,40 +443,22 @@ static struct platform_driver it87_driver = { | |||
| 445 | }; | 443 | }; |
| 446 | 444 | ||
| 447 | static ssize_t show_in(struct device *dev, struct device_attribute *attr, | 445 | static ssize_t show_in(struct device *dev, struct device_attribute *attr, |
| 448 | char *buf) | 446 | char *buf) |
| 449 | { | ||
| 450 | struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); | ||
| 451 | int nr = sensor_attr->index; | ||
| 452 | |||
| 453 | struct it87_data *data = it87_update_device(dev); | ||
| 454 | return sprintf(buf, "%d\n", in_from_reg(data, nr, data->in[nr])); | ||
| 455 | } | ||
| 456 | |||
| 457 | static ssize_t show_in_min(struct device *dev, struct device_attribute *attr, | ||
| 458 | char *buf) | ||
| 459 | { | ||
| 460 | struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); | ||
| 461 | int nr = sensor_attr->index; | ||
| 462 | |||
| 463 | struct it87_data *data = it87_update_device(dev); | ||
| 464 | return sprintf(buf, "%d\n", in_from_reg(data, nr, data->in_min[nr])); | ||
| 465 | } | ||
| 466 | |||
| 467 | static ssize_t show_in_max(struct device *dev, struct device_attribute *attr, | ||
| 468 | char *buf) | ||
| 469 | { | 447 | { |
| 470 | struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); | 448 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
| 471 | int nr = sensor_attr->index; | 449 | int nr = sattr->nr; |
| 450 | int index = sattr->index; | ||
| 472 | 451 | ||
| 473 | struct it87_data *data = it87_update_device(dev); | 452 | struct it87_data *data = it87_update_device(dev); |
| 474 | return sprintf(buf, "%d\n", in_from_reg(data, nr, data->in_max[nr])); | 453 | return sprintf(buf, "%d\n", in_from_reg(data, nr, data->in[nr][index])); |
| 475 | } | 454 | } |
| 476 | 455 | ||
| 477 | static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, | 456 | static ssize_t set_in(struct device *dev, struct device_attribute *attr, |
| 478 | const char *buf, size_t count) | 457 | const char *buf, size_t count) |
| 479 | { | 458 | { |
| 480 | struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); | 459 | struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr); |
| 481 | int nr = sensor_attr->index; | 460 | int nr = sattr->nr; |
| 461 | int index = sattr->index; | ||
| 482 | 462 | ||
| 483 | struct it87_data *data = dev_get_drvdata(dev); | 463 | struct it87_data *data = dev_get_drvdata(dev); |
| 484 | unsigned long val; | 464 | unsigned long val; |
| @@ -487,59 +467,64 @@ static ssize_t set_in_min(struct device *dev, struct device_attribute *attr, | |||
| 487 | return -EINVAL; | 467 | return -EINVAL; |
| 488 | 468 | ||
| 489 | mutex_lock(&data->update_lock); | 469 | mutex_lock(&data->update_lock); |
| 490 | data->in_min[nr] = in_to_reg(data, nr, val); | 470 | data->in[nr][index] = in_to_reg(data, nr, val); |
| 491 | it87_write_value(data, IT87_REG_VIN_MIN(nr), | 471 | it87_write_value(data, |
| 492 | data->in_min[nr]); | 472 | index == 1 ? IT87_REG_VIN_MIN(nr) |
| 473 | : IT87_REG_VIN_MAX(nr), | ||
| 474 | data->in[nr][index]); | ||
| 493 | mutex_unlock(&data->update_lock); | 475 | mutex_unlock(&data->update_lock); |
| 494 | return count; | 476 | return count; |
| 495 | } | 477 | } |
| 496 | static ssize_t set_in_max(struct device *dev, struct device_attribute *attr, | ||
| 497 | const char *buf, size_t count) | ||
| 498 | { | ||
| 499 | struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); | ||
| 500 | int nr = sensor_attr->index; | ||
| 501 | 478 | ||
| 502 | struct it87_data *data = dev_get_drvdata(dev); | 479 | static SENSOR_DEVICE_ATTR_2(in0_input, S_IRUGO, show_in, NULL, 0, 0); |
| 503 | unsigned long val; | 480 | static SENSOR_DEVICE_ATTR_2(in0_min, S_IRUGO | S_IWUSR, show_in, set_in, |
| 481 | 0, 1); | ||
| 482 | static SENSOR_DEVICE_ATTR_2(in0_max, S_IRUGO | S_IWUSR, show_in, set_in, | ||
| 483 | 0, 2); | ||
| 504 | 484 | ||
| 505 | if (kstrtoul(buf, 10, &val) < 0) | 485 | static SENSOR_DEVICE_ATTR_2(in1_input, S_IRUGO, show_in, NULL, 1, 0); |
| 506 | return -EINVAL; | 486 | static SENSOR_DEVICE_ATTR_2(in1_min, S_IRUGO | S_IWUSR, show_in, set_in, |
| 487 | 1, 1); | ||
| 488 | static SENSOR_DEVICE_ATTR_2(in1_max, S_IRUGO | S_IWUSR, show_in, set_in, | ||
| 489 | 1, 2); | ||
| 507 | 490 | ||
| 508 | mutex_lock(&data->update_lock); | 491 | static SENSOR_DEVICE_ATTR_2(in2_input, S_IRUGO, show_in, NULL, 2, 0); |
| 509 | data->in_max[nr] = in_to_reg(data, nr, val); | 492 | static SENSOR_DEVICE_ATTR_2(in2_min, S_IRUGO | S_IWUSR, show_in, set_in, |
| 510 | it87_write_value(data, IT87_REG_VIN_MAX(nr), | 493 | 2, 1); |
| 511 | data->in_max[nr]); | 494 | static SENSOR_DEVICE_ATTR_2(in2_max, S_IRUGO | S_IWUSR, show_in, set_in, |
| 512 | mutex_unlock(&data->update_lock); | 495 | 2, 2); |
| 513 | return count; | ||
| 514 | } | ||
| 515 | 496 | ||
| 516 | #define show_in_offset(offset) \ | 497 | static SENSOR_DEVICE_ATTR_2(in3_input, S_IRUGO, show_in, NULL, 3, 0); |
| 517 | static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \ | 498 | static SENSOR_DEVICE_ATTR_2(in3_min, S_IRUGO | S_IWUSR, show_in, set_in, |
| 518 | show_in, NULL, offset); | 499 | 3, 1); |
| 519 | 500 | static SENSOR_DEVICE_ATTR_2(in3_max, S_IRUGO | S_IWUSR, show_in, set_in, | |
| 520 | #define limit_in_offset(offset) \ | 501 | 3, 2); |
| 521 | static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \ | 502 | |
| 522 | show_in_min, set_in_min, offset); \ | 503 | static SENSOR_DEVICE_ATTR_2(in4_input, S_IRUGO, show_in, NULL, 4, 0); |
| 523 | static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \ | 504 | static SENSOR_DEVICE_ATTR_2(in4_min, S_IRUGO | S_IWUSR, show_in, set_in, |
| 524 | show_in_max, set_in_max, offset); | 505 | 4, 1); |
| 525 | 506 | static SENSOR_DEVICE_ATTR_2(in4_max, S_IRUGO | S_IWUSR, show_in, set_in, | |
| 526 | show_in_offset(0); | 507 | 4, 2); |
| 527 | limit_in_offset(0); | 508 | |
| 528 | show_in_offset(1); | 509 | static SENSOR_DEVICE_ATTR_2(in5_input, S_IRUGO, show_in, NULL, 5, 0); |
| 529 | limit_in_offset(1); | 510 | static SENSOR_DEVICE_ATTR_2(in5_min, S_IRUGO | S_IWUSR, show_in, set_in, |
| 530 | show_in_offset(2); | 511 | 5, 1); |
| 531 | limit_in_offset(2); | 512 | static SENSOR_DEVICE_ATTR_2(in5_max, S_IRUGO | S_IWUSR, show_in, set_in, |
| 532 | show_in_offset(3); | 513 | 5, 2); |
| 533 | limit_in_offset(3); | 514 | |
| 534 | show_in_offset(4); | 515 | static SENSOR_DEVICE_ATTR_2(in6_input, S_IRUGO, show_in, NULL, 6, 0); |
| 535 | limit_in_offset(4); | 516 | static SENSOR_DEVICE_ATTR_2(in6_min, S_IRUGO | S_IWUSR, show_in, set_in, |
| 536 | show_in_offset(5); | 517 | 6, 1); |
| 537 | limit_in_offset(5); | 518 | static SENSOR_DEVICE_ATTR_2(in6_max, S_IRUGO | S_IWUSR, show_in, set_in, |
| 538 | show_in_offset(6); | 519 | 6, 2); |
| 539 | limit_in_offset(6); | 520 | |
| 540 | show_in_offset(7); | 521 | static SENSOR_DEVICE_ATTR_2(in7_input, S_IRUGO, show_in, NULL, 7, 0); |
| 541 | limit_in_offset(7); | 522 | static SENSOR_DEVICE_ATTR_2(in7_min, S_IRUGO | S_IWUSR, show_in, set_in, |
| 542 | show_in_offset(8); | 523 | 7, 1); |
| 524 | static SENSOR_DEVICE_ATTR_2(in7_max, S_IRUGO | S_IWUSR, show_in, set_in, | ||
| 525 | 7, 2); | ||
| 526 | |||
| 527 | static SENSOR_DEVICE_ATTR_2(in8_input, S_IRUGO, show_in, NULL, 8, 0); | ||
| 543 | 528 | ||
| 544 | /* 3 temperatures */ | 529 | /* 3 temperatures */ |
| 545 | static ssize_t show_temp(struct device *dev, struct device_attribute *attr, | 530 | static ssize_t show_temp(struct device *dev, struct device_attribute *attr, |
| @@ -2361,15 +2346,15 @@ static struct it87_data *it87_update_device(struct device *dev) | |||
| 2361 | it87_read_value(data, IT87_REG_CONFIG) | 0x40); | 2346 | it87_read_value(data, IT87_REG_CONFIG) | 0x40); |
| 2362 | } | 2347 | } |
| 2363 | for (i = 0; i <= 7; i++) { | 2348 | for (i = 0; i <= 7; i++) { |
| 2364 | data->in[i] = | 2349 | data->in[i][0] = |
| 2365 | it87_read_value(data, IT87_REG_VIN(i)); | 2350 | it87_read_value(data, IT87_REG_VIN(i)); |
| 2366 | data->in_min[i] = | 2351 | data->in[i][1] = |
| 2367 | it87_read_value(data, IT87_REG_VIN_MIN(i)); | 2352 | it87_read_value(data, IT87_REG_VIN_MIN(i)); |
| 2368 | data->in_max[i] = | 2353 | data->in[i][2] = |
| 2369 | it87_read_value(data, IT87_REG_VIN_MAX(i)); | 2354 | it87_read_value(data, IT87_REG_VIN_MAX(i)); |
| 2370 | } | 2355 | } |
| 2371 | /* in8 (battery) has no limit registers */ | 2356 | /* in8 (battery) has no limit registers */ |
| 2372 | data->in[8] = it87_read_value(data, IT87_REG_VIN(8)); | 2357 | data->in[8][0] = it87_read_value(data, IT87_REG_VIN(8)); |
| 2373 | 2358 | ||
| 2374 | for (i = 0; i < 5; i++) { | 2359 | for (i = 0; i < 5; i++) { |
| 2375 | /* Skip disabled fans */ | 2360 | / |
