diff options
Diffstat (limited to 'util/superiotool')
-rw-r--r-- | util/superiotool/README | 1 | ||||
-rw-r--r-- | util/superiotool/winbond.c | 46 |
2 files changed, 44 insertions, 3 deletions
diff --git a/util/superiotool/README b/util/superiotool/README index 3a73ccf62d..a1d85b1cdf 100644 --- a/util/superiotool/README +++ b/util/superiotool/README @@ -82,6 +82,7 @@ either version 2 of the license, or (at your option) any later version. Contributors ------------ +Andriy Gapon <avg@icyb.net.ua> Bingxun Shi <bingxunshi@gmail.com> Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> David Hendricks <david.hendricks@gmail.com> diff --git a/util/superiotool/winbond.c b/util/superiotool/winbond.c index ededd49cd6..4e2794470b 100644 --- a/util/superiotool/winbond.c +++ b/util/superiotool/winbond.c @@ -39,7 +39,45 @@ static const struct superio_registers reg_table[] = { /* ID and rev[3..0] */ {0x527, "W83977CTF", { /* TODO: Not yet in sensors-detect */ {EOT}}}, - {0x52f, "W83977EF/EG", {/* TODO: Not yet in sensors-detect */ + {0x52f, "W83977EF/EG", { + {NOLDN, NULL, + {0x02,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x2a, + 0x2b,0x2c,0x2d,0x2e,0x2f,EOT}, + {RSVD,0x52,MISC,0xff,0xfe,MISC,0x00,MISC,0x00,0x00, + 0x00,0x00,RSVD,RSVD,RSVD,EOT}}, + /* Some register defaults depend on the value of PNPCSV. */ + {0x0, "Floppy", + {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4, + 0xf5,EOT}, + {0x01,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00, + 0x00,EOT}}, + {0x1, "Parallel port", + {0x30,0x60,0x61,0x70,0x74,0xf0,EOT}, + {0x01,0x03,0x78,0x07,0x04,0x3f,EOT}}, + {0x2, "COM1", + {0x30,0x60,0x61,0x70,0xf0,EOT}, + {0x01,0x03,0xf8,0x04,0x00,EOT}}, + {0x3, "COM2", + {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT}, + {0x01,0x02,0xf8,0x03,0x00,0x00,EOT}}, + {0x5, "Keyboard", + {0x30,0x60,0x61,0x62,0x63,0x70,0x72,0xf0,EOT}, + {0x01,0x00,0x60,0x00,0x64,0x01,0x0c,0x83,EOT}}, + {0x7, "GPIO 1", + {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x72,0xe0, + 0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xf1,EOT}, + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,EOT}}, + {0x8, "GPIO 2", + {0x30,0x60,0x61,0x70,0x72,0xe8,0xe9,0xea,0xeb,0xec, + 0xed,0xf0,0xf1,0xf2,0xf3,0xf4,EOT}, + {0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01, + 0x01,0x00,RSVD,0x00,0x00,0x00,EOT}}, + {0xa, "ACPI", + {0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7, + 0xf0,0xf1,0xf3,0xf4,0xf6,0xf7,0xf9,0xfe,0xff,EOT}, + {0x00,0x00,0x00,0x00,MISC,MISC,MISC,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,RSVD,RSVD,EOT}}, {EOT}}}, {0x595, "W83627SF", { /* TODO: Not yet in sensors-detect */ {EOT}}}, @@ -457,12 +495,14 @@ static void probe_idregs_winbond_helper(const char *init, uint16_t port) rev = regval(port, DEVICE_REV_REG); olddevid = regval(port, DEVICE_ID_REG_OLD) & 0x0f; - if (devid == 0x52 || devid == 0x68 || devid == 0x88) + if (devid == 0x52 && (rev & 0xf0) != 0xf0) + id = devid; /* ID only */ + else if (devid == 0x68 || devid == 0x88) id = devid; /* ID only */ else if ((devid == 0x97) && ((rev & 0xf0) == 0x70)) id = (devid << 8) | rev; /* ID and rev */ else - id = (devid << 4) | ((rev & 0xf0) >> 4); /* ID and rev[3..0] */ + id = (devid << 4) | ((rev & 0xf0) >> 4); /* ID and rev[7..4] */ if (olddevid == 0x0a || olddevid == 0x0c || olddevid == 0x0d) id = olddevid & 0x0f; /* ID[3..0] */ |