blob: 0f5f4fe18355a170b7d72c8632340f0b67b2a60b [file] [log] [blame]
Uwe Hermann0120e1a2007-09-16 18:11:03 +00001/*
Uwe Hermannafe83092007-09-28 15:45:43 +00002 * This file is part of the superiotool project.
Uwe Hermann0120e1a2007-09-16 18:11:03 +00003 *
4 * Copyright (C) 2007 Carl-Daniel Hailfinger
Uwe Hermannebb73f22008-11-12 19:08:58 +00005 * Copyright (C) 2007-2008 Uwe Hermann <uwe@hermann-uwe.de>
Uwe Hermann0120e1a2007-09-16 18:11:03 +00006 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22#include "superiotool.h"
23
Uwe Hermann07024692007-09-20 22:13:48 +000024#define CHIP_ID_BYTE1_REG 0x20
25#define CHIP_ID_BYTE2_REG 0x21
26#define CHIP_VERSION_REG 0x22
Urja Rannikko38204a22008-10-23 23:33:18 +000027#define ISA_PNP_ADDR 0x279
Uwe Hermann07024692007-09-20 22:13:48 +000028
Uwe Hermann246be7d2007-10-31 22:22:11 +000029static const struct superio_registers reg_table[] = {
Uwe Hermannebb73f22008-11-12 19:08:58 +000030 {0x8228, "IT8228E", {
31 {EOT}}},
Urja Rannikko38204a22008-10-23 23:33:18 +000032 {0x8661, "IT8661F/IT8770F", {
Robinson P. Tryondc817692007-10-05 13:47:04 +000033 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +000034 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
35 0x23,0x24,EOT},
36 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x61,0x00,
37 0x00,0x00,EOT}},
Robinson P. Tryondc817692007-10-05 13:47:04 +000038 {0x0, "Floppy",
39 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
40 {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
41 {0x1, "COM1",
42 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
43 {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
44 {0x2, "COM2",
45 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
46 {0x00,0x00,0x02,0xf8,0x03,0x02,0x00,EOT}},
47 {0x3, "Parallel port",
48 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
49 0xf0,EOT},
50 {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
51 0x03,EOT}},
52 {0x4, "IR",
53 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
54 0x74,0x75,0xf0,EOT},
55 {0x00,0x00,0x02,0xe8,0x03,0x00,0x0a,0x02,0x0b,0x02,
56 0x01,0x00,0x00,EOT}},
57 {0x5, "GPIO",
58 {0x25,0x26,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
59 0x70,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,
60 0xf9,0xfa,0xfb,0xfc,EOT},
61 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
62 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
63 0x00,0x00,0x00,0x00,EOT}},
64 {EOT}}},
Urja Rannikko38204a22008-10-23 23:33:18 +000065 {0x8673, "IT8673F", {
66 {EOT}}},
67 {0x8681, "IT8671F/IT8687R", {
68 {EOT}}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +000069 {0x8701, "IT8703F", {
70 {NOLDN, NULL,
71 {0x20,0x21,0x23,0x24,0x26,0x29,0x2A,0x2B,EOT},
72 {0x87,0x00,0x00,0x80,0x00,0x00,0x7C,0xC0,EOT}},
73 {0x0, "Floppy disk controller",
74 {0x30,0x60,0x61,0x70,0x74,0xF0,0xF1,0xF2,0xF3,0xF4,
75 0xF5,EOT},
76 {0x00,0x03,0xf0,0x06,0x02,0x0E,0x00,0xFF,0x00,0x00,
77 0x00,EOT}},
78 {0x1, "Parallel port",
79 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
80 {0x00,0x03,0x78,0x00,0x80,0x07,0x03,0x03,EOT}},
81 {0x2, "Serial port 1",
82 {0x30,0x60,0x61,0x70,0xf0,EOT},
83 {0x00,0x03,0xf8,0x04,0x00,EOT}},
84 {0x3, "Serial port 2",
85 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
86 {0x00,0x02,0xf8,0x03,0x00,0x00,0x00,0x7f,EOT}},
87 {0x5, "Keyboard controller",
88 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
89 {0x01,0x00,0x60,0x00,0x64,0x01,0x0C,0x80,EOT}},
90 {0x6, "Consumer IR",
91 {0x30,0x60,0x61,0x70,EOT},
92 {0x00,0x00,0x00,0x00,EOT}},
93 {0x7, "Game port, MIDI, GPIO set 1",
94 {0x30,0x60,0x61,0x62,0x63,0x70,0xF0,0xF1,0xF2,EOT},
95 {0x00,0x02,0x01,0x03,0x30,0x00,0xFF,0x00,0x00,EOT}},
96 {0x8, "GPIO set 2",
97 {0x30,0xF0,0xF1,0xF2,0xF3,0xF5,EOT},
98 {0x00,0xFF,0x00,0x00,0x00,0x00,EOT}},
99 {0x9, "GPIO set 3 and 4",
100 {0x30,0x60,0x61,0xF0,0xF1,0xF2,0xF3,0xF4,EOT},
101 {0x00,0x02,0x90,0xFF,0x00,0x00,0x00,0x00,EOT}},
102 {0xA, "ACPI",
103 {0x30,0x70,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,
104 0xF3,0xF4,0xF6,0xF7,0xF9,EOT},
105 {0x00,0x00,0x00,0x00,NANA,NANA,0x00,0x00,0x00,0x00,
106 NANA,NANA,0x00,0x00,0x00,EOT}},
107 {0xC, "GPIO set 5, 6 and 7",
108 {0x30,0x60,0x61,0xF0,0xF3,0xF6,EOT},
109 {0x00,0x03,0x70,0x00,0xFF,0xFF,EOT}},
110 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000111 {0x8702, "IT8702F", {
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000112 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000113 {0x8705, "IT8705F/AF / IT8700F", {
Robinson P. Tryon43541032007-10-04 15:44:19 +0000114 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000115 {0x20,0x21,0x22,0x23,0x24,EOT},
116 {0x87,0x05,0x00,0x00,NANA,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000117 {0x0, "Floppy",
118 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
119 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
120 {0x1, "COM1",
121 {0x30,0x60,0x61,0x70,0xf0,EOT},
122 {0x00,0x03,0xf8,0x04,0x00,EOT}},
123 {0x2, "COM2",
124 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
125 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
126 {0x3, "Parallel port",
127 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
128 0xf0,EOT},
129 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
130 0x03,EOT}},
131 {0x4, "Environment controller",
132 {0x2b,0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,
133 0xf3,0xf4,0xf5,0xf6,EOT},
134 {0x00,0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,
135 0x00,0x00,NANA,NANA,EOT}},
136 {0x5, "GPIO",
Robinson P. Tryondc817692007-10-05 13:47:04 +0000137 {0x25,0x26,0x27,0x28,0x29,0x2a,0x60,0x61,0x62,0x63,
138 0x64,0x65,0x70,0x71,0x72,0xb0,0xb1,0xb2,0xb3,0xb4,
139 0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,
140 0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xd0,
141 0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd8,0xd9,0xda,0xf0,
142 0xf1,0xf2,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,
143 0xfd,0xfe,0xff,EOT},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000144 {0x00,0x00,0x00,0xff,0xe0,0xff,0x00,0x00,0x00,0x00,
145 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
146 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
147 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
148 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
149 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Robinson P. Tryondc817692007-10-05 13:47:04 +0000150 0x00,NANA,0x00,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000151 {0x6, "Game port",
152 {0x30,0x60,0x61,EOT},
153 {0x00,0x02,0x01,EOT}},
154 {0x7, "Consumer IR",
155 {0x30,0x60,0x61,0x70,0xf0,EOT},
156 {0x00,0x03,0x10,0x0b,0x00,EOT}},
157 {0x8, "MIDI port",
158 {0x30,0x60,0x61,0x70,0xf0,EOT},
159 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000160 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000161 {0x8706, "IT8706R", { /* TODO: Not yet in sensors-detect */
162 /* This is a "Special General Purpose I/O chip". */
163 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000164 {0x8708, "IT8708F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000165 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000166 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
167 0x2a,0x2e,0x2f,EOT},
168 {0x87,0x08,0x00,0x00,NANA,0x3f,0x00,0xff,0xff,0xff,
169 0xff,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000170 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000171 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
172 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000173 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000174 {0x30,0x60,0x61,0x70,0xf0,EOT},
175 {0x00,0x03,0xf8,0x04,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000176 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000177 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
178 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000179 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000180 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
181 0xf0,EOT},
182 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
183 0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000184 {0x4, "SWC",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000185 {0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
186 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
187 {NANA,NANA,0x00,0x00,0x00,0x00,0x00,0x00,
188 0x00,0x00,0x00,0x00,0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000189 {0x5, "Keyboard",
Uwe Hermann2c290e32007-09-20 00:00:49 +0000190 /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000191 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
192 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000193 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000194 {0x30,0x70,0x71,0xf0,EOT},
195 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000196 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000197 {0x70,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,
198 0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,
199 0xc9,0xca,0xcb,0xcc,0xcd,0xd0,0xd1,0xd2,0xd3,0xd4,
200 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xf0,0xf1,
201 0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
202 0xfc,EOT},
203 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
204 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
205 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
206 0x00,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x00,
207 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,
208 0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000209 {0x8, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000210 {0x30,0x60,0x61,EOT},
211 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000212 {0x9, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000213 {0x30,0x60,0x61,0x70,0xf0,EOT},
214 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000215 {0xa, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000216 {0x30,0x60,0x61,0x70,0xf0,EOT},
217 {0x00,0x03,0x00,0x0a,0x00,EOT}},
218 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000219 {0x8710, "IT8710F", { /* TODO: Not yet in sensors-detect */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000220 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000221 {0x8711, "IT8711F", { /* 0x8711 is a guess, not found in datasheet. */
222 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000223 {0x8712, "IT8712F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000224 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000225 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
226 {0x87,0x12,0x08,0x00,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000227 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000228 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
229 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000230 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000231 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
232 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000233 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000234 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
235 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000236 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000237 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
238 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000239 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000240 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
241 0xf4,0xf5,0xf6,EOT},
242 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
243 0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000244 {0x5, "Keyboard",
245 /* TODO: 0xf0: Error in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000246 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
247 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000248 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000249 {0x30,0x70,0x71,0xf0,EOT},
250 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000251 {0x7, "GPIO", /* TODO: 0x72, 0x73: Errors in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000252 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
253 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
254 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
255 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
256 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
257 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
258 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
Uwe Hermann07024692007-09-20 22:13:48 +0000259 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000260 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
261 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
262 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
263 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000264 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000265 {0x30,0x60,0x61,0x70,0xf0,EOT},
266 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000267 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000268 {0x30,0x60,0x61,EOT},
269 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000270 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000271 {0x30,0x60,0x61,0x70,0xf0,EOT},
272 {0x00,0x03,0x10,0x0b,0x00,EOT}},
273 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000274 {0x8716, "IT8716F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000275 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000276 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
277 {0x87,0x16,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000278 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000279 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
280 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000281 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000282 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
283 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000284 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000285 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
286 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000287 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000288 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
289 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000290 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000291 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
292 0xf4,0xf5,0xf6,EOT},
293 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
294 0x00,NANA,NANA,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000295 {0x5, "Keyboard",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000296 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
297 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000298 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000299 {0x30,0x70,0x71,0xf0,EOT},
300 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000301 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000302 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
303 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
304 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
305 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
306 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
307 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
308 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
309 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
310 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
311 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
312 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
313 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000314 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000315 {0x30,0x60,0x61,0x70,0xf0,EOT},
316 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000317 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000318 {0x30,0x60,0x61,EOT},
319 {0x00,0x02,0x01,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000320 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000321 {0x30,0x60,0x61,0x70,0xf0,EOT},
322 {0x00,0x03,0x10,0x0b,0x00,EOT}},
323 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000324 {0x8718, "IT8718F", {
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000325 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000326 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
327 {0x87,0x18,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000328 {0x0, "Floppy",
329 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
330 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
331 {0x1, "COM1",
332 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
333 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
334 {0x2, "COM2",
335 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
336 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
337 {0x3, "Parallel port",
338 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
339 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
340 {0x4, "Environment controller",
341 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
342 0xf4,0xf5,0xf6,EOT},
343 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
344 0x00,NANA,NANA,EOT}},
345 {0x5, "Keyboard",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000346 /* 0xf0: Datasheet page 33: 0x00; page 56: 0x08. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000347 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
348 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
349 {0x6, "Mouse",
350 {0x30,0x70,0x71,0xf0,EOT},
351 {0x00,0x0c,0x02,0x00,EOT}},
352 {0x7, "GPIO",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000353 /* 0x2c: Datasheet page 30: 0x00; page 43: 0x1f. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000354 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
355 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
356 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000357 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,
358 0xcc,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xf0,
359 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,
360 0xfb,0xfc,0xfd,0xfe,0xff,EOT},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000361 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
362 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
363 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000364 0x01,0x00,0x00,0x40,0x00,0x00,0x01,0x00,0x00,0x40,
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000365 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
366 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000367 0x00,NANA,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000368 {0xa, "Consumer IR",
369 {0x30,0x60,0x61,0x70,0xf0,EOT},
370 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000371 {EOT}}},
Uwe Hermanncfb6ac72008-10-01 20:16:58 +0000372 {0x8720, "IT8720F", { /* From sensors-detect */
373 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000374 {0x8722, "IT8722F", {
375 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000376 {0x8726, "IT8726F", {
377 /* Datasheet wrongly says that the ID is 0x8716. */
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000378 {NOLDN, NULL,
379 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
380 {0x87,0x26,0x01,0x00,MISC,0x00,EOT}},
381 {0x0, "Floppy",
382 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
383 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
384 {0x1, "COM1",
385 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
386 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
387 {0x2, "COM2",
388 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
389 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
390 {0x3, "Parallel port",
391 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
392 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
393 {0x4, "Environment controller",
394 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
395 0xf4,0xf5,0xf6,EOT},
396 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
397 0x00,MISC,MISC,EOT}},
398 {0x5, "Keyboard",
399 /* 0xf0: Datasheet page 35: 0x00; page 59: 0x08. */
400 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
401 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
402 {0x6, "Mouse",
403 {0x30,0x70,0x71,0xf0,EOT},
404 {0x00,0x0c,0x02,0x00,EOT}},
405 {0x7, "GPIO",
406 /* 0x2c: Datasheet page 33: 0x00; page 45: 0x1f. */
407 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
408 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
409 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
410 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
411 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
412 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
413 {0x01,0x00,0x00,0x40,0x00,0x00,0x1f,0x00,0x00,0x00,
414 0x00,0x00,0x00,0x00,0x00,MISC,0x38,0x00,0x00,0x00,
415 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
416 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
417 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
418 0x00,0x00,0x00,0x00,0x00,0x00,0x00,MISC,0x00,EOT}},
419 {0x8, "MIDI port",
420 {0x30,0x60,0x61,0x70,0xf0,EOT},
421 {0x00,0x03,0x00,0x0a,0x00,EOT}},
422 {0x9, "Game port",
423 {0x30,0x60,0x61,EOT},
424 {0x00,0x02,0x01,EOT}},
425 {0xa, "Consumer IR",
426 {0x30,0x60,0x61,0x70,0xf0,EOT},
427 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000428 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000429 {0x8761, "IT8761E", {
430 {EOT}}},
431 {0x8780, "IT8780F", {
432 {EOT}}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000433 {EOT}
434};
435
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000436static const struct superio_registers ec_table[] = {
437 {0x8716, "IT8716F", {
438 {NOLDN, NULL,
439 {0x00,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x10,
440 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x1b,0x1c,0x1d,
441 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
442 0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,
443 0x44,0x45,0x48,0x50,0x51,0x52,0x53,0x54,0x56,0x57,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000444 0x59,0x5c,
445 0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x68,
446 0x69,0x6a,0x6b,0x6c,0x6d,0x70,0x71,0x72,0x73,0x74,
447 0x75,0x84,0x85,0x86,0x87,0x88,0x89,0x8c,0x8d,0x8e,
448 0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x98,0x99,0x9a,
449 0x9b,0x9c,0x9d,EOT},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000450 {0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x09,0x00,NANA,
451 NANA,NANA,0x07,0x50,NANA,NANA,NANA,NANA,NANA,NANA,
452 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
453 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
454 NANA,NANA,RSVD,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000455 0x00,0x00,
456 0x00,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000457 0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,
458 0x7f,NANA,NANA,NANA,NANA,0x00,0x00,0x02,0x00,0x99,
459 0x99,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,
460 0x00,0x00,0x7f,EOT}},
461 {EOT}}},
Uwe Hermannbbd337e2008-05-08 14:37:12 +0000462 {0x8718, "IT8718F", {
463 {NOLDN, NULL,
464 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
465 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
466 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
467 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
468 0x2a,0x2b,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
469 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,
470 0x42,0x43,0x44,0x45,0x50,0x51,0x52,0x53,0x54,0x56,
471 0x57,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,
472 0x62,0x63,0x64,0x65,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
473 0x70,0x71,0x72,0x73,0x74,0x75,0x80,0x81,0x82,0x83,
474 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,
475 0x92,0x94,0x95,0x96,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,
476 0xa6,EOT},
477 {0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
478 0x40,0x09,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x07,
479 0x50,MISC,MISC,MISC,NANA,NANA,NANA,NANA,NANA,NANA,
480 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
481 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
482 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
483 NANA,NANA,NANA,NANA,0x00,0x00,0x7f,0x7f,0x7f,0x00,
484 0x00,0x90,0x00,0x12,0x00,0x00,0x00,0x00,0x7f,0x7f,
485 0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,0x7f,
486 0x7f,0x7f,0x7f,0x00,0x00,0x7f,NANA,NANA,NANA,NANA,
487 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xff,0x00,
488 0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
489 0x00,EOT}},
490 {EOT}}},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000491 {EOT}
492};
493
Urja Rannikko38204a22008-10-23 23:33:18 +0000494/* Works for: IT8661F/IT8770F */
495static const uint8_t initkey_it8661f[][4] = {
496 {0x86, 0x61, 0x55, 0x55}, /* 0x3f0 */
497 {0x86, 0x61, 0x55, 0xaa}, /* 0x3bd */
498 {0x86, 0x61, 0xaa, 0x55}, /* 0x370 */
499};
500
501/* Works for: IT8671F/IT8687R, IT8673F */
502static const uint8_t initkey_it8671f[][4] = {
503 {0x86, 0x80, 0x55, 0x55}, /* 0x3f0 */
504 {0x86, 0x80, 0x55, 0xaa}, /* 0x3bd */
505 {0x86, 0x80, 0xaa, 0x55}, /* 0x370 */
506};
507
508/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
509static const uint8_t initkey_mbpnp[] = {
510 0x6a, 0xb5, 0xda, 0xed, 0xf6, 0xfb, 0x7d, 0xbe, 0xdf, 0x6f, 0x37,
511 0x1b, 0x0d, 0x86, 0xc3, 0x61, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0x45,
512 0xa2, 0xd1, 0xe8, 0x74, 0x3a, 0x9d, 0xce, 0xe7, 0x73, 0x39,
513};
514
515/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
516static void enter_conf_mode_ite_legacy(uint16_t port, const uint8_t init[][4])
517{
518 int i, idx;
519
520 /* Determine Super I/O config port. */
521 idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
522 for (i = 0; i < 4; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000523 OUTB(init[idx][i], ISA_PNP_ADDR);
Urja Rannikko38204a22008-10-23 23:33:18 +0000524
525 /* Sequentially write the 32 MB PnP init values. */
526 for (i = 0; i < 32; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000527 OUTB(initkey_mbpnp[i], port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000528}
529
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000530static void enter_conf_mode_ite(uint16_t port)
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000531{
Andriy Gaponb64aa602008-10-28 22:13:38 +0000532 OUTB(0x87, port);
533 OUTB(0x01, port);
534 OUTB(0x55, port);
535 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000536}
537
Uwe Hermannebb73f22008-11-12 19:08:58 +0000538static void enter_conf_mode_ite_it8761e(uint16_t port)
539{
540 OUTB(0x87, port);
541 OUTB(0x61, port);
542 OUTB(0x55, port);
543 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
544}
545
546static void enter_conf_mode_ite_it8228e(uint16_t port)
547{
548 OUTB(0x82, port);
549 OUTB(0x28, port);
550 OUTB(0x55, port);
551 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
552}
553
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000554static void exit_conf_mode_ite(uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000555{
556 regwrite(port, 0x02, 0x02);
557}
558
Uwe Hermannafe83092007-09-28 15:45:43 +0000559static void probe_idregs_ite_helper(const char *init, uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000560{
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000561 uint16_t id, chipver, ecport;
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000562
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000563 probing_for("ITE", init, port);
564
Uwe Hermann07024692007-09-20 22:13:48 +0000565 id = regval(port, CHIP_ID_BYTE1_REG) << 8;
566 id |= regval(port, CHIP_ID_BYTE2_REG);
567 chipver = regval(port, CHIP_VERSION_REG) & 0x0f; /* Only bits 3..0 */
568
569 if (superio_unknown(reg_table, id)) {
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000570 if (verbose)
571 printf(NOTFOUND "id=0x%04x, rev=0x%01x\n", id, chipver);
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000572 return;
573 }
574
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000575 printf("Found ITE %s (id=0x%04x, rev=0x%01x) at 0x%x\n",
Uwe Hermann07024692007-09-20 22:13:48 +0000576 get_superio_name(reg_table, id), id, chipver, port);
Uwe Hermanne9d46162007-10-07 20:01:23 +0000577 chip_found = 1;
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000578
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000579 dump_superio("ITE", reg_table, port, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000580
581 if (extra_dump) {
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000582 regwrite(port, LDN_SEL, 0x04); /* Select LDN 4 (EC). */
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000583
584 /* Get EC base address (stored in LDN 4, index 0x60/0x61). */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000585 ecport = regval(port, 0x60) << 8;
586 ecport |= regval(port, 0x61);
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000587
588 /* EC address register = EC base address + 5. */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000589 ecport += 5;
590
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000591 printf("Environment controller (0x%04x)\n", ecport);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000592 dump_superio("ITE-EC", ec_table, ecport, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000593 }
Uwe Hermannb4db2202007-09-20 23:37:56 +0000594}
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000595
Uwe Hermannb4db2202007-09-20 23:37:56 +0000596void probe_idregs_ite(uint16_t port)
597{
Urja Rannikko38204a22008-10-23 23:33:18 +0000598 if (port == 0x3f0 || port == 0x3bd || port == 0x370) {
599 enter_conf_mode_ite_legacy(port, initkey_it8661f);
600 probe_idregs_ite_helper("(init=legacy/it8661f) ", port);
601 exit_conf_mode_ite(port);
Uwe Hermannb4db2202007-09-20 23:37:56 +0000602
Urja Rannikko38204a22008-10-23 23:33:18 +0000603 enter_conf_mode_ite_legacy(port, initkey_it8671f);
604 probe_idregs_ite_helper("(init=legacy/it8671f) ", port);
605 exit_conf_mode_ite(port);
606 } else {
607 enter_conf_mode_ite(port);
Uwe Hermannebb73f22008-11-12 19:08:58 +0000608 probe_idregs_ite_helper("(init=standard) ", port);
609 exit_conf_mode_ite(port);
610
611 enter_conf_mode_ite_it8761e(port);
612 probe_idregs_ite_helper("(init=it8761e) ", port);
613 exit_conf_mode_ite(port);
614
615 enter_conf_mode_ite_it8228e(port);
616 probe_idregs_ite_helper("(init=it8228e) ", port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000617 exit_conf_mode_ite(port);
618
619 enter_conf_mode_winbond_fintek_ite_8787(port);
620 probe_idregs_ite_helper("(init=0x87,0x87) ", port);
621 exit_conf_mode_winbond_fintek_ite_8787(port);
622 }
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000623}
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000624
625void print_ite_chips(void)
626{
627 print_vendor_chips("ITE", reg_table);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000628 print_vendor_chips("ITE-EC", ec_table);
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000629}