blob: cbee10d852eb3a3a61c63a07103186db4f26ea36 [file] [log] [blame]
Uwe Hermann0120e1a2007-09-16 18:11:03 +00001/*
Uwe Hermannafe83092007-09-28 15:45:43 +00002 * This file is part of the superiotool project.
Uwe Hermann0120e1a2007-09-16 18:11:03 +00003 *
4 * Copyright (C) 2007 Carl-Daniel Hailfinger
Uwe Hermannebb73f22008-11-12 19:08:58 +00005 * Copyright (C) 2007-2008 Uwe Hermann <uwe@hermann-uwe.de>
Uwe Hermann0120e1a2007-09-16 18:11:03 +00006 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22#include "superiotool.h"
23
Uwe Hermann07024692007-09-20 22:13:48 +000024#define CHIP_ID_BYTE1_REG 0x20
25#define CHIP_ID_BYTE2_REG 0x21
26#define CHIP_VERSION_REG 0x22
Urja Rannikko38204a22008-10-23 23:33:18 +000027#define ISA_PNP_ADDR 0x279
Uwe Hermann07024692007-09-20 22:13:48 +000028
Uwe Hermann246be7d2007-10-31 22:22:11 +000029static const struct superio_registers reg_table[] = {
Uwe Hermannebb73f22008-11-12 19:08:58 +000030 {0x8228, "IT8228E", {
31 {EOT}}},
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", {
98 {EOT}}},
99 {0x8511, "IT8511E/TE/G", {
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000100 {NOLDN, NULL,
101 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
102 0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
103 {0x85,0x11,0x10,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
104 NANA,NANA,NANA,0x00,NANA,EOT}},
105 {0x4, "System Wake-Up",
106 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
107 {0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,EOT}},
108 {0x5, "Mouse",
109 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
110 {0x01,0x00,0x00,0x00,0x00,0x0C,0x03,NANA,EOT}},
111 {0x6, "Keyboard",
112 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
113 {0x01,0x00,0x60,0x00,0x64,0x01,0x03,NANA,EOT}},
114 {0xf, "Shared Memory/Flash",
115 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
116 0xf6,EOT},
117 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
118 0x00,EOT}},
119 {0x10, "Real-Time Clock",
120 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,0xf1,
121 0xf2,0xf3,0xf4,0xf5,EOT},
122 {0x00,0x00,0x70,0x00,0x72,0x08,0x00,0x00,0x49,
123 0x4A,NANA,NANA,NANA,EOT}},
124 {0x11, "Power Channel 1",
125 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
126 {0x00,0x00,0x62,0x00,0x66,0x01,0x03,EOT}},
127 {0x12, "Power Channel 2",
128 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
129 {0x00,0x00,0x68,0x00,0x6c,0x01,0x03,EOT}},
Anders Juel Jensenb850eb82010-01-23 15:50:12 +0000130 {EOT}}},
Anton Kochkov7b5df5a2010-05-09 15:30:45 +0000131 {0x8512, "IT8512E/F/G", {
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000132 {NOLDN, NULL,
133 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
134 0x2A,0x2B,0x2C,0x2D,0x2E,EOT},
135 {0x85,0x12,0x22,0x01,NANA,0x00,0x00,NANA,NANA,NANA,
136 NANA,NANA,NANA,0x00,NANA,EOT}},
137 {0x4, "System Wake-Up",
138 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
139 {0x00,0x00,0x00,0x00,0x00,0x00,0x03,EOT}},
140 {0x5, "Mouse",
141 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
142 {0x00,0x00,0x00,0x00,0x00,0x0C,0x03,NANA,EOT}},
143 {0x6, "Keyboard",
144 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
145 {0x00,0x00,0x60,0x00,0x64,0x01,0x03,NANA,EOT}},
146 {0xf, "Shared Memory/Flash",
147 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf4,0xf5,
148 0xf6,EOT},
149 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
150 0x00,EOT}},
151 {0x10, "BRAM",
152 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf3,0xf4,
153 0xf5,EOT},
154 {0x00,0x00,0x70,0x00,0x72,0x08,0x00,NANA,NANA,
155 NANA,EOT}},
156 {0x11, "Power Channel 1",
157 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
158 {0x00,0x00,0x62,0x00,0x66,0x01,0x03,EOT}},
159 {0x12, "Power Channel 2",
160 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,EOT},
161 {0x00,0x00,0x68,0x00,0x6c,0x01,0x03,EOT}},
Anton Kochkov7b5df5a2010-05-09 15:30:45 +0000162 {EOT}}},
163 {0x8513, "IT8513E/F/G", {
164 {EOT}}},
Urja Rannikko38204a22008-10-23 23:33:18 +0000165 {0x8661, "IT8661F/IT8770F", {
Robinson P. Tryondc817692007-10-05 13:47:04 +0000166 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000167 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
168 0x23,0x24,EOT},
169 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x61,0x00,
170 0x00,0x00,EOT}},
Robinson P. Tryondc817692007-10-05 13:47:04 +0000171 {0x0, "Floppy",
172 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
173 {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
174 {0x1, "COM1",
175 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
176 {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
177 {0x2, "COM2",
178 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
179 {0x00,0x00,0x02,0xf8,0x03,0x02,0x00,EOT}},
180 {0x3, "Parallel port",
181 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
182 0xf0,EOT},
183 {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
184 0x03,EOT}},
185 {0x4, "IR",
186 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
187 0x74,0x75,0xf0,EOT},
188 {0x00,0x00,0x02,0xe8,0x03,0x00,0x0a,0x02,0x0b,0x02,
189 0x01,0x00,0x00,EOT}},
190 {0x5, "GPIO",
191 {0x25,0x26,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
192 0x70,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,
193 0xf9,0xfa,0xfb,0xfc,EOT},
194 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
195 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
196 0x00,0x00,0x00,0x00,EOT}},
197 {EOT}}},
Urja Rannikko38204a22008-10-23 23:33:18 +0000198 {0x8673, "IT8673F", {
199 {EOT}}},
200 {0x8681, "IT8671F/IT8687R", {
Anders Jenbo14db1c02010-05-08 23:28:33 +0000201 {NOLDN, NULL,
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000202 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x20,0x21,0x22,
203 0x23,0x24,0x25,0x26,0x2e,0x2f,EOT},
204 {NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x86,0x81,0x00,
205 0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
206 {0x0, "Floppy",
207 {0x30,0x31,0x60,0x61,0x70,0x71,0x74,0xf0,EOT},
208 {0x00,0x00,0x03,0xf0,0x06,0x02,0x02,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000209 {0x1, "COM1",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000210 {0x30,0x31,0x60,0x61,0x70,0x71,0xf0,EOT},
211 {0x00,0x00,0x03,0xf8,0x04,0x02,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000212 {0x2, "COM2",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000213 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x72,0x73,
214 0x74,0x75,0xf0,0xf1,EOT},
215 {0x00,0x00,0x02,0xf8,0x03,0x00,0x03,0x02,0x0a,0x02,
216 0x00,0x01,0x00,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000217 {0x3, "Parallel port",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000218 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0x74,
219 0xf0,EOT},
220 {0x00,0x00,0x03,0x78,0x07,0x78,0x07,0x02,0x03,
221 0x03,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000222 {0x4, "APC",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000223 {0x30,0xf0,0xf1,0xf2,0xf4,0xf5,0xf6,EOT},
224 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000225 {0x5, "Keyboard",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000226 {0x30,0x31,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
227 {MISC,0x00,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Anders Jenbo14db1c02010-05-08 23:28:33 +0000228 {0x6, "Mouse",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000229 {0x30,0x70,0x71,0xf0,EOT},
230 {0x00,0x0c,0x02,0x00,EOT}},
231 {0x7, "GPIO",
232 {0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,
233 0x70,0x71,0x72,0x73,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,
234 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff,
235 0xe0,0xe1,0xe2,0xe3,0xe4,EOT},
236 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
237 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
238 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
239 0x00,0x00,0x00,0x00,0x00,EOT}},
Urja Rannikko38204a22008-10-23 23:33:18 +0000240 {EOT}}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000241 {0x8701, "IT8703F", {
242 {NOLDN, NULL,
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000243 {0x20,0x21,0x23,0x24,0x26,0x29,0x2a,0x2b,EOT},
244 {0x87,0x00,0x00,0x80,0x00,0x00,0x7c,0xc0,EOT}},
245 {0x0, "Floppy",
246 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
247 0xf5,EOT},
248 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000249 0x00,EOT}},
250 {0x1, "Parallel port",
251 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
252 {0x00,0x03,0x78,0x00,0x80,0x07,0x03,0x03,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000253 {0x2, "COM1",
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000254 {0x30,0x60,0x61,0x70,0xf0,EOT},
255 {0x00,0x03,0xf8,0x04,0x00,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000256 {0x3, "COM2",
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000257 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
258 {0x00,0x02,0xf8,0x03,0x00,0x00,0x00,0x7f,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000259 {0x5, "Keyboard",
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000260 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000261 {0x01,0x00,0x60,0x00,0x64,0x01,0x0c,0x80,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000262 {0x6, "Consumer IR",
263 {0x30,0x60,0x61,0x70,EOT},
264 {0x00,0x00,0x00,0x00,EOT}},
265 {0x7, "Game port, MIDI, GPIO set 1",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000266 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,EOT},
267 {0x00,0x02,0x01,0x03,0x30,0x00,0xff,0x00,0x00,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000268 {0x8, "GPIO set 2",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000269 {0x30,0xf0,0xf1,0xf2,0xf3,0xf5,EOT},
270 {0x00,0xff,0x00,0x00,0x00,0x00,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000271 {0x9, "GPIO set 3 and 4",
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000272 {0x30,0x60,0x61,0xf0,0xf1,0xf2,0xf3,0xf4,EOT},
273 {0x00,0x02,0x90,0xff,0x00,0x00,0x00,0x00,EOT}},
274 {0xa, "ACPI",
275 {0x30,0x70,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
276 0xf3,0xf4,0xf6,0xf7,0xf9,EOT},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000277 {0x00,0x00,0x00,0x00,NANA,NANA,0x00,0x00,0x00,0x00,
278 NANA,NANA,0x00,0x00,0x00,EOT}},
Uwe Hermann4bdd6432010-05-14 16:40:55 +0000279 {0xc, "GPIO set 5, 6 and 7",
280 {0x30,0x60,0x61,0xf0,0xf3,0xf6,EOT},
281 {0x00,0x03,0x70,0x00,0xff,0xff,EOT}},
Luc Verhaegen7a0f01f2009-07-12 14:24:06 +0000282 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000283 {0x8702, "IT8702F", {
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000284 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000285 {0x8705, "IT8705F/AF / IT8700F", {
Robinson P. Tryon43541032007-10-04 15:44:19 +0000286 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000287 {0x20,0x21,0x22,0x23,0x24,EOT},
288 {0x87,0x05,0x00,0x00,NANA,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000289 {0x0, "Floppy",
290 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
291 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
292 {0x1, "COM1",
293 {0x30,0x60,0x61,0x70,0xf0,EOT},
294 {0x00,0x03,0xf8,0x04,0x00,EOT}},
295 {0x2, "COM2",
296 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
297 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
298 {0x3, "Parallel port",
299 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
300 0xf0,EOT},
301 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
302 0x03,EOT}},
303 {0x4, "Environment controller",
304 {0x2b,0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,
305 0xf3,0xf4,0xf5,0xf6,EOT},
306 {0x00,0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,
307 0x00,0x00,NANA,NANA,EOT}},
308 {0x5, "GPIO",
Robinson P. Tryondc817692007-10-05 13:47:04 +0000309 {0x25,0x26,0x27,0x28,0x29,0x2a,0x60,0x61,0x62,0x63,
310 0x64,0x65,0x70,0x71,0x72,0xb0,0xb1,0xb2,0xb3,0xb4,
311 0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,
312 0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xd0,
313 0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd8,0xd9,0xda,0xf0,
314 0xf1,0xf2,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,
315 0xfd,0xfe,0xff,EOT},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000316 {0x00,0x00,0x00,0xff,0xe0,0xff,0x00,0x00,0x00,0x00,
317 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
318 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
319 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
320 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
321 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Robinson P. Tryondc817692007-10-05 13:47:04 +0000322 0x00,NANA,0x00,EOT}},
Robinson P. Tryon43541032007-10-04 15:44:19 +0000323 {0x6, "Game port",
324 {0x30,0x60,0x61,EOT},
325 {0x00,0x02,0x01,EOT}},
326 {0x7, "Consumer IR",
327 {0x30,0x60,0x61,0x70,0xf0,EOT},
328 {0x00,0x03,0x10,0x0b,0x00,EOT}},
329 {0x8, "MIDI port",
330 {0x30,0x60,0x61,0x70,0xf0,EOT},
331 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000332 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000333 {0x8706, "IT8706R", { /* TODO: Not yet in sensors-detect */
334 /* This is a "Special General Purpose I/O chip". */
335 {EOT}}},
Mattias Mattsson25bf69a2010-08-02 02:34:20 +0000336 {0x8707, "IT8707F", {
337 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000338 {0x8708, "IT8708F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000339 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000340 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
341 0x2a,0x2e,0x2f,EOT},
342 {0x87,0x08,0x00,0x00,NANA,0x3f,0x00,0xff,0xff,0xff,
343 0xff,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000344 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000345 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
346 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000347 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000348 {0x30,0x60,0x61,0x70,0xf0,EOT},
349 {0x00,0x03,0xf8,0x04,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000350 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000351 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
352 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000353 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000354 {0x30,0x60,0x61,0x62,0x63,0x64,0x65,0x70,0x74,
355 0xf0,EOT},
356 {0x00,0x03,0x78,0x07,0x78,0x00,0x80,0x07,0x03,
357 0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000358 {0x4, "SWC",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000359 {0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,
360 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
361 {NANA,NANA,0x00,0x00,0x00,0x00,0x00,0x00,
362 0x00,0x00,0x00,0x00,0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000363 {0x5, "Keyboard",
Uwe Hermann2c290e32007-09-20 00:00:49 +0000364 /* Note: 0x30 can actually be 0x00 _or_ 0x01. */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000365 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
366 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000367 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000368 {0x30,0x70,0x71,0xf0,EOT},
369 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000370 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000371 {0x70,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,
372 0xbb,0xbc,0xbd,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,
373 0xc9,0xca,0xcb,0xcc,0xcd,0xd0,0xd1,0xd2,0xd3,0xd4,
374 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xf0,0xf1,
375 0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
376 0xfc,EOT},
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,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x00,
381 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,
382 0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000383 {0x8, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000384 {0x30,0x60,0x61,EOT},
385 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000386 {0x9, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000387 {0x30,0x60,0x61,0x70,0xf0,EOT},
388 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000389 {0xa, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000390 {0x30,0x60,0x61,0x70,0xf0,EOT},
391 {0x00,0x03,0x00,0x0a,0x00,EOT}},
392 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000393 {0x8710, "IT8710F", { /* TODO: Not yet in sensors-detect */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000394 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000395 {0x8711, "IT8711F", { /* 0x8711 is a guess, not found in datasheet. */
396 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000397 {0x8712, "IT8712F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000398 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000399 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
400 {0x87,0x12,0x08,0x00,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000401 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000402 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
403 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000404 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000405 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
406 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000407 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000408 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
409 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000410 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000411 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
412 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000413 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000414 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
415 0xf4,0xf5,0xf6,EOT},
416 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
417 0x00,NANA,NANA,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000418 {0x5, "Keyboard",
419 /* TODO: 0xf0: Error in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000420 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
421 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000422 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000423 {0x30,0x70,0x71,0xf0,EOT},
424 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000425 {0x7, "GPIO", /* TODO: 0x72, 0x73: Errors in datasheet? */
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000426 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
427 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
428 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
429 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
430 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
431 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
432 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
Uwe Hermann07024692007-09-20 22:13:48 +0000433 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000434 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
435 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
436 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
437 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000438 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000439 {0x30,0x60,0x61,0x70,0xf0,EOT},
440 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000441 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000442 {0x30,0x60,0x61,EOT},
443 {0x00,0x02,0x01,EOT}},
Uwe Hermann07024692007-09-20 22:13:48 +0000444 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000445 {0x30,0x60,0x61,0x70,0xf0,EOT},
446 {0x00,0x03,0x10,0x0b,0x00,EOT}},
447 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000448 {0x8716, "IT8716F", {
Uwe Hermann2c290e32007-09-20 00:00:49 +0000449 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000450 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
451 {0x87,0x16,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000452 {0x0, "Floppy",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000453 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
454 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000455 {0x1, "COM1",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000456 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
457 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000458 {0x2, "COM2",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000459 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
460 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000461 {0x3, "Parallel port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000462 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
463 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000464 {0x4, "Environment controller",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000465 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
466 0xf4,0xf5,0xf6,EOT},
467 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
468 0x00,NANA,NANA,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000469 {0x5, "Keyboard",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000470 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
471 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000472 {0x6, "Mouse",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000473 {0x30,0x70,0x71,0xf0,EOT},
474 {0x00,0x0c,0x02,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000475 {0x7, "GPIO",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000476 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
477 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
478 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
479 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
480 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
481 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
482 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
483 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
484 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
485 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
486 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
487 0x00,0x00,0x00,0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000488 {0x8, "MIDI port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000489 {0x30,0x60,0x61,0x70,0xf0,EOT},
490 {0x00,0x03,0x00,0x0a,0x00,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000491 {0x9, "Game port",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000492 {0x30,0x60,0x61,EOT},
493 {0x00,0x02,0x01,EOT}},
Uwe Hermann11887f22007-12-07 23:55:20 +0000494 {0xa, "Consumer IR",
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000495 {0x30,0x60,0x61,0x70,0xf0,EOT},
496 {0x00,0x03,0x10,0x0b,0x00,EOT}},
497 {EOT}}},
Uwe Hermann07024692007-09-20 22:13:48 +0000498 {0x8718, "IT8718F", {
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000499 {NOLDN, NULL,
Uwe Hermannb0ae9762008-10-14 16:34:38 +0000500 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
501 {0x87,0x18,0x01,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000502 {0x0, "Floppy",
503 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
504 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
505 {0x1, "COM1",
506 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
507 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
508 {0x2, "COM2",
509 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
510 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
511 {0x3, "Parallel port",
512 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
513 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
514 {0x4, "Environment controller",
515 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
516 0xf4,0xf5,0xf6,EOT},
517 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
518 0x00,NANA,NANA,EOT}},
519 {0x5, "Keyboard",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000520 /* 0xf0: Datasheet page 33: 0x00; page 56: 0x08. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000521 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
522 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x00,EOT}},
523 {0x6, "Mouse",
524 {0x30,0x70,0x71,0xf0,EOT},
525 {0x00,0x0c,0x02,0x00,EOT}},
526 {0x7, "GPIO",
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000527 /* 0x2c: Datasheet page 30: 0x00; page 43: 0x1f. */
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000528 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
529 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
530 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000531 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc8,0xc9,0xca,0xcb,
532 0xcc,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xf0,
533 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,
534 0xfb,0xfc,0xfd,0xfe,0xff,EOT},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000535 {0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
536 0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x00,0x00,0x00,
537 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000538 0x01,0x00,0x00,0x40,0x00,0x00,0x01,0x00,0x00,0x40,
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000539 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
540 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000541 0x00,NANA,0x00,0x00,0x00,EOT}},
Uwe Hermann420f6ab2007-09-21 14:48:04 +0000542 {0xa, "Consumer IR",
543 {0x30,0x60,0x61,0x70,0xf0,EOT},
544 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000545 {EOT}}},
Uwe Hermanncfb6ac72008-10-01 20:16:58 +0000546 {0x8720, "IT8720F", { /* From sensors-detect */
547 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000548 {0x8722, "IT8722F", {
549 {EOT}}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000550 {0x8726, "IT8726F", {
551 /* Datasheet wrongly says that the ID is 0x8716. */
Josh Profittb9c6b0e2008-10-14 16:28:50 +0000552 {NOLDN, NULL,
553 {0x20,0x21,0x22,0x23,0x24,0x2b,EOT},
554 {0x87,0x26,0x01,0x00,MISC,0x00,EOT}},
555 {0x0, "Floppy",
556 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
557 {0x00,0x03,0xf0,0x06,0x02,0x00,0x00,EOT}},
558 {0x1, "COM1",
559 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
560 {0x00,0x03,0xf8,0x04,0x00,0x50,0x00,0x7f,EOT}},
561 {0x2, "COM2",
562 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,0xf3,EOT},
563 {0x00,0x02,0xf8,0x03,0x00,0x50,0x00,0x7f,EOT}},
564 {0x3, "Parallel port",
565 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,EOT},
566 {0x00,0x03,0x78,0x07,0x78,0x07,0x03,0x03,EOT}},
567 {0x4, "Environment controller",
568 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,0xf3,
569 0xf4,0xf5,0xf6,EOT},
570 {0x00,0x02,0x90,0x02,0x30,0x09,0x00,0x00,0x00,0x00,
571 0x00,MISC,MISC,EOT}},
572 {0x5, "Keyboard",
573 /* 0xf0: Datasheet page 35: 0x00; page 59: 0x08. */
574 {0x30,0x60,0x61,0x62,0x63,0x70,0x71,0xf0,EOT},
575 {0x01,0x00,0x60,0x00,0x64,0x01,0x02,0x08,EOT}},
576 {0x6, "Mouse",
577 {0x30,0x70,0x71,0xf0,EOT},
578 {0x00,0x0c,0x02,0x00,EOT}},
579 {0x7, "GPIO",
580 /* 0x2c: Datasheet page 33: 0x00; page 45: 0x1f. */
581 {0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x60,0x61,0x62,
582 0x63,0x64,0x65,0x70,0x71,0x72,0x73,0x74,0xb0,0xb1,
583 0xb2,0xb3,0xb4,0xb5,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
584 0xc0,0xc1,0xc2,0xc3,0xc4,0xc8,0xc9,0xca,0xcb,0xcc,
585 0xe0,0xe1,0xe2,0xe3,0xe4,0xf0,0xf1,0xf2,0xf3,0xf4,
586 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,EOT},
587 {0x01,0x00,0x00,0x40,0x00,0x00,0x1f,0x00,0x00,0x00,
588 0x00,0x00,0x00,0x00,0x00,MISC,0x38,0x00,0x00,0x00,
589 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
590 0x01,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x40,0x00,
591 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
592 0x00,0x00,0x00,0x00,0x00,0x00,0x00,MISC,0x00,EOT}},
593 {0x8, "MIDI port",
594 {0x30,0x60,0x61,0x70,0xf0,EOT},
595 {0x00,0x03,0x00,0x0a,0x00,EOT}},
596 {0x9, "Game port",
597 {0x30,0x60,0x61,EOT},
598 {0x00,0x02,0x01,EOT}},
599 {0xa, "Consumer IR",
600 {0x30,0x60,0x61,0x70,0xf0,EOT},
601 {0x00,0x03,0x10,0x0b,0x00,EOT}},
Uwe Hermann44bb7772007-10-07 21:50:29 +0000602 {EOT}}},
Uwe Hermannebb73f22008-11-12 19:08:58 +0000603 {0x8761, "IT8761E", {
604 {EOT}}},
605 {0x8780, "IT8780F", {
606 {EOT}}},
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000607 {EOT}
608};
609
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000610static const struct superio_registers ec_table[] = {
611 {0x8716, "IT8716F", {
612 {NOLDN, NULL,
613 {0x00,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x10,
614 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x1b,0x1c,0x1d,
615 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
616 0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,
617 0x44,0x45,0x48,0x50,0x51,0x52,0x53,0x54,0x56,0x57,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000618 0x59,0x5c,
619 0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x68,
620 0x69,0x6a,0x6b,0x6c,0x6d,0x70,0x71,0x72,0x73,0x74,
621 0x75,0x84,0x85,0x86,0x87,0x88,0x89,0x8c,0x8d,0x8e,
622 0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x98,0x99,0x9a,
623 0x9b,0x9c,0x9d,EOT},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000624 {0x18,0x00,0x00,0x00,0x00,0x00,0x80,0x09,0x00,NANA,
625 NANA,NANA,0x07,0x50,NANA,NANA,NANA,NANA,NANA,NANA,
626 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
627 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
628 NANA,NANA,RSVD,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,
Uwe Hermann8cb24582008-05-08 13:50:23 +0000629 0x00,0x00,
630 0x00,0x00,0x00,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000631 0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,
632 0x7f,NANA,NANA,NANA,NANA,0x00,0x00,0x02,0x00,0x99,
633 0x99,0x7f,0x7f,0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,
634 0x00,0x00,0x7f,EOT}},
635 {EOT}}},
Uwe Hermannbbd337e2008-05-08 14:37:12 +0000636 {0x8718, "IT8718F", {
637 {NOLDN, NULL,
638 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
639 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
640 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
641 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
642 0x2a,0x2b,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
643 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,
644 0x42,0x43,0x44,0x45,0x50,0x51,0x52,0x53,0x54,0x56,
645 0x57,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,
646 0x62,0x63,0x64,0x65,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
647 0x70,0x71,0x72,0x73,0x74,0x75,0x80,0x81,0x82,0x83,
648 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,
649 0x92,0x94,0x95,0x96,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,
650 0xa6,EOT},
651 {0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
652 0x40,0x09,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x07,
653 0x50,MISC,MISC,MISC,NANA,NANA,NANA,NANA,NANA,NANA,
654 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
655 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
656 NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
657 NANA,NANA,NANA,NANA,0x00,0x00,0x7f,0x7f,0x7f,0x00,
658 0x00,0x90,0x00,0x12,0x00,0x00,0x00,0x00,0x7f,0x7f,
659 0x7f,0x00,0x00,0x7f,0x7f,0x7f,0x7f,0x00,0x00,0x7f,
660 0x7f,0x7f,0x7f,0x00,0x00,0x7f,NANA,NANA,NANA,NANA,
661 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xff,0x00,
662 0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
663 0x00,EOT}},
664 {EOT}}},
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000665 {EOT}
666};
667
Urja Rannikko38204a22008-10-23 23:33:18 +0000668/* Works for: IT8661F/IT8770F */
669static const uint8_t initkey_it8661f[][4] = {
670 {0x86, 0x61, 0x55, 0x55}, /* 0x3f0 */
671 {0x86, 0x61, 0x55, 0xaa}, /* 0x3bd */
672 {0x86, 0x61, 0xaa, 0x55}, /* 0x370 */
673};
674
675/* Works for: IT8671F/IT8687R, IT8673F */
676static const uint8_t initkey_it8671f[][4] = {
677 {0x86, 0x80, 0x55, 0x55}, /* 0x3f0 */
678 {0x86, 0x80, 0x55, 0xaa}, /* 0x3bd */
679 {0x86, 0x80, 0xaa, 0x55}, /* 0x370 */
680};
681
682/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
683static const uint8_t initkey_mbpnp[] = {
684 0x6a, 0xb5, 0xda, 0xed, 0xf6, 0xfb, 0x7d, 0xbe, 0xdf, 0x6f, 0x37,
685 0x1b, 0x0d, 0x86, 0xc3, 0x61, 0xb0, 0x58, 0x2c, 0x16, 0x8b, 0x45,
686 0xa2, 0xd1, 0xe8, 0x74, 0x3a, 0x9d, 0xce, 0xe7, 0x73, 0x39,
687};
688
689/* Works for: IT8661F/IT8770F, IT8671F/IT8687R, IT8673F. */
690static void enter_conf_mode_ite_legacy(uint16_t port, const uint8_t init[][4])
691{
692 int i, idx;
693
694 /* Determine Super I/O config port. */
695 idx = (port == 0x3f0) ? 0 : ((port == 0x3bd) ? 1 : 2);
696 for (i = 0; i < 4; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000697 OUTB(init[idx][i], ISA_PNP_ADDR);
Urja Rannikko38204a22008-10-23 23:33:18 +0000698
699 /* Sequentially write the 32 MB PnP init values. */
700 for (i = 0; i < 32; i++)
Andriy Gaponb64aa602008-10-28 22:13:38 +0000701 OUTB(initkey_mbpnp[i], port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000702}
703
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000704static void enter_conf_mode_ite(uint16_t port)
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000705{
Andriy Gaponb64aa602008-10-28 22:13:38 +0000706 OUTB(0x87, port);
707 OUTB(0x01, port);
708 OUTB(0x55, port);
709 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000710}
711
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000712static void enter_conf_mode_ite_it8502e(uint16_t port)
713{
714 OUTB(0x85, port);
715 OUTB(0x02, port);
716 OUTB(0x55, port);
717 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
718}
719
Uwe Hermannebb73f22008-11-12 19:08:58 +0000720static void enter_conf_mode_ite_it8761e(uint16_t port)
721{
722 OUTB(0x87, port);
723 OUTB(0x61, port);
724 OUTB(0x55, port);
725 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
726}
727
728static void enter_conf_mode_ite_it8228e(uint16_t port)
729{
730 OUTB(0x82, port);
731 OUTB(0x28, port);
732 OUTB(0x55, port);
733 OUTB((port == 0x2e) ? 0x55 : 0xaa, port);
734}
735
Uwe Hermann3acf31e2007-09-19 01:55:35 +0000736static void exit_conf_mode_ite(uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000737{
738 regwrite(port, 0x02, 0x02);
739}
740
Uwe Hermannafe83092007-09-28 15:45:43 +0000741static void probe_idregs_ite_helper(const char *init, uint16_t port)
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000742{
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000743 uint16_t id, chipver, ecport;
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000744
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000745 probing_for("ITE", init, port);
746
Uwe Hermann07024692007-09-20 22:13:48 +0000747 id = regval(port, CHIP_ID_BYTE1_REG) << 8;
748 id |= regval(port, CHIP_ID_BYTE2_REG);
749 chipver = regval(port, CHIP_VERSION_REG) & 0x0f; /* Only bits 3..0 */
750
751 if (superio_unknown(reg_table, id)) {
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000752 if (verbose)
753 printf(NOTFOUND "id=0x%04x, rev=0x%01x\n", id, chipver);
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000754 return;
755 }
756
Uwe Hermann8b8d0392007-10-04 15:23:38 +0000757 printf("Found ITE %s (id=0x%04x, rev=0x%01x) at 0x%x\n",
Uwe Hermann07024692007-09-20 22:13:48 +0000758 get_superio_name(reg_table, id), id, chipver, port);
Uwe Hermanne9d46162007-10-07 20:01:23 +0000759 chip_found = 1;
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000760
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000761 dump_superio("ITE", reg_table, port, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000762
763 if (extra_dump) {
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000764 regwrite(port, LDN_SEL, 0x04); /* Select LDN 4 (EC). */
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000765
766 /* Get EC base address (stored in LDN 4, index 0x60/0x61). */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000767 ecport = regval(port, 0x60) << 8;
768 ecport |= regval(port, 0x61);
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000769
770 /* EC address register = EC base address + 5. */
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000771 ecport += 5;
772
Uwe Hermanneec5ff42008-03-01 18:49:39 +0000773 printf("Environment controller (0x%04x)\n", ecport);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000774 dump_superio("ITE-EC", ec_table, ecport, id, LDN_SEL);
Ronald Hoogenboom0be73bb2008-02-25 22:32:41 +0000775 }
Uwe Hermannb4db2202007-09-20 23:37:56 +0000776}
Uwe Hermann25a6c0f2007-09-19 00:48:42 +0000777
Uwe Hermannb4db2202007-09-20 23:37:56 +0000778void probe_idregs_ite(uint16_t port)
779{
Urja Rannikko38204a22008-10-23 23:33:18 +0000780 if (port == 0x3f0 || port == 0x3bd || port == 0x370) {
781 enter_conf_mode_ite_legacy(port, initkey_it8661f);
782 probe_idregs_ite_helper("(init=legacy/it8661f) ", port);
783 exit_conf_mode_ite(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000784 if (chip_found) return;
Uwe Hermannb4db2202007-09-20 23:37:56 +0000785
Urja Rannikko38204a22008-10-23 23:33:18 +0000786 enter_conf_mode_ite_legacy(port, initkey_it8671f);
787 probe_idregs_ite_helper("(init=legacy/it8671f) ", port);
788 exit_conf_mode_ite(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000789 if (chip_found) return;
Urja Rannikko38204a22008-10-23 23:33:18 +0000790 } else {
791 enter_conf_mode_ite(port);
Uwe Hermannebb73f22008-11-12 19:08:58 +0000792 probe_idregs_ite_helper("(init=standard) ", port);
793 exit_conf_mode_ite(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000794 if (chip_found) return;
Uwe Hermannebb73f22008-11-12 19:08:58 +0000795
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000796 enter_conf_mode_ite_it8502e(port);
797 probe_idregs_ite_helper("(init=it8502e) ", port);
798 exit_conf_mode_ite(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000799 if (chip_found) return;
Anton Kochkov106f7ff2010-06-29 21:26:17 +0000800
Uwe Hermannebb73f22008-11-12 19:08:58 +0000801 enter_conf_mode_ite_it8761e(port);
802 probe_idregs_ite_helper("(init=it8761e) ", port);
803 exit_conf_mode_ite(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000804 if (chip_found) return;
Uwe Hermannebb73f22008-11-12 19:08:58 +0000805
806 enter_conf_mode_ite_it8228e(port);
807 probe_idregs_ite_helper("(init=it8228e) ", port);
Urja Rannikko38204a22008-10-23 23:33:18 +0000808 exit_conf_mode_ite(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000809 if (chip_found) return;
Urja Rannikko38204a22008-10-23 23:33:18 +0000810
811 enter_conf_mode_winbond_fintek_ite_8787(port);
812 probe_idregs_ite_helper("(init=0x87,0x87) ", port);
813 exit_conf_mode_winbond_fintek_ite_8787(port);
David Hendricks2ad6d552010-08-09 23:13:13 +0000814 if (chip_found) return;
Urja Rannikko38204a22008-10-23 23:33:18 +0000815 }
Uwe Hermann0120e1a2007-09-16 18:11:03 +0000816}
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000817
818void print_ite_chips(void)
819{
820 print_vendor_chips("ITE", reg_table);
Stefan Reinauer7a51e502008-12-01 14:18:57 +0000821 print_vendor_chips("ITE-EC", ec_table);
Robinson P. Tryon552cfb72008-01-15 22:30:55 +0000822}