1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 #include "superiotool.h"
5 #define DEVICE_ID_REG_OLD 0x0d
6 #define DEVICE_REV_REG_OLD 0x0e
8 #define DEVICE_ID_REG 0x20
9 #define DEVICE_REV_REG 0x21
11 static const struct superio_registers reg_table
[] = {
12 /* The following Super I/Os use the 0x20/0x21 ID registers. */
15 {0x02,0x03,0x20,0x21,0x22,0x23,0x24,0x2d,0x2e,
17 {0x00,0x03,0x02,0x01,0x00,0x00,0x04,NANA
,NANA
,
20 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
22 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
25 {0x30,0x60,0x61,0x62,0x63,0x70,EOT
},
26 {0x00,0x01,0xf0,0x03,0xf6,0x0e,EOT
}},
28 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,EOT
},
29 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
30 {0x3, "Parallel port",
31 {0x30,0x60,0x61,0x70,0x74,0xf0,EOT
},
32 {0x00,0x00,0x00,0x00,0x04,0x3c,EOT
}},
34 {0x30,0x60,0x61,0x70,0xf0,EOT
},
35 {0x00,0x00,0x00,0x00,0x00,EOT
}},
37 {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT
},
38 {0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
39 {0x6, "Real-time clock (RTC)",
40 {0x30,0x70,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT
},
41 {0x00,0x00,0x00,0x00,0x00,NANA
,MISC
,NANA
,NANA
,EOT
}},
44 {0x00,0x00,0x00,EOT
}},
46 {0x30,0x60,0x61,0x62,0x63,0xe0,0xe1,0xe2,0xe3,0xe4,
47 0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xf0,
48 0xf1,0xf2,0xf3,0xf4,EOT
},
49 {0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,
50 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
51 0x00,0x00,0x00,MISC
,EOT
}},
53 {0x03, "FDC37C93xFR", {
54 /* FIXME: There's another 0x03 but found on port 0x0d/0x0e! */
58 * Found in HP Elitebook 2760p and 8470p.
59 * The registers are taken from the datasheet of KBC1122 which is similar.
62 {0x02,0x03,0x07,0x17,0x20,0x21,0x22,0x23,0x24,0x25,
63 0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
65 {0x00,RSVD
,0x00,RSVD
,0x07,0x00,0x00,0x00,0x04,0x04,
66 MISC
,MISC
,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,
68 {0x1, "Power management (PM1)",
70 {0x00,0x00,0x00,EOT
}},
72 {0x30,0x60,0x61,0x70,0xf0,EOT
},
73 {0x00,0x00,0x00,0x00,0x00,EOT
}},
75 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
77 {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,
80 {0x30,0x60,0x61,0x70,0x72,0xf0,EOT
},
81 {0x00,0x00,0x60,0x00,0x00,0x00,EOT
}},
82 {0x8, "Embedded controller (EC)",
84 {0x00,0x00,0x62,EOT
}},
87 {0x00,0x00,0x00,EOT
}},
88 {0xa, "LPC/8051 addressable GPIO (LGPIO)",
90 {0x00,0x00,0x00,EOT
}},
91 {0xb, "Share flash interface (SFI)",
96 {0x00,0x00,0x62,EOT
}},
99 {0x00,0x00,0x62,EOT
}},
100 {0x10, "Infrared CIRCC2.0",
101 {0x30,0x60,0x61,0x70,0x74,0xe0,0xf0,0xf1,0xf2,0xf7,0xf8,EOT
},
102 {0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x02,0x03,0x00,0x00,EOT
}},
104 {0x0a, "FDC37N971", {
106 {0x02,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
107 0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
108 {0x00,0x0a,0x00,0x00,0x00,0x04,0x04,NANA
,NANA
,0x00,
109 0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
111 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
113 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,RSVD
,0x00,
115 {0x1, "Power management (PM1)",
116 {0x30,0x60,0x61,EOT
},
117 {0x00,0x00,0x00,EOT
}},
118 {0x3, "Parallel port",
119 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
120 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
122 {0x30,0x60,0x61,0x70,0xf0,EOT
},
123 {0x00,0x00,0x00,0x00,0x00,EOT
}},
125 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
127 {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,
128 0x03,0x00,0x00,EOT
}},
129 {0x6, "Real-time clock (RTC)",
130 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,EOT
},
131 {0x00,0x00,0x70,0x00,0x74,0x00,0x00,NANA
,EOT
}},
133 {0x30,0x60,0x61,0x70,0x72,0xf0,EOT
},
134 {0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
135 {0x8, "Embedded controller (EC)",
136 {0x30,0x60,0x61,EOT
},
137 {0x00,0x00,0x62,EOT
}},
139 {0x30,0x60,0x61,EOT
},
140 {0x00,0x00,0x00,EOT
}},
142 {0x0b, "FDC37N972", {
144 {0x02,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
145 0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
146 {0x00,0x0b,0x00,0x00,0x00,0x04,0x04,NANA
,NANA
,0x00,
147 0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
149 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
151 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,RSVD
,0x00,
153 {0x1, "Power management (PM1)",
154 {0x30,0x60,0x61,EOT
},
155 {0x00,0x00,0x00,EOT
}},
156 {0x3, "Parallel port",
157 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
158 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
160 {0x30,0x60,0x61,0x70,0xf0,EOT
},
161 {0x00,0x00,0x00,0x00,0x00,EOT
}},
163 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
165 {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,
166 0x03,0x00,0x00,EOT
}},
167 {0x6, "Real-time clock (RTC)",
168 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,EOT
},
169 {0x00,0x00,0x70,0x00,0x74,0x00,0x00,NANA
,EOT
}},
171 {0x30,0x60,0x61,0x70,0x72,0xf0,EOT
},
172 {0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
173 {0x8, "Embedded controller (EC)",
174 {0x30,0x60,0x61,EOT
},
175 {0x00,0x00,0x62,EOT
}},
177 {0x30,0x60,0x61,EOT
},
178 {0x00,0x00,0x00,EOT
}},
180 {0x0e, "LPC47N252", { /* From sensors-detect */
182 {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
183 0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
184 {0x0e,NANA
,0x00,0x00,0x04,0x04,NANA
,NANA
,0x00,
185 0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
187 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
189 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,RSVD
,0x00,
191 {0x1, "Power management (PM1)",
192 {0x30,0x60,0x61,EOT
},
193 {0x00,0x00,0x00,EOT
}},
194 {0x3, "Parallel port",
195 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
196 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
198 {0x30,0x60,0x61,0x70,0xf0,EOT
},
199 {0x00,0x00,0x00,0x00,0x00,EOT
}},
201 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
203 {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,
204 0x03,0x00,0x00,EOT
}},
205 {0x6, "Real-time clock (RTC)",
206 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,EOT
},
207 {0x00,0x00,0x70,0x00,0x74,0x00,0x00,NANA
,EOT
}},
209 {0x30,0x60,0x61,0x70,0x72,0xf0,EOT
},
210 {0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
211 {0x8, "Embedded controller (EC)",
212 {0x30,0x60,0x61,EOT
},
213 {0x00,0x00,0x62,EOT
}},
214 {0x9, "Mailbox Interface",
215 {0x30,0x60,0x61,EOT
},
216 {0x00,0x00,0x00,EOT
}},
217 {0xa, "LPC/8051 addressable GPIO (LGPIO)",
218 {0x30,0x60,0x61,EOT
},
219 {0x00,0x00,0x00,EOT
}},
221 {0x14, "LPC47M172", {
223 {0x30, "FDC37C93xAPM", {
225 {0x40, "FDC37C67x", { /* E.g. FDC37C672. Chiprev: 0x01 */
227 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x2b,0x2c,
229 {0x03,0x40,NANA
,0x00,0x00,0x04,MISC
,MISC
,NANA
,NANA
,
230 NANA
,NANA
,NANA
,EOT
}},
232 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
234 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
236 {0x3, "Parallel port",
237 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
238 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
240 {0x30,0x60,0x61,0x70,0xf0,EOT
},
241 {0x00,0x00,0x00,0x00,0x00,EOT
}},
243 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
245 {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
248 {0x30,0x70,0x72,0xf0,EOT
},
249 {0x00,0x00,0x00,0x00,EOT
}},
251 {0x30,0xb4,0xb5,0xb6,0xb7,0xc0,0xc1,0xc2,0xc3,0xc4,
252 0xf1,0xf2,0xf3,0xf4,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
254 {0x00,NANA
,NANA
,NANA
,NANA
,0x06,0x03,NANA
,NANA
,NANA
,
255 0x00,0x00,0x00,MISC
,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,
258 {0x42, "FDC37B80x/FDC37M707", {
260 {0x09, "FDC37N958FR", { /* Found in e.g. Dell Latitude CPi A366XT. */
262 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2b,
263 0x2c,0x2d,0x2e,0x2f,EOT
},
264 {0x03,0x44,0x00,0x00,0x00,0x04,MISC
,MISC
,0x00,NANA
,
265 NANA
,NANA
,NANA
,NANA
,EOT
}},
267 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
269 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
271 {0x3, "Parallel port",
272 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
273 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
275 {0x30,0x60,0x61,0x70,0xf0,EOT
},
276 {0x00,0x00,0x00,0x00,0x00,EOT
}},
278 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
280 {NANA
,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
282 {0x6, "Real-time clock (RTC)",
283 {0x30,0x62,0x63,0x70,0xf0,EOT
},
284 {0x00,0x00,0x70,0x00,0x00,EOT
}},
286 {0x30,0x70,0x72,0xf0,EOT
},
287 {0x00,0x00,0x00,0x00,EOT
}},
289 {0x30,0xb0,0xb1,0xb2,0xb3,0xb8,0xc0,0xc1,0xc2,0xc3,
290 0xc4,0xc5,0xc6,0xc8,0xca,0xcb,0xcc,0xd0,0xd1,0xd2,
291 0xd3,0xd4,0xd5,0xd6,0xd7,0xe0,0xe1,0xe2,0xe3,0xe4,
292 0xe5,0xe6,0xe7,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf6,
294 {0x00,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,0x01,NANA
,NANA
,
295 NANA
,0x00,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,
296 NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,
297 NANA
,NANA
,NANA
,NANA
,NANA
,0x00,0x00,0x00,0x00,NANA
,
300 {0x30,0x60,0x61,0x70,0xf0,EOT
},
301 {0x00,0x00,0x00,NANA
,NANA
,EOT
}},
303 {0x43, "FDC37B77x", {
305 {0x44, "FDC37B78x", {
307 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2b,
308 0x2c,0x2d,0x2e,0x2f,EOT
},
309 {0x03,0x44,0x00,0x00,0x00,0x04,MISC
,MISC
,0x00,NANA
,
310 NANA
,NANA
,NANA
,NANA
,EOT
}},
312 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
314 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
316 {0x3, "Parallel port",
317 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
318 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
320 {0x30,0x60,0x61,0x70,0xf0,EOT
},
321 {0x00,0x00,0x00,0x00,0x00,EOT
}},
323 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
325 {NANA
,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
327 {0x6, "Real-time clock (RTC)",
328 {0x30,0x62,0x63,0x70,0xf0,EOT
},
329 {0x00,0x00,0x70,0x00,0x00,EOT
}},
331 {0x30,0x70,0x72,0xf0,EOT
},
332 {0x00,0x00,0x00,0x00,EOT
}},
334 {0x30,0xb0,0xb1,0xb2,0xb3,0xb8,0xc0,0xc1,0xc2,0xc3,
335 0xc4,0xc5,0xc6,0xc8,0xca,0xcb,0xcc,0xd0,0xd1,0xd2,
336 0xd3,0xd4,0xd5,0xd6,0xd7,0xe0,0xe1,0xe2,0xe3,0xe4,
337 0xe5,0xe6,0xe7,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf6,
339 {0x00,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,0x01,NANA
,NANA
,
340 NANA
,0x00,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,
341 NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,
342 NANA
,NANA
,NANA
,NANA
,NANA
,0x00,0x00,0x00,0x00,NANA
,
345 {0x30,0x60,0x61,0x70,0xf0,EOT
},
346 {0x00,0x00,0x00,NANA
,NANA
,EOT
}},
348 {0x47, "FDC37M60x", { /* TODO: Not yet in sensors-detect */
350 {0x4c, "FDC37B72x", {
352 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2b,
353 0x2c,0x2d,0x2e,0x2f,EOT
},
354 {0x03,0x4c,0x00,0x00,0x00,0x04,MISC
,MISC
,0x00,NANA
,
355 NANA
,NANA
,NANA
,NANA
,EOT
}},
357 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
359 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
361 {0x3, "Parallel port",
362 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
363 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
365 {0x30,0x60,0x61,0x70,0xf0,EOT
},
366 {0x00,0x00,0x00,0x00,0x00,EOT
}},
368 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
369 {NANA
,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
371 {0x30,0x70,0x72,0xf0,EOT
},
372 {0x00,0x00,0x00,0x00,EOT
}},
374 {0x30,0xb0,0xb1,0xb2,0xb3,0xb8,0xc0,0xc1,0xc2,0xc3,
375 0xc4,0xc5,0xc6,0xc8,0xca,0xcb,0xcc,0xd0,0xd1,0xd2,
376 0xd3,0xd4,0xd5,0xd6,0xd7,0xe0,0xe1,0xe2,0xe3,0xe4,
377 0xe5,0xe6,0xe7,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf6,
379 {0x00,NANA
,NANA
,NANA
,NANA
,NANA
,0x00,0x01,NANA
,NANA
,
380 NANA
,0x00,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,
381 NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,
382 NANA
,NANA
,NANA
,NANA
,NANA
,0x00,0x00,0x00,MISC
,NANA
,
385 {0x30,0x60,0x61,0x70,0xf0,EOT
},
386 {0x00,0x00,0x00,NANA
,NANA
,EOT
}},
389 /* FIXME: FDC37M81x and MEC1308 have conflicting device IDs */
390 {0x4d, "FDC37M81x", {
392 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x2b,0x2c,
394 {0x03,0x4d,NANA
,0x00,0x00,0x04,MISC
,MISC
,NANA
,NANA
,
395 NANA
,NANA
,NANA
,EOT
}},
397 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
399 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
401 {0x3, "Parallel port",
402 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
403 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
405 {0x30,0x60,0x61,0x70,0xf0,EOT
},
406 {0x00,0x00,0x00,0x00,0x00,EOT
}},
408 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,EOT
},
409 {0x00,0x00,0x00,RSVD
,RSVD
,0x00,0x00,0x02,0x03,EOT
}},
411 {0x30,0x70,0x72,0xf0,EOT
},
412 {0x00,0x00,0x00,0x00,EOT
}},
414 /* Only 0xf6 existing (and reserved) or 0xf6..0xfb? */
415 {0x30,0xb4,0xb5,0xb6,0xb7,0xc0,0xc1,0xc2,0xc3,0xc4,
416 0xc5,0xc6,0xc7,0xc8,0xf1,0xf2,0xf3,0xf4,0xf6,0xf7,
417 0xf8,0xf9,0xfa,0xfb,EOT
},
418 {0x00,NANA
,NANA
,NANA
,NANA
,0x02,0x01,NANA
,NANA
,NANA
,
419 NANA
,NANA
,NANA
,NANA
,0x00,0x00,0x00,0x00,RSVD
,RSVD
,
420 RSVD
,RSVD
,RSVD
,RSVD
,EOT
}},
425 {0x02,0x03,0x07,0x17,0x20,0x21,0x22,0x23,0x24,0x25,
426 0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
428 {0x00,RSVD
,0x00,RSVD
,0x4d,0x00,0x00,0x00,0x04,0x04,
429 MISC
,MISC
,MISC
,MISC
,MISC
,MISC
,MISC
,MISC
,MISC
,MISC
,
432 {0x30,0x60,0x61,EOT
},
433 {0x00,0x00,0x00,EOT
}},
435 {0x30,0x60,0x61,0x70,EOT
},
436 {0x00,0x00,0x00,0x00,EOT
}},
438 {0x30,0x70,0x72,0xf0,EOT
},
439 {0x00,0x00,0x00,0x00,EOT
}},
441 {0x30,0x60,0x61,EOT
},
442 {0x00,0x00,0x62,EOT
}},
444 {0x30,0x60,0x61,EOT
},
445 {0x00,0x00,0x00,EOT
}},
447 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf3,0xf4,EOT
},
448 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
450 {0x51, "LPC47B27x", {
452 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,
453 0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
454 {RSVD
,0x51,NANA
,0x00,0x00,0x04,MISC
,MISC
,RSVD
,
455 NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,EOT
}},
457 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
459 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
461 {0x3, "Parallel port",
462 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
463 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
465 {0x30,0x60,0x61,0x70,0xf0,EOT
},
466 {0x00,0x00,0x00,0x00,0x00,EOT
}},
468 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
470 {NANA
,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
473 {0x30,0x70,0x72,0xf0,EOT
},
474 {0x00,0x00,0x00,0x00,EOT
}},
476 {0x30,0x60,0x61,EOT
},
477 {0x00,0x00,0x00,EOT
}},
478 {0xa, "Power-management events (PME)",
479 {0x30,0x60,0x61,0xf0,0xf1,EOT
},
480 {0x00,0x00,0x00,NANA
,NANA
,EOT
}},
481 {0xb, "MIDI port (MPU-401)",
482 {0x30,0x60,0x61,0x70,EOT
},
483 {0x00,0x03,0x30,0x05,EOT
}},
485 {0x52, "LPC47B37x", {
487 {0x54, "LPC47U33x", {
489 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x2a,0x2b,
490 0x2c,0x2d,0x2e,0x2f,EOT
},
491 {RSVD
,0x54,NANA
,0x00,0x00,0x04,MISC
,MISC
,NANA
,NANA
,
492 NANA
,NANA
,NANA
,NANA
,EOT
}},
494 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
496 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
498 {0x3, "Parallel port",
499 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
500 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
502 {0x30,0x60,0x61,0x70,0xf0,EOT
},
503 {0x00,0x00,0x00,0x00,0x00,EOT
}},
504 {0x5, "MIDI port (MPU-401)",
505 {0x30,0x60,0x61,0x70,EOT
},
506 {0x00,0x03,0x30,0x05,EOT
}},
508 {0x30,0x70,0x72,0xf0,EOT
},
509 {0x00,0x00,0x00,0x00,EOT
}},
511 {0x30,0x60,0x61,EOT
},
512 {0x00,0x00,0x00,EOT
}},
513 {0xa, "Runtime registers",
514 {0x30,0x60,0x61,0xf0,0xf1,EOT
},
515 {0x00,0x00,0x00,NANA
,NANA
,EOT
}},
517 {0x30,0x60,0x61,0x70,EOT
},
518 {0x00,0x00,0x00,0x00,EOT
}},
520 {0x56, "LPC47B34x", {
522 {0x57, "LPC47S42x", {
524 {0x59, "LPC47M10x/112/13x", {
526 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,
527 0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
528 {RSVD
,0x59,NANA
,0x00,0x00,0x44,MISC
,MISC
,RSVD
,NANA
,
529 NANA
,NANA
,NANA
,NANA
,NANA
,EOT
}},
531 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
533 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
535 {0x3, "Parallel port",
536 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
537 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
539 {0x30,0x60,0x61,0x70,0xf0,EOT
},
540 {0x00,0x00,0x00,0x00,0x00,EOT
}},
542 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
544 {NANA
,0x00,0x00,RSVD
,RSVD
,0x00,RSVD
,0x00,0x02,
547 {0x30,0x70,0x72,0xf0,EOT
},
548 {0x00,0x00,0x00,0x00,EOT
}},
550 {0x30,0x60,0x61,EOT
},
551 {0x00,0x00,0x00,EOT
}},
552 {0xa, "Power management events (PME)",
553 {0x30,0x60,0x61,0xf0,0xf1,EOT
},
554 {0x00,0x00,0x00,NANA
,RSVD
,EOT
}},
556 {0x30,0x60,0x61,0x70,EOT
},
557 {0x00,0x03,0x30,0x05,EOT
}},
559 {0x5d, "LPC47B357", { /* From sensors-detect (no datasheet) */
561 {0x5f, "LPC47M14x", {
563 {0x60, "LPC47M15x/192/997", {
565 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,
566 0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
567 {RSVD
,0x60,NANA
,0x00,0x00,0x44,MISC
,MISC
,RSVD
,NANA
,
568 NANA
,NANA
,NANA
,NANA
,NANA
,EOT
}},
570 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
572 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
574 {0x3, "Parallel port",
575 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
576 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
578 {0x30,0x60,0x61,0x70,0xf0,EOT
},
579 {0x00,0x00,0x00,0x00,0x00,EOT
}},
581 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
582 {NANA
,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
584 {0x30,0x70,0x72,0xf0,EOT
},
585 {0x00,0x00,0x00,0x00,EOT
}},
587 {0x30,0x60,0x61,EOT
},
588 {0x00,0x00,0x00,EOT
}},
589 {0xa, "Power management events (PME)",
590 {0x30,0x60,0x61,0xf0,EOT
},
591 {0x00,0x00,0x00,NANA
,EOT
}},
593 {0x30,0x60,0x61,0x70,EOT
},
594 {0x00,0x03,0x30,0x05,EOT
}},
596 {0x62, "LPC47S45x", {
598 {0x67, "EMC2700LPC", { /* From sensors-detect */
600 {0x6b, "LPC47M292", { /* From sensors-detect */
602 {0x6e, "LPC47B387", { /* TODO: Not yet in sensors-detect */
603 /* Found in the HP Compaq Business Desktop d530 Series */
604 /* http://article.gmane.org/gmane.linux.bios/27192 */
605 /* We cannot find a public datasheet for this Super I/O. */
607 {0x6f, "LPC47B397", {
609 {0x74, "LPC47M182", { /* Only for LD_NUM = 0 */
611 {0x02,0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,
612 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
613 {0x00,RSVD
,0x74,RSVD
,0x00,RSVD
,0x44,MISC
,0x00,
614 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
616 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
618 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
620 {0x1, "Parallel port",
621 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf8,EOT
},
622 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,0x08,EOT
}},
624 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
625 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
627 {0x30,0x60,0x61,0x70,0xf0,EOT
},
628 {0x00,0x00,0x00,0x00,0x00,EOT
}},
629 {0x4, "Power control",
630 {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT
},
631 {0x00,0x00,0x00,0x00,NANA
,0x00,EOT
}},
636 {0x30,0x70,0xf0,EOT
},
637 {0x00,0x00,0x00,EOT
}},
639 {0x30,0x60,0x61,0x70,0x72,0xf0,EOT
},
640 {0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
641 {0xa, "Runtime registers",
642 {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT
},
643 {0x00,0x00,0x00,0x00,0x00,NANA
,RSVD
,0x04,EOT
}},
645 {0x76, "LPC47M584", { /* From sensors-detect (no datasheet) */
647 {0x77, "A8000", { /* ASUS A8000, a rebranded DME1737(?) */
649 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,
650 0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
651 {RSVD
,0x77,NANA
,0x00,RSVD
,0x44,MISC
,MISC
,RSVD
,NANA
,
652 NANA
,NANA
,NANA
,NANA
,NANA
,EOT
}},
654 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
656 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
658 {0x3, "Parallel port",
659 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
660 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
662 {0x30,0x60,0x61,0x70,0xf0,EOT
},
663 {0x00,0x00,0x00,0x00,0x00,EOT
}},
665 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
666 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
668 {0x30,0x70,0x72,0xf0,EOT
},
669 {0x00,0x00,0x00,0x00,EOT
}},
670 {0xa, "Runtime registers",
671 {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT
},
672 {0x00,0x00,0x00,0x00,0x00,NANA
,RSVD
,0x04,EOT
}},
676 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,
677 0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
678 {RSVD
,0x77,NANA
,0x00,RSVD
,0x44,MISC
,MISC
,RSVD
,NANA
,
679 NANA
,NANA
,NANA
,NANA
,NANA
,EOT
}},
681 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
683 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
685 {0x3, "Parallel port",
686 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
687 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
689 {0x30,0x60,0x61,0x70,0xf0,EOT
},
690 {0x00,0x00,0x00,0x00,0x00,EOT
}},
692 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
693 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
695 {0x30,0x70,0x72,0xf0,EOT
},
696 {0x00,0x00,0x00,0x00,EOT
}},
697 {0xa, "Runtime registers",
698 {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT
},
699 {0x00,0x00,0x00,0x00,0x00,NANA
,RSVD
,0x04,EOT
}},
701 {0x79, "SCH5504", { /* No datasheet, reverse-engineered */
702 {NOLDN
, NULL
, /* FIXME: Is this correct? */
703 {0x02,0x03,0x21,0x22,0x23,0x24,0x26,0x27,
704 0x28,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
705 {0x00,RSVD
,MISC
,0x00,0x00,0x04,MISC
,0x00,
706 RSVD
,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
708 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
710 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
712 {0x3, "Parallel port",
713 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
714 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
716 {0x30,0x60,0x61,0x70,0xf0,EOT
},
717 {0x00,0x00,0x00,0x00,0x00,EOT
}},
719 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
720 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
722 {0x30,0x70,0x72,0xf0,EOT
},
723 {0x00,0x00,0x00,0x00,EOT
}},
724 {0xa, "Runtime registers", /* FIXME: Is this correct? */
725 {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT
},
726 {0x00,0x00,0x00,0x00,0x00,RSVD
,EOT
}},
728 {0x7a, "LPC47N217", { /* Found in Toshiba Satellite A80-117. */
730 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
731 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
732 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
733 0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
734 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,
735 0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,EOT
},
736 {0x28,0x9c,0x08,0x70,0x00,0x00,0xff,0x00,RSVD
,0x00,
737 0x00,0x00,0x02,0x7a,NANA
,0x00,0x00,0x00,MISC
,0x00,
738 NANA
,NANA
,NANA
,0x03,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,
739 RSVD
,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
740 0x00,0x80,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
741 0x00,0x00,0x00,0x00,RSVD
,0x00,0x00,0x80,EOT
}},
745 {0x02,0x03,0x19,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
746 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
747 {0x00,RSVD
,RSVD
,MISC
,0x00,RSVD
,0x44,RSVD
,MISC
,MISC
,
748 RSVD
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
750 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
752 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
754 {0x3, "Parallel port",
755 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
756 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
758 {0x30,0x60,0x61,0x70,0xf0,EOT
},
759 {0x00,0x00,0x00,0x00,0x00,EOT
}},
761 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
762 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
764 {0x30,0x70,0x72,0xf0,EOT
},
765 {0x00,0x00,0x00,0x00,EOT
}},
766 {0xa, "Runtime registers",
767 {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT
},
768 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,EOT
}},
772 {0x02,0x03,0x19,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
773 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
774 {0x00,RSVD
,RSVD
,MISC
,0x00,RSVD
,0x44,RSVD
,MISC
,MISC
,
775 RSVD
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
777 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
779 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
781 {0x3, "Parallel port",
782 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
783 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
785 {0x30,0x60,0x61,0x70,0xf0,EOT
},
786 {0x00,0x00,0x00,0x00,0x00,EOT
}},
788 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
789 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
791 {0x30,0x70,0x72,0xf0,EOT
},
792 {0x00,0x00,0x00,0x00,EOT
}},
793 {0xa, "Runtime registers",
794 {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT
},
795 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,EOT
}},
797 {0x30,0x60,0x61,0x70,0xf0,EOT
},
798 {0x00,0x00,0x00,0x00,0x00,EOT
}},
800 {0x30,0x60,0x61,0x70,0xf0,EOT
},
801 {0x00,0x00,0x00,0x00,0x00,EOT
}},
805 {0x02,0x03,0x19,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
806 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
807 {0x00,RSVD
,RSVD
,MISC
,0x00,RSVD
,0x44,RSVD
,MISC
,MISC
,
808 RSVD
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
810 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
812 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
814 {0x3, "Parallel port",
815 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
816 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
818 {0x30,0x60,0x61,0x70,0xf0,EOT
},
819 {0x00,0x00,0x00,0x00,0x00,EOT
}},
821 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
822 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
824 {0x30,0x70,0x72,0xf0,EOT
},
825 {0x00,0x00,0x00,0x00,EOT
}},
826 {0xa, "Runtime registers",
827 {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT
},
828 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,EOT
}},
830 {0x30,0x60,0x61,0x70,0xf0,EOT
},
831 {0x00,0x00,0x00,0x00,0x00,EOT
}},
833 {0x30,0x60,0x61,0x70,0xf0,EOT
},
834 {0x00,0x00,0x00,0x00,0x00,EOT
}},
836 {0x30,0x60,0x61,0x70,0xf0,EOT
},
837 {0x00,0x00,0x00,0x00,0x00,EOT
}},
839 {0x30,0x60,0x61,0x70,0xf0,EOT
},
840 {0x00,0x00,0x00,0x00,0x00,EOT
}},
844 {0x83, "SCH5514D", { /* From sensors-detect */
846 {0x86, "SCH5127", { /* From sensors-detect, dump from datasheet */
848 {0x02,0x03,0x21,0x22,0x23,0x24,0x26,0x27,
849 0x28,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
850 {0x00,RSVD
,MISC
,0x00,0x00,0x44,MISC
,0x00,
851 RSVD
,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
853 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
855 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
857 {0x3, "Parallel port",
858 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
859 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
861 {0x30,0x60,0x61,0x70,0xf0,EOT
},
862 {0x00,0x00,0x00,0x00,0x00,EOT
}},
864 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
865 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
867 {0x30,0x70,0x72,0xf0,EOT
},
868 {0x00,0x00,0x00,0x00,EOT
}},
869 {0xa, "Runtime registers",
870 {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT
},
871 {0x00,0x00,0x00,0x00,0x00,RSVD
,EOT
}},
873 {0x89, "SCH5027", { /* From sensors-detect (no public datasheet) */
875 {0x8c, "SCH5317", { /* From sensors-detect */
876 /* The SCH5317 can have either 0x85 or 0x8c as device ID. */
878 {0x90, "SCH4307", { /* From sensors-detect */
881 /* The following Super I/Os use the 0x0d/0x0e ID registers. */
882 {0x03, "FDC37C669", {
883 /* Init: 0x55, 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
885 /* FIXME: There's another 0x03 but found on port 0x20/0x21! */
887 {0x04, "FDC37C669FR", { /* TODO: Not yet in sensors-detect. */
888 /* Init: 0x55, 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
890 {0x13, "LPC47N237", {
891 /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */
893 {0x28, "FDC37N769", {
894 /* Init: 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
896 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
897 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
898 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
899 0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
900 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
901 {0x28,0x9c,0x88,0x70,0x00,0x00,0xff,0x00,0x00,0x00,
902 0x00,0x00,0x02,0x28,NANA
,0x00,0x00,0x80,RSVD
,RSVD
,
903 NANA
,NANA
,NANA
,0x03,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,
904 0x80,0x00,0x3c,RSVD
,RSVD
,0x00,0x00,0x00,0x00,0x00,
905 0x00,0x00,RSVD
,0x00,0x00,0x03,0x00,0x00,EOT
}},
907 {0x29, "FDC37N3869/FDC37N869", {
908 /* Init: 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
910 {0x5a, "LPC47N227", {
911 /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */
913 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
914 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
915 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
916 0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
917 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,
918 0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,EOT
},
919 {0x28,0x9c,0x08,0x70,0x00,0x00,0xff,0x00,RSVD
,0x00,
920 0x00,0x00,0x02,0x5a,NANA
,0x00,0x00,0x80,MISC
,0x00,
921 NANA
,NANA
,NANA
,0x03,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,
922 RSVD
,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
923 0x00,0x80,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
924 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,EOT
}},
926 {0x5b, "SIO10N268", {
927 /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */
929 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
930 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
931 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
932 0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
933 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,
934 0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,
935 0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,
936 0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
937 0x50,0x51,0x52,0x53,0x54,EOT
},
938 {0x20,0x98,0x00,0x70,0x00,0x00,0xff,0x00,0x00,0x00,
939 0x00,0x00,0x02,0x5b,NANA
,0x00,0x00,0x00,MISC
,0x00,
940 NANA
,NANA
,NANA
,0x03,0x00,NANA
,NANA
,0x00,0x00,0x00,
941 NANA
,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0xff,0x00,
942 0x00,0x80,0x00,0x00,0x0f,0x03,0x00,0x00,0x00,NANA
,
943 NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,0x00,0x00,
944 0x00,0x00,0x00,0x00,NANA
,NANA
,NANA
,NANA
,NANA
,0x50,
945 NANA
,0x00,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,0x00,0x01,
946 0x00,0x01,0x00,0x8c,MISC
,EOT
}},
948 {0x65, "FDC37C665GT/IR", {
949 /* Init: 0x55, 0x55. Exit: 0xaa. Port: 0x3f0. */
950 /* Chiprev: 0x02 = FDC37C665GT, 0x82 = FDC37C665IR */
952 {0x66, "FDC37C666GT", {
953 /* Init: 0x55, 0x55. Exit: 0xaa. Port: 0x3f0. Chiprev: 0x02. */
956 /* based on SCH5627 datasheet */
957 /* Init: 0x55. Exit: 0xaa. */
961 {0x0c, "LPC Interface",
964 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
965 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
966 /* DMA Channel 0 - 7 */
967 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
968 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
969 /* BAR configuration port */
970 0x60, 0x61, 0x62, 0x63,
972 0x64, 0x65, 0x66, 0x67,
974 0x68, 0x69, 0x6a, 0x6b,
976 0x6c, 0x6d, 0x6e, 0x6f,
977 /* BAR Runtime Registers */
978 0x70, 0x71, 0x72, 0x73,
980 0x78, 0x79, 0x7a, 0x7b,
981 /* BAR Floppy Disk Controller */
982 0x7c, 0x7d, 0x7e, 0x7f,
983 /* BAR Parallel Port */
984 0x80, 0x81, 0x82, 0x83,
988 /* FIXME: Conflicting ID with MEC5035
989 {0x46, "FDC37M602", { Found in Biostar M6TLD.
994 {0x07, 0x20, 0x21, 0x24, EOT
},
995 {0x00, 0x46, 0x00, 0x00, EOT
}},
996 {0x1, "Keyboard Controller",
1002 {0xC, "LPC Interface",
1005 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
1006 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
1007 /* DMA Channel 0 - 7 */
1008 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
1009 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
1010 /* BAR configuration Port */
1011 0x60, 0x61, 0x62, 0x63,
1012 /* BAR Mailbox Registers */
1013 0x64, 0x65, 0x66, 0x67,
1014 /* BAR 8042 Keyboard Interface */
1015 0x68, 0x69, 0x6a, 0x6b,
1016 /* BAR ACPI EC Interface 1 */
1017 0x6c, 0x6d, 0x6e, 0x6f,
1018 /* BAR ACPI EC Interface 2 */
1019 0x70, 0x71, 0x72, 0x73,
1020 /* BAR ACPI EC Interface 3 */
1021 0x74, 0x75, 0x76, 0x77,
1022 /* BAR ACPI PM1 Interface */
1023 0x78, 0x79, 0x7a, 0x7b,
1025 0x7c, 0x7d, 0x7e, 0x7f,
1026 /* BAR Legacy (Fast Keyboard) Interface */
1027 0x80, 0x81, 0x82, 0x83,
1028 /* BAR Embedded Flash Interface */
1029 0x84, 0x85, 0x86, 0x87,
1033 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1034 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1035 /* DMA Channel 0 - 7 */
1036 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1037 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1038 /* BAR configuration Port */
1039 0x01, 0x0C, 0x2e, 0x00,
1040 /* BAR Mailbox Registers */
1041 0x01, 0x00, 0x00, 0x00,
1042 /* BAR 8042 Keyboard Interface */
1043 0x04, 0x01, 0x60, 0x00,
1044 /* BAR ACPI EC Interface 1 */
1045 0x04, 0x02, 0x62, 0x00,
1046 /* BAR ACPI EC Interface 2 */
1047 0x07, 0x03, 0x62, 0x00,
1048 /* BAR ACPI EC Interface 3 */
1049 0x07, 0x04, 0x62, 0x00,
1050 /* BAR ACPI PM1 Interface */
1051 0x07, 0x05, 0x00, 0x00,
1053 0x07, 0x06, 0x00, 0x00,
1054 /* BAR Legacy (Fast Keyboard) Interface */
1055 0x00, 0x07, 0x92, 0x00,
1056 /* BAR Embedded Flash Interface */
1057 0x04, 0x0e, 0x00, 0x00,
1063 static void enter_conf_mode_smsc(uint16_t port
)
1065 /* Some of the SMSC Super I/Os have an 0x55,0x55 init, some only
1066 * require one 0x55. We do 0x55,0x55 for all of them at the moment,
1067 * in the assumption that the extra 0x55 won't hurt the other
1068 * Super I/Os. This is verified to be true on (at least) the FDC37N769.
1074 static void exit_conf_mode_smsc(uint16_t port
)
1079 static void probe_idregs_smsc_helper(uint16_t port
, uint8_t idreg
,
1083 uint16_t runtime_base
;
1084 const char *info
= (idreg
== 0x20) ? "(idregs=0x20/0x21) "
1085 : "(idregs=0x0d/0x0e) ";
1087 probing_for("SMSC", info
, port
);
1089 enter_conf_mode_smsc(port
);
1091 id
= regval(port
, idreg
);
1092 rev
= regval(port
, revreg
);
1094 if (superio_unknown(reg_table
, id
)) {
1096 printf(NOTFOUND
"id=0x%02x, rev=0x%02x\n", id
, rev
);
1097 exit_conf_mode_smsc(port
);
1101 /* Infineon TPM causes false match of FDC37N972 */
1102 if (idreg
== DEVICE_ID_REG
&& revreg
== DEVICE_REV_REG
&&
1103 id
== 0x0b && rev
== 0x00) {
1104 /* Infineon sets config port in 0x27:0x26, but SMSC does not */
1105 if (((regval(port
, 0x27)<<8)|regval(port
, 0x26)) == port
) {
1107 printf(NOTFOUND
"id=0x%02x, rev=0x%02x\n",
1109 exit_conf_mode_smsc(port
);
1114 printf("Found %s %s (id=0x%02x, rev=0x%02x) at 0x%x\n",
1115 (id
== 0x77 ? "ASUS" : "SMSC"), get_superio_name(reg_table
, id
),
1119 dump_superio((id
== 0x77 ? "ASUS" : "SMSC"), reg_table
, port
, id
,
1124 case 0x5a: /* LPC47N227 */
1125 runtime_base
= regval(port
, 0x30) << 4;
1127 dump_io(runtime_base
, 16);
1129 printf("Runtime Register Block not mapped on this Super I/O.\n");
1131 case 0xc4: /* SMSC5545 */
1132 /* choose LPC interface */
1133 regwrite(port
, LDN_SEL
, 0x0c);
1134 runtime_base
= regval(port
, 0x73) << 8;
1135 runtime_base
|= regval(port
, 0x72);
1136 dump_io(runtime_base
, 0x34);
1139 printf("No extra registers known for this chip.\n");
1143 exit_conf_mode_smsc(port
);
1146 void probe_idregs_smsc(uint16_t port
)
1148 probe_idregs_smsc_helper(port
, DEVICE_ID_REG
, DEVICE_REV_REG
);
1149 probe_idregs_smsc_helper(port
, DEVICE_ID_REG_OLD
, DEVICE_REV_REG_OLD
);
1152 void print_smsc_chips(void)
1154 print_vendor_chips("SMSC", reg_table
);
1155 printf("SMSC LPC47N227 runtime register block\n\n");