blob: 7e167c813807dbb91cd679e45a05fce5e69b6430 [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
Paul Menzela46a7122013-02-23 18:37:27 +010019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Uwe Hermann0120e1a2007-09-16 18:11:03 +000020 */
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}}},
Donald Huang03e54de2010-08-10 23:34:51 +000032 {0x8500, "IT8500B/E", {
33 {NOLDN, NULL,
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}},
48 {0x10, "BRAM",
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}},
57 {EOT}}},
Anton Kochkov106f7ff2010-06-29 21:26:17 +000058 {0x8502, "IT8502E/TE/G", {
59 {NOLDN, NULL,
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}},
64 {0x1, "UART1",
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}},
70 {0x5, "Mouse",
71 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
72 {0x01,0x00,0x00,0x00,0x00,0x0C,0x01,NANA,EOT}},
73 {0x6, "Keyboard",
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,
78 0xf6,EOT},
79 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
80 0x00,EOT}},
81 {0x10, "BRAM",
82 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf3,0xf4,
83 0xf5,EOT},
84 {0x00,0x00,0x70,0x00,0x72,0x08,0x01,NANA,NANA,
85 NANA,EOT}},
86 {0x11, "Power Channel 1",
87 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
88
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}},
96 {EOT}}},
Anders Juel Jensenb850eb82010-01-23 15:50:12 +000097 {0x8510, "IT8510E/TE/G", {
Anders Juel Jensen28e4af52010-08-22 19:41:47 +000098 {NOLDN, "Chip ID",
99 {0x20,0x21, EOT},
100 {0x85,0x10, EOT}},
101 {NOLDN, "Chip Version",
102 {0x22,EOT},
103 {0x21,EOT}},
104 {NOLDN, "Super I/O Control Reigster (SIOCTRL)",
105 {0x23,EOT},
106 {0x01,EOT}},
107 {NOLDN, "Super I/O Configuration Register (SIOIRQ)",
108 {0x25,EOT},
109 {0x00,EOT}},
110 {NOLDN, "Super I/O General Purpose Register (SIOGP)",
111 {0x26,EOT},
112 {0x00,EOT}},
113 {NOLDN, "Super I/O Power Mode Register (SIOPWR)",
114 {0x2d,EOT},
115 {0x00,EOT}},
116 {NOLDN, "Logical Device Activate Register (LDA)",
117 {0x30,EOT},
118 {0x00,EOT}},
119 {NOLDN, "I/O Port Base Address for Descriptor 0 (IOBAD0)",
120 {0x60,0x61,EOT},
121 {NANA,NANA,EOT}},
122 {NOLDN, "I/O Port Base Address for Descriptor 1 (IOBAD1)",
123 {0x62,0x63,EOT},
124 {NANA,NANA,EOT}},
125 {NOLDN, "Interupt Request Number and Wake-Up on IRQ Enable (IRQNUMX)",
126 {0x70,EOT},
127 {NANA,EOT}},
128 {NOLDN, "Interrupt Request Type Select (IRQTP)",
129 {0x71,EOT},
130 {NANA,EOT}},
131 {NOLDN, "DMA Channel Select 0 (DMAS0)",
132 {0x74,EOT},
133 {0x04,EOT}},
134 {NOLDN, "DMA Channel Select 1 (DMAS1)",
135 {0x75,EOT},
136 {0x04,EOT}},
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}},
Anders Juel Jensenb850eb82010-01-23 15:50:12 +0000158 {EOT}}},
159 {0x8511, "IT8511E/TE/G", {
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000160 {NOLDN, NULL,
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}},
168 {0x5, "Mouse",
169 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
170 {0x01,0x00,0x00,0x00,0x00,0x0C,0x03,NANA,EOT}},
171 {0x6, "Keyboard",
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,
176 0xf6,EOT},
177 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
178 0x00,EOT}},
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}},
Anders Juel Jensenb850eb82010-01-23 15:50:12 +0000190 {EOT}}},
Anton Kochkov7b5df5a2010-05-09 15:30:45 +0000191 {0x8512, "IT8512E/F/G", {
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000192 {NOLDN, NULL,
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}},
200 {0x5, "Mouse",
201 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
202 {0x00,0x00,0x00,0x00,0x00,0x0C,0x03,NANA,EOT}},
203 {0x6, "Keyboard",
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,
208 0xf6,EOT},
209 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
210 0x00,EOT}},
211 {0x10, "BRAM",
212 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf3,0xf4,
213 0xf5,EOT},
214 {0x00,0x00,0x70,0x00,0x72,0x08,0x00,NANA,NANA,
215 NANA,EOT}},
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}},
Anton Kochkov7b5df5a2010-05-09 15:30:45 +0000222 {EOT}}},
223 {0x8513, "IT8513E/F/G", {
224 {EOT}}},
Urja Rannikko38204a22008-10-23 23:33:18 +0000225 {0x8661, "IT8661F/IT8770F", {
Robinson P. Tryondc817692007-10-05 13:47:04 +0000226 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000227 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
228 0x23,0x24,EOT},
229 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x61,0x00,
230 0x00,0x00,EOT}},
Robinson P. Tryondc817692007-10-05 13:47:04 +0000231 {0x0, "Floppy",
232 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
233 {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
234 {0x1, "COM1",
235 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
236 {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
237 {0x2, "COM2",
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,
242 0xf0,EOT},
243 {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
244 0x03,EOT}},
245 {0x4, "IR",
246 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
247 0x74,0x75,0xf0,EOT},
248 {0x00,0x00,0x02,0xe8,0x03,0x00,0x0a,0x02,0x0b,0x02,
249 0x01,0x00,0x00,EOT}},
250 {0x5, "GPIO",
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}},
257 {EOT}}},
Urja Rannikko38204a22008-10-23 23:33:18 +0000258 {0x8673, "IT8673F", {
259 {EOT}}},
260 {0x8681, "IT8671F/IT8687R", {
Anders Jenbo14db1c02010-05-08 23:28:33 +0000261 {NOLDN, NULL,
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000262 {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}},
266 {0x0, "Floppy",
267 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
268 {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000269 {0x1, "COM1",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000270 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
271 {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000272 {0x2, "COM2",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000273 {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}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000277 {0x3, "Parallel port",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000278 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
279 0xf0,EOT},
280 {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
281 0x03,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000282 {0x4, "APC",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000283 {0x30,0xf0,0xf1,0xf2,0xf4,0xf5,0xf6,EOT},
284 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000285 {0x5, "Keyboard",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000286 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
287 {MISC,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000288 {0x6, "Mouse",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000289 {0x30,0x70,0x71,0xf0,EOT},
290 {0x00,0x0c,0x02,0x00,EOT}},
291 {0x7, "GPIO",
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}},
Urja Rannikko38204a22008-10-23 23:33:18 +0000300 {EOT}}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000301 {0x8701, "IT8703F", {
302 {NOLDN, NULL,
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000303 {0x20,0x21,0x23,0x24,0x26,0x29,0x2a,0x2b,EOT},
304 {0x87,0x00,0x00,0x80,0x00,0x00,0x7c,0xc0,EOT}},
305 {0x0, "Floppy",
306 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
307 0xf5,EOT},
308 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000309 0x00,EOT}},
310 {0x1, "Parallel port",
311 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
312 {0x00,0x03,0x78,0x00,0x80,0x07,0x03,0x03,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000313 {0x2, "COM1",
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000314 {0x30,0x60,0x61,0x70,0xf0,EOT},
315 {0x00,0x03,0xf8,0x04,0x00,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000316 {0x3, "COM2",
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000317 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
318 {0x00,0x02,0xf8,0x03,0x00,0x00,0x00,0x7f,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000319 {0x5, "Keyboard",
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000320 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000321 {0x01,0x00,0x60,0x00,0x64,0x01,0x0c,0x80,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000322 {0x6, "Consumer IR",
323 {0x30,0x60,0x61,0x70,EOT},
324 {0x00,0x00,0x00,0x00,EOT}},
325 {0x7, "Game port, MIDI, GPIO set 1",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000326 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,EOT},
327 {0x00,0x02,0x01,0x03,0x30,0x00,0xff,0x00,0x00,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000328 {0x8, "GPIO set 2",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000329 {0x30,0xf0,0xf1,0xf2,0xf3,0xf5,EOT},
330 {0x00,0xff,0x00,0x00,0x00,0x00,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000331 {0x9, "GPIO set 3 and 4",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000332 {0x30,0x60,0x61,0xf0,0xf1,0xf2,0xf3,0xf4,EOT},
333 {0x00,0x02,0x90,0xff,0x00,0x00,0x00,0x00,EOT}},
334 {0xa, "ACPI",
335 {0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
336 0xf3,0xf4,0xf6,0xf7,0xf9,EOT},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000337 {0x00,0x00,0x00,0x00,NANA,NANA,0x00,0x00,0x00,0x00,
338 NANA,NANA,0x00,0x00,0x00,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000339 {0xc, "GPIO set 5, 6 and 7",
340 {0x30,0x60,0x61,0xf0,0xf3,0xf6,EOT},
341 {0x00,0x03,0x70,0x00,0xff,0xff,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000342 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000343 {0x8702, "IT8702F", {
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000344 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000345 {0x8705, "IT8705F/AF / IT8700F", {
Robinson P. Tryon43541032007-10-04 15:44:19 +0000346 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000347 {0x20,0x21,0x22,0x23,0x24,EOT},
348 {0x87,0x05,0x00,0x00,NANA,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000349 {0x0, "Floppy",
350 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
351 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
352 {0x1, "COM1",
353 {0x30,0x60,0x61,0x70,0xf0,EOT},
354 {0x00,0x03,0xf8,0x04,0x00,EOT}},
355 {0x2, "COM2",
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,
360 0xf0,EOT},
361 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
362 0x03,EOT}},
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}},
368 {0x5, "GPIO",
Robinson P. Tryondc817692007-10-05 13:47:04 +0000369 {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,
375 0xfd,0xfe,0xff,EOT},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000376 {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,
Robinson P. Tryondc817692007-10-05 13:47:04 +0000382 0x00,NANA,0x00,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000383 {0x6, "Game port",
384 {0x30,0x60,0x61,EOT},
385 {0x00,0x02,0x01,EOT}},
386 {0x7, "Consumer IR",
387 {0x30,0x60,0x61,0x70,0xf0,EOT},
388 {0x00,0x03,0x10,0x0b,0x00,EOT}},
389 {0x8, "MIDI port",
390 {0x30,0x60,0x61,0x70,0xf0,EOT},
391 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000392 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000393 {0x8706, "IT8706R", { /* TODO: Not yet in sensors-detect */
394 /* This is a "Special General Purpose I/O chip". */
395 {EOT}}},
Mattias Mattsson25bf69a2010-08-02 02:34:20 +0000396 {0x8707, "IT8707F", {
397 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000398 {0x8708, "IT8708F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000399 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000400 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
401 0x2a,0x2e,0x2f,EOT},
402 {0x87,0x08,0x00,0x00,NANA,0x3f,0x00,0xff,0xff,0xff,
403 0xff,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000404 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000405 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
406 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000407 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000408 {0x30,0x60,0x61,0x70,0xf0,EOT},
409 {0x00,0x03,0xf8,0x04,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000410 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000411 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
412 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000413 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000414 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
415 0xf0,EOT},
416 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
417 0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000418 {0x4, "SWC",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000419 {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}},
Uwe Hermann07024692007-09-20 22:13:48 +0000423 {0x5, "Keyboard",
Uwe Hermann2c290e32007-09-20 00:00:49 +0000424 /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000425 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
426 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000427 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000428 {0x30,0x70,0x71,0xf0,EOT},
429 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000430 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000431 {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,
436 0xfc,EOT},
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,
442 0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000443 {0x8, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000444 {0x30,0x60,0x61,EOT},
445 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000446 {0x9, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000447 {0x30,0x60,0x61,0x70,0xf0,EOT},
448 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000449 {0xa, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000450 {0x30,0x60,0x61,0x70,0xf0,EOT},
451 {0x00,0x03,0x00,0x0a,0x00,EOT}},
452 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000453 {0x8710, "IT8710F", { /* TODO: Not yet in sensors-detect */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000454 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000455 {0x8711, "IT8711F", { /* 0x8711 is a guess, not found in datasheet. */
456 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000457 {0x8712, "IT8712F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000458 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000459 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
460 {0x87,0x12,0x08,0x00,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000461 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000462 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
463 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000464 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000465 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
466 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000467 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000468 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
469 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000470 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000471 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
472 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000473 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000474 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
475 0xf4,0xf5,0xf6,EOT},
476 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
477 0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000478 {0x5, "Keyboard",
479 /* TODO: 0xf0: Error in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000480 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
481 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000482 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000483 {0x30,0x70,0x71,0xf0,EOT},
484 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000485 {0x7, "GPIO", /* TODO: 0x72, 0x73: Errors in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000486 {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,
Uwe Hermann07024692007-09-20 22:13:48 +0000493 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000494 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}},
Uwe Hermann07024692007-09-20 22:13:48 +0000498 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000499 {0x30,0x60,0x61,0x70,0xf0,EOT},
500 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000501 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000502 {0x30,0x60,0x61,EOT},
503 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000504 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000505 {0x30,0x60,0x61,0x70,0xf0,EOT},
506 {0x00,0x03,0x10,0x0b,0x00,EOT}},
507 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000508 {0x8716, "IT8716F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000509 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000510 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
511 {0x87,0x16,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000512 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000513 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
514 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000515 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000516 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
517 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000518 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000519 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
520 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000521 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000522 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
523 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000524 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000525 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
526 0xf4,0xf5,0xf6,EOT},
527 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
528 0x00,NANA,NANA,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000529 {0x5, "Keyboard",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000530 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
531 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000532 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000533 {0x30,0x70,0x71,0xf0,EOT},
534 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000535 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000536 {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}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000548 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000549 {0x30,0x60,0x61,0x70,0xf0,EOT},
550 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000551 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000552 {0x30,0x60,0x61,EOT},
553 {0x00,0x02,0x01,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000554 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000555 {0x30,0x60,0x61,0x70,0xf0,EOT},
556 {0x00,0x03,0x10,0x0b,0x00,EOT}},
557 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000558 {0x8718, "IT8718F", {
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000559 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000560 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
561 {0x87,0x18,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000562 {0x0, "Floppy",
563 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
564 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
565 {0x1, "COM1",
566 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
567 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
568 {0x2, "COM2",
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,
576 0xf4,0xf5,0xf6,EOT},
577 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
578 0x00,NANA,NANA,EOT}},
579 {0x5, "Keyboard",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000580 /* 0xf0: Datasheet page 33: 0x00; page 56: 0x08. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000581 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
582 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
583 {0x6, "Mouse",
584 {0x30,0x70,0x71,0xf0,EOT},
585 {0x00,0x0c,0x02,0x00,EOT}},
586 {0x7, "GPIO",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000587 /* 0x2c: Datasheet page 30: 0x00; page 43: 0x1f. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000588 {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,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000591 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},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000595 {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,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000598 0x01,0x00,0x00,0x40,0x00,0x00,0x01,0x00,0x00,0x40,
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000599 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
600 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000601 0x00,NANA,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000602 {0xa, "Consumer IR",
603 {0x30,0x60,0x61,0x70,0xf0,EOT},
604 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000605 {EOT}}},
Christian Ruppert7c2eec02011-02-03 16:00:28 +0000606 {0x8720, "IT8720F", {
607 {NOLDN, NULL,
608 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
609 {0x87,0x20,0x05,0x00,0x00,0x00,EOT}},
610 {0x0, "Floppy",
611 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
612 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
613 {0x1, "COM1",
614 {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
615 {0x00,0x03,0xf8,0x04,0x00,0x50,EOT}},
616 {0x2, "COM2",
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,
624 0xf4,0xf5,0xf6,EOT},
625 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
626 0x00,NANA,NANA,EOT}},
627 {0x5, "Keyboard",
628 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
629 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x48,EOT}},
630 {0x6, "Mouse",
631 {0x30,0x70,0x71,0xf0,EOT},
632 {0x00,0x0c,0x02,0x00,EOT}},
633 {0x7, "GPIO",
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}},
648 {0xa, "Consumer IR",
649 {0x30,0x60,0x61,0x70,0xf0,EOT},
650 {0x00,0x03,0x10,0x0b,0x06,EOT}},
Uwe Hermanncfb6ac72008-10-01 20:16:58 +0000651 {EOT}}},
Uwe Hermannf9bd9ae2011-01-01 22:05:57 +0000652 {0x8721, "IT8721F", {
653 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000654 {0x8722, "IT8722F", {
655 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000656 {0x8726, "IT8726F", {
657 /* Datasheet wrongly says that the ID is 0x8716. */
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000658 {NOLDN, NULL,
659 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
660 {0x87,0x26,0x01,0x00,MISC,0x00,EOT}},
661 {0x0, "Floppy",
662 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
663 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
664 {0x1, "COM1",
665 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
666 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
667 {0x2, "COM2",
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,
675 0xf4,0xf5,0xf6,EOT},
676 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
677 0x00,MISC,MISC,EOT}},
678 {0x5, "Keyboard",
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}},
682 {0x6, "Mouse",
683 {0x30,0x70,0x71,0xf0,EOT},
684 {0x00,0x0c,0x02,0x00,EOT}},
685 {0x7, "GPIO",
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}},
699 {0x8, "MIDI port",
700 {0x30,0x60,0x61,0x70,0xf0,EOT},
701 {0x00,0x03,0x00,0x0a,0x00,EOT}},
702 {0x9, "Game port",
703 {0x30,0x60,0x61,EOT},
704 {0x00,0x02,0x01,EOT}},
705 {0xa, "Consumer IR",
706 {0x30,0x60,0x61,0x70,0xf0,EOT},
707 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000708 {EOT}}},
Андрей Павловab9b71d2013-03-17 19:11:05 +0300709 {0x8728, "IT8728F", {
710 {NOLDN, NULL,
711 {0x02,0x07,0x20,0x21,0x22,0x23,0x24,0x2b,0x2e,0x2f,EOT},
712 {NANA,NANA,0x87,0x28,0x01,0x00,0x00,MISC,0x00,0x00,EOT}},
713 {0x0, "Floppy",
714 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
715 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
716 {0x1, "COM1",
717 {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
718 {0x00,0x03,0xf8,0x04,0x00,0x50,EOT}},
719 {0x2, "COM2",
720 {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
721 {0x00,0x02,0xf8,0x03,0x00,0x50,EOT}},
722 {0x3, "Parallel port",
723 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
724 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
725 {0x4, "Environment controller",
726 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,
727 0xf3,0xf4,0xf5,0xf6,0xF9,0xFA,0xFB,EOT},
728 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,
729 0x00,0x00,MISC,MISC,MISC,MISC,MISC,EOT}},
730 {0x5, "Keyboard",
731 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
732 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x48,EOT}},
733 {0x6, "Mouse",
734 {0x30,0x70,0x71,0xf0,EOT},
735 {0x00,0x0c,0x02,0x00,EOT}},
736 {0x7, "GPIO",
737 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x2d,0x60,
738 0x61,0x62,0x63,0x64,0x65,0x70,0x71,0x72,0x73,
739 0x74,0xb0,0xb1,0xb2,0xb3,0xb4,0xb8,0xb9,0xba,
740 0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,
741 0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xe0,0xe1,
742 0xe2,0xe3,0xe4,0xe9,0xf0,0xf1,0xf2,0xf3,0xf4,
743 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,EOT},
744 {0x00,0xf3,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
745 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x38,
746 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,
747 0x00,0x00,0x00,0x01,0x00,0x00,0x40,0x00,0x01,
748 0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
749 0x00,0x00,0x00,MISC,0x00,0x00,0x00,0x00,0x00,
750 0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
751 {0xa, "Consumer IR",
752 {0x30,0x60,0x61,0x70,0xf0,EOT},
753 {0x00,0x03,0x10,0x0b,0x06,EOT}},
754 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000755 {0x8761, "IT8761E", {
756 {EOT}}},
Stefan Reinauerd7a75ec2011-10-25 17:12:53 +0000757 {0x8772, "IT8772F", {
758 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000759 {0x8780, "IT8780F", {
760 {EOT}}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000761 {EOT}
762};
763
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000764static const struct superio_registers ec_table[] = {
765 {0x8716, "IT8716F", {
766 {NOLDN, NULL,
767 {0x00,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x10,
768 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x1b,0x1c,0x1d,
769 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
770 0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,
771 0x44,0x45,0x48,0x50,0x51,0x52,0x53,0x54,0x56,0x57,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000772 0x59,0x5c,
773 0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x68,
774 0x69,0x6a,0x6b,0x6c,0x6d,0x70,0x71,0x72,0x73,0x74,
775 0x75,0x84,0x85,0x86,0x87,0x88,0x89,0x8c,0x8d,0x8e,
776 0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x98,0x99,0x9a,
777 0x9b,0x9c,0x9d,EOT},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000778 {0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x09,0x00,NANA,
779 NANA,NANA,0x07,0x50,NANA,NANA,NANA,NANA,NANA,NANA,
780 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
781 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
782 NANA,NANA,RSVD,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000783 0x00,0x00,
784 0x00,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000785 0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,
786 0x7f,NANA,NANA,NANA,NANA,0x00,0x00,0x02,0x00,0x99,
787 0x99,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,
788 0x00,0x00,0x7f,EOT}},
789 {EOT}}},
Uwe Hermannbbd337e2008-05-08 14:37:12 +0000790 {0x8718, "IT8718F", {
791 {NOLDN, NULL,
792 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
793 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
794 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
795 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
796 0x2a,0x2b,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
797 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,
798 0x42,0x43,0x44,0x45,0x50,0x51,0x52,0x53,0x54,0x56,
799 0x57,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,
800 0x62,0x63,0x64,0x65,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
801 0x70,0x71,0x72,0x73,0x74,0x75,0x80,0x81,0x82,0x83,
802 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,
803 0x92,0x94,0x95,0x96,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,
804 0xa6,EOT},
805 {0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
806 0x40,0x09,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x07,
807 0x50,MISC,MISC,MISC,NANA,NANA,NANA,NANA,NANA,NANA,
808 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
809 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
810 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
811 NANA,NANA,NANA,NANA,0x00,0x00,0x7f,0x7f,0x7f,0x00,
812 0x00,0x90,0x00,0x12,0x00,0x00,0x00,0x00,0x7f,0x7f,
813 0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,0x7f,
814 0x7f,0x7f,0x7f,0x00,0x00,0x7f,NANA,NANA,NANA,NANA,
815 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xff,0x00,
816 0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
817 0x00,EOT}},
818 {EOT}}},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000819 {EOT}
820};
821
Urja Rannikko38204a22008-10-23 23:33:18 +0000822/* Works for: IT8661F/IT8770F */
823static const uint8_t initkey_it8661f[][4] = {
824 {0x86, 0x61, 0x55, 0x55}, /* 0x3f0 */
825 {0x86, 0x61, 0x55, 0xaa}, /* 0x3bd */
826 {0x86, 0x61, 0xaa, 0x55}, /* 0x370 */
827};
828
829/* Works for: IT8671F/IT8687R, IT8673F */
830static const uint8_t initkey_it8671f[][4] = {
831 {0x86, 0x80, 0x55, 0x55}, /* 0x3f0 */
832 {0x86, 0x80, 0x55, 0xaa}, /* 0x3bd */
833 {0x86, 0x80, 0xaa, 0x55}, /* 0x370 */
834};
835
836/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
837static const uint8_t initkey_mbpnp[] = {
838 0x6a, 0xb5, 0xda, 0xed, 0xf6, 0xfb, 0x7d, 0xbe, 0xdf, 0x6f, 0x37,
839 0x1b, 0x0d, 0x86, 0xc3, 0x61, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0x45,
840 0xa2, 0xd1, 0xe8, 0x74, 0x3a, 0x9d, 0xce, 0xe7, 0x73, 0x39,
841};
842
843/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
844static void enter_conf_mode_ite_legacy(uint16_t port, const uint8_t init[][4])
845{
846 int i, idx;
847
848 /* Determine Super I/O config port. */
849 idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
850 for (i = 0; i < 4; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000851 OUTB(init[idx][i], ISA_PNP_ADDR);
Urja Rannikko38204a22008-10-23 23:33:18 +0000852
853 /* Sequentially write the 32 MB PnP init values. */
854 for (i = 0; i < 32; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000855 OUTB(initkey_mbpnp[i], port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000856}
857
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000858static void enter_conf_mode_ite(uint16_t port)
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000859{
Andriy Gaponb64aa602008-10-28 22:13:38 +0000860 OUTB(0x87, port);
861 OUTB(0x01, port);
862 OUTB(0x55, port);
863 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000864}
865
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000866static void enter_conf_mode_ite_it8502e(uint16_t port)
867{
868 OUTB(0x85, port);
869 OUTB(0x02, port);
870 OUTB(0x55, port);
871 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
872}
873
Uwe Hermannebb73f22008-11-12 19:08:58 +0000874static void enter_conf_mode_ite_it8761e(uint16_t port)
875{
876 OUTB(0x87, port);
877 OUTB(0x61, port);
878 OUTB(0x55, port);
879 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
880}
881
882static void enter_conf_mode_ite_it8228e(uint16_t port)
883{
884 OUTB(0x82, port);
885 OUTB(0x28, port);
886 OUTB(0x55, port);
887 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
888}
889
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000890static void exit_conf_mode_ite(uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000891{
892 regwrite(port, 0x02, 0x02);
893}
894
Stefan Reinauerd7ce71d2010-12-30 16:57:58 +0000895static int chip_found_at_port;
896
Uwe Hermannafe83092007-09-28 15:45:43 +0000897static void probe_idregs_ite_helper(const char *init, uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000898{
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000899 uint16_t id, chipver, ecport;
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000900
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000901 probing_for("ITE", init, port);
902
Uwe Hermann07024692007-09-20 22:13:48 +0000903 id = regval(port, CHIP_ID_BYTE1_REG) << 8;
904 id |= regval(port, CHIP_ID_BYTE2_REG);
905 chipver = regval(port, CHIP_VERSION_REG) & 0x0f; /* Only bits 3..0 */
906
907 if (superio_unknown(reg_table, id)) {
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000908 if (verbose)
909 printf(NOTFOUND "id=0x%04x, rev=0x%01x\n", id, chipver);
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000910 return;
911 }
912
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000913 printf("Found ITE %s (id=0x%04x, rev=0x%01x) at 0x%x\n",
Uwe Hermann07024692007-09-20 22:13:48 +0000914 get_superio_name(reg_table, id), id, chipver, port);
Uwe Hermanne9d46162007-10-07 20:01:23 +0000915 chip_found = 1;
Stefan Reinauerd7ce71d2010-12-30 16:57:58 +0000916 chip_found_at_port = 1;
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000917
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000918 dump_superio("ITE", reg_table, port, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000919
920 if (extra_dump) {
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000921 regwrite(port, LDN_SEL, 0x04); /* Select LDN 4 (EC). */
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000922
923 /* Get EC base address (stored in LDN 4, index 0x60/0x61). */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000924 ecport = regval(port, 0x60) << 8;
925 ecport |= regval(port, 0x61);
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000926
927 /* EC address register = EC base address + 5. */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000928 ecport += 5;
929
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000930 printf("Environment controller (0x%04x)\n", ecport);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000931 dump_superio("ITE-EC", ec_table, ecport, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000932 }
Uwe Hermannb4db2202007-09-20 23:37:56 +0000933}
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000934
Uwe Hermannb4db2202007-09-20 23:37:56 +0000935void probe_idregs_ite(uint16_t port)
936{
Stefan Reinauerd7ce71d2010-12-30 16:57:58 +0000937 chip_found_at_port = 0;
938
Urja Rannikko38204a22008-10-23 23:33:18 +0000939 if (port == 0x3f0 || port == 0x3bd || port == 0x370) {
940 enter_conf_mode_ite_legacy(port, initkey_it8661f);
941 probe_idregs_ite_helper("(init=legacy/it8661f) ", port);
942 exit_conf_mode_ite(port);
Uwe Hermannc55bcde2011-06-09 20:56:29 +0200943 if (chip_found_at_port)
944 return;
Uwe Hermannb4db2202007-09-20 23:37:56 +0000945
Urja Rannikko38204a22008-10-23 23:33:18 +0000946 enter_conf_mode_ite_legacy(port, initkey_it8671f);
947 probe_idregs_ite_helper("(init=legacy/it8671f) ", port);
948 exit_conf_mode_ite(port);
Uwe Hermannc55bcde2011-06-09 20:56:29 +0200949 if (chip_found_at_port)
950 return;
Urja Rannikko38204a22008-10-23 23:33:18 +0000951 } else {
952 enter_conf_mode_ite(port);
Uwe Hermannebb73f22008-11-12 19:08:58 +0000953 probe_idregs_ite_helper("(init=standard) ", port);
954 exit_conf_mode_ite(port);
Uwe Hermannc55bcde2011-06-09 20:56:29 +0200955 if (chip_found_at_port)
956 return;
Uwe Hermannebb73f22008-11-12 19:08:58 +0000957
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000958 enter_conf_mode_ite_it8502e(port);
959 probe_idregs_ite_helper("(init=it8502e) ", port);
960 exit_conf_mode_ite(port);
Uwe Hermannc55bcde2011-06-09 20:56:29 +0200961 if (chip_found_at_port)
962 return;
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000963
Uwe Hermannebb73f22008-11-12 19:08:58 +0000964 enter_conf_mode_ite_it8761e(port);
965 probe_idregs_ite_helper("(init=it8761e) ", port);
966 exit_conf_mode_ite(port);
Uwe Hermannc55bcde2011-06-09 20:56:29 +0200967 if (chip_found_at_port)
968 return;
Uwe Hermannebb73f22008-11-12 19:08:58 +0000969
970 enter_conf_mode_ite_it8228e(port);
971 probe_idregs_ite_helper("(init=it8228e) ", port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000972 exit_conf_mode_ite(port);
Uwe Hermannc55bcde2011-06-09 20:56:29 +0200973 if (chip_found_at_port)
974 return;
Urja Rannikko38204a22008-10-23 23:33:18 +0000975
976 enter_conf_mode_winbond_fintek_ite_8787(port);
977 probe_idregs_ite_helper("(init=0x87,0x87) ", port);
978 exit_conf_mode_winbond_fintek_ite_8787(port);
Uwe Hermannc55bcde2011-06-09 20:56:29 +0200979 if (chip_found_at_port)
980 return;
Urja Rannikko38204a22008-10-23 23:33:18 +0000981 }
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000982}
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000983
984void print_ite_chips(void)
985{
986 print_vendor_chips("ITE", reg_table);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000987 print_vendor_chips("ITE-EC", ec_table);
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000988}