| 236 | | |
| 237 | | /* Initial limits */ |
| 238 | | #define W83781D_INIT_IN_0 (vid==3500?280:vid/10) |
| 239 | | #define W83781D_INIT_IN_1 (vid==3500?280:vid/10) |
| 240 | | #define W83781D_INIT_IN_2 330 |
| 241 | | #define W83781D_INIT_IN_3 (((500) * 100)/168) |
| 242 | | #define W83781D_INIT_IN_4 (((1200) * 10)/38) |
| 243 | | #define W83781D_INIT_IN_5 (((-1200) * -604)/2100) |
| 244 | | #define W83781D_INIT_IN_6 (((-500) * -604)/909) |
| 245 | | #define W83781D_INIT_IN_7 (((500) * 100)/168) |
| 246 | | #define W83781D_INIT_IN_8 300 |
| 247 | | #define W83781D_INIT_IN_9 250 /* 2.5 Volt for the DDR interface. */ |
| 248 | | /* Initial limits for 782d/783s negative voltages */ |
| 249 | | /* Note level shift. Change min/max below if you change these. */ |
| 250 | | #define W83782D_INIT_IN_5 ((((-1200) + 1491) * 100)/514) |
| 251 | | #define W83782D_INIT_IN_6 ((( (-500) + 771) * 100)/314) |
| 252 | | |
| 253 | | #define W83781D_INIT_IN_PERCENTAGE 10 |
| 254 | | |
| 255 | | #define W83781D_INIT_IN_MIN_0 \ |
| 256 | | (W83781D_INIT_IN_0 - W83781D_INIT_IN_0 * W83781D_INIT_IN_PERCENTAGE \ |
| 257 | | / 100) |
| 258 | | #define W83781D_INIT_IN_MAX_0 \ |
| 259 | | (W83781D_INIT_IN_0 + W83781D_INIT_IN_0 * W83781D_INIT_IN_PERCENTAGE \ |
| 260 | | / 100) |
| 261 | | #define W83781D_INIT_IN_MIN_1 \ |
| 262 | | (W83781D_INIT_IN_1 - W83781D_INIT_IN_1 * W83781D_INIT_IN_PERCENTAGE \ |
| 263 | | / 100) |
| 264 | | #define W83781D_INIT_IN_MAX_1 \ |
| 265 | | (W83781D_INIT_IN_1 + W83781D_INIT_IN_1 * W83781D_INIT_IN_PERCENTAGE \ |
| 266 | | / 100) |
| 267 | | #define W83781D_INIT_IN_MIN_2 \ |
| 268 | | (W83781D_INIT_IN_2 - W83781D_INIT_IN_2 * W83781D_INIT_IN_PERCENTAGE \ |
| 269 | | / 100) |
| 270 | | #define W83781D_INIT_IN_MAX_2 \ |
| 271 | | (W83781D_INIT_IN_2 + W83781D_INIT_IN_2 * W83781D_INIT_IN_PERCENTAGE \ |
| 272 | | / 100) |
| 273 | | #define W83781D_INIT_IN_MIN_3 \ |
| 274 | | (W83781D_INIT_IN_3 - W83781D_INIT_IN_3 * W83781D_INIT_IN_PERCENTAGE \ |
| 275 | | / 100) |
| 276 | | #define W83781D_INIT_IN_MAX_3 \ |
| 277 | | (W83781D_INIT_IN_3 + W83781D_INIT_IN_3 * W83781D_INIT_IN_PERCENTAGE \ |
| 278 | | / 100) |
| 279 | | #define W83781D_INIT_IN_MIN_4 \ |
| 280 | | (W83781D_INIT_IN_4 - W83781D_INIT_IN_4 * W83781D_INIT_IN_PERCENTAGE \ |
| 281 | | / 100) |
| 282 | | #define W83781D_INIT_IN_MAX_4 \ |
| 283 | | (W83781D_INIT_IN_4 + W83781D_INIT_IN_4 * W83781D_INIT_IN_PERCENTAGE \ |
| 284 | | / 100) |
| 285 | | #define W83781D_INIT_IN_MIN_5 \ |
| 286 | | (W83781D_INIT_IN_5 - W83781D_INIT_IN_5 * W83781D_INIT_IN_PERCENTAGE \ |
| 287 | | / 100) |
| 288 | | #define W83781D_INIT_IN_MAX_5 \ |
| 289 | | (W83781D_INIT_IN_5 + W83781D_INIT_IN_5 * W83781D_INIT_IN_PERCENTAGE \ |
| 290 | | / 100) |
| 291 | | #define W83781D_INIT_IN_MIN_6 \ |
| 292 | | (W83781D_INIT_IN_6 - W83781D_INIT_IN_6 * W83781D_INIT_IN_PERCENTAGE \ |
| 293 | | / 100) |
| 294 | | #define W83781D_INIT_IN_MAX_6 \ |
| 295 | | (W83781D_INIT_IN_6 + W83781D_INIT_IN_6 * W83781D_INIT_IN_PERCENTAGE \ |
| 296 | | / 100) |
| 297 | | #define W83781D_INIT_IN_MIN_7 \ |
| 298 | | (W83781D_INIT_IN_7 - W83781D_INIT_IN_7 * W83781D_INIT_IN_PERCENTAGE \ |
| 299 | | / 100) |
| 300 | | #define W83781D_INIT_IN_MAX_7 \ |
| 301 | | (W83781D_INIT_IN_7 + W83781D_INIT_IN_7 * W83781D_INIT_IN_PERCENTAGE \ |
| 302 | | / 100) |
| 303 | | #define W83781D_INIT_IN_MIN_8 \ |
| 304 | | (W83781D_INIT_IN_8 - W83781D_INIT_IN_8 * W83781D_INIT_IN_PERCENTAGE \ |
| 305 | | / 100) |
| 306 | | #define W83781D_INIT_IN_MAX_8 \ |
| 307 | | (W83781D_INIT_IN_8 + W83781D_INIT_IN_8 * W83781D_INIT_IN_PERCENTAGE \ |
| 308 | | / 100) |
| 309 | | #define W83781D_INIT_IN_MIN_9 \ |
| 310 | | (W83781D_INIT_IN_9 - W83781D_INIT_IN_9 * W83781D_INIT_IN_PERCENTAGE \ |
| 311 | | / 100) |
| 312 | | #define W83781D_INIT_IN_MAX_9 \ |
| 313 | | (W83781D_INIT_IN_9 + W83781D_INIT_IN_9 * W83781D_INIT_IN_PERCENTAGE \ |
| 314 | | / 100) |
| 315 | | /* Initial limits for 782d/783s negative voltages */ |
| 316 | | /* These aren't direct multiples because of level shift */ |
| 317 | | /* Beware going negative - check */ |
| 318 | | #define W83782D_INIT_IN_MIN_5_TMP \ |
| 319 | | (((-1200 * (100 + W83781D_INIT_IN_PERCENTAGE)) + (1491 * 100))/514) |
| 320 | | #define W83782D_INIT_IN_MIN_5 \ |
| 321 | | ((W83782D_INIT_IN_MIN_5_TMP > 0) ? W83782D_INIT_IN_MIN_5_TMP : 0) |
| 322 | | #define W83782D_INIT_IN_MAX_5 \ |
| 323 | | (((-1200 * (100 - W83781D_INIT_IN_PERCENTAGE)) + (1491 * 100))/514) |
| 324 | | #define W83782D_INIT_IN_MIN_6_TMP \ |
| 325 | | ((( -500 * (100 + W83781D_INIT_IN_PERCENTAGE)) + (771 * 100))/314) |
| 326 | | #define W83782D_INIT_IN_MIN_6 \ |
| 327 | | ((W83782D_INIT_IN_MIN_6_TMP > 0) ? W83782D_INIT_IN_MIN_6_TMP : 0) |
| 328 | | #define W83782D_INIT_IN_MAX_6 \ |
| 329 | | ((( -500 * (100 - W83781D_INIT_IN_PERCENTAGE)) + (771 * 100))/314) |
| 330 | | |
| 331 | | #define W83781D_INIT_FAN_MIN_1 3000 |
| 332 | | #define W83781D_INIT_FAN_MIN_2 3000 |
| 333 | | #define W83781D_INIT_FAN_MIN_3 3000 |
| 334 | | |
| 335 | | #define W83781D_INIT_TEMP_OVER 600 |
| 336 | | #define W83781D_INIT_TEMP_HYST 1270 /* must be 127 for ALARM to work */ |
| 337 | | #define W83781D_INIT_TEMP2_OVER 600 |
| 338 | | #define W83781D_INIT_TEMP2_HYST 500 |
| 339 | | #define W83781D_INIT_TEMP3_OVER 600 |
| 340 | | #define W83781D_INIT_TEMP3_HYST 500 |
| 1483 | | if (type == w83791d) { |
| 1484 | | w83781d_write_value(client, W83791D_REG_IN_MIN(0), |
| 1485 | | IN_TO_REG(W83781D_INIT_IN_MIN_0)); |
| 1486 | | w83781d_write_value(client, W83791D_REG_IN_MAX(0), |
| 1487 | | IN_TO_REG(W83781D_INIT_IN_MAX_0)); |
| 1488 | | w83781d_write_value(client, W83791D_REG_IN_MIN(1), |
| 1489 | | IN_TO_REG(W83781D_INIT_IN_MIN_1)); |
| 1490 | | w83781d_write_value(client, W83791D_REG_IN_MAX(1), |
| 1491 | | IN_TO_REG(W83781D_INIT_IN_MAX_1)); |
| 1492 | | w83781d_write_value(client, W83791D_REG_IN_MIN(2), |
| 1493 | | IN_TO_REG(W83781D_INIT_IN_MIN_2)); |
| 1494 | | w83781d_write_value(client, W83791D_REG_IN_MAX(2), |
| 1495 | | IN_TO_REG(W83781D_INIT_IN_MAX_2)); |
| 1496 | | w83781d_write_value(client, W83791D_REG_IN_MIN(3), |
| 1497 | | IN_TO_REG(W83781D_INIT_IN_MIN_3)); |
| 1498 | | w83781d_write_value(client, W83791D_REG_IN_MAX(3), |
| 1499 | | IN_TO_REG(W83781D_INIT_IN_MAX_3)); |
| 1500 | | w83781d_write_value(client, W83791D_REG_IN_MIN(4), |
| 1501 | | IN_TO_REG(W83781D_INIT_IN_MIN_4)); |
| 1502 | | w83781d_write_value(client, W83791D_REG_IN_MAX(4), |
| 1503 | | IN_TO_REG(W83781D_INIT_IN_MAX_4)); |
| 1504 | | w83781d_write_value(client, W83791D_REG_IN_MIN(5), |
| 1505 | | IN_TO_REG(W83781D_INIT_IN_MIN_5)); |
| 1506 | | w83781d_write_value(client, W83791D_REG_IN_MAX(5), |
| 1507 | | IN_TO_REG(W83781D_INIT_IN_MAX_5)); |
| 1508 | | w83781d_write_value(client, W83791D_REG_IN_MIN(6), |
| 1509 | | IN_TO_REG(W83781D_INIT_IN_MIN_6)); |
| 1510 | | w83781d_write_value(client, W83791D_REG_IN_MAX(6), |
| 1511 | | IN_TO_REG(W83781D_INIT_IN_MAX_6)); |
| 1512 | | w83781d_write_value(client, W83791D_REG_IN_MIN(7), |
| 1513 | | IN_TO_REG(W83781D_INIT_IN_MIN_7)); |
| 1514 | | w83781d_write_value(client, W83791D_REG_IN_MAX(7), |
| 1515 | | IN_TO_REG(W83781D_INIT_IN_MAX_7)); |
| 1516 | | w83781d_write_value(client, W83791D_REG_IN_MIN(8), |
| 1517 | | IN_TO_REG(W83781D_INIT_IN_MIN_8)); |
| 1518 | | w83781d_write_value(client, W83791D_REG_IN_MAX(8), |
| 1519 | | IN_TO_REG(W83781D_INIT_IN_MAX_8)); |
| 1520 | | w83781d_write_value(client, W83791D_REG_IN_MIN(9), |
| 1521 | | IN_TO_REG(W83781D_INIT_IN_MIN_9)); |
| 1522 | | w83781d_write_value(client, W83791D_REG_IN_MAX(9), |
| 1523 | | IN_TO_REG(W83781D_INIT_IN_MAX_9)); |
| 1524 | | } else { |
| 1525 | | w83781d_write_value(client, W83781D_REG_IN_MIN(0), |
| 1526 | | IN_TO_REG(W83781D_INIT_IN_MIN_0)); |
| 1527 | | w83781d_write_value(client, W83781D_REG_IN_MAX(0), |
| 1528 | | IN_TO_REG(W83781D_INIT_IN_MAX_0)); |
| 1529 | | if (type != w83783s && type != w83697hf) { |
| 1530 | | w83781d_write_value(client, W83781D_REG_IN_MIN(1), |
| 1531 | | IN_TO_REG(W83781D_INIT_IN_MIN_1)); |
| 1532 | | w83781d_write_value(client, W83781D_REG_IN_MAX(1), |
| 1533 | | IN_TO_REG(W83781D_INIT_IN_MAX_1)); |
| 1534 | | } |
| 1535 | | |
| 1536 | | w83781d_write_value(client, W83781D_REG_IN_MIN(2), |
| 1537 | | IN_TO_REG(W83781D_INIT_IN_MIN_2)); |
| 1538 | | w83781d_write_value(client, W83781D_REG_IN_MAX(2), |
| 1539 | | IN_TO_REG(W83781D_INIT_IN_MAX_2)); |
| 1540 | | w83781d_write_value(client, W83781D_REG_IN_MIN(3), |
| 1541 | | IN_TO_REG(W83781D_INIT_IN_MIN_3)); |
| 1542 | | w83781d_write_value(client, W83781D_REG_IN_MAX(3), |
| 1543 | | IN_TO_REG(W83781D_INIT_IN_MAX_3)); |
| 1544 | | w83781d_write_value(client, W83781D_REG_IN_MIN(4), |
| 1545 | | IN_TO_REG(W83781D_INIT_IN_MIN_4)); |
| 1546 | | w83781d_write_value(client, W83781D_REG_IN_MAX(4), |
| 1547 | | IN_TO_REG(W83781D_INIT_IN_MAX_4)); |
| 1548 | | if (type == w83781d || type == as99127f) { |
| 1549 | | w83781d_write_value(client, W83781D_REG_IN_MIN(5), |
| 1550 | | IN_TO_REG(W83781D_INIT_IN_MIN_5)); |
| 1551 | | w83781d_write_value(client, W83781D_REG_IN_MAX(5), |
| 1552 | | IN_TO_REG(W83781D_INIT_IN_MAX_5)); |
| 1553 | | } else { |
| 1554 | | w83781d_write_value(client, W83781D_REG_IN_MIN(5), |
| 1555 | | IN_TO_REG(W83782D_INIT_IN_MIN_5)); |
| 1556 | | w83781d_write_value(client, W83781D_REG_IN_MAX(5), |
| 1557 | | IN_TO_REG(W83782D_INIT_IN_MAX_5)); |
| 1558 | | } |
| 1559 | | if (type == w83781d || type == as99127f) { |
| 1560 | | w83781d_write_value(client, W83781D_REG_IN_MIN(6), |
| 1561 | | IN_TO_REG(W83781D_INIT_IN_MIN_6)); |
| 1562 | | w83781d_write_value(client, W83781D_REG_IN_MAX(6), |
| 1563 | | IN_TO_REG(W83781D_INIT_IN_MAX_6)); |
| 1564 | | } else { |
| 1565 | | w83781d_write_value(client, W83781D_REG_IN_MIN(6), |
| 1566 | | IN_TO_REG(W83782D_INIT_IN_MIN_6)); |
| 1567 | | w83781d_write_value(client, W83781D_REG_IN_MAX(6), |
| 1568 | | IN_TO_REG(W83782D_INIT_IN_MAX_6)); |
| 1569 | | } |
| 1570 | | if ((type == w83782d) || (type == w83627hf) || |
| 1571 | | (type == w83697hf)) { |
| 1572 | | w83781d_write_value(client, W83781D_REG_IN_MIN(7), |
| 1573 | | IN_TO_REG(W83781D_INIT_IN_MIN_7)); |
| 1574 | | w83781d_write_value(client, W83781D_REG_IN_MAX(7), |
| 1575 | | IN_TO_REG(W83781D_INIT_IN_MAX_7)); |
| 1576 | | w83781d_write_value(client, W83781D_REG_IN_MIN(8), |
| 1577 | | IN_TO_REG(W83781D_INIT_IN_MIN_8)); |
| 1578 | | w83781d_write_value(client, W83781D_REG_IN_MAX(8), |
| 1579 | | IN_TO_REG(W83781D_INIT_IN_MAX_8)); |
| 1580 | | w83781d_write_value(client, W83781D_REG_VBAT, |
| 1581 | | (w83781d_read_value(client, W83781D_REG_VBAT) | 0x01)); |
| 1582 | | } |
| 1583 | | } |
| 1584 | | |
| 1585 | | w83781d_write_value(client, W83781D_REG_FAN_MIN(1), |
| 1586 | | FAN_TO_REG(W83781D_INIT_FAN_MIN_1, 2)); |
| 1587 | | w83781d_write_value(client, W83781D_REG_FAN_MIN(2), |
| 1588 | | FAN_TO_REG(W83781D_INIT_FAN_MIN_2, 2)); |
| 1589 | | if (type != w83697hf) { |
| 1590 | | w83781d_write_value(client, W83781D_REG_FAN_MIN(3), |
| 1591 | | FAN_TO_REG(W83781D_INIT_FAN_MIN_3, 2)); |
| 1592 | | } |
| 1593 | | |
| 1594 | | w83781d_write_value(client, W83781D_REG_TEMP_OVER, |
| 1595 | | TEMP_TO_REG(W83781D_INIT_TEMP_OVER)); |
| 1596 | | w83781d_write_value(client, W83781D_REG_TEMP_HYST, |
| 1597 | | TEMP_TO_REG(W83781D_INIT_TEMP_HYST)); |
| 1598 | | |
| 1599 | | if (type == as99127f) { |
| 1600 | | w83781d_write_value(client, W83781D_REG_TEMP2_OVER, |
| 1601 | | AS99127_TEMP_ADD_TO_REG |
| 1602 | | (W83781D_INIT_TEMP2_OVER)); |
| 1603 | | w83781d_write_value(client, W83781D_REG_TEMP2_HYST, |
| 1604 | | AS99127_TEMP_ADD_TO_REG |
| 1605 | | (W83781D_INIT_TEMP2_HYST)); |
| 1606 | | } else { |
| 1607 | | w83781d_write_value(client, W83781D_REG_TEMP2_OVER, |
| 1608 | | TEMP_ADD_TO_REG |
| 1609 | | (W83781D_INIT_TEMP2_OVER)); |
| 1610 | | w83781d_write_value(client, W83781D_REG_TEMP2_HYST, |
| 1611 | | TEMP_ADD_TO_REG |
| 1612 | | (W83781D_INIT_TEMP2_HYST)); |
| 1613 | | } |