coreboot-kgpe-d16/util/superiotool/ite.c
Андрей Павлов ab9b71d54c superiotool: Add support for the IT8728F Super I/O
$ superiotool -d
superiotool r4.0-3712-gd549279
Found ITE IT8728F (id=0x8728, rev=0x1) at 0x2e
Register dump:
idx 02 07 20 21 22 23 24 2b  2e 2f
val 00 0a 87 28 01 00 00 40  00 00
def NA NA 87 28 01 00 00 MM  00 00
LDN 0x00 (Floppy)
idx 30 60 61 70 74 f0 f1
val 00 03 f0 06 02 00 00
def 00 03 f0 06 02 00 00
LDN 0x01 (COM1)
idx 30 60 61 70 f0 f1
val 01 03 f8 04 00 50
def 00 03 f8 04 00 50
LDN 0x02 (COM2)
idx 30 60 61 70 f0 f1
val 00 02 f8 03 00 50
def 00 02 f8 03 00 50
LDN 0x03 (Parallel port)
idx 30 60 61 62 63 70 74 f0
val 01 03 78 00 00 07 04 08
def 00 03 78 07 78 07 03 03
LDN 0x04 (Environment controller)
idx 30 60 61 62 63 70 f0 f1  f2 f3 f4 f5 f6 f9 fa fb
val 01 0a 30 0a 20 09 00 80  00 00 20 00 f0 48 00 00
def 00 02 90 02 30 09 00 00  00 00 00 MM MM MM MM MM
LDN 0x05 (Keyboard)
idx 30 60 61 62 63 70 71 f0
val 01 00 60 00 64 01 02 08
def 01 00 60 00 64 01 02 48
LDN 0x06 (Mouse)
idx 30 70 71 f0
val 01 0c 02 00
def 00 0c 02 00
LDN 0x07 (GPIO)
idx 25 26 27 28 29 2a 2c 2d  60 61 62 63 64 65 70 71  72 73 74 b0 b1 b2 b3 b4  b8 b9 ba bb bc bd c0 c1  c2 c3 c4 c8 c9 ca cb cc  cd ce cf e0 e1 e2 e3 e4  e9 f0 f1 f2 f3 f4 f5 f6  f7 f8 f9 fa fb
val 00 f3 10 00 00 00 80 00  00 00 0a 00 00 00 00 00  20 00 00 00 00 00 00 00  20 00 00 00 00 00 01 00  00 40 00 01 00 00 00 00  00 00 00 00 00 00 00 00  21 10 42 00 00 00 00 1c  00 00 00 00 00
def 00 f3 00 00 00 00 03 00  00 00 00 00 00 00 00 00  20 38 00 00 00 00 00 00  20 00 00 00 00 00 01 00  00 40 00 01 00 00 40 00  00 00 00 00 00 00 00 00  MM 00 00 00 00 00 00 00  00 00 00 00 00
LDN 0x0a (Consumer IR)
idx 30 60 61 70 f0
val 00 03 10 0b 06
def 00 03 10 0b 06

Change-Id: Ifb45d28005d78b2a99d8552b59154d11bdf44f6f
Signed-off-by: Андрей Павлов <7134956@gmail.com>
Reviewed-on: http://review.coreboot.org/2775
Tested-by: build bot (Jenkins)
Reviewed-by: Anton Kochkov <anton.kochkov@gmail.com>
2013-03-17 23:20:38 +01:00

988 lines
34 KiB
C

/*
* This file is part of the superiotool project.
*
* Copyright (C) 2007 Carl-Daniel Hailfinger
* Copyright (C) 2007-2008 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "superiotool.h"
#define CHIP_ID_BYTE1_REG 0x20
#define CHIP_ID_BYTE2_REG 0x21
#define CHIP_VERSION_REG 0x22
#define ISA_PNP_ADDR 0x279
static const struct superio_registers reg_table[] = {
{0x8228, "IT8228E", {
{EOT}}},
{0x8500, "IT8500B/E", {
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x25,0x2d,0x2e,0x2f,0x30,EOT},
{0x85,0x00,0x01,0x01,0x00,0x00,NANA,NANA,0x00,EOT}},
{0x04, "System Wake-Up Control (SWUC)",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x01,EOT}},
{0x05, "KBC/Mouse Interface",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x00,0x00,0x00,0x0c,0x01,EOT}},
{0x06, "KBC/Keyboard Interface",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x60,0x00,0x64,0x01,0x01,EOT}},
{0x0f, "Shared Memory/Flash Interface (SMFI)",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,EOT}},
{0x10, "BRAM",
{0x30,0x62,0x63,0x70,0x71,0xf3,0xf4,0xf5,EOT},
{0x00,0x00,0x72,0x08,0x01,NANA,NANA,NANA,EOT}},
{0x11, "Power Management I/F Channel 1 (PMC1)",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x62,0x00,0x66,0x01,0x01,EOT}},
{0x12, "Power Management I/F Channel 2 (PMC2)",
{0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x71,0xf0,EOT},
{0x00,0x00,0x68,0x00,0x6c,0x00,0x00,0x01,0x01,NANA,EOT}},
{EOT}}},
{0x8502, "IT8502E/TE/G", {
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
{0x85,0x02,0x71,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
NANA,NANA,NANA,0x00,NANA,EOT}},
{0x1, "UART1",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x00,0x03,0xf8,0x00,0x00,0x04,0x02,0x00,EOT}},
{0x4, "System Wake-Up",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,EOT}},
{0x5, "Mouse",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x00,0x00,0x00,0x0C,0x01,NANA,EOT}},
{0x6, "Keyboard",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x01,NANA,EOT}},
{0xf, "Shared Memory/Flash",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
0xf6,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,EOT}},
{0x10, "BRAM",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf3,0xf4,
0xf5,EOT},
{0x00,0x00,0x70,0x00,0x72,0x08,0x01,NANA,NANA,
NANA,EOT}},
{0x11, "Power Channel 1",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x62,0x00,0x66,0x01,0x01,EOT}},
{0x12, "Power Channel 2",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x68,0x00,0x6c,0x01,0x01,EOT}},
{0x17, "Power Channel 3",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x6a,0x00,0x6e,0x01,0x01,EOT}},
{EOT}}},
{0x8510, "IT8510E/TE/G", {
{NOLDN, "Chip ID",
{0x20,0x21, EOT},
{0x85,0x10, EOT}},
{NOLDN, "Chip Version",
{0x22,EOT},
{0x21,EOT}},
{NOLDN, "Super I/O Control Reigster (SIOCTRL)",
{0x23,EOT},
{0x01,EOT}},
{NOLDN, "Super I/O Configuration Register (SIOIRQ)",
{0x25,EOT},
{0x00,EOT}},
{NOLDN, "Super I/O General Purpose Register (SIOGP)",
{0x26,EOT},
{0x00,EOT}},
{NOLDN, "Super I/O Power Mode Register (SIOPWR)",
{0x2d,EOT},
{0x00,EOT}},
{NOLDN, "Logical Device Activate Register (LDA)",
{0x30,EOT},
{0x00,EOT}},
{NOLDN, "I/O Port Base Address for Descriptor 0 (IOBAD0)",
{0x60,0x61,EOT},
{NANA,NANA,EOT}},
{NOLDN, "I/O Port Base Address for Descriptor 1 (IOBAD1)",
{0x62,0x63,EOT},
{NANA,NANA,EOT}},
{NOLDN, "Interupt Request Number and Wake-Up on IRQ Enable (IRQNUMX)",
{0x70,EOT},
{NANA,EOT}},
{NOLDN, "Interrupt Request Type Select (IRQTP)",
{0x71,EOT},
{NANA,EOT}},
{NOLDN, "DMA Channel Select 0 (DMAS0)",
{0x74,EOT},
{0x04,EOT}},
{NOLDN, "DMA Channel Select 1 (DMAS1)",
{0x75,EOT},
{0x04,EOT}},
{0x4, "System Wakup-Up (SWUC)",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x03,EOT}},
{0x5, "Keyboard/Mouse",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x00,0x00,0x00,0x0c,0x03,EOT}},
{0x6, "Keyboard/Mouse",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x60,0x00,0x64,0x01,0x03,EOT}},
{0xf, "Shared Memory/Flash Interface (SMFI)",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,0xf6,0xf7,0xf8,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
{0x10, "Real Time Clock (RTC)",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,0xf1,0xf2,EOT},
{0x00,0x00,0x70,0x00,0x72,0x08,0x00,0x00,0x49,0x4a,EOT}},
{0x11, "Power Management Interface Channel 1",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x62,0x00,0x66,0x01,0x03,EOT}},
{0x12, "Power Management Interface Channel 2",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x68,0x00,0x6c,0x01,0x03,EOT}},
{EOT}}},
{0x8511, "IT8511E/TE/G", {
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
{0x85,0x11,0x10,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
NANA,NANA,NANA,0x00,NANA,EOT}},
{0x4, "System Wake-Up",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,EOT}},
{0x5, "Mouse",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x00,0x00,0x00,0x0C,0x03,NANA,EOT}},
{0x6, "Keyboard",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x03,NANA,EOT}},
{0xf, "Shared Memory/Flash",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
0xf6,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,EOT}},
{0x10, "Real-Time Clock",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,0xf1,
0xf2,0xf3,0xf4,0xf5,EOT},
{0x00,0x00,0x70,0x00,0x72,0x08,0x00,0x00,0x49,
0x4A,NANA,NANA,NANA,EOT}},
{0x11, "Power Channel 1",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x62,0x00,0x66,0x01,0x03,EOT}},
{0x12, "Power Channel 2",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x68,0x00,0x6c,0x01,0x03,EOT}},
{EOT}}},
{0x8512, "IT8512E/F/G", {
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
{0x85,0x12,0x22,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
NANA,NANA,NANA,0x00,NANA,EOT}},
{0x4, "System Wake-Up",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x03,EOT}},
{0x5, "Mouse",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x00,0x00,0x00,0x00,0x00,0x0C,0x03,NANA,EOT}},
{0x6, "Keyboard",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x00,0x00,0x60,0x00,0x64,0x01,0x03,NANA,EOT}},
{0xf, "Shared Memory/Flash",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
0xf6,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,EOT}},
{0x10, "BRAM",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf3,0xf4,
0xf5,EOT},
{0x00,0x00,0x70,0x00,0x72,0x08,0x00,NANA,NANA,
NANA,EOT}},
{0x11, "Power Channel 1",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x62,0x00,0x66,0x01,0x03,EOT}},
{0x12, "Power Channel 2",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
{0x00,0x00,0x68,0x00,0x6c,0x01,0x03,EOT}},
{EOT}}},
{0x8513, "IT8513E/F/G", {
{EOT}}},
{0x8661, "IT8661F/IT8770F", {
{NOLDN, NULL,
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
0x23,0x24,EOT},
{NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x61,0x00,
0x00,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
{0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
{0x1, "COM1",
{0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
{0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
{0x2, "COM2",
{0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
{0x00,0x00,0x02,0xf8,0x03,0x02,0x00,EOT}},
{0x3, "Parallel port",
{0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
0xf0,EOT},
{0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
0x03,EOT}},
{0x4, "IR",
{0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
0x74,0x75,0xf0,EOT},
{0x00,0x00,0x02,0xe8,0x03,0x00,0x0a,0x02,0x0b,0x02,
0x01,0x00,0x00,EOT}},
{0x5, "GPIO",
{0x25,0x26,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
0x70,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,
0xf9,0xfa,0xfb,0xfc,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,EOT}},
{EOT}}},
{0x8673, "IT8673F", {
{EOT}}},
{0x8681, "IT8671F/IT8687R", {
{NOLDN, NULL,
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
0x23,0x24,0x25,0x26,0x2e,0x2f,EOT},
{NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x81,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
{0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
{0x1, "COM1",
{0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
{0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
{0x2, "COM2",
{0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
0x74,0x75,0xf0,0xf1,EOT},
{0x00,0x00,0x02,0xf8,0x03,0x00,0x03,0x02,0x0a,0x02,
0x00,0x01,0x00,0x00,EOT}},
{0x3, "Parallel port",
{0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
0xf0,EOT},
{0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
0x03,EOT}},
{0x4, "APC",
{0x30,0xf0,0xf1,0xf2,0xf4,0xf5,0xf6,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
{0x5, "Keyboard",
{0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{MISC,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
{0x6, "Mouse",
{0x30,0x70,0x71,0xf0,EOT},
{0x00,0x0c,0x02,0x00,EOT}},
{0x7, "GPIO",
{0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,
0x70,0x71,0x72,0x73,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,
0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff,
0xe0,0xe1,0xe2,0xe3,0xe4,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,EOT}},
{EOT}}},
{0x8701, "IT8703F", {
{NOLDN, NULL,
{0x20,0x21,0x23,0x24,0x26,0x29,0x2a,0x2b,EOT},
{0x87,0x00,0x00,0x80,0x00,0x00,0x7c,0xc0,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
0xf5,EOT},
{0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
0x00,EOT}},
{0x1, "Parallel port",
{0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
{0x00,0x03,0x78,0x00,0x80,0x07,0x03,0x03,EOT}},
{0x2, "COM1",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0xf8,0x04,0x00,EOT}},
{0x3, "COM2",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x02,0xf8,0x03,0x00,0x00,0x00,0x7f,EOT}},
{0x5, "Keyboard",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,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, GPIO set 1",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,EOT},
{0x00,0x02,0x01,0x03,0x30,0x00,0xff,0x00,0x00,EOT}},
{0x8, "GPIO set 2",
{0x30,0xf0,0xf1,0xf2,0xf3,0xf5,EOT},
{0x00,0xff,0x00,0x00,0x00,0x00,EOT}},
{0x9, "GPIO set 3 and 4",
{0x30,0x60,0x61,0xf0,0xf1,0xf2,0xf3,0xf4,EOT},
{0x00,0x02,0x90,0xff,0x00,0x00,0x00,0x00,EOT}},
{0xa, "ACPI",
{0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
0xf3,0xf4,0xf6,0xf7,0xf9,EOT},
{0x00,0x00,0x00,0x00,NANA,NANA,0x00,0x00,0x00,0x00,
NANA,NANA,0x00,0x00,0x00,EOT}},
{0xc, "GPIO set 5, 6 and 7",
{0x30,0x60,0x61,0xf0,0xf3,0xf6,EOT},
{0x00,0x03,0x70,0x00,0xff,0xff,EOT}},
{EOT}}},
{0x8702, "IT8702F", {
{EOT}}},
{0x8705, "IT8705F/AF / IT8700F", {
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,EOT},
{0x87,0x05,0x00,0x00,NANA,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
{0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
{0x1, "COM1",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0xf8,0x04,0x00,EOT}},
{0x2, "COM2",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
{0x3, "Parallel port",
{0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
0xf0,EOT},
{0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
0x03,EOT}},
{0x4, "Environment controller",
{0x2b,0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,
0xf3,0xf4,0xf5,0xf6,EOT},
{0x00,0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,
0x00,0x00,NANA,NANA,EOT}},
{0x5, "GPIO",
{0x25,0x26,0x27,0x28,0x29,0x2a,0x60,0x61,0x62,0x63,
0x64,0x65,0x70,0x71,0x72,0xb0,0xb1,0xb2,0xb3,0xb4,
0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,
0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xd0,
0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd8,0xd9,0xda,0xf0,
0xf1,0xf2,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,
0xfd,0xfe,0xff,EOT},
{0x00,0x00,0x00,0xff,0xe0,0xff,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,NANA,0x00,EOT}},
{0x6, "Game port",
{0x30,0x60,0x61,EOT},
{0x00,0x02,0x01,EOT}},
{0x7, "Consumer IR",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x10,0x0b,0x00,EOT}},
{0x8, "MIDI port",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x00,0x0a,0x00,EOT}},
{EOT}}},
{0x8706, "IT8706R", { /* TODO: Not yet in sensors-detect */
/* This is a "Special General Purpose I/O chip". */
{EOT}}},
{0x8707, "IT8707F", {
{EOT}}},
{0x8708, "IT8708F", {
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
0x2a,0x2e,0x2f,EOT},
{0x87,0x08,0x00,0x00,NANA,0x3f,0x00,0xff,0xff,0xff,
0xff,0x00,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
{0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
{0x1, "COM1",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0xf8,0x04,0x00,EOT}},
{0x2, "COM2",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
{0x3, "Parallel port",
{0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
0xf0,EOT},
{0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
0x03,EOT}},
{0x4, "SWC",
{0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
{NANA,NANA,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,NANA,NANA,EOT}},
{0x5, "Keyboard",
/* Note: 0x30 can actually be 0x00 _or_ 0x01. */
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
{0x6, "Mouse",
{0x30,0x70,0x71,0xf0,EOT},
{0x00,0x0c,0x02,0x00,EOT}},
{0x7, "GPIO",
{0x70,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,
0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,
0xc9,0xca,0xcb,0xcc,0xcd,0xd0,0xd1,0xd2,0xd3,0xd4,
0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xf0,0xf1,
0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
0xfc,EOT},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,
0x00,EOT}},
{0x8, "Game port",
{0x30,0x60,0x61,EOT},
{0x00,0x02,0x01,EOT}},
{0x9, "Consumer IR",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x10,0x0b,0x00,EOT}},
{0xa, "MIDI port",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x00,0x0a,0x00,EOT}},
{EOT}}},
{0x8710, "IT8710F", { /* TODO: Not yet in sensors-detect */
{EOT}}},
{0x8711, "IT8711F", { /* 0x8711 is a guess, not found in datasheet. */
{EOT}}},
{0x8712, "IT8712F", {
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
{0x87,0x12,0x08,0x00,0x00,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
{0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
{0x1, "COM1",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
{0x2, "COM2",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
{0x3, "Parallel port",
{0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
{0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
{0x4, "Environment controller",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,0xf6,EOT},
{0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
0x00,NANA,NANA,EOT}},
{0x5, "Keyboard",
/* TODO: 0xf0: Error in datasheet? */
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
{0x6, "Mouse",
{0x30,0x70,0x71,0xf0,EOT},
{0x00,0x0c,0x02,0x00,EOT}},
{0x7, "GPIO", /* TODO: 0x72, 0x73: Errors in datasheet? */
{0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
{0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
{0x8, "MIDI port",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x00,0x0a,0x00,EOT}},
{0x9, "Game port",
{0x30,0x60,0x61,EOT},
{0x00,0x02,0x01,EOT}},
{0xa, "Consumer IR",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x10,0x0b,0x00,EOT}},
{EOT}}},
{0x8716, "IT8716F", {
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
{0x87,0x16,0x01,0x00,0x00,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
{0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
{0x1, "COM1",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
{0x2, "COM2",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
{0x3, "Parallel port",
{0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
{0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
{0x4, "Environment controller",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,0xf6,EOT},
{0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
0x00,NANA,NANA,EOT}},
{0x5, "Keyboard",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
{0x6, "Mouse",
{0x30,0x70,0x71,0xf0,EOT},
{0x00,0x0c,0x02,0x00,EOT}},
{0x7, "GPIO",
{0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
{0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
{0x8, "MIDI port",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x00,0x0a,0x00,EOT}},
{0x9, "Game port",
{0x30,0x60,0x61,EOT},
{0x00,0x02,0x01,EOT}},
{0xa, "Consumer IR",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x10,0x0b,0x00,EOT}},
{EOT}}},
{0x8718, "IT8718F", {
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
{0x87,0x18,0x01,0x00,0x00,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
{0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
{0x1, "COM1",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
{0x2, "COM2",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
{0x3, "Parallel port",
{0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
{0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
{0x4, "Environment controller",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,0xf6,EOT},
{0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
0x00,NANA,NANA,EOT}},
{0x5, "Keyboard",
/* 0xf0: Datasheet page 33: 0x00; page 56: 0x08. */
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
{0x6, "Mouse",
{0x30,0x70,0x71,0xf0,EOT},
{0x00,0x0c,0x02,0x00,EOT}},
{0x7, "GPIO",
/* 0x2c: Datasheet page 30: 0x00; page 43: 0x1f. */
{0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,
0xcc,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xf0,
0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,
0xfb,0xfc,0xfd,0xfe,0xff,EOT},
{0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x40,0x00,0x00,0x01,0x00,0x00,0x40,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,NANA,0x00,0x00,0x00,EOT}},
{0xa, "Consumer IR",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x10,0x0b,0x00,EOT}},
{EOT}}},
{0x8720, "IT8720F", {
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
{0x87,0x20,0x05,0x00,0x00,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
{0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
{0x1, "COM1",
{0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
{0x00,0x03,0xf8,0x04,0x00,0x50,EOT}},
{0x2, "COM2",
{0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
{0x00,0x02,0xf8,0x03,0x00,0x50,EOT}},
{0x3, "Parallel port",
{0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
{0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
{0x4, "Environment controller",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,0xf6,EOT},
{0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
0x00,NANA,NANA,EOT}},
{0x5, "Keyboard",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x48,EOT}},
{0x6, "Mouse",
{0x30,0x70,0x71,0xf0,EOT},
{0x00,0x0c,0x02,0x00,EOT}},
{0x7, "GPIO",
{0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe9,0xf0,
0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,
0xfb,0xfc,0xfd,0xfe,0xff,EOT},
{0x00,0xff,0x00,0x40,0x00,0x00,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,NANA,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,NANA,0x00,0x00,0x00,EOT}},
{0xa, "Consumer IR",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x10,0x0b,0x06,EOT}},
{EOT}}},
{0x8721, "IT8721F", {
{EOT}}},
{0x8722, "IT8722F", {
{EOT}}},
{0x8726, "IT8726F", {
/* Datasheet wrongly says that the ID is 0x8716. */
{NOLDN, NULL,
{0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
{0x87,0x26,0x01,0x00,MISC,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
{0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
{0x1, "COM1",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
{0x2, "COM2",
{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
{0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
{0x3, "Parallel port",
{0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
{0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
{0x4, "Environment controller",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,0xf6,EOT},
{0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
0x00,MISC,MISC,EOT}},
{0x5, "Keyboard",
/* 0xf0: Datasheet page 35: 0x00; page 59: 0x08. */
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
{0x6, "Mouse",
{0x30,0x70,0x71,0xf0,EOT},
{0x00,0x0c,0x02,0x00,EOT}},
{0x7, "GPIO",
/* 0x2c: Datasheet page 33: 0x00; page 45: 0x1f. */
{0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
{0x01,0x00,0x00,0x40,0x00,0x00,0x1f,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,MISC,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,MISC,0x00,EOT}},
{0x8, "MIDI port",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x00,0x0a,0x00,EOT}},
{0x9, "Game port",
{0x30,0x60,0x61,EOT},
{0x00,0x02,0x01,EOT}},
{0xa, "Consumer IR",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x10,0x0b,0x00,EOT}},
{EOT}}},
{0x8728, "IT8728F", {
{NOLDN, NULL,
{0x02,0x07,0x20,0x21,0x22,0x23,0x24,0x2b,0x2e,0x2f,EOT},
{NANA,NANA,0x87,0x28,0x01,0x00,0x00,MISC,0x00,0x00,EOT}},
{0x0, "Floppy",
{0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
{0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
{0x1, "COM1",
{0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
{0x00,0x03,0xf8,0x04,0x00,0x50,EOT}},
{0x2, "COM2",
{0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
{0x00,0x02,0xf8,0x03,0x00,0x50,EOT}},
{0x3, "Parallel port",
{0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
{0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
{0x4, "Environment controller",
{0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,
0xf3,0xf4,0xf5,0xf6,0xF9,0xFA,0xFB,EOT},
{0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,
0x00,0x00,MISC,MISC,MISC,MISC,MISC,EOT}},
{0x5, "Keyboard",
{0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
{0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x48,EOT}},
{0x6, "Mouse",
{0x30,0x70,0x71,0xf0,EOT},
{0x00,0x0c,0x02,0x00,EOT}},
{0x7, "GPIO",
{0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x2d,0x60,
0x61,0x62,0x63,0x64,0x65,0x70,0x71,0x72,0x73,
0x74,0xb0,0xb1,0xb2,0xb3,0xb4,0xb8,0xb9,0xba,
0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,
0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xe0,0xe1,
0xe2,0xe3,0xe4,0xe9,0xf0,0xf1,0xf2,0xf3,0xf4,
0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,EOT},
{0x00,0xf3,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x38,
0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,
0x00,0x00,0x00,0x01,0x00,0x00,0x40,0x00,0x01,
0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,MISC,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
{0xa, "Consumer IR",
{0x30,0x60,0x61,0x70,0xf0,EOT},
{0x00,0x03,0x10,0x0b,0x06,EOT}},
{EOT}}},
{0x8761, "IT8761E", {
{EOT}}},
{0x8772, "IT8772F", {
{EOT}}},
{0x8780, "IT8780F", {
{EOT}}},
{EOT}
};
static const struct superio_registers ec_table[] = {
{0x8716, "IT8716F", {
{NOLDN, NULL,
{0x00,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x10,
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x1b,0x1c,0x1d,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,
0x44,0x45,0x48,0x50,0x51,0x52,0x53,0x54,0x56,0x57,
0x59,0x5c,
0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x68,
0x69,0x6a,0x6b,0x6c,0x6d,0x70,0x71,0x72,0x73,0x74,
0x75,0x84,0x85,0x86,0x87,0x88,0x89,0x8c,0x8d,0x8e,
0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x98,0x99,0x9a,
0x9b,0x9c,0x9d,EOT},
{0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x09,0x00,NANA,
NANA,NANA,0x07,0x50,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,RSVD,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,
0x00,0x00,
0x00,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,
0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,
0x7f,NANA,NANA,NANA,NANA,0x00,0x00,0x02,0x00,0x99,
0x99,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,
0x00,0x00,0x7f,EOT}},
{EOT}}},
{0x8718, "IT8718F", {
{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,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
0x2a,0x2b,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,
0x42,0x43,0x44,0x45,0x50,0x51,0x52,0x53,0x54,0x56,
0x57,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,
0x62,0x63,0x64,0x65,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
0x70,0x71,0x72,0x73,0x74,0x75,0x80,0x81,0x82,0x83,
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,
0x92,0x94,0x95,0x96,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,
0xa6,EOT},
{0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0x40,0x09,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x07,
0x50,MISC,MISC,MISC,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,NANA,NANA,NANA,NANA,
NANA,NANA,NANA,NANA,0x00,0x00,0x7f,0x7f,0x7f,0x00,
0x00,0x90,0x00,0x12,0x00,0x00,0x00,0x00,0x7f,0x7f,
0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,0x7f,
0x7f,0x7f,0x7f,0x00,0x00,0x7f,NANA,NANA,NANA,NANA,
0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xff,0x00,
0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,EOT}},
{EOT}}},
{EOT}
};
/* Works for: IT8661F/IT8770F */
static const uint8_t initkey_it8661f[][4] = {
{0x86, 0x61, 0x55, 0x55}, /* 0x3f0 */
{0x86, 0x61, 0x55, 0xaa}, /* 0x3bd */
{0x86, 0x61, 0xaa, 0x55}, /* 0x370 */
};
/* Works for: IT8671F/IT8687R, IT8673F */
static const uint8_t initkey_it8671f[][4] = {
{0x86, 0x80, 0x55, 0x55}, /* 0x3f0 */
{0x86, 0x80, 0x55, 0xaa}, /* 0x3bd */
{0x86, 0x80, 0xaa, 0x55}, /* 0x370 */
};
/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
static const uint8_t initkey_mbpnp[] = {
0x6a, 0xb5, 0xda, 0xed, 0xf6, 0xfb, 0x7d, 0xbe, 0xdf, 0x6f, 0x37,
0x1b, 0x0d, 0x86, 0xc3, 0x61, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0x45,
0xa2, 0xd1, 0xe8, 0x74, 0x3a, 0x9d, 0xce, 0xe7, 0x73, 0x39,
};
/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
static void enter_conf_mode_ite_legacy(uint16_t port, const uint8_t init[][4])
{
int i, idx;
/* Determine Super I/O config port. */
idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
for (i = 0; i < 4; i++)
OUTB(init[idx][i], ISA_PNP_ADDR);
/* Sequentially write the 32 MB PnP init values. */
for (i = 0; i < 32; i++)
OUTB(initkey_mbpnp[i], port);
}
static void enter_conf_mode_ite(uint16_t port)
{
OUTB(0x87, port);
OUTB(0x01, port);
OUTB(0x55, port);
OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
}
static void enter_conf_mode_ite_it8502e(uint16_t port)
{
OUTB(0x85, port);
OUTB(0x02, port);
OUTB(0x55, port);
OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
}
static void enter_conf_mode_ite_it8761e(uint16_t port)
{
OUTB(0x87, port);
OUTB(0x61, port);
OUTB(0x55, port);
OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
}
static void enter_conf_mode_ite_it8228e(uint16_t port)
{
OUTB(0x82, port);
OUTB(0x28, port);
OUTB(0x55, port);
OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
}
static void exit_conf_mode_ite(uint16_t port)
{
regwrite(port, 0x02, 0x02);
}
static int chip_found_at_port;
static void probe_idregs_ite_helper(const char *init, uint16_t port)
{
uint16_t id, chipver, ecport;
probing_for("ITE", init, port);
id = regval(port, CHIP_ID_BYTE1_REG) << 8;
id |= regval(port, CHIP_ID_BYTE2_REG);
chipver = regval(port, CHIP_VERSION_REG) & 0x0f; /* Only bits 3..0 */
if (superio_unknown(reg_table, id)) {
if (verbose)
printf(NOTFOUND "id=0x%04x, rev=0x%01x\n", id, chipver);
return;
}
printf("Found ITE %s (id=0x%04x, rev=0x%01x) at 0x%x\n",
get_superio_name(reg_table, id), id, chipver, port);
chip_found = 1;
chip_found_at_port = 1;
dump_superio("ITE", reg_table, port, id, LDN_SEL);
if (extra_dump) {
regwrite(port, LDN_SEL, 0x04); /* Select LDN 4 (EC). */
/* Get EC base address (stored in LDN 4, index 0x60/0x61). */
ecport = regval(port, 0x60) << 8;
ecport |= regval(port, 0x61);
/* EC address register = EC base address + 5. */
ecport += 5;
printf("Environment controller (0x%04x)\n", ecport);
dump_superio("ITE-EC", ec_table, ecport, id, LDN_SEL);
}
}
void probe_idregs_ite(uint16_t port)
{
chip_found_at_port = 0;
if (port == 0x3f0 || port == 0x3bd || port == 0x370) {
enter_conf_mode_ite_legacy(port, initkey_it8661f);
probe_idregs_ite_helper("(init=legacy/it8661f) ", port);
exit_conf_mode_ite(port);
if (chip_found_at_port)
return;
enter_conf_mode_ite_legacy(port, initkey_it8671f);
probe_idregs_ite_helper("(init=legacy/it8671f) ", port);
exit_conf_mode_ite(port);
if (chip_found_at_port)
return;
} else {
enter_conf_mode_ite(port);
probe_idregs_ite_helper("(init=standard) ", port);
exit_conf_mode_ite(port);
if (chip_found_at_port)
return;
enter_conf_mode_ite_it8502e(port);
probe_idregs_ite_helper("(init=it8502e) ", port);
exit_conf_mode_ite(port);
if (chip_found_at_port)
return;
enter_conf_mode_ite_it8761e(port);
probe_idregs_ite_helper("(init=it8761e) ", port);
exit_conf_mode_ite(port);
if (chip_found_at_port)
return;
enter_conf_mode_ite_it8228e(port);
probe_idregs_ite_helper("(init=it8228e) ", port);
exit_conf_mode_ite(port);
if (chip_found_at_port)
return;
enter_conf_mode_winbond_fintek_ite_8787(port);
probe_idregs_ite_helper("(init=0x87,0x87) ", port);
exit_conf_mode_winbond_fintek_ite_8787(port);
if (chip_found_at_port)
return;
}
}
void print_ite_chips(void)
{
print_vendor_chips("ITE", reg_table);
print_vendor_chips("ITE-EC", ec_table);
}