Adds id for ITE IT8707F to superiotool.
[coreboot.git] / util / superiotool / ite.c
1 /*
2  * This file is part of the superiotool project.
3  *
4  * Copyright (C) 2007 Carl-Daniel Hailfinger
5  * Copyright (C) 2007-2008 Uwe Hermann <uwe@hermann-uwe.de>
6  *
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
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
28
29 static const struct superio_registers reg_table[] = {
30         {0x8228, "IT8228E", {
31                 {EOT}}},
32         {0x8502, "IT8502E/TE/G", {
33                 {NOLDN, NULL,
34                         {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
35                          0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
36                         {0x85,0x02,0x71,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
37                          NANA,NANA,NANA,0x00,NANA,EOT}},
38                 {0x1, "UART1",
39                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
40                         {0x00,0x03,0xf8,0x00,0x00,0x04,0x02,0x00,EOT}},
41                 {0x4, "System Wake-Up",
42                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
43                         {0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,EOT}},
44                 {0x5, "Mouse",
45                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
46                         {0x01,0x00,0x00,0x00,0x00,0x0C,0x01,NANA,EOT}},
47                 {0x6, "Keyboard",
48                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
49                         {0x01,0x00,0x60,0x00,0x64,0x01,0x01,NANA,EOT}},
50                 {0xf, "Shared Memory/Flash",
51                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
52                         0xf6,EOT},
53                         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
54                         0x00,EOT}},
55                 {0x10, "BRAM",
56                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf3,0xf4,
57                         0xf5,EOT},
58                         {0x00,0x00,0x70,0x00,0x72,0x08,0x01,NANA,NANA,
59                         NANA,EOT}},
60                 {0x11, "Power Channel 1",
61                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
62
63                         {0x00,0x00,0x62,0x00,0x66,0x01,0x01,EOT}},
64                 {0x12, "Power Channel 2",
65                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
66                         {0x00,0x00,0x68,0x00,0x6c,0x01,0x01,EOT}},
67                 {0x17, "Power Channel 3",
68                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
69                         {0x00,0x00,0x6a,0x00,0x6e,0x01,0x01,EOT}},
70                 {EOT}}},
71         {0x8510, "IT8510E/TE/G", {
72                 {EOT}}},
73         {0x8511, "IT8511E/TE/G", {
74                 {NOLDN, NULL,
75                         {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
76                          0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
77                         {0x85,0x11,0x10,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
78                          NANA,NANA,NANA,0x00,NANA,EOT}},
79                 {0x4, "System Wake-Up",
80                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
81                         {0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,EOT}},
82                 {0x5, "Mouse",
83                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
84                         {0x01,0x00,0x00,0x00,0x00,0x0C,0x03,NANA,EOT}},
85                 {0x6, "Keyboard",
86                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
87                         {0x01,0x00,0x60,0x00,0x64,0x01,0x03,NANA,EOT}},
88                 {0xf, "Shared Memory/Flash",
89                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
90                         0xf6,EOT},
91                         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
92                         0x00,EOT}},
93                 {0x10, "Real-Time Clock",
94                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,0xf1,
95                         0xf2,0xf3,0xf4,0xf5,EOT},
96                         {0x00,0x00,0x70,0x00,0x72,0x08,0x00,0x00,0x49,
97                         0x4A,NANA,NANA,NANA,EOT}},
98                 {0x11, "Power Channel 1",
99                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
100                         {0x00,0x00,0x62,0x00,0x66,0x01,0x03,EOT}},
101                 {0x12, "Power Channel 2",
102                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
103                         {0x00,0x00,0x68,0x00,0x6c,0x01,0x03,EOT}},
104                 {EOT}}},
105         {0x8512, "IT8512E/F/G", {
106                 {NOLDN, NULL,
107                         {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
108                          0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
109                         {0x85,0x12,0x22,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
110                          NANA,NANA,NANA,0x00,NANA,EOT}},
111                 {0x4, "System Wake-Up",
112                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
113                         {0x00,0x00,0x00,0x00,0x00,0x00,0x03,EOT}},
114                 {0x5, "Mouse",
115                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
116                         {0x00,0x00,0x00,0x00,0x00,0x0C,0x03,NANA,EOT}},
117                 {0x6, "Keyboard",
118                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
119                         {0x00,0x00,0x60,0x00,0x64,0x01,0x03,NANA,EOT}},
120                 {0xf, "Shared Memory/Flash",
121                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
122                         0xf6,EOT},
123                         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
124                         0x00,EOT}},
125                 {0x10, "BRAM",
126                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf3,0xf4,
127                         0xf5,EOT},
128                         {0x00,0x00,0x70,0x00,0x72,0x08,0x00,NANA,NANA,
129                         NANA,EOT}},
130                 {0x11, "Power Channel 1",
131                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
132                         {0x00,0x00,0x62,0x00,0x66,0x01,0x03,EOT}},
133                 {0x12, "Power Channel 2",
134                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
135                         {0x00,0x00,0x68,0x00,0x6c,0x01,0x03,EOT}},
136                 {EOT}}},
137         {0x8513, "IT8513E/F/G", {
138                 {EOT}}},
139         {0x8661, "IT8661F/IT8770F", {
140                 {NOLDN, NULL,
141                         {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
142                          0x23,0x24,EOT},
143                         {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x61,0x00,
144                          0x00,0x00,EOT}},
145                 {0x0, "Floppy",
146                         {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
147                         {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
148                 {0x1, "COM1",
149                         {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
150                         {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
151                 {0x2, "COM2",
152                         {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
153                         {0x00,0x00,0x02,0xf8,0x03,0x02,0x00,EOT}},
154                 {0x3, "Parallel port",
155                         {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
156                          0xf0,EOT},
157                         {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
158                          0x03,EOT}},
159                 {0x4, "IR",
160                         {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
161                          0x74,0x75,0xf0,EOT},
162                         {0x00,0x00,0x02,0xe8,0x03,0x00,0x0a,0x02,0x0b,0x02,
163                          0x01,0x00,0x00,EOT}},
164                 {0x5, "GPIO",
165                         {0x25,0x26,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
166                          0x70,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,
167                          0xf9,0xfa,0xfb,0xfc,EOT},
168                         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
169                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
170                          0x00,0x00,0x00,0x00,EOT}},
171                 {EOT}}},
172         {0x8673, "IT8673F", {
173                 {EOT}}},
174         {0x8681, "IT8671F/IT8687R", {
175                 {NOLDN, NULL,
176                         {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
177                          0x23,0x24,0x25,0x26,0x2e,0x2f,EOT},
178                         {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x81,0x00,
179                          0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
180                 {0x0, "Floppy",
181                         {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
182                         {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
183                 {0x1, "COM1",
184                         {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
185                         {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
186                 {0x2, "COM2",
187                         {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
188                          0x74,0x75,0xf0,0xf1,EOT},
189                         {0x00,0x00,0x02,0xf8,0x03,0x00,0x03,0x02,0x0a,0x02,
190                          0x00,0x01,0x00,0x00,EOT}},
191                 {0x3, "Parallel port",
192                         {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
193                          0xf0,EOT},
194                         {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
195                          0x03,EOT}},
196                 {0x4, "APC",
197                         {0x30,0xf0,0xf1,0xf2,0xf4,0xf5,0xf6,EOT},
198                         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
199                 {0x5, "Keyboard",
200                         {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
201                         {MISC,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
202                 {0x6, "Mouse",
203                         {0x30,0x70,0x71,0xf0,EOT},
204                         {0x00,0x0c,0x02,0x00,EOT}},
205                 {0x7, "GPIO",
206                         {0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,
207                          0x70,0x71,0x72,0x73,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,
208                          0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff,
209                          0xe0,0xe1,0xe2,0xe3,0xe4,EOT},
210                         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
211                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
212                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
213                          0x00,0x00,0x00,0x00,0x00,EOT}},
214                 {EOT}}},
215         {0x8701, "IT8703F", {
216                 {NOLDN, NULL,
217                         {0x20,0x21,0x23,0x24,0x26,0x29,0x2a,0x2b,EOT},
218                         {0x87,0x00,0x00,0x80,0x00,0x00,0x7c,0xc0,EOT}},
219                 {0x0, "Floppy",
220                         {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
221                          0xf5,EOT},
222                         {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
223                          0x00,EOT}},
224                 {0x1, "Parallel port",
225                         {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
226                         {0x00,0x03,0x78,0x00,0x80,0x07,0x03,0x03,EOT}},
227                 {0x2, "COM1",
228                         {0x30,0x60,0x61,0x70,0xf0,EOT},
229                         {0x00,0x03,0xf8,0x04,0x00,EOT}},
230                 {0x3, "COM2",
231                         {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
232                         {0x00,0x02,0xf8,0x03,0x00,0x00,0x00,0x7f,EOT}},
233                 {0x5, "Keyboard",
234                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
235                         {0x01,0x00,0x60,0x00,0x64,0x01,0x0c,0x80,EOT}},
236                 {0x6, "Consumer IR",
237                         {0x30,0x60,0x61,0x70,EOT},
238                         {0x00,0x00,0x00,0x00,EOT}},
239                 {0x7, "Game port, MIDI, GPIO set 1",
240                         {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,EOT},
241                         {0x00,0x02,0x01,0x03,0x30,0x00,0xff,0x00,0x00,EOT}},
242                 {0x8, "GPIO set 2",
243                         {0x30,0xf0,0xf1,0xf2,0xf3,0xf5,EOT},
244                         {0x00,0xff,0x00,0x00,0x00,0x00,EOT}},
245                 {0x9, "GPIO set 3 and 4",
246                         {0x30,0x60,0x61,0xf0,0xf1,0xf2,0xf3,0xf4,EOT},
247                         {0x00,0x02,0x90,0xff,0x00,0x00,0x00,0x00,EOT}},
248                 {0xa, "ACPI",
249                         {0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
250                          0xf3,0xf4,0xf6,0xf7,0xf9,EOT},
251                         {0x00,0x00,0x00,0x00,NANA,NANA,0x00,0x00,0x00,0x00,
252                          NANA,NANA,0x00,0x00,0x00,EOT}},
253                 {0xc, "GPIO set 5, 6 and 7",
254                         {0x30,0x60,0x61,0xf0,0xf3,0xf6,EOT},
255                         {0x00,0x03,0x70,0x00,0xff,0xff,EOT}},
256                 {EOT}}},
257         {0x8702, "IT8702F", {
258                 {EOT}}},
259         {0x8705, "IT8705F/AF / IT8700F", {
260                 {NOLDN, NULL,
261                         {0x20,0x21,0x22,0x23,0x24,EOT},
262                         {0x87,0x05,0x00,0x00,NANA,EOT}},
263                 {0x0, "Floppy",
264                         {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
265                         {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
266                 {0x1, "COM1",
267                         {0x30,0x60,0x61,0x70,0xf0,EOT},
268                         {0x00,0x03,0xf8,0x04,0x00,EOT}},
269                 {0x2, "COM2",
270                         {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
271                         {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
272                 {0x3, "Parallel port",
273                         {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
274                          0xf0,EOT},
275                         {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
276                          0x03,EOT}},
277                 {0x4, "Environment controller",
278                         {0x2b,0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,
279                          0xf3,0xf4,0xf5,0xf6,EOT},
280                         {0x00,0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,
281                          0x00,0x00,NANA,NANA,EOT}},
282                 {0x5, "GPIO",
283                         {0x25,0x26,0x27,0x28,0x29,0x2a,0x60,0x61,0x62,0x63,
284                          0x64,0x65,0x70,0x71,0x72,0xb0,0xb1,0xb2,0xb3,0xb4,
285                          0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,
286                          0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xd0,
287                          0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd8,0xd9,0xda,0xf0,
288                          0xf1,0xf2,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,
289                          0xfd,0xfe,0xff,EOT},
290                         {0x00,0x00,0x00,0xff,0xe0,0xff,0x00,0x00,0x00,0x00,
291                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
292                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
293                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
294                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
295                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
296                          0x00,NANA,0x00,EOT}},
297                 {0x6, "Game port",
298                         {0x30,0x60,0x61,EOT},
299                         {0x00,0x02,0x01,EOT}},
300                 {0x7, "Consumer IR",
301                         {0x30,0x60,0x61,0x70,0xf0,EOT},
302                         {0x00,0x03,0x10,0x0b,0x00,EOT}},
303                 {0x8, "MIDI port",
304                         {0x30,0x60,0x61,0x70,0xf0,EOT},
305                         {0x00,0x03,0x00,0x0a,0x00,EOT}},
306                 {EOT}}},
307         {0x8706, "IT8706R", {   /* TODO: Not yet in sensors-detect */
308                 /* This is a "Special General Purpose I/O chip". */
309                 {EOT}}},
310         {0x8707, "IT8707F", {
311                 {EOT}}},
312         {0x8708, "IT8708F", {
313                 {NOLDN, NULL,
314                         {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
315                          0x2a,0x2e,0x2f,EOT},
316                         {0x87,0x08,0x00,0x00,NANA,0x3f,0x00,0xff,0xff,0xff,
317                          0xff,0x00,0x00,EOT}},
318                 {0x0, "Floppy",
319                         {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
320                         {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
321                 {0x1, "COM1",
322                         {0x30,0x60,0x61,0x70,0xf0,EOT},
323                         {0x00,0x03,0xf8,0x04,0x00,EOT}},
324                 {0x2, "COM2",
325                         {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
326                         {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
327                 {0x3, "Parallel port",
328                         {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
329                          0xf0,EOT},
330                         {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
331                          0x03,EOT}},
332                 {0x4, "SWC",
333                         {0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
334                          0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
335                         {NANA,NANA,0x00,0x00,0x00,0x00,0x00,0x00,
336                          0x00,0x00,0x00,0x00,0x00,NANA,NANA,EOT}},
337                 {0x5, "Keyboard",
338                         /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
339                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
340                         {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
341                 {0x6, "Mouse",
342                         {0x30,0x70,0x71,0xf0,EOT},
343                         {0x00,0x0c,0x02,0x00,EOT}},
344                 {0x7, "GPIO",
345                         {0x70,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,
346                          0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,
347                          0xc9,0xca,0xcb,0xcc,0xcd,0xd0,0xd1,0xd2,0xd3,0xd4,
348                          0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xf0,0xf1,
349                          0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
350                          0xfc,EOT},
351                         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
352                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
353                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
354                          0x00,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x00,
355                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,
356                          0x00,EOT}},
357                 {0x8, "Game port",
358                         {0x30,0x60,0x61,EOT},
359                         {0x00,0x02,0x01,EOT}},
360                 {0x9, "Consumer IR",
361                         {0x30,0x60,0x61,0x70,0xf0,EOT},
362                         {0x00,0x03,0x10,0x0b,0x00,EOT}},
363                 {0xa, "MIDI port",
364                         {0x30,0x60,0x61,0x70,0xf0,EOT},
365                         {0x00,0x03,0x00,0x0a,0x00,EOT}},
366                 {EOT}}},
367         {0x8710, "IT8710F", {   /* TODO: Not yet in sensors-detect */
368                 {EOT}}},
369         {0x8711, "IT8711F", {   /* 0x8711 is a guess, not found in datasheet. */
370                 {EOT}}},
371         {0x8712, "IT8712F", {
372                 {NOLDN, NULL,
373                         {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
374                         {0x87,0x12,0x08,0x00,0x00,0x00,EOT}},
375                 {0x0, "Floppy",
376                         {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
377                         {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
378                 {0x1, "COM1",
379                         {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
380                         {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
381                 {0x2, "COM2",
382                         {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
383                         {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
384                 {0x3, "Parallel port",
385                         {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
386                         {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
387                 {0x4, "Environment controller",
388                         {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
389                          0xf4,0xf5,0xf6,EOT},
390                         {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
391                          0x00,NANA,NANA,EOT}},
392                 {0x5, "Keyboard",
393                         /* TODO: 0xf0: Error in datasheet? */
394                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
395                         {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
396                 {0x6, "Mouse",
397                         {0x30,0x70,0x71,0xf0,EOT},
398                         {0x00,0x0c,0x02,0x00,EOT}},
399                 {0x7, "GPIO", /* TODO: 0x72, 0x73: Errors in datasheet? */
400                         {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
401                          0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
402                          0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
403                          0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
404                          0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
405                          0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
406                         {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
407                          0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
408                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
409                          0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
410                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
411                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
412                 {0x8, "MIDI port",
413                         {0x30,0x60,0x61,0x70,0xf0,EOT},
414                         {0x00,0x03,0x00,0x0a,0x00,EOT}},
415                 {0x9, "Game port",
416                         {0x30,0x60,0x61,EOT},
417                         {0x00,0x02,0x01,EOT}},
418                 {0xa, "Consumer IR",
419                         {0x30,0x60,0x61,0x70,0xf0,EOT},
420                         {0x00,0x03,0x10,0x0b,0x00,EOT}},
421                 {EOT}}},
422         {0x8716, "IT8716F", {
423                 {NOLDN, NULL,
424                         {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
425                         {0x87,0x16,0x01,0x00,0x00,0x00,EOT}},
426                 {0x0, "Floppy",
427                         {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
428                         {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
429                 {0x1, "COM1",
430                         {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
431                         {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
432                 {0x2, "COM2",
433                         {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
434                         {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
435                 {0x3, "Parallel port",
436                         {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
437                         {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
438                 {0x4, "Environment controller",
439                         {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
440                          0xf4,0xf5,0xf6,EOT},
441                         {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
442                          0x00,NANA,NANA,EOT}},
443                 {0x5, "Keyboard",
444                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
445                         {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
446                 {0x6, "Mouse",
447                         {0x30,0x70,0x71,0xf0,EOT},
448                         {0x00,0x0c,0x02,0x00,EOT}},
449                 {0x7, "GPIO",
450                         {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
451                          0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
452                          0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
453                          0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
454                          0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
455                          0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
456                         {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
457                          0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
458                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
459                          0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
460                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
461                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
462                 {0x8, "MIDI port",
463                         {0x30,0x60,0x61,0x70,0xf0,EOT},
464                         {0x00,0x03,0x00,0x0a,0x00,EOT}},
465                 {0x9, "Game port",
466                         {0x30,0x60,0x61,EOT},
467                         {0x00,0x02,0x01,EOT}},
468                 {0xa, "Consumer IR",
469                         {0x30,0x60,0x61,0x70,0xf0,EOT},
470                         {0x00,0x03,0x10,0x0b,0x00,EOT}},
471                 {EOT}}},
472         {0x8718, "IT8718F", {
473                 {NOLDN, NULL,
474                         {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
475                         {0x87,0x18,0x01,0x00,0x00,0x00,EOT}},
476                 {0x0, "Floppy",
477                         {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
478                         {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
479                 {0x1, "COM1",
480                         {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
481                         {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
482                 {0x2, "COM2",
483                         {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
484                         {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
485                 {0x3, "Parallel port",
486                         {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
487                         {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
488                 {0x4, "Environment controller",
489                         {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
490                          0xf4,0xf5,0xf6,EOT},
491                         {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
492                          0x00,NANA,NANA,EOT}},
493                 {0x5, "Keyboard",
494                         /* 0xf0: Datasheet page 33: 0x00; page 56: 0x08. */
495                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
496                         {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
497                 {0x6, "Mouse",
498                         {0x30,0x70,0x71,0xf0,EOT},
499                         {0x00,0x0c,0x02,0x00,EOT}},
500                 {0x7, "GPIO",
501                         /* 0x2c: Datasheet page 30: 0x00; page 43: 0x1f. */
502                         {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
503                          0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
504                          0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
505                          0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,
506                          0xcc,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xf0,
507                          0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,
508                          0xfb,0xfc,0xfd,0xfe,0xff,EOT},
509                         {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
510                          0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
511                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
512                          0x01,0x00,0x00,0x40,0x00,0x00,0x01,0x00,0x00,0x40,
513                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
514                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
515                          0x00,NANA,0x00,0x00,0x00,EOT}},
516                 {0xa, "Consumer IR",
517                         {0x30,0x60,0x61,0x70,0xf0,EOT},
518                         {0x00,0x03,0x10,0x0b,0x00,EOT}},
519                 {EOT}}},
520         {0x8720, "IT8720F", {   /* From sensors-detect */
521                 {EOT}}},
522         {0x8722, "IT8722F", {
523                 {EOT}}},
524         {0x8726, "IT8726F", {
525                 /* Datasheet wrongly says that the ID is 0x8716. */
526                 {NOLDN, NULL,
527                         {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
528                         {0x87,0x26,0x01,0x00,MISC,0x00,EOT}},
529                 {0x0, "Floppy",
530                         {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
531                         {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
532                 {0x1, "COM1",
533                         {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
534                         {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
535                 {0x2, "COM2",
536                         {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
537                         {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
538                 {0x3, "Parallel port",
539                         {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
540                         {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
541                 {0x4, "Environment controller",
542                         {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
543                          0xf4,0xf5,0xf6,EOT},
544                         {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
545                          0x00,MISC,MISC,EOT}},
546                 {0x5, "Keyboard",
547                         /* 0xf0: Datasheet page 35: 0x00; page 59: 0x08. */
548                         {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
549                         {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
550                 {0x6, "Mouse",
551                         {0x30,0x70,0x71,0xf0,EOT},
552                         {0x00,0x0c,0x02,0x00,EOT}},
553                 {0x7, "GPIO",
554                         /* 0x2c: Datasheet page 33: 0x00; page 45: 0x1f. */
555                         {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
556                          0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
557                          0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
558                          0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
559                          0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
560                          0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
561                         {0x01,0x00,0x00,0x40,0x00,0x00,0x1f,0x00,0x00,0x00,
562                          0x00,0x00,0x00,0x00,0x00,MISC,0x38,0x00,0x00,0x00,
563                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
564                          0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
565                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
566                          0x00,0x00,0x00,0x00,0x00,0x00,0x00,MISC,0x00,EOT}},
567                 {0x8, "MIDI port",
568                         {0x30,0x60,0x61,0x70,0xf0,EOT},
569                         {0x00,0x03,0x00,0x0a,0x00,EOT}},
570                 {0x9, "Game port",
571                         {0x30,0x60,0x61,EOT},
572                         {0x00,0x02,0x01,EOT}},
573                 {0xa, "Consumer IR",
574                         {0x30,0x60,0x61,0x70,0xf0,EOT},
575                         {0x00,0x03,0x10,0x0b,0x00,EOT}},
576                 {EOT}}},
577         {0x8761, "IT8761E", {
578                 {EOT}}},
579         {0x8780, "IT8780F", {
580                 {EOT}}},
581         {EOT}
582 };
583
584 static const struct superio_registers ec_table[] = {
585         {0x8716, "IT8716F", {
586                 {NOLDN, NULL,
587                         {0x00,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x10,
588                          0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x1b,0x1c,0x1d,
589                          0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
590                          0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,
591                          0x44,0x45,0x48,0x50,0x51,0x52,0x53,0x54,0x56,0x57,
592                          0x59,0x5c,
593                          0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x68,
594                          0x69,0x6a,0x6b,0x6c,0x6d,0x70,0x71,0x72,0x73,0x74,
595                          0x75,0x84,0x85,0x86,0x87,0x88,0x89,0x8c,0x8d,0x8e,
596                          0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x98,0x99,0x9a,
597                          0x9b,0x9c,0x9d,EOT},
598                         {0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x09,0x00,NANA,
599                          NANA,NANA,0x07,0x50,NANA,NANA,NANA,NANA,NANA,NANA,
600                          NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
601                          NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
602                          NANA,NANA,RSVD,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,
603                          0x00,0x00,
604                          0x00,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,
605                          0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,
606                          0x7f,NANA,NANA,NANA,NANA,0x00,0x00,0x02,0x00,0x99,
607                          0x99,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,
608                          0x00,0x00,0x7f,EOT}},
609                 {EOT}}},
610         {0x8718, "IT8718F", {
611                 {NOLDN, NULL,
612                         {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
613                          0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
614                          0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
615                          0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
616                          0x2a,0x2b,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
617                          0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,
618                          0x42,0x43,0x44,0x45,0x50,0x51,0x52,0x53,0x54,0x56,
619                          0x57,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,
620                          0x62,0x63,0x64,0x65,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
621                          0x70,0x71,0x72,0x73,0x74,0x75,0x80,0x81,0x82,0x83,
622                          0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,
623                          0x92,0x94,0x95,0x96,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,
624                          0xa6,EOT},
625                         {0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
626                          0x40,0x09,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x07,
627                          0x50,MISC,MISC,MISC,NANA,NANA,NANA,NANA,NANA,NANA,
628                          NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
629                          NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
630                          NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
631                          NANA,NANA,NANA,NANA,0x00,0x00,0x7f,0x7f,0x7f,0x00,
632                          0x00,0x90,0x00,0x12,0x00,0x00,0x00,0x00,0x7f,0x7f,
633                          0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,0x7f,
634                          0x7f,0x7f,0x7f,0x00,0x00,0x7f,NANA,NANA,NANA,NANA,
635                          0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xff,0x00,
636                          0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
637                          0x00,EOT}},
638                 {EOT}}},
639         {EOT}
640 };
641
642 /* Works for: IT8661F/IT8770F */
643 static const uint8_t initkey_it8661f[][4] = {
644         {0x86, 0x61, 0x55, 0x55},       /* 0x3f0 */
645         {0x86, 0x61, 0x55, 0xaa},       /* 0x3bd */
646         {0x86, 0x61, 0xaa, 0x55},       /* 0x370 */
647 };
648
649 /* Works for: IT8671F/IT8687R, IT8673F */
650 static const uint8_t initkey_it8671f[][4] = {
651         {0x86, 0x80, 0x55, 0x55},       /* 0x3f0 */
652         {0x86, 0x80, 0x55, 0xaa},       /* 0x3bd */
653         {0x86, 0x80, 0xaa, 0x55},       /* 0x370 */
654 };
655
656 /* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
657 static const uint8_t initkey_mbpnp[] = {
658         0x6a, 0xb5, 0xda, 0xed, 0xf6, 0xfb, 0x7d, 0xbe, 0xdf, 0x6f, 0x37,
659         0x1b, 0x0d, 0x86, 0xc3, 0x61, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0x45,
660         0xa2, 0xd1, 0xe8, 0x74, 0x3a, 0x9d, 0xce, 0xe7, 0x73, 0x39,
661 };
662
663 /* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
664 static void enter_conf_mode_ite_legacy(uint16_t port, const uint8_t init[][4])
665 {
666         int i, idx;
667
668         /* Determine Super I/O config port. */
669         idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
670         for (i = 0; i < 4; i++)
671                 OUTB(init[idx][i], ISA_PNP_ADDR);
672
673         /* Sequentially write the 32 MB PnP init values. */
674         for (i = 0; i < 32; i++)
675                 OUTB(initkey_mbpnp[i], port);
676 }
677
678 static void enter_conf_mode_ite(uint16_t port)
679 {
680         OUTB(0x87, port);
681         OUTB(0x01, port);
682         OUTB(0x55, port);
683         OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
684 }
685
686 static void enter_conf_mode_ite_it8502e(uint16_t port)
687 {
688         OUTB(0x85, port);
689         OUTB(0x02, port);
690         OUTB(0x55, port);
691         OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
692 }
693
694 static void enter_conf_mode_ite_it8761e(uint16_t port)
695 {
696         OUTB(0x87, port);
697         OUTB(0x61, port);
698         OUTB(0x55, port);
699         OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
700 }
701
702 static void enter_conf_mode_ite_it8228e(uint16_t port)
703 {
704         OUTB(0x82, port);
705         OUTB(0x28, port);
706         OUTB(0x55, port);
707         OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
708 }
709
710 static void exit_conf_mode_ite(uint16_t port)
711 {
712         regwrite(port, 0x02, 0x02);
713 }
714
715 static void probe_idregs_ite_helper(const char *init, uint16_t port)
716 {
717         uint16_t id, chipver, ecport;
718
719         probing_for("ITE", init, port);
720
721         id = regval(port, CHIP_ID_BYTE1_REG) << 8;
722         id |= regval(port, CHIP_ID_BYTE2_REG);
723         chipver = regval(port, CHIP_VERSION_REG) & 0x0f; /* Only bits 3..0 */
724
725         if (superio_unknown(reg_table, id)) {
726                 if (verbose)
727                         printf(NOTFOUND "id=0x%04x, rev=0x%01x\n", id, chipver);
728                 return;
729         }
730
731         printf("Found ITE %s (id=0x%04x, rev=0x%01x) at 0x%x\n",
732                get_superio_name(reg_table, id), id, chipver, port);
733         chip_found = 1;
734
735         dump_superio("ITE", reg_table, port, id, LDN_SEL);
736
737         if (extra_dump) {
738                 regwrite(port, LDN_SEL, 0x04); /* Select LDN 4 (EC). */
739
740                 /* Get EC base address (stored in LDN 4, index 0x60/0x61). */
741                 ecport = regval(port, 0x60) << 8;
742                 ecport |= regval(port, 0x61);
743
744                 /* EC address register = EC base address + 5. */
745                 ecport += 5;
746
747                 printf("Environment controller (0x%04x)\n", ecport);
748                 dump_superio("ITE-EC", ec_table, ecport, id, LDN_SEL);
749         }
750 }
751
752 void probe_idregs_ite(uint16_t port)
753 {
754         if (port == 0x3f0 || port == 0x3bd || port == 0x370) {
755                 enter_conf_mode_ite_legacy(port, initkey_it8661f);
756                 probe_idregs_ite_helper("(init=legacy/it8661f) ", port);
757                 exit_conf_mode_ite(port);
758
759                 enter_conf_mode_ite_legacy(port, initkey_it8671f);
760                 probe_idregs_ite_helper("(init=legacy/it8671f) ", port);
761                 exit_conf_mode_ite(port);
762         } else {
763                 enter_conf_mode_ite(port);
764                 probe_idregs_ite_helper("(init=standard) ", port);
765                 exit_conf_mode_ite(port);
766
767                 enter_conf_mode_ite_it8502e(port);
768                 probe_idregs_ite_helper("(init=it8502e) ", port);
769                 exit_conf_mode_ite(port);
770
771                 enter_conf_mode_ite_it8761e(port);
772                 probe_idregs_ite_helper("(init=it8761e) ", port);
773                 exit_conf_mode_ite(port);
774
775                 enter_conf_mode_ite_it8228e(port);
776                 probe_idregs_ite_helper("(init=it8228e) ", port);
777                 exit_conf_mode_ite(port);
778
779                 enter_conf_mode_winbond_fintek_ite_8787(port);
780                 probe_idregs_ite_helper("(init=0x87,0x87) ", port);
781                 exit_conf_mode_winbond_fintek_ite_8787(port);
782         }
783 }
784
785 void print_ite_chips(void)
786 {
787         print_vendor_chips("ITE", reg_table);
788         print_vendor_chips("ITE-EC", ec_table);
789 }