aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2012-12-19 16:17:01 -0500
committerJean Delvare <khali@endymion.delvare>2012-12-19 16:17:01 -0500
commite1169ba0aea187d0ea15d6f98bc818cab37335e5 (patch)
treeed0051f873da553c1aa8f7d63a43d8dbea33ac97
parent161d898ac974818156afe48d755578bfd0d6e7c0 (diff)
hwmon: (it87) Save fan registers in 2-dimensional array
Also unify fan functions to use the same code for 8 and 16 bit fans. This patch reduces code size by approximately 1,200 bytes on x86_64. Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Jean Delvare <khali@linux-fr.org>
-rw-r--r--drivers/hwmon/it87.c263
1 files changed, 104 insertions, 159 deletions
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c
index 76756326918..e0d1910c04d 100644
--- a/drivers/hwmon/it87.c
+++ b/drivers/hwmon/it87.c
@@ -262,8 +262,7 @@ struct it87_data {
262 u16 in_scaled; /* Internal voltage sensors are scaled */ 262 u16 in_scaled; /* Internal voltage sensors are scaled */
263 u8 in[9][3]; /* [nr][0]=in, [1]=min, [2]=max */ 263 u8 in[9][3]; /* [nr][0]=in, [1]=min, [2]=max */
264 u8 has_fan; /* Bitfield, fans enabled */ 264 u8 has_fan; /* Bitfield, fans enabled */
265 u16 fan[5]; /* Register values, possibly combined */ 265 u16 fan[5][2]; /* Register values, [nr][0]=fan, [1]=min */
266 u16 fan_min[5]; /* Register values, possibly combined */
267 u8 has_temp; /* Bitfield, temp sensors enabled */ 266 u8 has_temp; /* Bitfield, temp sensors enabled */
268 s8 temp[3][4]; /* [nr][0]=temp, [1]=min, [2]=max, [3]=offset */ 267 s8 temp[3][4]; /* [nr][0]=temp, [1]=min, [2]=max, [3]=offset */
269 u8 sensor; /* Register value */ 268 u8 sensor; /* Register value */
@@ -687,25 +686,21 @@ static int pwm_mode(const struct it87_data *data, int nr)
687} 686}
688 687
689static ssize_t show_fan(struct device *dev, struct device_attribute *attr, 688static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
690 char *buf) 689 char *buf)
691{ 690{
692 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 691 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
693 int nr = sensor_attr->index; 692 int nr = sattr->nr;
694 693 int index = sattr->index;
694 int speed;
695 struct it87_data *data = it87_update_device(dev); 695 struct it87_data *data = it87_update_device(dev);
696 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr],
697 DIV_FROM_REG(data->fan_div[nr])));
698}
699static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr,
700 char *buf)
701{
702 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
703 int nr = sensor_attr->index;
704 696
705 struct it87_data *data = it87_update_device(dev); 697 speed = has_16bit_fans(data) ?
706 return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr], 698 FAN16_FROM_REG(data->fan[nr][index]) :
707 DIV_FROM_REG(data->fan_div[nr]))); 699 FAN_FROM_REG(data->fan[nr][index],
700 DIV_FROM_REG(data->fan_div[nr]));
701 return sprintf(buf, "%d\n", speed);
708} 702}
703
709static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr, 704static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
710 char *buf) 705 char *buf)
711{ 706{
@@ -742,11 +737,13 @@ static ssize_t show_pwm_freq(struct device *dev, struct device_attribute *attr,
742 737
743 return sprintf(buf, "%u\n", pwm_freq[index]); 738 return sprintf(buf, "%u\n", pwm_freq[index]);
744} 739}
745static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr, 740
746 const char *buf, size_t count) 741static ssize_t set_fan(struct device *dev, struct device_attribute *attr,
742 const char *buf, size_t count)
747{ 743{
748 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr); 744 struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
749 int nr = sensor_attr->index; 745 int nr = sattr->nr;
746 int index = sattr->index;
750 747
751 struct it87_data *data = dev_get_drvdata(dev); 748 struct it87_data *data = dev_get_drvdata(dev);
752 long val; 749 long val;
@@ -756,24 +753,36 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
756 return -EINVAL; 753 return -EINVAL;
757 754
758 mutex_lock(&data->update_lock); 755 mutex_lock(&data->update_lock);
759 reg = it87_read_value(data, IT87_REG_FAN_DIV); 756
760 switch (nr) { 757 if (has_16bit_fans(data)) {
761 case 0: 758 data->fan[nr][index] = FAN16_TO_REG(val);
762 data->fan_div[nr] = reg & 0x07; 759 it87_write_value(data, IT87_REG_FAN_MIN[nr],
763 break; 760 data->fan[nr][index] & 0xff);
764 case 1: 761 it87_write_value(data, IT87_REG_FANX_MIN[nr],
765 data->fan_div[nr] = (reg >> 3) & 0x07; 762 data->fan[nr][index] >> 8);
766 break; 763 } else {
767 case 2: 764 reg = it87_read_value(data, IT87_REG_FAN_DIV);
768 data->fan_div[nr] = (reg & 0x40) ? 3 : 1; 765 switch (nr) {
769 break; 766 case 0:
767 data->fan_div[nr] = reg & 0x07;
768 break;
769 case 1:
770 data->fan_div[nr] = (reg >> 3) & 0x07;
771 break;
772 case 2:
773 data->fan_div[nr] = (reg & 0x40) ? 3 : 1;
774 break;
775 }
776 data->fan[nr][index] =
777 FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
778 it87_write_value(data, IT87_REG_FAN_MIN[nr],
779 data->fan[nr][index]);
770 } 780 }
771 781
772 data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
773 it87_write_value(data, IT87_REG_FAN_MIN[nr], data->fan_min[nr]);
774 mutex_unlock(&data->update_lock); 782 mutex_unlock(&data->update_lock);
775 return count; 783 return count;
776} 784}
785
777static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr, 786static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
778 const char *buf, size_t count) 787 const char *buf, size_t count)
779{ 788{
@@ -792,7 +801,7 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
792 old = it87_read_value(data, IT87_REG_FAN_DIV); 801 old = it87_read_value(data, IT87_REG_FAN_DIV);
793 802
794 /* Save fan min limit */ 803 /* Save fan min limit */
795 min = FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr])); 804 min = FAN_FROM_REG(data->fan[nr][1], DIV_FROM_REG(data->fan_div[nr]));
796 805
797 switch (nr) { 806 switch (nr) {
798 case 0: 807 case 0:
@@ -813,8 +822,8 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
813 it87_write_value(data, IT87_REG_FAN_DIV, val); 822 it87_write_value(data, IT87_REG_FAN_DIV, val);
814 823
815 /* Restore fan min limit */ 824 /* Restore fan min limit */
816 data->fan_min[nr] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr])); 825 data->fan[nr][1] = FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
817 it87_write_value(data, IT87_REG_FAN_MIN[nr], data->fan_min[nr]); 826 it87_write_value(data, IT87_REG_FAN_MIN[nr], data->fan[nr][1]);
818 827
819 mutex_unlock(&data->update_lock); 828 mutex_unlock(&data->update_lock);
820 return count; 829 return count;
@@ -1087,17 +1096,31 @@ static ssize_t set_auto_temp(struct device *dev,
1087 return count; 1096 return count;
1088} 1097}
1089 1098
1090#define show_fan_offset(offset) \ 1099static SENSOR_DEVICE_ATTR_2(fan1_input, S_IRUGO, show_fan, NULL, 0, 0);
1091static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \ 1100static SENSOR_DEVICE_ATTR_2(fan1_min, S_IRUGO | S_IWUSR, show_fan, set_fan,
1092 show_fan, NULL, offset - 1); \ 1101 0, 1);
1093static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \ 1102static SENSOR_DEVICE_ATTR(fan1_div, S_IRUGO | S_IWUSR, show_fan_div,
1094 show_fan_min, set_fan_min, offset - 1); \ 1103 set_fan_div, 0);
1095static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \ 1104
1096 show_fan_div, set_fan_div, offset - 1); 1105static SENSOR_DEVICE_ATTR_2(fan2_input, S_IRUGO, show_fan, NULL, 1, 0);
1106static SENSOR_DEVICE_ATTR_2(fan2_min, S_IRUGO | S_IWUSR, show_fan, set_fan,
1107 1, 1);
1108static SENSOR_DEVICE_ATTR(fan2_div, S_IRUGO | S_IWUSR, show_fan_div,
1109 set_fan_div, 1);
1110
1111static SENSOR_DEVICE_ATTR_2(fan3_input, S_IRUGO, show_fan, NULL, 2, 0);
1112static SENSOR_DEVICE_ATTR_2(fan3_min, S_IRUGO | S_IWUSR, show_fan, set_fan,
1113 2, 1);
1114static SENSOR_DEVICE_ATTR(fan3_div, S_IRUGO | S_IWUSR, show_fan_div,
1115 set_fan_div, 2);
1116
1117static SENSOR_DEVICE_ATTR_2(fan4_input, S_IRUGO, show_fan, NULL, 3, 0);
1118static SENSOR_DEVICE_ATTR_2(fan4_min, S_IRUGO | S_IWUSR, show_fan, set_fan,
1119 3, 1);
1097 1120
1098show_fan_offset(1); 1121static SENSOR_DEVICE_ATTR_2(fan5_input, S_IRUGO, show_fan, NULL, 4, 0);
1099show_fan_offset(2); 1122static SENSOR_DEVICE_ATTR_2(fan5_min, S_IRUGO | S_IWUSR, show_fan, set_fan,
1100show_fan_offset(3); 1123 4, 1);
1101 1124
1102#define show_pwm_offset(offset) \ 1125#define show_pwm_offset(offset) \
1103static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \ 1126static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \
@@ -1141,65 +1164,6 @@ show_pwm_offset(1);
1141show_pwm_offset(2); 1164show_pwm_offset(2);
1142show_pwm_offset(3); 1165show_pwm_offset(3);
1143 1166
1144/* A different set of callbacks for 16-bit fans */
1145static ssize_t show_fan16(struct device *dev, struct device_attribute *attr,
1146 char *buf)
1147{
1148 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1149 int nr = sensor_attr->index;
1150 struct it87_data *data = it87_update_device(dev);
1151 return sprintf(buf, "%d\n", FAN16_FROM_REG(data->fan[nr]));
1152}
1153
1154static ssize_t show_fan16_min(struct device *dev, struct device_attribute *attr,
1155 char *buf)
1156{
1157 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1158 int nr = sensor_attr->index;
1159 struct it87_data *data = it87_update_device(dev);
1160 return sprintf(buf, "%d\n", FAN16_FROM_REG(data->fan_min[nr]));
1161}
1162
1163static ssize_t set_fan16_min(struct device *dev, struct device_attribute *attr,
1164 const char *buf, size_t count)
1165{
1166 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1167 int nr = sensor_attr->index;
1168 struct it87_data *data = dev_get_drvdata(dev);
1169 long val;
1170
1171 if (kstrtol(buf, 10, &val) < 0)
1172 return -EINVAL;
1173
1174 mutex_lock(&data->update_lock);
1175 data->fan_min[nr] = FAN16_TO_REG(val);
1176 it87_write_value(data, IT87_REG_FAN_MIN[nr],
1177 data->fan_min[nr] & 0xff);
1178 it87_write_value(data, IT87_REG_FANX_MIN[nr],
1179 data->fan_min[nr] >> 8);
1180 mutex_unlock(&data->update_lock);
1181 return count;
1182}
1183
1184/*
1185 * We want to use the same sysfs file names as 8-bit fans, but we need
1186 * different variable names, so we have to use SENSOR_ATTR instead of
1187 * SENSOR_DEVICE_ATTR.
1188 */
1189#define show_fan16_offset(offset) \
1190static struct sensor_device_attribute sensor_dev_attr_fan##offset##_input16 \
1191 = SENSOR_ATTR(fan##offset##_input, S_IRUGO, \
1192 show_fan16, NULL, offset - 1); \
1193static struct sensor_device_attribute sensor_dev_attr_fan##offset##_min16 \
1194 = SENSOR_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
1195 show_fan16_min, set_fan16_min, offset - 1)
1196
1197show_fan16_offset(1);
1198show_fan16_offset(2);
1199show_fan16_offset(3);
1200show_fan16_offset(4);
1201show_fan16_offset(5);
1202
1203/* Alarms */ 1167/* Alarms */
1204static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, 1168static ssize_t show_alarms(struct device *dev, struct device_attribute *attr,
1205 char *buf) 1169 char *buf)
@@ -1501,73 +1465,47 @@ static struct attribute *it87_attributes_temp_beep[] = {
1501 &sensor_dev_attr_temp3_beep.dev_attr.attr, 1465 &sensor_dev_attr_temp3_beep.dev_attr.attr,
1502}; 1466};
1503 1467
1504static struct attribute *it87_attributes_fan16[5][3+1] = { { 1468static struct attribute *it87_attributes_fan[5][3+1] = { {
1505 &sensor_dev_attr_fan1_input16.dev_attr.attr, 1469 &sensor_dev_attr_fan1_input.dev_attr.attr,
1506 &sensor_dev_attr_fan1_min16.dev_attr.attr, 1470 &sensor_dev_attr_fan1_min.dev_attr.attr,
1507 &sensor_dev_attr_fan1_alarm.dev_attr.attr, 1471 &sensor_dev_attr_fan1_alarm.dev_attr.attr,
1508 NULL 1472 NULL
1509}, { 1473}, {
1510 &sensor_dev_attr_fan2_input16.dev_attr.attr, 1474 &sensor_dev_attr_fan2_input.dev_attr.attr,
1511 &sensor_dev_attr_fan2_min16.dev_attr.attr, 1475 &sensor_dev_attr_fan2_min.dev_attr.attr,
1512 &sensor_dev_attr_fan2_alarm.dev_attr.attr, 1476 &sensor_dev_attr_fan2_alarm.dev_attr.attr,
1513 NULL 1477 NULL
1514}, { 1478}, {
1515 &sensor_dev_attr_fan3_input16.dev_attr.attr, 1479 &sensor_dev_attr_fan3_input.dev_attr.attr,
1516 &sensor_dev_attr_fan3_min16.dev_attr.attr, 1480 &sensor_dev_attr_fan3_min.dev_attr.attr,
1517 &sensor_dev_attr_fan3_alarm.dev_attr.attr, 1481 &sensor_dev_attr_fan3_alarm.dev_attr.attr,
1518 NULL 1482 NULL
1519}, { 1483}, {
1520 &sensor_dev_attr_fan4_input16.dev_attr.attr, 1484 &sensor_dev_attr_fan4_input.dev_attr.attr,
1521 &sensor_dev_attr_fan4_min16.dev_attr.attr, 1485 &sensor_dev_attr_fan4_min.dev_attr.attr,
1522 &sensor_dev_attr_fan4_alarm.dev_attr.attr, 1486 &sensor_dev_attr_fan4_alarm.dev_attr.attr,
1523 NULL 1487 NULL
1524}, { 1488}, {
1525 &sensor_dev_attr_fan5_input16.dev_attr.attr, 1489 &sensor_dev_attr_fan5_input.dev_attr.attr,
1526 &sensor_dev_attr_fan5_min16.dev_attr.attr, 1490 &sensor_dev_attr_fan5_min.dev_attr.attr,
1527 &sensor_dev_attr_fan5_alarm.dev_attr.attr, 1491 &sensor_dev_attr_fan5_alarm.dev_attr.attr,
1528 NULL 1492 NULL
1529} }; 1493} };
1530 1494
1531static const struct attribute_group it87_group_fan16[5] = { 1495static const struct attribute_group it87_group_fan[5] = {
1532 { .attrs = it87_attributes_fan16[0] }, 1496 { .attrs = it87_attributes_fan[0] },
1533 { .attrs = it87_attributes_fan16[1] }, 1497 { .attrs = it87_attributes_fan[1] },
1534 { .attrs = it87_attributes_fan16[2] }, 1498 { .attrs = it87_attributes_fan[2] },
1535 { .attrs = it87_attributes_fan16[3] }, 1499 { .attrs = it87_attributes_fan[3] },
1536 { .attrs = it87_attributes_fan16[4] }, 1500 { .attrs = it87_attributes_fan[4] },
1537}; 1501};
1538 1502
1539static struct attribute *it87_attributes_fan[3][4+1] = { { 1503static const struct attribute *it87_attributes_fan_div[] = {
1540 &sensor_dev_attr_fan1_input.dev_attr.attr,
1541 &sensor_dev_attr_fan1_min.dev_attr.attr,
1542 &sensor_dev_attr_fan1_div.dev_attr.attr, 1504 &sensor_dev_attr_fan1_div.dev_attr.attr,
1543 &sensor_dev_attr_fan1_alarm.dev_attr.attr,
1544 NULL
1545}, {
1546 &sensor_dev_attr_fan2_input.dev_attr.attr,
1547 &sensor_dev_attr_fan2_min.dev_attr.attr,
1548 &sensor_dev_attr_fan2_div.dev_attr.attr, 1505 &sensor_dev_attr_fan2_div.dev_attr.attr,
1549 &sensor_dev_attr_fan2_alarm.dev_attr.attr,
1550 NULL
1551}, {
1552 &sensor_dev_attr_fan3_input.dev_attr.attr,
1553 &sensor_dev_attr_fan3_min.dev_attr.attr,
1554 &sensor_dev_attr_fan3_div.dev_attr.attr, 1506 &sensor_dev_attr_fan3_div.dev_attr.attr,
1555 &sensor_dev_attr_fan3_alarm.dev_attr.attr,
1556 NULL
1557} };
1558
1559static const struct attribute_group it87_group_fan[3] = {
1560 { .attrs = it87_attributes_fan[0] },
1561 { .attrs = it87_attributes_fan[1] },
1562 { .attrs = it87_attributes_fan[2] },
1563}; 1507};
1564 1508
1565static const struct attribute_group *
1566it87_get_fan_group(const struct it87_data *data)
1567{
1568 return has_16bit_fans(data) ? it87_group_fan16 : it87_group_fan;
1569}
1570
1571static struct attribute *it87_attributes_pwm[3][4+1] = { { 1509static struct attribute *it87_attributes_pwm[3][4+1] = { {
1572 &sensor_dev_attr_pwm1_enable.dev_attr.attr, 1510 &sensor_dev_attr_pwm1_enable.dev_attr.attr,
1573 &sensor_dev_attr_pwm1.dev_attr.attr, 1511 &sensor_dev_attr_pwm1.dev_attr.attr,
@@ -1926,7 +1864,6 @@ static void it87_remove_files(struct device *dev)
1926{ 1864{
1927 struct it87_data *data = platform_get_drvdata(pdev); 1865 struct it87_data *data = platform_get_drvdata(pdev);
1928 struct it87_sio_data *sio_data = dev->platform_data; 1866 struct it87_sio_data *sio_data = dev->platform_data;
1929 const struct attribute_group *fan_group = it87_get_fan_group(data);
1930 int i; 1867 int i;
1931 1868
1932 sysfs_remove_group(&dev->kobj, &it87_group); 1869 sysfs_remove_group(&dev->kobj, &it87_group);
@@ -1952,10 +1889,13 @@ static void it87_remove_files(struct device *dev)
1952 for (i = 0; i < 5; i++) { 1889 for (i = 0; i < 5; i++) {
1953 if (!(data->has_fan & (1 << i))) 1890 if (!(data->has_fan & (1 << i)))
1954 continue; 1891 continue;
1955 sysfs_remove_group(&dev->kobj, &fan_group[i]); 1892 sysfs_remove_group(&dev->kobj, &it87_group_fan[i]);
1956 if (sio_data->beep_pin) 1893 if (sio_data->beep_pin)
1957 sysfs_remove_file(&dev->kobj, 1894 sysfs_remove_file(&dev->kobj,
1958 it87_attributes_fan_beep[i]); 1895 it87_attributes_fan_beep[i]);
1896 if (i < 3 && !has_16bit_fans(data))
1897 sysfs_remove_file(&dev->kobj,
1898 it87_attributes_fan_div[i]);
1959 } 1899 }
1960 for (i = 0; i < 3; i++) { 1900 for (i = 0; i < 3; i++) {
1961 if (sio_data->skip_pwm & (1 << 0)) 1901 if (sio_data->skip_pwm & (1 << 0))
@@ -1976,7 +1916,6 @@ static int it87_probe(struct platform_device *pdev)
1976 struct resource *res; 1916 struct resource *res;
1977 struct device *dev = &pdev->dev; 1917 struct device *dev = &pdev->dev;
1978 struct it87_sio_data *sio_data = dev->platform_data; 1918 struct it87_sio_data *sio_data = dev->platform_data;
1979 const struct attribute_group *fan_group;
1980 int err = 0, i; 1919 int err = 0, i;
1981 int enable_pwm_interface; 1920 int enable_pwm_interface;
1982 int fan_beep_need_rw; 1921 int fan_beep_need_rw;
@@ -2087,15 +2026,21 @@ static int it87_probe(struct platform_device *pdev)
2087 } 2026 }
2088 2027
2089 /* Do not create fan files for disabled fans */ 2028 /* Do not create fan files for disabled fans */
2090 fan_group = it87_get_fan_group(data);
2091 fan_beep_need_rw = 1; 2029 fan_beep_need_rw = 1;
2092 for (i = 0; i < 5; i++) { 2030 for (i = 0; i < 5; i++) {
2093 if (!(data->has_fan & (1 << i))) 2031 if (!(data->has_fan & (1 << i)))
2094 continue; 2032 continue;
2095 err = sysfs_create_group(&dev->kobj, &fan_group[i]); 2033 err = sysfs_create_group(&dev->kobj, &it87_group_fan[i]);
2096 if (err) 2034 if (err)
2097 goto error; 2035 goto error;
2098 2036
2037 if (i < 3 && !has_16bit_fans(data)) {
2038 err = sysfs_create_file(&dev->kobj,
2039 it87_attributes_fan_div[i]);
2040 if (err)
2041 goto error;
2042 }
2043
2099 if (sio_data->beep_pin) { 2044 if (sio_data->beep_pin) {
2100 err = sysfs_create_file(&dev->kobj, 2045 err = sysfs_create_file(&dev->kobj,
2101 it87_attributes_fan_beep[i]); 2046 it87_attributes_fan_beep[i]);
@@ -2414,15 +2359,15 @@ static struct it87_data *it87_update_device(struct device *dev)
2414 if (!(data->has_fan & (1 << i))) 2359 if (!(data->has_fan & (1 << i)))
2415 continue; 2360 continue;
2416 2361
2417 data->fan_min[i] = 2362 data->fan[i][1] =
2418 it87_read_value(data, IT87_REG_FAN_MIN[i]); 2363 it87_read_value(data, IT87_REG_FAN_MIN[i]);
2419 data->fan[i] = it87_read_value(data, 2364 data->fan[i][0] = it87_read_value(data,
2420 IT87_REG_FAN[i]); 2365 IT87_REG_FAN[i]);
2421 /* Add high byte if in 16-bit mode */ 2366 /* Add high byte if in 16-bit mode */
2422 if (has_16bit_fans(data)) { 2367 if (has_16bit_fans(data)) {
2423 data->fan[i] |= it87_read_value(data, 2368 data->fan[i][0] |= it87_read_value(data,
2424 IT87_REG_FANX[i]) << 8; 2369 IT87_REG_FANX[i]) << 8;
2425 data->fan_min[i] |= it87_read_value(data, 2370 data->fan[i][1] |= it87_read_value(data,
2426 IT87_REG_FANX_MIN[i]) << 8; 2371 IT87_REG_FANX_MIN[i]) << 8;
2427 } 2372 }
2428 } 2373 }