diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/hwmon/f71882fg.c | 133 |
1 files changed, 104 insertions, 29 deletions
diff --git a/drivers/hwmon/f71882fg.c b/drivers/hwmon/f71882fg.c index 21bc66159b5a..4230729780c4 100644 --- a/drivers/hwmon/f71882fg.c +++ b/drivers/hwmon/f71882fg.c | |||
@@ -1127,8 +1127,12 @@ static ssize_t store_fan_full_speed(struct device *dev, | |||
1127 | const char *buf, size_t count) | 1127 | const char *buf, size_t count) |
1128 | { | 1128 | { |
1129 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1129 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1130 | int nr = to_sensor_dev_attr_2(devattr)->index; | 1130 | int err, nr = to_sensor_dev_attr_2(devattr)->index; |
1131 | long val = simple_strtol(buf, NULL, 10); | 1131 | long val; |
1132 | |||
1133 | err = strict_strtol(buf, 10, &val); | ||
1134 | if (err) | ||
1135 | return err; | ||
1132 | 1136 | ||
1133 | val = SENSORS_LIMIT(val, 23, 1500000); | 1137 | val = SENSORS_LIMIT(val, 23, 1500000); |
1134 | val = fan_to_reg(val); | 1138 | val = fan_to_reg(val); |
@@ -1157,8 +1161,12 @@ static ssize_t store_fan_beep(struct device *dev, struct device_attribute | |||
1157 | *devattr, const char *buf, size_t count) | 1161 | *devattr, const char *buf, size_t count) |
1158 | { | 1162 | { |
1159 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1163 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1160 | int nr = to_sensor_dev_attr_2(devattr)->index; | 1164 | int err, nr = to_sensor_dev_attr_2(devattr)->index; |
1161 | unsigned long val = simple_strtoul(buf, NULL, 10); | 1165 | unsigned long val; |
1166 | |||
1167 | err = strict_strtoul(buf, 10, &val); | ||
1168 | if (err) | ||
1169 | return err; | ||
1162 | 1170 | ||
1163 | mutex_lock(&data->update_lock); | 1171 | mutex_lock(&data->update_lock); |
1164 | data->fan_beep = f71882fg_read8(data, F71882FG_REG_FAN_BEEP); | 1172 | data->fan_beep = f71882fg_read8(data, F71882FG_REG_FAN_BEEP); |
@@ -1206,7 +1214,14 @@ static ssize_t store_in_max(struct device *dev, struct device_attribute | |||
1206 | *devattr, const char *buf, size_t count) | 1214 | *devattr, const char *buf, size_t count) |
1207 | { | 1215 | { |
1208 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1216 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1209 | long val = simple_strtol(buf, NULL, 10) / 8; | 1217 | int err; |
1218 | long val; | ||
1219 | |||
1220 | err = strict_strtol(buf, 10, &val); | ||
1221 | if (err) | ||
1222 | return err; | ||
1223 | |||
1224 | val /= 8; | ||
1210 | val = SENSORS_LIMIT(val, 0, 255); | 1225 | val = SENSORS_LIMIT(val, 0, 255); |
1211 | 1226 | ||
1212 | mutex_lock(&data->update_lock); | 1227 | mutex_lock(&data->update_lock); |
@@ -1233,8 +1248,12 @@ static ssize_t store_in_beep(struct device *dev, struct device_attribute | |||
1233 | *devattr, const char *buf, size_t count) | 1248 | *devattr, const char *buf, size_t count) |
1234 | { | 1249 | { |
1235 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1250 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1236 | int nr = to_sensor_dev_attr_2(devattr)->index; | 1251 | int err, nr = to_sensor_dev_attr_2(devattr)->index; |
1237 | unsigned long val = simple_strtoul(buf, NULL, 10); | 1252 | unsigned long val; |
1253 | |||
1254 | err = strict_strtoul(buf, 10, &val); | ||
1255 | if (err) | ||
1256 | return err; | ||
1238 | 1257 | ||
1239 | mutex_lock(&data->update_lock); | 1258 | mutex_lock(&data->update_lock); |
1240 | data->in_beep = f71882fg_read8(data, F71882FG_REG_IN_BEEP); | 1259 | data->in_beep = f71882fg_read8(data, F71882FG_REG_IN_BEEP); |
@@ -1299,8 +1318,14 @@ static ssize_t store_temp_max(struct device *dev, struct device_attribute | |||
1299 | *devattr, const char *buf, size_t count) | 1318 | *devattr, const char *buf, size_t count) |
1300 | { | 1319 | { |
1301 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1320 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1302 | int nr = to_sensor_dev_attr_2(devattr)->index; | 1321 | int err, nr = to_sensor_dev_attr_2(devattr)->index; |
1303 | long val = simple_strtol(buf, NULL, 10) / 1000; | 1322 | long val; |
1323 | |||
1324 | err = strict_strtol(buf, 10, &val); | ||
1325 | if (err) | ||
1326 | return err; | ||
1327 | |||
1328 | val /= 1000; | ||
1304 | val = SENSORS_LIMIT(val, 0, 255); | 1329 | val = SENSORS_LIMIT(val, 0, 255); |
1305 | 1330 | ||
1306 | mutex_lock(&data->update_lock); | 1331 | mutex_lock(&data->update_lock); |
@@ -1333,10 +1358,16 @@ static ssize_t store_temp_max_hyst(struct device *dev, struct device_attribute | |||
1333 | *devattr, const char *buf, size_t count) | 1358 | *devattr, const char *buf, size_t count) |
1334 | { | 1359 | { |
1335 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1360 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1336 | int nr = to_sensor_dev_attr_2(devattr)->index; | 1361 | int err, nr = to_sensor_dev_attr_2(devattr)->index; |
1337 | long val = simple_strtol(buf, NULL, 10) / 1000; | ||
1338 | ssize_t ret = count; | 1362 | ssize_t ret = count; |
1339 | u8 reg; | 1363 | u8 reg; |
1364 | long val; | ||
1365 | |||
1366 | err = strict_strtol(buf, 10, &val); | ||
1367 | if (err) | ||
1368 | return err; | ||
1369 | |||
1370 | val /= 1000; | ||
1340 | 1371 | ||
1341 | mutex_lock(&data->update_lock); | 1372 | mutex_lock(&data->update_lock); |
1342 | 1373 | ||
@@ -1372,8 +1403,14 @@ static ssize_t store_temp_crit(struct device *dev, struct device_attribute | |||
1372 | *devattr, const char *buf, size_t count) | 1403 | *devattr, const char *buf, size_t count) |
1373 | { | 1404 | { |
1374 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1405 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1375 | int nr = to_sensor_dev_attr_2(devattr)->index; | 1406 | int err, nr = to_sensor_dev_attr_2(devattr)->index; |
1376 | long val = simple_strtol(buf, NULL, 10) / 1000; | 1407 | long val; |
1408 | |||
1409 | err = strict_strtol(buf, 10, &val); | ||
1410 | if (err) | ||
1411 | return err; | ||
1412 | |||
1413 | val /= 1000; | ||
1377 | val = SENSORS_LIMIT(val, 0, 255); | 1414 | val = SENSORS_LIMIT(val, 0, 255); |
1378 | 1415 | ||
1379 | mutex_lock(&data->update_lock); | 1416 | mutex_lock(&data->update_lock); |
@@ -1427,8 +1464,12 @@ static ssize_t store_temp_beep(struct device *dev, struct device_attribute | |||
1427 | *devattr, const char *buf, size_t count) | 1464 | *devattr, const char *buf, size_t count) |
1428 | { | 1465 | { |
1429 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1466 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1430 | int nr = to_sensor_dev_attr_2(devattr)->index; | 1467 | int err, nr = to_sensor_dev_attr_2(devattr)->index; |
1431 | unsigned long val = simple_strtoul(buf, NULL, 10); | 1468 | unsigned long val; |
1469 | |||
1470 | err = strict_strtoul(buf, 10, &val); | ||
1471 | if (err) | ||
1472 | return err; | ||
1432 | 1473 | ||
1433 | mutex_lock(&data->update_lock); | 1474 | mutex_lock(&data->update_lock); |
1434 | data->temp_beep = f71882fg_read8(data, F71882FG_REG_TEMP_BEEP); | 1475 | data->temp_beep = f71882fg_read8(data, F71882FG_REG_TEMP_BEEP); |
@@ -1490,8 +1531,13 @@ static ssize_t store_pwm(struct device *dev, | |||
1490 | size_t count) | 1531 | size_t count) |
1491 | { | 1532 | { |
1492 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1533 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1493 | int nr = to_sensor_dev_attr_2(devattr)->index; | 1534 | int err, nr = to_sensor_dev_attr_2(devattr)->index; |
1494 | long val = simple_strtol(buf, NULL, 10); | 1535 | long val; |
1536 | |||
1537 | err = strict_strtol(buf, 10, &val); | ||
1538 | if (err) | ||
1539 | return err; | ||
1540 | |||
1495 | val = SENSORS_LIMIT(val, 0, 255); | 1541 | val = SENSORS_LIMIT(val, 0, 255); |
1496 | 1542 | ||
1497 | mutex_lock(&data->update_lock); | 1543 | mutex_lock(&data->update_lock); |
@@ -1551,8 +1597,12 @@ static ssize_t store_pwm_enable(struct device *dev, struct device_attribute | |||
1551 | *devattr, const char *buf, size_t count) | 1597 | *devattr, const char *buf, size_t count) |
1552 | { | 1598 | { |
1553 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1599 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1554 | int nr = to_sensor_dev_attr_2(devattr)->index; | 1600 | int err, nr = to_sensor_dev_attr_2(devattr)->index; |
1555 | long val = simple_strtol(buf, NULL, 10); | 1601 | long val; |
1602 | |||
1603 | err = strict_strtol(buf, 10, &val); | ||
1604 | if (err) | ||
1605 | return err; | ||
1556 | 1606 | ||
1557 | /* Special case for F8000 pwm channel 3 which only does auto mode */ | 1607 | /* Special case for F8000 pwm channel 3 which only does auto mode */ |
1558 | if (data->type == f8000 && nr == 2 && val != 2) | 1608 | if (data->type == f8000 && nr == 2 && val != 2) |
@@ -1626,9 +1676,14 @@ static ssize_t store_pwm_auto_point_pwm(struct device *dev, | |||
1626 | const char *buf, size_t count) | 1676 | const char *buf, size_t count) |
1627 | { | 1677 | { |
1628 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1678 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1629 | int pwm = to_sensor_dev_attr_2(devattr)->index; | 1679 | int err, pwm = to_sensor_dev_attr_2(devattr)->index; |
1630 | int point = to_sensor_dev_attr_2(devattr)->nr; | 1680 | int point = to_sensor_dev_attr_2(devattr)->nr; |
1631 | long val = simple_strtol(buf, NULL, 10); | 1681 | long val; |
1682 | |||
1683 | err = strict_strtol(buf, 10, &val); | ||
1684 | if (err) | ||
1685 | return err; | ||
1686 | |||
1632 | val = SENSORS_LIMIT(val, 0, 255); | 1687 | val = SENSORS_LIMIT(val, 0, 255); |
1633 | 1688 | ||
1634 | mutex_lock(&data->update_lock); | 1689 | mutex_lock(&data->update_lock); |
@@ -1674,10 +1729,16 @@ static ssize_t store_pwm_auto_point_temp_hyst(struct device *dev, | |||
1674 | const char *buf, size_t count) | 1729 | const char *buf, size_t count) |
1675 | { | 1730 | { |
1676 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1731 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1677 | int nr = to_sensor_dev_attr_2(devattr)->index; | 1732 | int err, nr = to_sensor_dev_attr_2(devattr)->index; |
1678 | int point = to_sensor_dev_attr_2(devattr)->nr; | 1733 | int point = to_sensor_dev_attr_2(devattr)->nr; |
1679 | long val = simple_strtol(buf, NULL, 10) / 1000; | ||
1680 | u8 reg; | 1734 | u8 reg; |
1735 | long val; | ||
1736 | |||
1737 | err = strict_strtol(buf, 10, &val); | ||
1738 | if (err) | ||
1739 | return err; | ||
1740 | |||
1741 | val /= 1000; | ||
1681 | 1742 | ||
1682 | mutex_lock(&data->update_lock); | 1743 | mutex_lock(&data->update_lock); |
1683 | data->pwm_auto_point_temp[nr][point] = | 1744 | data->pwm_auto_point_temp[nr][point] = |
@@ -1716,8 +1777,12 @@ static ssize_t store_pwm_interpolate(struct device *dev, | |||
1716 | const char *buf, size_t count) | 1777 | const char *buf, size_t count) |
1717 | { | 1778 | { |
1718 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1779 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1719 | int nr = to_sensor_dev_attr_2(devattr)->index; | 1780 | int err, nr = to_sensor_dev_attr_2(devattr)->index; |
1720 | unsigned long val = simple_strtoul(buf, NULL, 10); | 1781 | unsigned long val; |
1782 | |||
1783 | err = strict_strtoul(buf, 10, &val); | ||
1784 | if (err) | ||
1785 | return err; | ||
1721 | 1786 | ||
1722 | mutex_lock(&data->update_lock); | 1787 | mutex_lock(&data->update_lock); |
1723 | data->pwm_auto_point_mapping[nr] = | 1788 | data->pwm_auto_point_mapping[nr] = |
@@ -1752,8 +1817,12 @@ static ssize_t store_pwm_auto_point_channel(struct device *dev, | |||
1752 | const char *buf, size_t count) | 1817 | const char *buf, size_t count) |
1753 | { | 1818 | { |
1754 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1819 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1755 | int nr = to_sensor_dev_attr_2(devattr)->index; | 1820 | int err, nr = to_sensor_dev_attr_2(devattr)->index; |
1756 | long val = simple_strtol(buf, NULL, 10); | 1821 | long val; |
1822 | |||
1823 | err = strict_strtol(buf, 10, &val); | ||
1824 | if (err) | ||
1825 | return err; | ||
1757 | 1826 | ||
1758 | switch (val) { | 1827 | switch (val) { |
1759 | case 1: | 1828 | case 1: |
@@ -1798,9 +1867,15 @@ static ssize_t store_pwm_auto_point_temp(struct device *dev, | |||
1798 | const char *buf, size_t count) | 1867 | const char *buf, size_t count) |
1799 | { | 1868 | { |
1800 | struct f71882fg_data *data = dev_get_drvdata(dev); | 1869 | struct f71882fg_data *data = dev_get_drvdata(dev); |
1801 | int pwm = to_sensor_dev_attr_2(devattr)->index; | 1870 | int err, pwm = to_sensor_dev_attr_2(devattr)->index; |
1802 | int point = to_sensor_dev_attr_2(devattr)->nr; | 1871 | int point = to_sensor_dev_attr_2(devattr)->nr; |
1803 | long val = simple_strtol(buf, NULL, 10) / 1000; | 1872 | long val; |
1873 | |||
1874 | err = strict_strtol(buf, 10, &val); | ||
1875 | if (err) | ||
1876 | return err; | ||
1877 | |||
1878 | val /= 1000; | ||
1804 | 1879 | ||
1805 | if (data->type == f71889fg) | 1880 | if (data->type == f71889fg) |
1806 | val = SENSORS_LIMIT(val, -128, 127); | 1881 | val = SENSORS_LIMIT(val, -128, 127); |