diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/hwmon/it87.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index 5be09c048c5f..25763d2223b6 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c | |||
@@ -80,6 +80,13 @@ superio_inb(int reg) | |||
80 | return inb(VAL); | 80 | return inb(VAL); |
81 | } | 81 | } |
82 | 82 | ||
83 | static inline void | ||
84 | superio_outb(int reg, int val) | ||
85 | { | ||
86 | outb(reg, REG); | ||
87 | outb(val, VAL); | ||
88 | } | ||
89 | |||
83 | static int superio_inw(int reg) | 90 | static int superio_inw(int reg) |
84 | { | 91 | { |
85 | int val; | 92 | int val; |
@@ -1517,6 +1524,21 @@ static int __init it87_find(unsigned short *address, | |||
1517 | sio_data->vid_value = superio_inb(IT87_SIO_VID_REG); | 1524 | sio_data->vid_value = superio_inb(IT87_SIO_VID_REG); |
1518 | 1525 | ||
1519 | reg = superio_inb(IT87_SIO_PINX2_REG); | 1526 | reg = superio_inb(IT87_SIO_PINX2_REG); |
1527 | /* | ||
1528 | * The IT8720F has no VIN7 pin, so VCCH should always be | ||
1529 | * routed internally to VIN7 with an internal divider. | ||
1530 | * Curiously, there still is a configuration bit to control | ||
1531 | * this, which means it can be set incorrectly. And even | ||
1532 | * more curiously, many boards out there are improperly | ||
1533 | * configured, even though the IT8720F datasheet claims | ||
1534 | * that the internal routing of VCCH to VIN7 is the default | ||
1535 | * setting. So we force the internal routing in this case. | ||
1536 | */ | ||
1537 | if (sio_data->type == it8720 && !(reg & (1 << 1))) { | ||
1538 | reg |= (1 << 1); | ||
1539 | superio_outb(IT87_SIO_PINX2_REG, reg); | ||
1540 | pr_notice("it87: Routing internal VCCH to in7\n"); | ||
1541 | } | ||
1520 | if (reg & (1 << 0)) | 1542 | if (reg & (1 << 0)) |
1521 | pr_info("it87: in3 is VCC (+5V)\n"); | 1543 | pr_info("it87: in3 is VCC (+5V)\n"); |
1522 | if (reg & (1 << 1)) | 1544 | if (reg & (1 << 1)) |