2 * This file is part of the superiotool project.
4 * Copyright (C) 2007 Carl-Daniel Hailfinger
5 * Copyright (C) 2007-2008 Uwe Hermann <uwe@hermann-uwe.de>
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.
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.
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
22 #include "superiotool.h"
24 #define CHIP_ID_BYTE1_REG 0x20
25 #define CHIP_ID_BYTE2_REG 0x21
26 #define CHIP_VERSION_REG 0x22
27 #define ISA_PNP_ADDR 0x279
29 static const struct superio_registers reg_table[] = {
32 {0x8500, "IT8500B/E", {
34 {0x20,0x21,0x22,0x23,0x25,0x2d,0x2e,0x2f,0x30,EOT},
35 {0x85,0x00,0x01,0x01,0x00,0x00,NANA,NANA,0x00,EOT}},
36 {0x04, "System Wake-Up Control (SWUC)",
37 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
38 {0x00,0x00,0x00,0x00,0x00,0x00,0x01,EOT}},
39 {0x05, "KBC/Mouse Interface",
40 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
41 {0x00,0x00,0x00,0x00,0x00,0x0c,0x01,EOT}},
42 {0x06, "KBC/Keyboard Interface",
43 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
44 {0x00,0x00,0x60,0x00,0x64,0x01,0x01,EOT}},
45 {0x0f, "Shared Memory/Flash Interface (SMFI)",
46 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,EOT},
47 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,EOT}},
49 {0x30,0x62,0x63,0x70,0x71,0xf3,0xf4,0xf5,EOT},
50 {0x00,0x00,0x72,0x08,0x01,NANA,NANA,NANA,EOT}},
51 {0x11, "Power Management I/F Channel 1 (PMC1)",
52 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
53 {0x00,0x00,0x62,0x00,0x66,0x01,0x01,EOT}},
54 {0x12, "Power Management I/F Channel 2 (PMC2)",
55 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x71,0xf0,EOT},
56 {0x00,0x00,0x68,0x00,0x6c,0x00,0x00,0x01,0x01,NANA,EOT}},
58 {0x8502, "IT8502E/TE/G", {
60 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
61 0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
62 {0x85,0x02,0x71,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
63 NANA,NANA,NANA,0x00,NANA,EOT}},
65 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
66 {0x00,0x03,0xf8,0x00,0x00,0x04,0x02,0x00,EOT}},
67 {0x4, "System Wake-Up",
68 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
69 {0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,EOT}},
71 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
72 {0x01,0x00,0x00,0x00,0x00,0x0C,0x01,NANA,EOT}},
74 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
75 {0x01,0x00,0x60,0x00,0x64,0x01,0x01,NANA,EOT}},
76 {0xf, "Shared Memory/Flash",
77 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
79 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
82 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf3,0xf4,
84 {0x00,0x00,0x70,0x00,0x72,0x08,0x01,NANA,NANA,
86 {0x11, "Power Channel 1",
87 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
89 {0x00,0x00,0x62,0x00,0x66,0x01,0x01,EOT}},
90 {0x12, "Power Channel 2",
91 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
92 {0x00,0x00,0x68,0x00,0x6c,0x01,0x01,EOT}},
93 {0x17, "Power Channel 3",
94 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
95 {0x00,0x00,0x6a,0x00,0x6e,0x01,0x01,EOT}},
97 {0x8510, "IT8510E/TE/G", {
101 {NOLDN, "Chip Version",
104 {NOLDN, "Super I/O Control Reigster (SIOCTRL)",
107 {NOLDN, "Super I/O Configuration Register (SIOIRQ)",
110 {NOLDN, "Super I/O General Purpose Register (SIOGP)",
113 {NOLDN, "Super I/O Power Mode Register (SIOPWR)",
116 {NOLDN, "Logical Device Activate Register (LDA)",
119 {NOLDN, "I/O Port Base Address for Descriptor 0 (IOBAD0)",
122 {NOLDN, "I/O Port Base Address for Descriptor 1 (IOBAD1)",
125 {NOLDN, "Interupt Request Number and Wake-Up on IRQ Enable (IRQNUMX)",
128 {NOLDN, "Interrupt Request Type Select (IRQTP)",
131 {NOLDN, "DMA Channel Select 0 (DMAS0)",
134 {NOLDN, "DMA Channel Select 1 (DMAS1)",
137 {0x4, "System Wakup-Up (SWUC)",
138 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
139 {0x00,0x00,0x00,0x00,0x00,0x00,0x03,EOT}},
140 {0x5, "Keyboard/Mouse",
141 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
142 {0x00,0x00,0x00,0x00,0x00,0x0c,0x03,EOT}},
143 {0x6, "Keyboard/Mouse",
144 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
145 {0x00,0x00,0x60,0x00,0x64,0x01,0x03,EOT}},
146 {0xf, "Shared Memory/Flash Interface (SMFI)",
147 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,0xf6,0xf7,0xf8,EOT},
148 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
149 {0x10, "Real Time Clock (RTC)",
150 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,0xf1,0xf2,EOT},
151 {0x00,0x00,0x70,0x00,0x72,0x08,0x00,0x00,0x49,0x4a,EOT}},
152 {0x11, "Power Management Interface Channel 1",
153 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
154 {0x00,0x00,0x62,0x00,0x66,0x01,0x03,EOT}},
155 {0x12, "Power Management Interface Channel 2",
156 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
157 {0x00,0x00,0x68,0x00,0x6c,0x01,0x03,EOT}},
159 {0x8511, "IT8511E/TE/G", {
161 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
162 0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
163 {0x85,0x11,0x10,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
164 NANA,NANA,NANA,0x00,NANA,EOT}},
165 {0x4, "System Wake-Up",
166 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
167 {0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,EOT}},
169 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
170 {0x01,0x00,0x00,0x00,0x00,0x0C,0x03,NANA,EOT}},
172 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
173 {0x01,0x00,0x60,0x00,0x64,0x01,0x03,NANA,EOT}},
174 {0xf, "Shared Memory/Flash",
175 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
177 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
179 {0x10, "Real-Time Clock",
180 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,0xf1,
181 0xf2,0xf3,0xf4,0xf5,EOT},
182 {0x00,0x00,0x70,0x00,0x72,0x08,0x00,0x00,0x49,
183 0x4A,NANA,NANA,NANA,EOT}},
184 {0x11, "Power Channel 1",
185 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
186 {0x00,0x00,0x62,0x00,0x66,0x01,0x03,EOT}},
187 {0x12, "Power Channel 2",
188 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
189 {0x00,0x00,0x68,0x00,0x6c,0x01,0x03,EOT}},
191 {0x8512, "IT8512E/F/G", {
193 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
194 0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
195 {0x85,0x12,0x22,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
196 NANA,NANA,NANA,0x00,NANA,EOT}},
197 {0x4, "System Wake-Up",
198 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
199 {0x00,0x00,0x00,0x00,0x00,0x00,0x03,EOT}},
201 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
202 {0x00,0x00,0x00,0x00,0x00,0x0C,0x03,NANA,EOT}},
204 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
205 {0x00,0x00,0x60,0x00,0x64,0x01,0x03,NANA,EOT}},
206 {0xf, "Shared Memory/Flash",
207 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
209 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
212 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf3,0xf4,
214 {0x00,0x00,0x70,0x00,0x72,0x08,0x00,NANA,NANA,
216 {0x11, "Power Channel 1",
217 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
218 {0x00,0x00,0x62,0x00,0x66,0x01,0x03,EOT}},
219 {0x12, "Power Channel 2",
220 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
221 {0x00,0x00,0x68,0x00,0x6c,0x01,0x03,EOT}},
223 {0x8513, "IT8513E/F/G", {
225 {0x8661, "IT8661F/IT8770F", {
227 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
229 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x61,0x00,
232 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
233 {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
235 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
236 {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
238 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
239 {0x00,0x00,0x02,0xf8,0x03,0x02,0x00,EOT}},
240 {0x3, "Parallel port",
241 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
243 {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
246 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
248 {0x00,0x00,0x02,0xe8,0x03,0x00,0x0a,0x02,0x0b,0x02,
249 0x01,0x00,0x00,EOT}},
251 {0x25,0x26,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
252 0x70,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,
253 0xf9,0xfa,0xfb,0xfc,EOT},
254 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
255 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
256 0x00,0x00,0x00,0x00,EOT}},
258 {0x8673, "IT8673F", {
260 {0x8681, "IT8671F/IT8687R", {
262 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
263 0x23,0x24,0x25,0x26,0x2e,0x2f,EOT},
264 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x81,0x00,
265 0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
267 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
268 {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
270 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
271 {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
273 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
274 0x74,0x75,0xf0,0xf1,EOT},
275 {0x00,0x00,0x02,0xf8,0x03,0x00,0x03,0x02,0x0a,0x02,
276 0x00,0x01,0x00,0x00,EOT}},
277 {0x3, "Parallel port",
278 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
280 {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
283 {0x30,0xf0,0xf1,0xf2,0xf4,0xf5,0xf6,EOT},
284 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
286 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
287 {MISC,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
289 {0x30,0x70,0x71,0xf0,EOT},
290 {0x00,0x0c,0x02,0x00,EOT}},
292 {0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,
293 0x70,0x71,0x72,0x73,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,
294 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff,
295 0xe0,0xe1,0xe2,0xe3,0xe4,EOT},
296 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
297 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
298 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
299 0x00,0x00,0x00,0x00,0x00,EOT}},
301 {0x8701, "IT8703F", {
303 {0x20,0x21,0x23,0x24,0x26,0x29,0x2a,0x2b,EOT},
304 {0x87,0x00,0x00,0x80,0x00,0x00,0x7c,0xc0,EOT}},
306 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
308 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
310 {0x1, "Parallel port",
311 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
312 {0x00,0x03,0x78,0x00,0x80,0x07,0x03,0x03,EOT}},
314 {0x30,0x60,0x61,0x70,0xf0,EOT},
315 {0x00,0x03,0xf8,0x04,0x00,EOT}},
317 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
318 {0x00,0x02,0xf8,0x03,0x00,0x00,0x00,0x7f,EOT}},
320 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
321 {0x01,0x00,0x60,0x00,0x64,0x01,0x0c,0x80,EOT}},
323 {0x30,0x60,0x61,0x70,EOT},
324 {0x00,0x00,0x00,0x00,EOT}},
325 {0x7, "Game port, MIDI, GPIO set 1",
326 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,EOT},
327 {0x00,0x02,0x01,0x03,0x30,0x00,0xff,0x00,0x00,EOT}},
329 {0x30,0xf0,0xf1,0xf2,0xf3,0xf5,EOT},
330 {0x00,0xff,0x00,0x00,0x00,0x00,EOT}},
331 {0x9, "GPIO set 3 and 4",
332 {0x30,0x60,0x61,0xf0,0xf1,0xf2,0xf3,0xf4,EOT},
333 {0x00,0x02,0x90,0xff,0x00,0x00,0x00,0x00,EOT}},
335 {0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
336 0xf3,0xf4,0xf6,0xf7,0xf9,EOT},
337 {0x00,0x00,0x00,0x00,NANA,NANA,0x00,0x00,0x00,0x00,
338 NANA,NANA,0x00,0x00,0x00,EOT}},
339 {0xc, "GPIO set 5, 6 and 7",
340 {0x30,0x60,0x61,0xf0,0xf3,0xf6,EOT},
341 {0x00,0x03,0x70,0x00,0xff,0xff,EOT}},
343 {0x8702, "IT8702F", {
345 {0x8705, "IT8705F/AF / IT8700F", {
347 {0x20,0x21,0x22,0x23,0x24,EOT},
348 {0x87,0x05,0x00,0x00,NANA,EOT}},
350 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
351 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
353 {0x30,0x60,0x61,0x70,0xf0,EOT},
354 {0x00,0x03,0xf8,0x04,0x00,EOT}},
356 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
357 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
358 {0x3, "Parallel port",
359 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
361 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
363 {0x4, "Environment controller",
364 {0x2b,0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,
365 0xf3,0xf4,0xf5,0xf6,EOT},
366 {0x00,0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,
367 0x00,0x00,NANA,NANA,EOT}},
369 {0x25,0x26,0x27,0x28,0x29,0x2a,0x60,0x61,0x62,0x63,
370 0x64,0x65,0x70,0x71,0x72,0xb0,0xb1,0xb2,0xb3,0xb4,
371 0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,
372 0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xd0,
373 0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd8,0xd9,0xda,0xf0,
374 0xf1,0xf2,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,
376 {0x00,0x00,0x00,0xff,0xe0,0xff,0x00,0x00,0x00,0x00,
377 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
378 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
379 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
380 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
381 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
382 0x00,NANA,0x00,EOT}},
384 {0x30,0x60,0x61,EOT},
385 {0x00,0x02,0x01,EOT}},
387 {0x30,0x60,0x61,0x70,0xf0,EOT},
388 {0x00,0x03,0x10,0x0b,0x00,EOT}},
390 {0x30,0x60,0x61,0x70,0xf0,EOT},
391 {0x00,0x03,0x00,0x0a,0x00,EOT}},
393 {0x8706, "IT8706R", { /* TODO: Not yet in sensors-detect */
394 /* This is a "Special General Purpose I/O chip". */
396 {0x8707, "IT8707F", {
398 {0x8708, "IT8708F", {
400 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
402 {0x87,0x08,0x00,0x00,NANA,0x3f,0x00,0xff,0xff,0xff,
403 0xff,0x00,0x00,EOT}},
405 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
406 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
408 {0x30,0x60,0x61,0x70,0xf0,EOT},
409 {0x00,0x03,0xf8,0x04,0x00,EOT}},
411 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
412 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
413 {0x3, "Parallel port",
414 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
416 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
419 {0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
420 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
421 {NANA,NANA,0x00,0x00,0x00,0x00,0x00,0x00,
422 0x00,0x00,0x00,0x00,0x00,NANA,NANA,EOT}},
424 /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
425 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
426 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
428 {0x30,0x70,0x71,0xf0,EOT},
429 {0x00,0x0c,0x02,0x00,EOT}},
431 {0x70,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,
432 0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,
433 0xc9,0xca,0xcb,0xcc,0xcd,0xd0,0xd1,0xd2,0xd3,0xd4,
434 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xf0,0xf1,
435 0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
437 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
438 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
439 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
440 0x00,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x00,
441 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,
444 {0x30,0x60,0x61,EOT},
445 {0x00,0x02,0x01,EOT}},
447 {0x30,0x60,0x61,0x70,0xf0,EOT},
448 {0x00,0x03,0x10,0x0b,0x00,EOT}},
450 {0x30,0x60,0x61,0x70,0xf0,EOT},
451 {0x00,0x03,0x00,0x0a,0x00,EOT}},
453 {0x8710, "IT8710F", { /* TODO: Not yet in sensors-detect */
455 {0x8711, "IT8711F", { /* 0x8711 is a guess, not found in datasheet. */
457 {0x8712, "IT8712F", {
459 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
460 {0x87,0x12,0x08,0x00,0x00,0x00,EOT}},
462 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
463 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
465 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
466 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
468 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
469 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
470 {0x3, "Parallel port",
471 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
472 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
473 {0x4, "Environment controller",
474 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
476 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
477 0x00,NANA,NANA,EOT}},
479 /* TODO: 0xf0: Error in datasheet? */
480 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
481 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
483 {0x30,0x70,0x71,0xf0,EOT},
484 {0x00,0x0c,0x02,0x00,EOT}},
485 {0x7, "GPIO", /* TODO: 0x72, 0x73: Errors in datasheet? */
486 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
487 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
488 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
489 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
490 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
491 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
492 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
493 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
494 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
495 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
496 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
497 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
499 {0x30,0x60,0x61,0x70,0xf0,EOT},
500 {0x00,0x03,0x00,0x0a,0x00,EOT}},
502 {0x30,0x60,0x61,EOT},
503 {0x00,0x02,0x01,EOT}},
505 {0x30,0x60,0x61,0x70,0xf0,EOT},
506 {0x00,0x03,0x10,0x0b,0x00,EOT}},
508 {0x8716, "IT8716F", {
510 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
511 {0x87,0x16,0x01,0x00,0x00,0x00,EOT}},
513 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
514 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
516 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
517 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
519 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
520 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
521 {0x3, "Parallel port",
522 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
523 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
524 {0x4, "Environment controller",
525 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
527 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
528 0x00,NANA,NANA,EOT}},
530 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
531 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
533 {0x30,0x70,0x71,0xf0,EOT},
534 {0x00,0x0c,0x02,0x00,EOT}},
536 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
537 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
538 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
539 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
540 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
541 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
542 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
543 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
544 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
545 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
546 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
547 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
549 {0x30,0x60,0x61,0x70,0xf0,EOT},
550 {0x00,0x03,0x00,0x0a,0x00,EOT}},
552 {0x30,0x60,0x61,EOT},
553 {0x00,0x02,0x01,EOT}},
555 {0x30,0x60,0x61,0x70,0xf0,EOT},
556 {0x00,0x03,0x10,0x0b,0x00,EOT}},
558 {0x8718, "IT8718F", {
560 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
561 {0x87,0x18,0x01,0x00,0x00,0x00,EOT}},
563 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
564 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
566 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
567 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
569 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
570 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
571 {0x3, "Parallel port",
572 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
573 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
574 {0x4, "Environment controller",
575 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
577 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
578 0x00,NANA,NANA,EOT}},
580 /* 0xf0: Datasheet page 33: 0x00; page 56: 0x08. */
581 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
582 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
584 {0x30,0x70,0x71,0xf0,EOT},
585 {0x00,0x0c,0x02,0x00,EOT}},
587 /* 0x2c: Datasheet page 30: 0x00; page 43: 0x1f. */
588 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
589 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
590 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
591 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,
592 0xcc,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xf0,
593 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,
594 0xfb,0xfc,0xfd,0xfe,0xff,EOT},
595 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
596 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
597 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
598 0x01,0x00,0x00,0x40,0x00,0x00,0x01,0x00,0x00,0x40,
599 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
600 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
601 0x00,NANA,0x00,0x00,0x00,EOT}},
603 {0x30,0x60,0x61,0x70,0xf0,EOT},
604 {0x00,0x03,0x10,0x0b,0x00,EOT}},
606 {0x8720, "IT8720F", {
608 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
609 {0x87,0x20,0x05,0x00,0x00,0x00,EOT}},
611 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
612 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
614 {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
615 {0x00,0x03,0xf8,0x04,0x00,0x50,EOT}},
617 {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
618 {0x00,0x02,0xf8,0x03,0x00,0x50,EOT}},
619 {0x3, "Parallel port",
620 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
621 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
622 {0x4, "Environment controller",
623 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
625 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
626 0x00,NANA,NANA,EOT}},
628 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
629 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x48,EOT}},
631 {0x30,0x70,0x71,0xf0,EOT},
632 {0x00,0x0c,0x02,0x00,EOT}},
634 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
635 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
636 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
637 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
638 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe9,0xf0,
639 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,
640 0xfb,0xfc,0xfd,0xfe,0xff,EOT},
641 {0x00,0xff,0x00,0x40,0x00,0x00,0x03,0x00,0x00,0x00,
642 0x00,0x00,0x00,0x00,0x00,NANA,0x38,0x00,0x00,0x00,
643 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,
644 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
645 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,
646 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
647 0x00,NANA,0x00,0x00,0x00,EOT}},
649 {0x30,0x60,0x61,0x70,0xf0,EOT},
650 {0x00,0x03,0x10,0x0b,0x06,EOT}},
652 {0x8721, "IT8721F", {
654 {0x8722, "IT8722F", {
656 {0x8726, "IT8726F", {
657 /* Datasheet wrongly says that the ID is 0x8716. */
659 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
660 {0x87,0x26,0x01,0x00,MISC,0x00,EOT}},
662 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
663 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
665 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
666 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
668 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
669 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
670 {0x3, "Parallel port",
671 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
672 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
673 {0x4, "Environment controller",
674 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
676 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
677 0x00,MISC,MISC,EOT}},
679 /* 0xf0: Datasheet page 35: 0x00; page 59: 0x08. */
680 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
681 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
683 {0x30,0x70,0x71,0xf0,EOT},
684 {0x00,0x0c,0x02,0x00,EOT}},
686 /* 0x2c: Datasheet page 33: 0x00; page 45: 0x1f. */
687 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
688 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
689 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
690 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
691 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
692 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
693 {0x01,0x00,0x00,0x40,0x00,0x00,0x1f,0x00,0x00,0x00,
694 0x00,0x00,0x00,0x00,0x00,MISC,0x38,0x00,0x00,0x00,
695 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
696 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
697 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
698 0x00,0x00,0x00,0x00,0x00,0x00,0x00,MISC,0x00,EOT}},
700 {0x30,0x60,0x61,0x70,0xf0,EOT},
701 {0x00,0x03,0x00,0x0a,0x00,EOT}},
703 {0x30,0x60,0x61,EOT},
704 {0x00,0x02,0x01,EOT}},
706 {0x30,0x60,0x61,0x70,0xf0,EOT},
707 {0x00,0x03,0x10,0x0b,0x00,EOT}},
709 {0x8761, "IT8761E", {
711 {0x8772, "IT8772F", {
713 {0x8780, "IT8780F", {
718 static const struct superio_registers ec_table[] = {
719 {0x8716, "IT8716F", {
721 {0x00,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x10,
722 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x1b,0x1c,0x1d,
723 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
724 0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,
725 0x44,0x45,0x48,0x50,0x51,0x52,0x53,0x54,0x56,0x57,
727 0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x68,
728 0x69,0x6a,0x6b,0x6c,0x6d,0x70,0x71,0x72,0x73,0x74,
729 0x75,0x84,0x85,0x86,0x87,0x88,0x89,0x8c,0x8d,0x8e,
730 0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x98,0x99,0x9a,
732 {0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x09,0x00,NANA,
733 NANA,NANA,0x07,0x50,NANA,NANA,NANA,NANA,NANA,NANA,
734 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
735 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
736 NANA,NANA,RSVD,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,
738 0x00,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,
739 0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,
740 0x7f,NANA,NANA,NANA,NANA,0x00,0x00,0x02,0x00,0x99,
741 0x99,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,
742 0x00,0x00,0x7f,EOT}},
744 {0x8718, "IT8718F", {
746 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
747 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
748 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
749 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
750 0x2a,0x2b,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
751 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,
752 0x42,0x43,0x44,0x45,0x50,0x51,0x52,0x53,0x54,0x56,
753 0x57,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,
754 0x62,0x63,0x64,0x65,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
755 0x70,0x71,0x72,0x73,0x74,0x75,0x80,0x81,0x82,0x83,
756 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,
757 0x92,0x94,0x95,0x96,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,
759 {0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
760 0x40,0x09,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x07,
761 0x50,MISC,MISC,MISC,NANA,NANA,NANA,NANA,NANA,NANA,
762 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
763 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
764 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
765 NANA,NANA,NANA,NANA,0x00,0x00,0x7f,0x7f,0x7f,0x00,
766 0x00,0x90,0x00,0x12,0x00,0x00,0x00,0x00,0x7f,0x7f,
767 0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,0x7f,
768 0x7f,0x7f,0x7f,0x00,0x00,0x7f,NANA,NANA,NANA,NANA,
769 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xff,0x00,
770 0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
776 /* Works for: IT8661F/IT8770F */
777 static const uint8_t initkey_it8661f[][4] = {
778 {0x86, 0x61, 0x55, 0x55}, /* 0x3f0 */
779 {0x86, 0x61, 0x55, 0xaa}, /* 0x3bd */
780 {0x86, 0x61, 0xaa, 0x55}, /* 0x370 */
783 /* Works for: IT8671F/IT8687R, IT8673F */
784 static const uint8_t initkey_it8671f[][4] = {
785 {0x86, 0x80, 0x55, 0x55}, /* 0x3f0 */
786 {0x86, 0x80, 0x55, 0xaa}, /* 0x3bd */
787 {0x86, 0x80, 0xaa, 0x55}, /* 0x370 */
790 /* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
791 static const uint8_t initkey_mbpnp[] = {
792 0x6a, 0xb5, 0xda, 0xed, 0xf6, 0xfb, 0x7d, 0xbe, 0xdf, 0x6f, 0x37,
793 0x1b, 0x0d, 0x86, 0xc3, 0x61, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0x45,
794 0xa2, 0xd1, 0xe8, 0x74, 0x3a, 0x9d, 0xce, 0xe7, 0x73, 0x39,
797 /* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
798 static void enter_conf_mode_ite_legacy(uint16_t port, const uint8_t init[][4])
802 /* Determine Super I/O config port. */
803 idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
804 for (i = 0; i < 4; i++)
805 OUTB(init[idx][i], ISA_PNP_ADDR);
807 /* Sequentially write the 32 MB PnP init values. */
808 for (i = 0; i < 32; i++)
809 OUTB(initkey_mbpnp[i], port);
812 static void enter_conf_mode_ite(uint16_t port)
817 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
820 static void enter_conf_mode_ite_it8502e(uint16_t port)
825 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
828 static void enter_conf_mode_ite_it8761e(uint16_t port)
833 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
836 static void enter_conf_mode_ite_it8228e(uint16_t port)
841 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
844 static void exit_conf_mode_ite(uint16_t port)
846 regwrite(port, 0x02, 0x02);
849 static int chip_found_at_port;
851 static void probe_idregs_ite_helper(const char *init, uint16_t port)
853 uint16_t id, chipver, ecport;
855 probing_for("ITE", init, port);
857 id = regval(port, CHIP_ID_BYTE1_REG) << 8;
858 id |= regval(port, CHIP_ID_BYTE2_REG);
859 chipver = regval(port, CHIP_VERSION_REG) & 0x0f; /* Only bits 3..0 */
861 if (superio_unknown(reg_table, id)) {
863 printf(NOTFOUND "id=0x%04x, rev=0x%01x\n", id, chipver);
867 printf("Found ITE %s (id=0x%04x, rev=0x%01x) at 0x%x\n",
868 get_superio_name(reg_table, id), id, chipver, port);
870 chip_found_at_port = 1;
872 dump_superio("ITE", reg_table, port, id, LDN_SEL);
875 regwrite(port, LDN_SEL, 0x04); /* Select LDN 4 (EC). */
877 /* Get EC base address (stored in LDN 4, index 0x60/0x61). */
878 ecport = regval(port, 0x60) << 8;
879 ecport |= regval(port, 0x61);
881 /* EC address register = EC base address + 5. */
884 printf("Environment controller (0x%04x)\n", ecport);
885 dump_superio("ITE-EC", ec_table, ecport, id, LDN_SEL);
889 void probe_idregs_ite(uint16_t port)
891 chip_found_at_port = 0;
893 if (port == 0x3f0 || port == 0x3bd || port == 0x370) {
894 enter_conf_mode_ite_legacy(port, initkey_it8661f);
895 probe_idregs_ite_helper("(init=legacy/it8661f) ", port);
896 exit_conf_mode_ite(port);
897 if (chip_found_at_port)
900 enter_conf_mode_ite_legacy(port, initkey_it8671f);
901 probe_idregs_ite_helper("(init=legacy/it8671f) ", port);
902 exit_conf_mode_ite(port);
903 if (chip_found_at_port)
906 enter_conf_mode_ite(port);
907 probe_idregs_ite_helper("(init=standard) ", port);
908 exit_conf_mode_ite(port);
909 if (chip_found_at_port)
912 enter_conf_mode_ite_it8502e(port);
913 probe_idregs_ite_helper("(init=it8502e) ", port);
914 exit_conf_mode_ite(port);
915 if (chip_found_at_port)
918 enter_conf_mode_ite_it8761e(port);
919 probe_idregs_ite_helper("(init=it8761e) ", port);
920 exit_conf_mode_ite(port);
921 if (chip_found_at_port)
924 enter_conf_mode_ite_it8228e(port);
925 probe_idregs_ite_helper("(init=it8228e) ", port);
926 exit_conf_mode_ite(port);
927 if (chip_found_at_port)
930 enter_conf_mode_winbond_fintek_ite_8787(port);
931 probe_idregs_ite_helper("(init=0x87,0x87) ", port);
932 exit_conf_mode_winbond_fintek_ite_8787(port);
933 if (chip_found_at_port)
938 void print_ite_chips(void)
940 print_vendor_chips("ITE", reg_table);
941 print_vendor_chips("ITE-EC", ec_table);