coreboot-kgpe-d16/util/superiotool/winbond.c

954 lines
33 KiB
C
Raw Normal View History

/*
* This file is part of the superiotool project.
*
* Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include "superiotool.h"
#define DEVICE_ID_REG_OLD 0x09
#define DEVICE_ID_REG 0x20
#define DEVICE_REV_REG 0x21
/**
* The ID entries must be in 0xYYZ format, where YY is the device ID,
* and Z is bits 7..4 of the device revision register. We do not match
* bits 3..0 of the device revision here (at least for newer Super I/Os).
*
* But some of the older versions use both bytes (0x20 and 0x21), where
* register 0x21 holds the ID and the full 8 bits of 0x21 hold the revision.
*
* Some other Super I/Os only use bits 3..0 of 0x09 as ID.
*/
static const struct superio_registers reg_table[] = {
/* ID and rev[3..0] */
{0x527, "W83977CTF", { /* TODO: Not yet in sensors-detect */
{EOT}}},
{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}}},
{0x601, "W83697HF/F/HG", { /* No G version? */
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,
0x2a,EOT},
{0x60,NANA,0xff,0x00,0x00,0x00,0x00,0x00,0x00,
MISC,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}},
{0x6, "Consumer IR",
{0x30,0x60,0x61,0x70,EOT},
{0x00,0x00,0x00,0x00,EOT}},
{0x7, "Game port, GPIO 1",
{0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT},
{0x00,0x02,0x01,0x00,0x00,0xff,0x00,0x00,EOT}},
{0x8, "MIDI port, GPIO 5",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,EOT},
{0x00,0x03,0x30,0x00,0x00,0x09,0xff,0x00,0x00,0x00,
0x00,0x00,EOT}},
{0x9, "GPIO 2, GPIO 3, GPIO 4",
{0x30,0x60,0x61,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,
0xf7,0xf8,0xf5,EOT},
{0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,
0x00,0x00,0x00,EOT}},
{0xa, "ACPI",
{0x30,0x70,0xe0,0xe1,0xe2,0xe5,0xe6,0xe7,
0xf0,0xf1,0xf3,0xf4,0xf6,0xf7,0xf9,EOT},
{0x00,0x00,0x00,0x00,NANA,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
{0xb, "Hardware monitor",
{0x30,0x60,0x61,0x70,EOT},
{0x00,0x00,0x00,0x00,EOT}},
{EOT}}},
{0x610, "W83L517D/D-F", {
{EOT}}},
{0x708, "W83637HF/HG", {
{EOT}}},
{0x828, "W83627THF/THG", { /* We assume rev is bits 3..0 of 0x21. */
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,0x2a,
0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
{0x82,NANA,0xff,0x00,MISC,0x00,MISC,0x00,0x00,0x00,
MISC,MISC,MISC,0x00,0x00,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,0x80,EOT}},
{0x7, "GPIO 1, GPIO 5, game port, MIDI port",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,EOT},
{0x00,0x02,0x01,0x03,0x30,0x09,0xff,0x00,0x00,0xff,
0x00,0x00,EOT}},
{0x8, "GPIO 2",
{0x30,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,EOT},
{0x00,0xff,0x00,0x00,0x00,RSVD,0x00,0x00,0x00,EOT}},
{0x9, "GPIO 3, GPIO 4",
{0x30,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
{0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,EOT}},
{0xa, "ACPI",
/* Note: Datasheet says 0xe2 can't be read/written. */
{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,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,RSVD,RSVD,EOT}},
{0xb, "Hardware monitor",
{0x30,0x60,0x61,0x70,EOT},
{0x00,0x00,0x00,0x00,EOT}},
{EOT}}},
#if 0
{0x85x, "W83687THF", { /* TODO: sensors-detect: 0x85 */
{EOT}}},
#endif
{0xa02, "W83627DHG", {
{NOLDN, NULL,
{0x02,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
{0x00,0xa0,NANA,0xff,0x00,MISC,0x00,MISC,RSVD,0x50,
0x00,0x00,RSVD,0xe2,0x21,0x00,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
EOT},
{0x01,0x03,0xf0,0x06,0x02,0x8e,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}},
{0x6, "Serial peripheral interface",
{0x30,0x62,0x63,EOT},
{0x00,0x00,0x00,EOT}},
{0x7, "GPIO 6",
{0x30,0xf4,0xf5,0xf6,0xf7,EOT},
{0x00,0xff,0x00,0x00,0x00,EOT}},
{0x8, "WDTO#, PLED",
{0x30,0xf5,0xf6,0xf7,EOT},
{0x00,0x00,0x00,0x00,EOT}},
{0x9, "GPIO 2, GPIO 3, GPIO 4, GPIO 5",
{0x30,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,
0xe9,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xfe,
EOT},
{0x00,0xff,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,
0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,
EOT}},
{0xa, "ACPI",
{0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
0xe8,0xe9,0xf2,0xf3,0xf4,0xf6,0xf7,0xfe,EOT},
{0x00,0x00,0x01,0x00,0xff,0x08,0x00,RSVD,0x1c,0x00,
RSVD,RSVD,0x7c,0x00,0x00,0x00,0x00,0x00,EOT}},
{0xb, "Hardware monitor",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
{0x00,0x00,0x00,0x00,0x81,0x00,0x00,EOT}},
{0xc, "PECI, SST",
{0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe8,0xf1,0xfe,0xff,
EOT},
{0x00,0x48,0x48,0x48,0x48,0x00,0x00,0x48,0x00,0x00,
EOT}},
{EOT}}},
superiotool: add CR dump for W83627UHG = NCT6627UD This commit adds "register dump capability" to superiotool for a specific chip by Winbond/Nuvoton: the W83627UHG AKA NCT6627UD (same chip, different package). In other words, it fills in the "CR map" definitions in winbond.c, which so far have been void for this chip. - superiotool r4.0-3976-g190011e Found Winbond W83627UHG = NCT6627UD (id=0xa2, rev=0x32) at 0x2e Register dump: idx 02 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f val ff a2 32 ff f0 44 00 00 ff 00 00 00 00 03 00 00 ff def 00 a2 NA ff f0 MM 00 MM RR 00 00 00 00 02 00 00 00 LDN 0x00 (Floppy) idx 30 60 61 70 74 f0 f1 f2 f4 f5 val 00 00 00 00 02 8e 00 ff 00 00 def 01 03 f0 06 02 8e 00 ff 00 00 LDN 0x01 (Parallel port) idx 30 60 61 70 74 f0 val 00 03 78 0c 04 3f def 01 03 78 07 04 3f LDN 0x02 (UART A) idx 30 60 61 70 f0 val 01 03 f8 04 00 def 01 03 f8 04 00 LDN 0x03 (UART B) idx 30 60 61 70 f0 f1 val 01 02 f8 03 00 44 def 01 02 f8 03 00 00 LDN 0x05 (Keyboard) idx 30 60 61 62 63 70 72 f0 val 01 00 60 00 64 01 0c 82 def 01 00 60 00 64 01 0c 83 LDN 0x06 (UART C) idx 30 60 61 70 f0 val 01 03 e8 05 80 def 01 03 e0 04 00 LDN 0x07 (GPIO 3, GPIO 4) idx 30 e0 e1 e2 e3 e4 e5 e6 e7 val 04 ff ff ff ff ff ff ff ff def 00 ff 00 00 00 ff 00 00 00 LDN 0x08 (WDTO#, PLED, GPIO 5,6 & GPIO Base Address) idx 30 60 61 e0 e1 e2 e3 e4 e5 e6 e7 f5 f6 f7 val 01 00 00 ff ff ff ff ff ff ff ff 02 00 00 def 02 00 00 ff 00 00 00 ff 1f 00 00 00 00 00 LDN 0x09 (GPIO 1, GPIO 2 and SUSLED) idx 30 e0 e1 e2 e3 e4 e5 e6 e7 f3 val 02 ff ff ff ff 00 ff 00 00 00 def 00 ff 00 00 00 ff 00 00 00 00 LDN 0x0a (ACPI) idx 30 70 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 f2 f3 f4 f6 f7 fe val 01 00 01 00 0a 00 00 00 0c 00 09 00 01 00 00 00 00 00 def 00 00 01 00 ff 08 00 00 1c 00 RR RR 3e 00 00 00 00 00 LDN 0x0b (Hardware monitor) idx 30 60 61 70 f0 f1 f2 val 01 02 48 00 81 ff 81 def 00 00 00 00 RR RR 00 LDN 0x0c (PECI, SST) idx e0 e1 e2 e3 e4 e5 e6 e7 e8 f1 f2 f3 fe ff val 00 48 48 48 48 00 00 00 00 4c 50 10 23 5a def 00 48 48 48 48 00 RR RR 00 48 50 10 23 5a LDN 0x0d (UART D) idx 30 60 61 70 f0 val 00 00 00 00 00 def 00 02 e0 03 00 LDN 0x0e (UART E) idx 30 60 61 70 f0 val 00 00 00 00 80 def 00 03 e8 04 00 LDN 0x0f (UART F) idx 30 60 61 70 f0 val 01 02 38 0a 00 def 00 02 e8 03 00 Change-Id: I834f8767b29f3148f353004edb22cfd7db5ddd56 Signed-off-by: Frank Rysanek <Frantisek.Rysanek@post.cz> Reviewed-on: http://review.coreboot.org/3027 Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Tested-by: build bot (Jenkins) Reviewed-by: Anton Kochkov <anton.kochkov@gmail.com>
2013-04-05 10:44:10 +02:00
{0xa23, "W83627UHG = NCT6627UD", { /* TODO: Not yet in sensors-detect */
{NOLDN, NULL, /* CR2B (485) is only valid for chip rev.E */
{0x02,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
{0x00,0xa2,NANA,0xff,0xF0,MISC,0x00,MISC,RSVD,0x00,
0x00,0x00,0x00,0x02,0x00,0x00,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
EOT},
{0x01,0x03,0xf0,0x06,0x02,0x8e,0x00,0xff,0x00,0x00,
EOT}},
{0x1, "Parallel port",
{0x30,0x60,0x61,0x70,0x74,0xf0,EOT},
{0x01,0x03,0x78,0x07,0x04,0x3f,EOT}},
{0x2, "UART A",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x01,0x03,0xf8,0x04,0x00,EOT}},
{0x3, "UART B",
{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}},
{0x6, "UART C",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x01,0x03,0xE0,0x04,0x00,EOT}},
{0x7, "GPIO 3, GPIO 4",
{0x30,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,EOT},
{0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,EOT}},
{0x8, "WDTO#, PLED, GPIO 5,6 & GPIO Base Address",
{0x30,0x60,0x61,
0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,
0xF5,0xF6,0xF7,EOT},
{0x02,0x00,0x00,
0xFF,0x00,0x00,0x00,0xFF,0x1F,0x00,0x00,
0x00,0x00,0x00,EOT}},
{0x9, "GPIO 1, GPIO 2 and SUSLED",
{0x30,
0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
0xF3,EOT},
{0x00,
0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
0x00,EOT}},
{0xa, "ACPI",
{0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
0xe8,0xe9,0xf2,0xf3,0xf4,0xf6,0xf7,0xfe,EOT},
{0x00,0x00,0x01,0x00,0xff,0x08,0x00,0x00,0x1c,0x00,
RSVD,RSVD,0x3e,0x00,0x00,0x00,0x00,0x00,EOT}},
{0xb, "Hardware monitor",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
{0x00,0x00,0x00,0x00,RSVD,RSVD,0x00,EOT}},
{0xc, "PECI, SST",
{0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,
0xf1,0xf2,0xf3,0xfe,0xff,EOT},
{0x00,0x48,0x48,0x48,0x48,0x00,RSVD,RSVD,0x00,
0x48,0x50,0x10,0x23,0x5A,EOT}},
{0xD, "UART D",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x02,0xe0,0x03,0x00,EOT}},
{0xE, "UART E",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0xe8,0x04,0x00,EOT}},
{0xF, "UART F",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x02,0xe8,0x03,0x00,EOT}},
{EOT}}},
{0xa51, "W83667HG", {
/* See also: http://lists.lm-sensors.org/pipermail/lm-sensors/2008-July/023683.html */
{EOT}}},
{0xb07, "W83627DHG-P/-PT", {
{NOLDN, NULL,
{0x02,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
{0x00,0xb0,NANA,0xff,0x00,MISC,0x00,MISC,RSVD,0x50,
0x00,0x00,RSVD,0xe2,0x21,0x00,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
EOT},
{0x01,0x03,0xf0,0x06,0x02,0x8e,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}},
{0x6, "Serial peripheral interface",
{0x30,0x62,0x63,EOT},
{0x00,0x00,0x00,EOT}},
{0x7, "GPIO 6",
{0x30,0xf4,0xf5,0xf6,0xf7,0xf8,EOT},
{0x00,0xff,0x00,0x00,0x00,0x00,EOT}},
{0x8, "WDTO#, PLED",
{0x30,0xf5,0xf6,0xf7,EOT},
{0x00,0x00,0x00,0x00,EOT}},
{0x9, "GPIO 2, GPIO 3, GPIO 4, GPIO 5",
{0x30,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,
0xe9,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,
0xf9,0xfa,0xfe,EOT},
{0x00,0xff,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,
0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,EOT}},
{0xa, "ACPI",
{0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
0xe8,0xe9,0xf2,0xf3,0xf4,0xf6,0xf7,0xfe,EOT},
{0x00,0x00,0x01,0x00,0xff,0x08,0x00,RSVD,0x1c,0x00,
RSVD,RSVD,0x7c,0x00,0x00,0x00,0x00,0x00,EOT}},
{0xb, "Hardware monitor",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
{0x00,0x00,0x00,0x00,0x81,0x00,0x00,EOT}},
{0xc, "PECI, SST",
{0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe8,0xe9,0xea,0xec,
0xee,0xef,0xf1,0xf2,0xf3,0xfe,0xff,EOT},
{0x00,0x48,0x48,0x48,0x48,0x00,0x00,RSVD,0x00,0x00,
0x01,0x5a,0x48,0x50,0x10,0x00,0x00,EOT}},
{EOT}}},
{0xb35, "Nuvoton NCT5571D", {
{NOLDN, NULL,
{0x02,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
{RSVD,0xb3,NANA,0xff,0x00,0x40,0x00,MISC,0xff,0x20,0x00,
0x00,0x7f,0x0a,0x08,0x00,MISC,EOT}},
{0x2, "COM1",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x01,0x03,0xf8,0x04,0x00,EOT}},
{0x5, "Keyboard",
{0x30,0x60,0x61,0x62,0x63,0x70,0x72,0xf0,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,EOT}},
{0x7, "GPIO 6, GPIO 8, GPIO 9",
{0x30,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,
0xee,0xf4,0xf5,0xf6,0xf7,0xf8,EOT},
{0x18,0xef,MISC,0x00,0x00,0xff,MISC,0x00,0x00,RSVD,0x00,
0x00,0xff,MISC,0x00,0x00,0x00,EOT}},
{0x9, "GPIO 2, GPIO 3, GPIO 5",
{0x30,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe9,0xea,
0xeb,0xf4,0xf5,0xf6,0xf7,0xfe,EOT},
{0x05,0xff,MISC,0x00,0x00,0xff,MISC,0x00,0x00,0x00,0x00,
0x00,0xff,MISC,0x00,0x00,0x00,EOT}},
{0xa, "ACPI",
{0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xf2,
0xf3,0xf4,0xf6,0xf7,0xfe,0xff,EOT},
{0x01,0x00,0xff,0x00,0x00,0x02,0x1c,0x00,RSVD,0x00,0x7c,
0x00,0x00,0x00,0x00,0x00,0x30,EOT}},
{0xb, "Hardware monitor",
{0x30,0x60,0x61,0x70,0xe0,0xe1,0xe2,0xe3,0xf0,0xf5,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc1,0x10,EOT}},
{0xc, "PECI",
{0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe8,0xe9,0xea,0xec,
0xee,0xef,0xf1,0xf2,0xf3,0xfe,0xff,EOT},
{0x00,0x48,0x48,0x48,0x48,0x00,0x00,0x00,RSVD,0x00,0x00,
0x01,0x5a,0x48,0x50,0x10,0x80,0x01,EOT}},
{0xd, "SUSLED",
{0xec,EOT},
{0x01,EOT}},
{0xf, "GPIO Push-Pull/OD Select",
{0xe0,0xe1,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xf0,0xf1,
0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,
0xfd,0xfe,0xff,EOT},
{RSVD,0xfd,RSVD,0xf7,0xcb,RSVD,0xff,0xff,0x00,MISC,MISC,
MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,
MISC,MISC,MISC,EOT}},
{EOT}}},
/* ID and rev */
{0x9771, "W83977F-A/G-A/AF-A/AG-A", {
{EOT}}},
{0x9777, "W83977AF", {
/*
* W83977AF as found on the Advantech PCM-5820. We weren't able
* to find a datasheet (so far) which lists the 0x77 revision,
* but the hardware is there in the wild, so detect it...
*/
{EOT}}},
{0x9773, "W83977TF", {
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x2a,0x2b,
0x2c,0x2d,0x2e,0x2f,EOT},
{0x97,0x73,0xff,0xfe,MISC,0x00,MISC,0x00,0x00,0x00,
0x00,RSVD,RSVD,RSVD,EOT}},
{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 / mouse",
{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,0xee,0xf0,0xf1,0xf2,0xf3,0xf4,EOT},
{0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x00,RSVD,0x00,0x00,0x00,EOT}},
{0x9, "GPIO 3",
{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}},
{0xa, "ACPI",
{0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0xe0,0xe1,
0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,
0xf7,0xfe,0xff,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
NANA,MISC,RSVD,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,RSVD,RSVD,EOT}},
{EOT}}},
{0x9774, "W83977ATF", {
{EOT}}},
{0xb07, "W83527HG", { /* TODO: Not yet in sensors-detect */
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
{0xB0,0x73,0xff,0x00,MISC,0x00,0x00,RSVD,0x50,0x00,
0x00,RSVD,0xe2,0x21,0x00,0x00,EOT}},
{0x5, "Keyboard",
{0x30,0x60,0x61,0x62,0x63,0x70,0x72,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x0c,0x83,EOT}},
{0x8, "WDTO#, PLED",
{0x30,0xf5,0xf6,0xf7,EOT},
{0x00,0x00,0x00,0x00,EOT}},
{0x9, "GPIO 2, GPIO3, GPIO5",
{0x30,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe9,
0xf0,0xf1,0xf2,0xf3,0xf8,0xf9,0xfa,0xfe,EOT},
{0x00,0xff,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,
0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
{0xa, "ACPI",
{0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
0xe8,0xe9,0xf2,0xf3,0xf4,0xf6,0xf7,0xfe,EOT},
{0x00,0x00,0x01,0x00,0xff,0x08,0x00,0x00,0x1c,0x00,
RSVD,RSVD,0x7c,0x00,0x00,0x00,0x00,0x00,EOT}},
{0xb, "Hardware monitor",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
{0x00,0x00,0x00,0x00,0x81,RSVD,0x00,EOT}},
{0xc, "PECI",
{0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe8,0xe9,0xea,0xec,
0xfe,0xff,EOT},
{0x00,0x48,0x48,0x48,0x48,0x00,0x00,RSVD,0x00,0x00,
0x00,0x00,EOT}},
{EOT}}},
/* ID only */
{0x52, "W83627HF/F/HG/G", {
{NOLDN, NULL,
{0x02,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,
0x2a,0x2b,0x2c,0x2e,0x2f,EOT},
{0x00,0x52,NANA,0xff,0x00,MISC,0x00,0x00,0x00,0x00,
0x7c,0xc0,0x00,0x00,0x00,EOT}},
{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,0x80,EOT}},
{0x6, "Consumer IR",
{0x30,0x60,0x61,0x70,EOT},
{0x00,0x00,0x00,0x00,EOT}},
{0x7, "Game port, MIDI port, GPIO 1",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,EOT},
{0x00,0x02,0x01,0x03,0x30,0x09,0xff,0x00,0x00,EOT}},
{0x8, "GPIO 2, watchdog timer",
{0x30,0xf0,0xf1,0xf2,0xf3,0xf5,0xf6,0xf6,0xf7,EOT},
{0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
{0x9, "GPIO 3",
{0x30,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0xff,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,NANA,NANA,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
{0xb, "Hardware monitor",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x00,0x00,0x00,0x00,EOT}},
{EOT}}},
{0x68, "W83697SF/UF/UG", {
/* ID: 0x68 (for W83697SF/UF/UG)
* Rev: 0x1X (for W83697SF)
* 0x0X (for W83697SF) -- sic!
* 0x1X (for W83697UF/UG)
*/
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,0x2a,
0x2b,0x2c,EOT},
{0x68,NANA,0xef,0xfe,MISC,0x00,0x00,0x00,0x00,MISC,
0x00,0x30,EOT}},
{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,0x03,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}},
{0x7, "Game port, GPIO 1",
{0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT},
{0x00,0x02,0x01,0x00,0x00,0xff,0x00,0x00,EOT}},
{0x8, "MIDI port, GPIO 5",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,EOT},
{0x00,0x03,0x30,0x00,0x00,0x09,0xff,0x00,0x00,0x00,
0x00,0x00,EOT}},
{0x9, "GPIO 2, GPIO 3, GPIO 4",
{0x30,0x60,0x61,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,
0xf7,0xf8,EOT},
{0x00,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,
0x00,0x00,EOT}},
{0xa, "ACPI",
{0x30,0x70,0xf0,0xf1,0xf2,0xf3,0xf4,0xf6,0xf7,0xf9,
0xfa,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,EOT}},
{0xb, "PWM",
{0x30,0x60,0x61,EOT},
{0x00,0x00,0x00,EOT}},
{0xc, "Smart card",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x00,0x00,0x00,0x00,EOT}},
{0xd, "URC, GPIO 6",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,EOT},
{0x00,0x03,0xe8,0x00,0x00,0x00,0x00,0xff,0x00,0x00,
0x00,EOT}},
{0xe, "URD, GPIO 7",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
EOT},
{0x00,0x02,0xe8,0x00,0x00,0x00,0x00,0xff,0x00,0x00,
EOT}},
{0xf, "GPIO 8",
{0x30,0x60,0x61,0xf0,0xf1,0xf2,EOT},
{0x00,0x00,0x00,0xff,0x00,0x00,EOT}},
{EOT}}},
{0x88, "W83627EHF/EF/EHG/EG", {
/*
* As per datasheet the ID should be 0x886? here.
* Not mentioned in the datasheet, but sensors-detect says
* 0x8853 is also possible. Also, the ASUS A8V-E Deluxe
* (W83627EHF) has an ID of 0x8854 (verified on hardware).
* So we now assume all 0x88?? IDs to mean W83627EHF/EF/EHG/EG.
*/
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
{0x88,MISC,0xff,0x00,MISC,0x00,MISC,RSVD,0x50,
0x04,0x00,RSVD,0x00,0x21,0x00,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
0xf5,EOT},
{0x01,0x03,0xf0,0x06,0x02,0x8e,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}},
{0x6, "Serial flash interface",
{0x30,0x62,0x63,EOT},
{0x00,0x00,0x00,EOT}},
{0x7, "GPIO 1, GPIO 6, game port, MIDI port",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,0xf6,0xf7,EOT},
{0x00,0x02,0x01,0x03,0x30,0x09,0xff,0x00,0x00,0x00,
0xff,0x00,0x00,0x00,EOT}},
{0x8, "WDTO#, PLED",
{0x30,0xf5,0xf6,0xf7,EOT},
{0x00,0x00,0x00,0x00,EOT}},
{0x9, "GPIO 2, GPIO 3, GPIO 4, GPIO 5, SUSLED",
{0x30,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xf0,0xf1,0xf2,
0xf3,0xf4,0xf5,0xf6,0xf7,EOT},
{0x00,0xff,0x00,0x00,0xff,0x00,0x00,0xff,0x00,0x00,
0x00,0xff,0x00,0x00,0x00,EOT}},
{0xa, "ACPI",
{0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
0xe8,0xf2,0xf3,0xf4,0xf6,0xf7,EOT},
{0x00,0x00,0x01,0x00,0xff,0x08,0x00,RSVD,0x00,0x00,
RSVD,0x7c,0x00,0x00,0x00,0x00,EOT}},
{0xb, "Hardware monitor",
{0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
{0x00,0x00,0x00,0x00,0xc1,0x00,EOT}},
{EOT}}},
/* ID[3..0] */
{0xa, "W83877F", {
{EOT}}},
{0xb, "W83877AF", {
{NOLDN, NULL,
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
0x14,0x15,0x16,0x17,0x1e,0x20,0x21,0x22,0x23,0x24,
0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,EOT},
{0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x0a,
0x1f,0x0c,0x28,0xa3,RSVD,RSVD,0x00,0x00,0x00,0x00,
0x00,0x00,0x0e,0x00,MISC,MISC,MISC,MISC,MISC,MISC,
MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,EOT}},
{EOT}}},
{0xc, "W83877TF", {
{EOT}}},
{0xd, "W83877ATF/ATG", {
{EOT}}},
{EOT}
};
static const struct superio_registers hwm_table[] = {
{0x828, "W83627THF/THG", {
{NOLDN, NULL,
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
0x1e,0x1f,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,
0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,
0x3f,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,
0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,EOT},
{RSVD,0xff,RSVD,0xff,0x00,0x00,0x00,0x00,0x01,0x01,
0x01,0x01,0x3c,0x3c,0x0a,0x0a,RSVD,0xff,0x00,0x00,
0x00,0x01,0x01,0x3c,0x43,RSVD,0xff,0xff,RSVD,RSVD,
NANA,NANA,
NANA,NANA,NANA,NANA,NANA,RSVD,RSVD,NANA,NANA,NANA,
NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
RSVD,RSVD,RSVD,RSVD,NANA,NANA,NANA,NANA,NANA,RSVD,
RSVD,
0x03,0x00,0x00,0xfe,0xff,RSVD,RSVD,0x5f,NANA,0x03,
RSVD,0x44,0x18,0x15,0x80,0x5c,EOT}},
{0x0, "Bank 0",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,
0x5d,0x5e,0x5f,EOT},
{NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x80,0x90,0x70,
0x00,RSVD,RSVD,EOT}},
{0x1, "Bank 1",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,EOT},
{NANA,NANA,0x00,0x4b,0x00,0x50,0x00,EOT}},
{0x2, "Bank 2",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,EOT},
{NANA,NANA,0x00,0x4b,0x00,0x50,0x00,EOT}},
{0x4, "Bank 4",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x59,0x5a,
0x5b,EOT},
{0x00,0xff,RSVD,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,EOT}},
{0x5, "Bank 5",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,EOT},
{NANA,NANA,RSVD,RSVD,NANA,NANA,NANA,NANA,EOT}},
{0x6, "Bank 6",
{0x50,EOT},
{RSVD,EOT}},
{EOT}}},
{0xa02, "W83627DHG", {
{NOLDN, NULL,
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
0x1e,0x1f,EOT},
{0x04,0xff,0x04,NANA,0x01,0x00,0x00,0x00,0x01,0x01,
0x01,0x01,0x3c,0x3c,0x0a,0x0a,0x04,0xff,0x00,0x00,
0x00,0x01,0x01,0x3c,0x43,RSVD,RSVD,RSVD,RSVD,RSVD,
RSVD,RSVD,EOT}},
{NOLDN, NULL, /* Value RAM */
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,
0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,
0x3e,0x3f,EOT},
{NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
NANA,MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,
MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,
MISC,MISC,EOT}},
{NOLDN, NULL,
{0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,
0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,EOT},
{0x03,0x00,0x00,0xff,0xff,RSVD,0x07,0x55,0x2d,0x00,
0x00,0x44,0x10,0x95,0x80,0xa3,EOT}},
{0x0, "Bank 0",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,
0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,
0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
0x6e,EOT},
{RSVD,RSVD,RSVD,RSVD,RSVD,RSVD,0x00,0x80,0xc1,0x70,
RSVD,RSVD,RSVD,0x04,0x04,RSVD,0x04,NANA,0x40,0x00,
0x01,0x01,0x3c,0xff,0x01,0xff,0x01,0xff,0xff,0xff,
0xff,EOT}},
{0x1, "Bank 1",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,EOT},
{NANA,NANA,0x00,0x4b,0x00,0x50,0x00,EOT}},
{0x2, "Bank 2",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,EOT},
{NANA,NANA,0x00,0x4b,0x00,0x50,0x00,EOT}},
{0x4, "Bank 4",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,
0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,EOT},
{0x00,0x13,RSVD,0x00,0x00,0x00,0x00,RSVD,RSVD,0x00,
0x00,0x00,RSVD,RSVD,RSVD,RSVD,EOT}},
{0x5, "Bank 5", /* Value RAM 2 */
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,
0x5a,0x5b,0x5c,EOT},
{NANA,NANA,RSVD,NANA,MISC,MISC,MISC,MISC,RSVD,RSVD,
RSVD,RSVD,MISC,EOT}},
{0x6, "Bank 6",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,EOT},
{RSVD,RSVD,RSVD,RSVD,RSVD,RSVD,RSVD,RSVD,EOT}},
{EOT}}},
{0xb07, "W83627DHG-P/-PT", {
{NOLDN, NULL,
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
0x1e,0x1f,EOT},
{0x04,0xff,0x04,NANA,0x01,0x00,0x00,0x00,0x01,0x01,
0x01,0x01,0x3c,0x3c,0x0a,0x0a,0x04,0xff,0x00,0x00,
0x00,0x01,0x01,0x3c,0x43,RSVD,RSVD,RSVD,RSVD,RSVD,
RSVD,RSVD,EOT}},
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,
0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,
0x3e,0x3f,EOT},
{NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
NANA,NANA,EOT}},
{NOLDN, NULL,
{0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,
0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,EOT},
{0x03,0x00,0x00,0xff,0xff,0x00,0x3f,0x55,0x2d,0x00,
0x00,0x44,0x10,0x95,0x80,0xa3,EOT}},
{0x0, "Bank 0",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,
0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,
0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
0x6e,0x6f,EOT},
{RSVD,RSVD,RSVD,RSVD,RSVD,RSVD,0x00,0x80,0xc1,0x70,
RSVD,RSVD,RSVD,0x04,0x04,RSVD,0x04,NANA,0x40,0x00,
0x01,0x01,0x3c,0xff,0x01,0xff,0x01,0xff,0xff,0xff,
0xff,0x00,EOT}},
{0x0, "Bank 0 [...]",
{0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,
0x7a,0x7b,0x7c,0x7d,EOT},
{0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,NANA,EOT}},
{0x1, "Bank 1",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56, 0x58,0x59,
0x5a,0x5b,0x5c,0x5d,0x5e, EOT},
{NANA,NANA,0x00,0x4b,0x00,0x50,0x00, 0x00,0x00,
0x00,0x00,0x00,0x00,0x0e, EOT}},
{0x2, "Bank 2",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56, EOT},
{NANA,NANA,0x00,0x4b,0x00,0x50,0x00, EOT}},
{0x4, "Bank 4",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,
0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,EOT},
{0x00,0x13,RSVD,0x00,0x00,0x00,0x00,RSVD,RSVD,0x00,
0x00,0x00,RSVD,RSVD,RSVD,RSVD,EOT}},
{0x5, "Bank 5",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,
0x5a,0x5b,0x5c,EOT},
{NANA,NANA,RSVD,NANA,NANA,NANA,NANA,NANA,RSVD,RSVD,
RSVD,RSVD,NANA,EOT}},
{0x6, "Bank 6",
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,
0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0d,0xff,0xff,0xff,0xff,0xff,EOT}},
{EOT}}},
{EOT}
};
static void enter_conf_mode_winbond_88(uint16_t port)
{
OUTB(0x88, port);
}
static void enter_conf_mode_winbond_89(uint16_t port)
{
OUTB(0x89, port);
}
static void enter_conf_mode_winbond_86(uint16_t port)
{
OUTB(0x86, port);
OUTB(0x86, port);
}
static int chip_found_at_port;
static void probe_idregs_winbond_helper(const char *init, uint16_t port)
{
uint16_t id, hwmport;
uint8_t devid, rev, olddevid;
probing_for("Winbond", init, port);
devid = regval(port, DEVICE_ID_REG);
rev = regval(port, DEVICE_REV_REG);
olddevid = regval(port, DEVICE_ID_REG_OLD) & 0x0f;
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[7..4] */
if (olddevid >= 0x0a && olddevid <= 0x0d)
id = olddevid & 0x0f; /* ID[3..0] */
if (superio_unknown(reg_table, id)) {
if (verbose)
printf(NOTFOUND "id/oldid=0x%02x/0x%02x, rev=0x%02x\n",
devid, olddevid, rev);
return;
}
if (olddevid >= 0x0a && olddevid <= 0x0d)
printf("Found Winbond %s (id=0x%02x) at 0x%x\n",
get_superio_name(reg_table, id), olddevid, port);
else
printf("Found Winbond %s (id=0x%02x, rev=0x%02x) at 0x%x\n",
get_superio_name(reg_table, id), devid, rev, port);
chip_found = 1;
chip_found_at_port = 1;
dump_superio("Winbond", reg_table, port, id, LDN_SEL);
if (extra_dump) {
regwrite(port, LDN_SEL, 0x0b); /* Select LDN 0xb (HWM). */
if ((regval(port, 0x30) & (1 << 0)) != (1 << 0)) {
printf("Hardware Monitor disabled or does not exist.\n");
return;
}
/* Get HWM base address (stored in LDN 0xb, index 0x60/0x61). */
hwmport = regval(port, 0x60) << 8;
hwmport |= regval(port, 0x61);
/* HWM address register = HWM base address + 5. */
hwmport += 5;
printf("Hardware monitor (0x%04x)\n", hwmport);
dump_superio("Winbond-HWM", hwm_table, hwmport, id,
WINBOND_HWM_SEL);
}
}
void probe_idregs_winbond(uint16_t port)
{
chip_found_at_port = 0;
enter_conf_mode_winbond_88(port);
probe_idregs_winbond_helper("(init=0x88) ", port);
exit_conf_mode_winbond_fintek_ite_8787(port);
if (chip_found_at_port)
return;
enter_conf_mode_winbond_89(port);
probe_idregs_winbond_helper("(init=0x89) ", port);
exit_conf_mode_winbond_fintek_ite_8787(port);
if (chip_found_at_port)
return;
enter_conf_mode_winbond_86(port);
probe_idregs_winbond_helper("(init=0x86,0x86) ", port);
exit_conf_mode_winbond_fintek_ite_8787(port);
if (chip_found_at_port)
return;
enter_conf_mode_winbond_fintek_ite_8787(port);
probe_idregs_winbond_helper("(init=0x87,0x87) ", port);
exit_conf_mode_winbond_fintek_ite_8787(port);
if (chip_found_at_port)
return;
}
void print_winbond_chips(void)
{
print_vendor_chips("Winbond", reg_table);
print_vendor_chips("Winbond-HWM", hwm_table);
}