aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hwmon/it87.c201
1 files changed, 187 insertions, 14 deletions
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c
index 5adb269918fb..e3fbcf49afdb 100644
--- a/drivers/hwmon/it87.c
+++ b/drivers/hwmon/it87.c
@@ -252,8 +252,10 @@ static const u8 IT87_REG_VIN[] = { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
252 252
253#define IT87_REG_CHIPID 0x58 253#define IT87_REG_CHIPID 0x58
254 254
255#define IT87_REG_AUTO_TEMP(nr, i) (0x60 + (nr) * 8 + (i)) 255static const u8 IT87_REG_AUTO_BASE[] = { 0x60, 0x68, 0x70, 0x78, 0xa0, 0xa8 };
256#define IT87_REG_AUTO_PWM(nr, i) (0x65 + (nr) * 8 + (i)) 256
257#define IT87_REG_AUTO_TEMP(nr, i) (IT87_REG_AUTO_BASE[nr] + (i))
258#define IT87_REG_AUTO_PWM(nr, i) (IT87_REG_AUTO_BASE[nr] + 5 + (i))
257 259
258#define IT87_REG_TEMP456_ENABLE 0x77 260#define IT87_REG_TEMP456_ENABLE 0x77
259 261
@@ -673,6 +675,30 @@ static void it87_update_pwm_ctrl(struct it87_data *data, int nr)
673 for (i = 0; i < 3 ; i++) 675 for (i = 0; i < 3 ; i++)
674 data->auto_pwm[nr][i] = it87_read_value(data, 676 data->auto_pwm[nr][i] = it87_read_value(data,
675 IT87_REG_AUTO_PWM(nr, i)); 677 IT87_REG_AUTO_PWM(nr, i));
678 } else if (has_newer_autopwm(data)) {
679 int i;
680
681 /*
682 * 0: temperature hysteresis (base + 5)
683 * 1: fan off temperature (base + 0)
684 * 2: fan start temperature (base + 1)
685 * 3: fan max temperature (base + 2)
686 */
687 data->auto_temp[nr][0] =
688 it87_read_value(data, IT87_REG_AUTO_TEMP(nr, 5));
689
690 for (i = 0; i < 3 ; i++)
691 data->auto_temp[nr][i + 1] =
692 it87_read_value(data,
693 IT87_REG_AUTO_TEMP(nr, i));
694 /*
695 * 0: start pwm value (base + 3)
696 * 1: pwm slope (base + 4, 1/8th pwm)
697 */
698 data->auto_pwm[nr][0] =
699 it87_read_value(data, IT87_REG_AUTO_TEMP(nr, 3));
700 data->auto_pwm[nr][1] =
701 it87_read_value(data, IT87_REG_AUTO_TEMP(nr, 4));
676 } 702 }
677} 703}
678 704
@@ -1216,6 +1242,11 @@ static int check_trip_points(struct device *dev, int nr)
1216 if (data->auto_pwm[nr][i] > data->auto_pwm[nr][i + 1]) 1242 if (data->auto_pwm[nr][i] > data->auto_pwm[nr][i + 1])
1217 err = -EINVAL; 1243 err = -EINVAL;
1218 } 1244 }
1245 } else if (has_newer_autopwm(data)) {
1246 for (i = 1; i < 3; i++) {
1247 if (data->auto_temp[nr][i] > data->auto_temp[nr][i + 1])
1248 err = -EINVAL;
1249 }
1219 } 1250 }
1220 1251
1221 if (err) { 1252 if (err) {
@@ -1441,6 +1472,7 @@ static ssize_t set_auto_pwm(struct device *dev, struct device_attribute *attr,
1441 to_sensor_dev_attr_2(attr); 1472 to_sensor_dev_attr_2(attr);
1442 int nr = sensor_attr->nr; 1473 int nr = sensor_attr->nr;
1443 int point = sensor_attr->index; 1474 int point = sensor_attr->index;
1475 int regaddr;
1444 long val; 1476 long val;
1445 1477
1446 if (kstrtol(buf, 10, &val) < 0 || val < 0 || val > 255) 1478 if (kstrtol(buf, 10, &val) < 0 || val < 0 || val > 255)
@@ -1448,8 +1480,41 @@ static ssize_t set_auto_pwm(struct device *dev, struct device_attribute *attr,
1448 1480
1449 mutex_lock(&data->update_lock); 1481 mutex_lock(&data->update_lock);
1450 data->auto_pwm[nr][point] = pwm_to_reg(data, val); 1482 data->auto_pwm[nr][point] = pwm_to_reg(data, val);
1451 it87_write_value(data, IT87_REG_AUTO_PWM(nr, point), 1483 if (has_newer_autopwm(data))
1452 data->auto_pwm[nr][point]); 1484 regaddr = IT87_REG_AUTO_TEMP(nr, 3);
1485 else
1486 regaddr = IT87_REG_AUTO_PWM(nr, point);
1487 it87_write_value(data, regaddr, data->auto_pwm[nr][point]);
1488 mutex_unlock(&data->update_lock);
1489 return count;
1490}
1491
1492static ssize_t show_auto_pwm_slope(struct device *dev,
1493 struct device_attribute *attr, char *buf)
1494{
1495 struct it87_data *data = it87_update_device(dev);
1496 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1497 int nr = sensor_attr->index;
1498
1499 return sprintf(buf, "%d\n", data->auto_pwm[nr][1] & 0x7f);
1500}
1501
1502static ssize_t set_auto_pwm_slope(struct device *dev,
1503 struct device_attribute *attr,
1504 const char *buf, size_t count)
1505{
1506 struct it87_data *data = dev_get_drvdata(dev);
1507 struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
1508 int nr = sensor_attr->index;
1509 unsigned long val;
1510
1511 if (kstrtoul(buf, 10, &val) < 0 || val > 127)
1512 return -EINVAL;
1513
1514 mutex_lock(&data->update_lock);
1515 data->auto_pwm[nr][1] = (data->auto_pwm[nr][1] & 0x80) | val;
1516 it87_write_value(data, IT87_REG_AUTO_TEMP(nr, 4),
1517 data->auto_pwm[nr][1]);
1453 mutex_unlock(&data->update_lock); 1518 mutex_unlock(&data->update_lock);
1454 return count; 1519 return count;
1455} 1520}
@@ -1462,8 +1527,14 @@ static ssize_t show_auto_temp(struct device *dev, struct device_attribute *attr,
1462 to_sensor_dev_attr_2(attr); 1527 to_sensor_dev_attr_2(attr);
1463 int nr = sensor_attr->nr; 1528 int nr = sensor_attr->nr;
1464 int point = sensor_attr->index; 1529 int point = sensor_attr->index;
1530 int reg;
1531
1532 if (has_old_autopwm(data) || point)
1533 reg = data->auto_temp[nr][point];
1534 else
1535 reg = data->auto_temp[nr][1] - (data->auto_temp[nr][0] & 0x1f);
1465 1536
1466 return sprintf(buf, "%d\n", TEMP_FROM_REG(data->auto_temp[nr][point])); 1537 return sprintf(buf, "%d\n", TEMP_FROM_REG(reg));
1467} 1538}
1468 1539
1469static ssize_t set_auto_temp(struct device *dev, struct device_attribute *attr, 1540static ssize_t set_auto_temp(struct device *dev, struct device_attribute *attr,
@@ -1475,14 +1546,24 @@ static ssize_t set_auto_temp(struct device *dev, struct device_attribute *attr,
1475 int nr = sensor_attr->nr; 1546 int nr = sensor_attr->nr;
1476 int point = sensor_attr->index; 1547 int point = sensor_attr->index;
1477 long val; 1548 long val;
1549 int reg;
1478 1550
1479 if (kstrtol(buf, 10, &val) < 0 || val < -128000 || val > 127000) 1551 if (kstrtol(buf, 10, &val) < 0 || val < -128000 || val > 127000)
1480 return -EINVAL; 1552 return -EINVAL;
1481 1553
1482 mutex_lock(&data->update_lock); 1554 mutex_lock(&data->update_lock);
1483 data->auto_temp[nr][point] = TEMP_TO_REG(val); 1555 if (has_newer_autopwm(data) && !point) {
1484 it87_write_value(data, IT87_REG_AUTO_TEMP(nr, point), 1556 reg = data->auto_temp[nr][1] - TEMP_TO_REG(val);
1485 data->auto_temp[nr][point]); 1557 reg = clamp_val(reg, 0, 0x1f) | (data->auto_temp[nr][0] & 0xe0);
1558 data->auto_temp[nr][0] = reg;
1559 it87_write_value(data, IT87_REG_AUTO_TEMP(nr, 5), reg);
1560 } else {
1561 reg = TEMP_TO_REG(val);
1562 data->auto_temp[nr][point] = reg;
1563 if (has_newer_autopwm(data))
1564 point--;
1565 it87_write_value(data, IT87_REG_AUTO_TEMP(nr, point), reg);
1566 }
1486 mutex_unlock(&data->update_lock); 1567 mutex_unlock(&data->update_lock);
1487 return count; 1568 return count;
1488} 1569}
@@ -1542,6 +1623,10 @@ static SENSOR_DEVICE_ATTR_2(pwm1_auto_point3_temp, S_IRUGO | S_IWUSR,
1542 show_auto_temp, set_auto_temp, 0, 3); 1623 show_auto_temp, set_auto_temp, 0, 3);
1543static SENSOR_DEVICE_ATTR_2(pwm1_auto_point4_temp, S_IRUGO | S_IWUSR, 1624static SENSOR_DEVICE_ATTR_2(pwm1_auto_point4_temp, S_IRUGO | S_IWUSR,
1544 show_auto_temp, set_auto_temp, 0, 4); 1625 show_auto_temp, set_auto_temp, 0, 4);
1626static SENSOR_DEVICE_ATTR_2(pwm1_auto_start, S_IRUGO | S_IWUSR,
1627 show_auto_pwm, set_auto_pwm, 0, 0);
1628static SENSOR_DEVICE_ATTR(pwm1_auto_slope, S_IRUGO | S_IWUSR,
1629 show_auto_pwm_slope, set_auto_pwm_slope, 0);
1545 1630
1546static SENSOR_DEVICE_ATTR(pwm2_enable, S_IRUGO | S_IWUSR, 1631static SENSOR_DEVICE_ATTR(pwm2_enable, S_IRUGO | S_IWUSR,
1547 show_pwm_enable, set_pwm_enable, 1); 1632 show_pwm_enable, set_pwm_enable, 1);
@@ -1567,6 +1652,10 @@ static SENSOR_DEVICE_ATTR_2(pwm2_auto_point3_temp, S_IRUGO | S_IWUSR,
1567 show_auto_temp, set_auto_temp, 1, 3); 1652 show_auto_temp, set_auto_temp, 1, 3);
1568static SENSOR_DEVICE_ATTR_2(pwm2_auto_point4_temp, S_IRUGO | S_IWUSR, 1653static SENSOR_DEVICE_ATTR_2(pwm2_auto_point4_temp, S_IRUGO | S_IWUSR,
1569 show_auto_temp, set_auto_temp, 1, 4); 1654 show_auto_temp, set_auto_temp, 1, 4);
1655static SENSOR_DEVICE_ATTR_2(pwm2_auto_start, S_IRUGO | S_IWUSR,
1656 show_auto_pwm, set_auto_pwm, 1, 0);
1657static SENSOR_DEVICE_ATTR(pwm2_auto_slope, S_IRUGO | S_IWUSR,
1658 show_auto_pwm_slope, set_auto_pwm_slope, 1);
1570 1659
1571static SENSOR_DEVICE_ATTR(pwm3_enable, S_IRUGO | S_IWUSR, 1660static SENSOR_DEVICE_ATTR(pwm3_enable, S_IRUGO | S_IWUSR,
1572 show_pwm_enable, set_pwm_enable, 2); 1661 show_pwm_enable, set_pwm_enable, 2);
@@ -1592,6 +1681,10 @@ static SENSOR_DEVICE_ATTR_2(pwm3_auto_point3_temp, S_IRUGO | S_IWUSR,
1592 show_auto_temp, set_auto_temp, 2, 3); 1681 show_auto_temp, set_auto_temp, 2, 3);
1593static SENSOR_DEVICE_ATTR_2(pwm3_auto_point4_temp, S_IRUGO | S_IWUSR, 1682static SENSOR_DEVICE_ATTR_2(pwm3_auto_point4_temp, S_IRUGO | S_IWUSR,
1594 show_auto_temp, set_auto_temp, 2, 4); 1683 show_auto_temp, set_auto_temp, 2, 4);
1684static SENSOR_DEVICE_ATTR_2(pwm3_auto_start, S_IRUGO | S_IWUSR,
1685 show_auto_pwm, set_auto_pwm, 2, 0);
1686static SENSOR_DEVICE_ATTR(pwm3_auto_slope, S_IRUGO | S_IWUSR,
1687 show_auto_pwm_slope, set_auto_pwm_slope, 2);
1595 1688
1596static SENSOR_DEVICE_ATTR(pwm4_enable, S_IRUGO | S_IWUSR, 1689static SENSOR_DEVICE_ATTR(pwm4_enable, S_IRUGO | S_IWUSR,
1597 show_pwm_enable, set_pwm_enable, 3); 1690 show_pwm_enable, set_pwm_enable, 3);
@@ -1599,6 +1692,18 @@ static SENSOR_DEVICE_ATTR(pwm4, S_IRUGO | S_IWUSR, show_pwm, set_pwm, 3);
1599static SENSOR_DEVICE_ATTR(pwm4_freq, S_IRUGO, show_pwm_freq, NULL, 3); 1692static SENSOR_DEVICE_ATTR(pwm4_freq, S_IRUGO, show_pwm_freq, NULL, 3);
1600static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IRUGO, 1693static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IRUGO,
1601 show_pwm_temp_map, set_pwm_temp_map, 3); 1694 show_pwm_temp_map, set_pwm_temp_map, 3);
1695static SENSOR_DEVICE_ATTR_2(pwm4_auto_point1_temp, S_IRUGO | S_IWUSR,
1696 show_auto_temp, set_auto_temp, 2, 1);
1697static SENSOR_DEVICE_ATTR_2(pwm4_auto_point1_temp_hyst, S_IRUGO | S_IWUSR,
1698 show_auto_temp, set_auto_temp, 2, 0);
1699static SENSOR_DEVICE_ATTR_2(pwm4_auto_point2_temp, S_IRUGO | S_IWUSR,
1700 show_auto_temp, set_auto_temp, 2, 2);
1701static SENSOR_DEVICE_ATTR_2(pwm4_auto_point3_temp, S_IRUGO | S_IWUSR,
1702 show_auto_temp, set_auto_temp, 2, 3);
1703static SENSOR_DEVICE_ATTR_2(pwm4_auto_start, S_IRUGO | S_IWUSR,
1704 show_auto_pwm, set_auto_pwm, 3, 0);
1705static SENSOR_DEVICE_ATTR(pwm4_auto_slope, S_IRUGO | S_IWUSR,
1706 show_auto_pwm_slope, set_auto_pwm_slope, 3);
1602 1707
1603static SENSOR_DEVICE_ATTR(pwm5_enable, S_IRUGO | S_IWUSR, 1708static SENSOR_DEVICE_ATTR(pwm5_enable, S_IRUGO | S_IWUSR,
1604 show_pwm_enable, set_pwm_enable, 4); 1709 show_pwm_enable, set_pwm_enable, 4);
@@ -1606,6 +1711,18 @@ static SENSOR_DEVICE_ATTR(pwm5, S_IRUGO | S_IWUSR, show_pwm, set_pwm, 4);
1606static SENSOR_DEVICE_ATTR(pwm5_freq, S_IRUGO, show_pwm_freq, NULL, 4); 1711static SENSOR_DEVICE_ATTR(pwm5_freq, S_IRUGO, show_pwm_freq, NULL, 4);
1607static SENSOR_DEVICE_ATTR(pwm5_auto_channels_temp, S_IRUGO, 1712static SENSOR_DEVICE_ATTR(pwm5_auto_channels_temp, S_IRUGO,
1608 show_pwm_temp_map, set_pwm_temp_map, 4); 1713 show_pwm_temp_map, set_pwm_temp_map, 4);
1714static SENSOR_DEVICE_ATTR_2(pwm5_auto_point1_temp, S_IRUGO | S_IWUSR,
1715 show_auto_temp, set_auto_temp, 2, 1);
1716static SENSOR_DEVICE_ATTR_2(pwm5_auto_point1_temp_hyst, S_IRUGO | S_IWUSR,
1717 show_auto_temp, set_auto_temp, 2, 0);
1718static SENSOR_DEVICE_ATTR_2(pwm5_auto_point2_temp, S_IRUGO | S_IWUSR,
1719 show_auto_temp, set_auto_temp, 2, 2);
1720static SENSOR_DEVICE_ATTR_2(pwm5_auto_point3_temp, S_IRUGO | S_IWUSR,
1721 show_auto_temp, set_auto_temp, 2, 3);
1722static SENSOR_DEVICE_ATTR_2(pwm5_auto_start, S_IRUGO | S_IWUSR,
1723 show_auto_pwm, set_auto_pwm, 4, 0);
1724static SENSOR_DEVICE_ATTR(pwm5_auto_slope, S_IRUGO | S_IWUSR,
1725 show_auto_pwm_slope, set_auto_pwm_slope, 4);
1609 1726
1610static SENSOR_DEVICE_ATTR(pwm6_enable, S_IRUGO | S_IWUSR, 1727static SENSOR_DEVICE_ATTR(pwm6_enable, S_IRUGO | S_IWUSR,
1611 show_pwm_enable, set_pwm_enable, 5); 1728 show_pwm_enable, set_pwm_enable, 5);
@@ -1613,6 +1730,18 @@ static SENSOR_DEVICE_ATTR(pwm6, S_IRUGO | S_IWUSR, show_pwm, set_pwm, 5);
1613static SENSOR_DEVICE_ATTR(pwm6_freq, S_IRUGO, show_pwm_freq, NULL, 5); 1730static SENSOR_DEVICE_ATTR(pwm6_freq, S_IRUGO, show_pwm_freq, NULL, 5);
1614static SENSOR_DEVICE_ATTR(pwm6_auto_channels_temp, S_IRUGO, 1731static SENSOR_DEVICE_ATTR(pwm6_auto_channels_temp, S_IRUGO,
1615 show_pwm_temp_map, set_pwm_temp_map, 5); 1732 show_pwm_temp_map, set_pwm_temp_map, 5);
1733static SENSOR_DEVICE_ATTR_2(pwm6_auto_point1_temp, S_IRUGO | S_IWUSR,
1734 show_auto_temp, set_auto_temp, 2, 1);
1735static SENSOR_DEVICE_ATTR_2(pwm6_auto_point1_temp_hyst, S_IRUGO | S_IWUSR,
1736 show_auto_temp, set_auto_temp, 2, 0);
1737static SENSOR_DEVICE_ATTR_2(pwm6_auto_point2_temp, S_IRUGO | S_IWUSR,
1738 show_auto_temp, set_auto_temp, 2, 2);
1739static SENSOR_DEVICE_ATTR_2(pwm6_auto_point3_temp, S_IRUGO | S_IWUSR,
1740 show_auto_temp, set_auto_temp, 2, 3);
1741static SENSOR_DEVICE_ATTR_2(pwm6_auto_start, S_IRUGO | S_IWUSR,
1742 show_auto_pwm, set_auto_pwm, 5, 0);
1743static SENSOR_DEVICE_ATTR(pwm6_auto_slope, S_IRUGO | S_IWUSR,
1744 show_auto_pwm_slope, set_auto_pwm_slope, 5);
1616 1745
1617/* Alarms */ 1746/* Alarms */
1618static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, 1747static ssize_t show_alarms(struct device *dev, struct device_attribute *attr,
@@ -2050,8 +2179,8 @@ static umode_t it87_pwm_is_visible(struct kobject *kobj,
2050 if (!(data->has_pwm & BIT(i))) 2179 if (!(data->has_pwm & BIT(i)))
2051 return 0; 2180 return 0;
2052 2181
2053 /* pwmX_auto_channels_temp is only writable for old auto pwm */ 2182 /* pwmX_auto_channels_temp is only writable if auto pwm is supported */
2054 if (a == 3 && has_old_autopwm(data)) 2183 if (a == 3 && (has_old_autopwm(data) || has_newer_autopwm(data)))
2055 return attr->mode | S_IWUSR; 2184 return attr->mode | S_IWUSR;
2056 2185
2057 /* pwm2_freq is writable if there are two pwm frequency selects */ 2186 /* pwm2_freq is writable if there are two pwm frequency selects */
@@ -2105,11 +2234,28 @@ static umode_t it87_auto_pwm_is_visible(struct kobject *kobj,
2105{ 2234{
2106 struct device *dev = container_of(kobj, struct device, kobj); 2235 struct device *dev = container_of(kobj, struct device, kobj);
2107 struct it87_data *data = dev_get_drvdata(dev); 2236 struct it87_data *data = dev_get_drvdata(dev);
2108 int i = index / 9; /* pwm index */ 2237 int i = index / 11; /* pwm index */
2238 int a = index % 11; /* attribute index */
2239
2240 if (index >= 33) { /* pwm 4..6 */
2241 i = (index - 33) / 6 + 3;
2242 a = (index - 33) % 6 + 4;
2243 }
2109 2244
2110 if (!(data->has_pwm & BIT(i))) 2245 if (!(data->has_pwm & BIT(i)))
2111 return 0; 2246 return 0;
2112 2247
2248 if (has_newer_autopwm(data)) {
2249 if (a < 4) /* no auto point pwm */
2250 return 0;
2251 if (a == 8) /* no auto_point4 */
2252 return 0;
2253 }
2254 if (has_old_autopwm(data)) {
2255 if (a >= 9) /* no pwm_auto_start, pwm_auto_slope */
2256 return 0;
2257 }
2258
2113 return attr->mode; 2259 return attr->mode;
2114} 2260}
2115 2261
@@ -2123,8 +2269,10 @@ static struct attribute *it87_attributes_auto_pwm[] = {
2123 &sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr, 2269 &sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr,
2124 &sensor_dev_attr_pwm1_auto_point3_temp.dev_attr.attr, 2270 &sensor_dev_attr_pwm1_auto_point3_temp.dev_attr.attr,
2125 &sensor_dev_attr_pwm1_auto_point4_temp.dev_attr.attr, 2271 &sensor_dev_attr_pwm1_auto_point4_temp.dev_attr.attr,
2272 &sensor_dev_attr_pwm1_auto_start.dev_attr.attr,
2273 &sensor_dev_attr_pwm1_auto_slope.dev_attr.attr,
2126 2274
2127 &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr, 2275 &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr, /* 11 */
2128 &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr, 2276 &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
2129 &sensor_dev_attr_pwm2_auto_point3_pwm.dev_attr.attr, 2277 &sensor_dev_attr_pwm2_auto_point3_pwm.dev_attr.attr,
2130 &sensor_dev_attr_pwm2_auto_point4_pwm.dev_attr.attr, 2278 &sensor_dev_attr_pwm2_auto_point4_pwm.dev_attr.attr,
@@ -2133,8 +2281,10 @@ static struct attribute *it87_attributes_auto_pwm[] = {
2133 &sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr, 2281 &sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr,
2134 &sensor_dev_attr_pwm2_auto_point3_temp.dev_attr.attr, 2282 &sensor_dev_attr_pwm2_auto_point3_temp.dev_attr.attr,
2135 &sensor_dev_attr_pwm2_auto_point4_temp.dev_attr.attr, 2283 &sensor_dev_attr_pwm2_auto_point4_temp.dev_attr.attr,
2284 &sensor_dev_attr_pwm2_auto_start.dev_attr.attr,
2285 &sensor_dev_attr_pwm2_auto_slope.dev_attr.attr,
2136 2286
2137 &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr, 2287 &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr, /* 22 */
2138 &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr, 2288 &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
2139 &sensor_dev_attr_pwm3_auto_point3_pwm.dev_attr.attr, 2289 &sensor_dev_attr_pwm3_auto_point3_pwm.dev_attr.attr,
2140 &sensor_dev_attr_pwm3_auto_point4_pwm.dev_attr.attr, 2290 &sensor_dev_attr_pwm3_auto_point4_pwm.dev_attr.attr,
@@ -2143,6 +2293,29 @@ static struct attribute *it87_attributes_auto_pwm[] = {
2143 &sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr, 2293 &sensor_dev_attr_pwm3_auto_point2_temp.dev_attr.attr,
2144 &sensor_dev_attr_pwm3_auto_point3_temp.dev_attr.attr, 2294 &sensor_dev_attr_pwm3_auto_point3_temp.dev_attr.attr,
2145 &sensor_dev_attr_pwm3_auto_point4_temp.dev_attr.attr, 2295 &sensor_dev_attr_pwm3_auto_point4_temp.dev_attr.attr,
2296 &sensor_dev_attr_pwm3_auto_start.dev_attr.attr,
2297 &sensor_dev_attr_pwm3_auto_slope.dev_attr.attr,
2298
2299 &sensor_dev_attr_pwm4_auto_point1_temp.dev_attr.attr, /* 33 */
2300 &sensor_dev_attr_pwm4_auto_point1_temp_hyst.dev_attr.attr,
2301 &sensor_dev_attr_pwm4_auto_point2_temp.dev_attr.attr,
2302 &sensor_dev_attr_pwm4_auto_point3_temp.dev_attr.attr,
2303 &sensor_dev_attr_pwm4_auto_start.dev_attr.attr,
2304 &sensor_dev_attr_pwm4_auto_slope.dev_attr.attr,
2305
2306 &sensor_dev_attr_pwm5_auto_point1_temp.dev_attr.attr,
2307 &sensor_dev_attr_pwm5_auto_point1_temp_hyst.dev_attr.attr,
2308 &sensor_dev_attr_pwm5_auto_point2_temp.dev_attr.attr,
2309 &sensor_dev_attr_pwm5_auto_point3_temp.dev_attr.attr,
2310 &sensor_dev_attr_pwm5_auto_start.dev_attr.attr,
2311 &sensor_dev_attr_pwm5_auto_slope.dev_attr.attr,
2312
2313 &sensor_dev_attr_pwm6_auto_point1_temp.dev_attr.attr,
2314 &sensor_dev_attr_pwm6_auto_point1_temp_hyst.dev_attr.attr,
2315 &sensor_dev_attr_pwm6_auto_point2_temp.dev_attr.attr,
2316 &sensor_dev_attr_pwm6_auto_point3_temp.dev_attr.attr,
2317 &sensor_dev_attr_pwm6_auto_start.dev_attr.attr,
2318 &sensor_dev_attr_pwm6_auto_slope.dev_attr.attr,
2146 2319
2147 NULL, 2320 NULL,
2148}; 2321};
@@ -2839,7 +3012,7 @@ static int it87_probe(struct platform_device *pdev)
2839 data->has_pwm &= ~sio_data->skip_pwm; 3012 data->has_pwm &= ~sio_data->skip_pwm;
2840 3013
2841 data->groups[4] = &it87_group_pwm; 3014 data->groups[4] = &it87_group_pwm;
2842 if (has_old_autopwm(data)) 3015 if (has_old_autopwm(data) || has_newer_autopwm(data))
2843 data->groups[5] = &it87_group_auto_pwm; 3016 data->groups[5] = &it87_group_auto_pwm;
2844 } 3017 }
2845 3018