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 {0x46, "FDC37M602", { /* Found in Biostar M6TLD. */
350 {0x47, "FDC37M60x", { /* TODO: Not yet in sensors-detect */
352 {0x4c, "FDC37B72x", {
354 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2b,
355 0x2c,0x2d,0x2e,0x2f,EOT
},
356 {0x03,0x4c,0x00,0x00,0x00,0x04,MISC
,MISC
,0x00,NANA
,
357 NANA
,NANA
,NANA
,NANA
,EOT
}},
359 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
361 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
363 {0x3, "Parallel port",
364 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
365 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
367 {0x30,0x60,0x61,0x70,0xf0,EOT
},
368 {0x00,0x00,0x00,0x00,0x00,EOT
}},
370 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
371 {NANA
,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
373 {0x30,0x70,0x72,0xf0,EOT
},
374 {0x00,0x00,0x00,0x00,EOT
}},
376 {0x30,0xb0,0xb1,0xb2,0xb3,0xb8,0xc0,0xc1,0xc2,0xc3,
377 0xc4,0xc5,0xc6,0xc8,0xca,0xcb,0xcc,0xd0,0xd1,0xd2,
378 0xd3,0xd4,0xd5,0xd6,0xd7,0xe0,0xe1,0xe2,0xe3,0xe4,
379 0xe5,0xe6,0xe7,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf6,
381 {0x00,NANA
,NANA
,NANA
,NANA
,NANA
,0x00,0x01,NANA
,NANA
,
382 NANA
,0x00,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,
383 NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,
384 NANA
,NANA
,NANA
,NANA
,NANA
,0x00,0x00,0x00,MISC
,NANA
,
387 {0x30,0x60,0x61,0x70,0xf0,EOT
},
388 {0x00,0x00,0x00,NANA
,NANA
,EOT
}},
391 /* FIXME: FDC37M81x and MEC1308 have conflicting device IDs */
392 {0x4d, "FDC37M81x", {
394 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x2b,0x2c,
396 {0x03,0x4d,NANA
,0x00,0x00,0x04,MISC
,MISC
,NANA
,NANA
,
397 NANA
,NANA
,NANA
,EOT
}},
399 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
401 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
403 {0x3, "Parallel port",
404 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
405 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
407 {0x30,0x60,0x61,0x70,0xf0,EOT
},
408 {0x00,0x00,0x00,0x00,0x00,EOT
}},
410 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,EOT
},
411 {0x00,0x00,0x00,RSVD
,RSVD
,0x00,0x00,0x02,0x03,EOT
}},
413 {0x30,0x70,0x72,0xf0,EOT
},
414 {0x00,0x00,0x00,0x00,EOT
}},
416 /* Only 0xf6 existing (and reserved) or 0xf6..0xfb? */
417 {0x30,0xb4,0xb5,0xb6,0xb7,0xc0,0xc1,0xc2,0xc3,0xc4,
418 0xc5,0xc6,0xc7,0xc8,0xf1,0xf2,0xf3,0xf4,0xf6,0xf7,
419 0xf8,0xf9,0xfa,0xfb,EOT
},
420 {0x00,NANA
,NANA
,NANA
,NANA
,0x02,0x01,NANA
,NANA
,NANA
,
421 NANA
,NANA
,NANA
,NANA
,0x00,0x00,0x00,0x00,RSVD
,RSVD
,
422 RSVD
,RSVD
,RSVD
,RSVD
,EOT
}},
427 {0x02,0x03,0x07,0x17,0x20,0x21,0x22,0x23,0x24,0x25,
428 0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
430 {0x00,RSVD
,0x00,RSVD
,0x4d,0x00,0x00,0x00,0x04,0x04,
431 MISC
,MISC
,MISC
,MISC
,MISC
,MISC
,MISC
,MISC
,MISC
,MISC
,
434 {0x30,0x60,0x61,EOT
},
435 {0x00,0x00,0x00,EOT
}},
437 {0x30,0x60,0x61,0x70,EOT
},
438 {0x00,0x00,0x00,0x00,EOT
}},
440 {0x30,0x70,0x72,0xf0,EOT
},
441 {0x00,0x00,0x00,0x00,EOT
}},
443 {0x30,0x60,0x61,EOT
},
444 {0x00,0x00,0x62,EOT
}},
446 {0x30,0x60,0x61,EOT
},
447 {0x00,0x00,0x00,EOT
}},
449 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf3,0xf4,EOT
},
450 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
452 {0x51, "LPC47B27x", {
454 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,
455 0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
456 {RSVD
,0x51,NANA
,0x00,0x00,0x04,MISC
,MISC
,RSVD
,
457 NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,EOT
}},
459 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
461 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
463 {0x3, "Parallel port",
464 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
465 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
467 {0x30,0x60,0x61,0x70,0xf0,EOT
},
468 {0x00,0x00,0x00,0x00,0x00,EOT
}},
470 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
472 {NANA
,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
475 {0x30,0x70,0x72,0xf0,EOT
},
476 {0x00,0x00,0x00,0x00,EOT
}},
478 {0x30,0x60,0x61,EOT
},
479 {0x00,0x00,0x00,EOT
}},
480 {0xa, "Power-management events (PME)",
481 {0x30,0x60,0x61,0xf0,0xf1,EOT
},
482 {0x00,0x00,0x00,NANA
,NANA
,EOT
}},
483 {0xb, "MIDI port (MPU-401)",
484 {0x30,0x60,0x61,0x70,EOT
},
485 {0x00,0x03,0x30,0x05,EOT
}},
487 {0x52, "LPC47B37x", {
489 {0x54, "LPC47U33x", {
491 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x2a,0x2b,
492 0x2c,0x2d,0x2e,0x2f,EOT
},
493 {RSVD
,0x54,NANA
,0x00,0x00,0x04,MISC
,MISC
,NANA
,NANA
,
494 NANA
,NANA
,NANA
,NANA
,EOT
}},
496 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
498 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
500 {0x3, "Parallel port",
501 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
502 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
504 {0x30,0x60,0x61,0x70,0xf0,EOT
},
505 {0x00,0x00,0x00,0x00,0x00,EOT
}},
506 {0x5, "MIDI port (MPU-401)",
507 {0x30,0x60,0x61,0x70,EOT
},
508 {0x00,0x03,0x30,0x05,EOT
}},
510 {0x30,0x70,0x72,0xf0,EOT
},
511 {0x00,0x00,0x00,0x00,EOT
}},
513 {0x30,0x60,0x61,EOT
},
514 {0x00,0x00,0x00,EOT
}},
515 {0xa, "Runtime registers",
516 {0x30,0x60,0x61,0xf0,0xf1,EOT
},
517 {0x00,0x00,0x00,NANA
,NANA
,EOT
}},
519 {0x30,0x60,0x61,0x70,EOT
},
520 {0x00,0x00,0x00,0x00,EOT
}},
522 {0x56, "LPC47B34x", {
524 {0x57, "LPC47S42x", {
526 {0x59, "LPC47M10x/112/13x", {
528 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,
529 0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
530 {RSVD
,0x59,NANA
,0x00,0x00,0x44,MISC
,MISC
,RSVD
,NANA
,
531 NANA
,NANA
,NANA
,NANA
,NANA
,EOT
}},
533 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
535 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
537 {0x3, "Parallel port",
538 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
539 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
541 {0x30,0x60,0x61,0x70,0xf0,EOT
},
542 {0x00,0x00,0x00,0x00,0x00,EOT
}},
544 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
546 {NANA
,0x00,0x00,RSVD
,RSVD
,0x00,RSVD
,0x00,0x02,
549 {0x30,0x70,0x72,0xf0,EOT
},
550 {0x00,0x00,0x00,0x00,EOT
}},
552 {0x30,0x60,0x61,EOT
},
553 {0x00,0x00,0x00,EOT
}},
554 {0xa, "Power management events (PME)",
555 {0x30,0x60,0x61,0xf0,0xf1,EOT
},
556 {0x00,0x00,0x00,NANA
,RSVD
,EOT
}},
558 {0x30,0x60,0x61,0x70,EOT
},
559 {0x00,0x03,0x30,0x05,EOT
}},
561 {0x5d, "LPC47B357", { /* From sensors-detect (no datasheet) */
563 {0x5f, "LPC47M14x", {
565 {0x60, "LPC47M15x/192/997", {
567 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,
568 0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
569 {RSVD
,0x60,NANA
,0x00,0x00,0x44,MISC
,MISC
,RSVD
,NANA
,
570 NANA
,NANA
,NANA
,NANA
,NANA
,EOT
}},
572 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
574 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
576 {0x3, "Parallel port",
577 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
578 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
580 {0x30,0x60,0x61,0x70,0xf0,EOT
},
581 {0x00,0x00,0x00,0x00,0x00,EOT
}},
583 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
584 {NANA
,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
586 {0x30,0x70,0x72,0xf0,EOT
},
587 {0x00,0x00,0x00,0x00,EOT
}},
589 {0x30,0x60,0x61,EOT
},
590 {0x00,0x00,0x00,EOT
}},
591 {0xa, "Power management events (PME)",
592 {0x30,0x60,0x61,0xf0,EOT
},
593 {0x00,0x00,0x00,NANA
,EOT
}},
595 {0x30,0x60,0x61,0x70,EOT
},
596 {0x00,0x03,0x30,0x05,EOT
}},
598 {0x62, "LPC47S45x", {
600 {0x67, "EMC2700LPC", { /* From sensors-detect */
602 {0x6b, "LPC47M292", { /* From sensors-detect */
604 {0x6e, "LPC47B387", { /* TODO: Not yet in sensors-detect */
605 /* Found in the HP Compaq Business Desktop d530 Series */
606 /* http://article.gmane.org/gmane.linux.bios/27192 */
607 /* We cannot find a public datasheet for this Super I/O. */
609 {0x6f, "LPC47B397", {
611 {0x74, "LPC47M182", { /* Only for LD_NUM = 0 */
613 {0x02,0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,
614 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
615 {0x00,RSVD
,0x74,RSVD
,0x00,RSVD
,0x44,MISC
,0x00,
616 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
618 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
620 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
622 {0x1, "Parallel port",
623 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf8,EOT
},
624 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,0x08,EOT
}},
626 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
627 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
629 {0x30,0x60,0x61,0x70,0xf0,EOT
},
630 {0x00,0x00,0x00,0x00,0x00,EOT
}},
631 {0x4, "Power control",
632 {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT
},
633 {0x00,0x00,0x00,0x00,NANA
,0x00,EOT
}},
638 {0x30,0x70,0xf0,EOT
},
639 {0x00,0x00,0x00,EOT
}},
641 {0x30,0x60,0x61,0x70,0x72,0xf0,EOT
},
642 {0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
643 {0xa, "Runtime registers",
644 {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT
},
645 {0x00,0x00,0x00,0x00,0x00,NANA
,RSVD
,0x04,EOT
}},
647 {0x76, "LPC47M584", { /* From sensors-detect (no datasheet) */
649 {0x77, "A8000", { /* ASUS A8000, a rebranded DME1737(?) */
651 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,
652 0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
653 {RSVD
,0x77,NANA
,0x00,RSVD
,0x44,MISC
,MISC
,RSVD
,NANA
,
654 NANA
,NANA
,NANA
,NANA
,NANA
,EOT
}},
656 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
658 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
660 {0x3, "Parallel port",
661 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
662 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
664 {0x30,0x60,0x61,0x70,0xf0,EOT
},
665 {0x00,0x00,0x00,0x00,0x00,EOT
}},
667 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
668 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
670 {0x30,0x70,0x72,0xf0,EOT
},
671 {0x00,0x00,0x00,0x00,EOT
}},
672 {0xa, "Runtime registers",
673 {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT
},
674 {0x00,0x00,0x00,0x00,0x00,NANA
,RSVD
,0x04,EOT
}},
678 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,
679 0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
680 {RSVD
,0x77,NANA
,0x00,RSVD
,0x44,MISC
,MISC
,RSVD
,NANA
,
681 NANA
,NANA
,NANA
,NANA
,NANA
,EOT
}},
683 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
685 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
687 {0x3, "Parallel port",
688 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
689 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
691 {0x30,0x60,0x61,0x70,0xf0,EOT
},
692 {0x00,0x00,0x00,0x00,0x00,EOT
}},
694 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
695 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
697 {0x30,0x70,0x72,0xf0,EOT
},
698 {0x00,0x00,0x00,0x00,EOT
}},
699 {0xa, "Runtime registers",
700 {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT
},
701 {0x00,0x00,0x00,0x00,0x00,NANA
,RSVD
,0x04,EOT
}},
703 {0x79, "SCH5504", { /* No datasheet, reverse-engineered */
704 {NOLDN
, NULL
, /* FIXME: Is this correct? */
705 {0x02,0x03,0x21,0x22,0x23,0x24,0x26,0x27,
706 0x28,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
707 {0x00,RSVD
,MISC
,0x00,0x00,0x04,MISC
,0x00,
708 RSVD
,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
710 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
712 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
714 {0x3, "Parallel port",
715 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
716 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
718 {0x30,0x60,0x61,0x70,0xf0,EOT
},
719 {0x00,0x00,0x00,0x00,0x00,EOT
}},
721 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
722 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
724 {0x30,0x70,0x72,0xf0,EOT
},
725 {0x00,0x00,0x00,0x00,EOT
}},
726 {0xa, "Runtime registers", /* FIXME: Is this correct? */
727 {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT
},
728 {0x00,0x00,0x00,0x00,0x00,RSVD
,EOT
}},
730 {0x7a, "LPC47N217", { /* Found in Toshiba Satellite A80-117. */
732 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
733 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
734 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
735 0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
736 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,
737 0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,EOT
},
738 {0x28,0x9c,0x08,0x70,0x00,0x00,0xff,0x00,RSVD
,0x00,
739 0x00,0x00,0x02,0x7a,NANA
,0x00,0x00,0x00,MISC
,0x00,
740 NANA
,NANA
,NANA
,0x03,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,
741 RSVD
,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
742 0x00,0x80,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
743 0x00,0x00,0x00,0x00,RSVD
,0x00,0x00,0x80,EOT
}},
747 {0x02,0x03,0x19,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
748 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
749 {0x00,RSVD
,RSVD
,MISC
,0x00,RSVD
,0x44,RSVD
,MISC
,MISC
,
750 RSVD
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
752 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
754 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
756 {0x3, "Parallel port",
757 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
758 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
760 {0x30,0x60,0x61,0x70,0xf0,EOT
},
761 {0x00,0x00,0x00,0x00,0x00,EOT
}},
763 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
764 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
766 {0x30,0x70,0x72,0xf0,EOT
},
767 {0x00,0x00,0x00,0x00,EOT
}},
768 {0xa, "Runtime registers",
769 {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT
},
770 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,EOT
}},
774 {0x02,0x03,0x19,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
775 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
776 {0x00,RSVD
,RSVD
,MISC
,0x00,RSVD
,0x44,RSVD
,MISC
,MISC
,
777 RSVD
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
779 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
781 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
783 {0x3, "Parallel port",
784 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
785 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
787 {0x30,0x60,0x61,0x70,0xf0,EOT
},
788 {0x00,0x00,0x00,0x00,0x00,EOT
}},
790 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
791 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
793 {0x30,0x70,0x72,0xf0,EOT
},
794 {0x00,0x00,0x00,0x00,EOT
}},
795 {0xa, "Runtime registers",
796 {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT
},
797 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,EOT
}},
799 {0x30,0x60,0x61,0x70,0xf0,EOT
},
800 {0x00,0x00,0x00,0x00,0x00,EOT
}},
802 {0x30,0x60,0x61,0x70,0xf0,EOT
},
803 {0x00,0x00,0x00,0x00,0x00,EOT
}},
807 {0x02,0x03,0x19,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
808 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
809 {0x00,RSVD
,RSVD
,MISC
,0x00,RSVD
,0x44,RSVD
,MISC
,MISC
,
810 RSVD
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
812 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
814 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
816 {0x3, "Parallel port",
817 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
818 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
820 {0x30,0x60,0x61,0x70,0xf0,EOT
},
821 {0x00,0x00,0x00,0x00,0x00,EOT
}},
823 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
824 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
826 {0x30,0x70,0x72,0xf0,EOT
},
827 {0x00,0x00,0x00,0x00,EOT
}},
828 {0xa, "Runtime registers",
829 {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT
},
830 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,EOT
}},
832 {0x30,0x60,0x61,0x70,0xf0,EOT
},
833 {0x00,0x00,0x00,0x00,0x00,EOT
}},
835 {0x30,0x60,0x61,0x70,0xf0,EOT
},
836 {0x00,0x00,0x00,0x00,0x00,EOT
}},
838 {0x30,0x60,0x61,0x70,0xf0,EOT
},
839 {0x00,0x00,0x00,0x00,0x00,EOT
}},
841 {0x30,0x60,0x61,0x70,0xf0,EOT
},
842 {0x00,0x00,0x00,0x00,0x00,EOT
}},
846 {0x83, "SCH5514D", { /* From sensors-detect */
848 {0x86, "SCH5127", { /* From sensors-detect, dump from datasheet */
850 {0x02,0x03,0x21,0x22,0x23,0x24,0x26,0x27,
851 0x28,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
852 {0x00,RSVD
,MISC
,0x00,0x00,0x44,MISC
,0x00,
853 RSVD
,0x00,0x00,0x00,0x00,0x00,0x00,EOT
}},
855 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
857 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
859 {0x3, "Parallel port",
860 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT
},
861 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT
}},
863 {0x30,0x60,0x61,0x70,0xf0,EOT
},
864 {0x00,0x00,0x00,0x00,0x00,EOT
}},
866 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT
},
867 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT
}},
869 {0x30,0x70,0x72,0xf0,EOT
},
870 {0x00,0x00,0x00,0x00,EOT
}},
871 {0xa, "Runtime registers",
872 {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT
},
873 {0x00,0x00,0x00,0x00,0x00,RSVD
,EOT
}},
875 {0x89, "SCH5027", { /* From sensors-detect (no public datasheet) */
877 {0x8c, "SCH5317", { /* From sensors-detect */
878 /* The SCH5317 can have either 0x85 or 0x8c as device ID. */
880 {0x90, "SCH4307", { /* From sensors-detect */
883 /* The following Super I/Os use the 0x0d/0x0e ID registers. */
884 {0x03, "FDC37C669", {
885 /* Init: 0x55, 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
887 /* FIXME: There's another 0x03 but found on port 0x20/0x21! */
889 {0x04, "FDC37C669FR", { /* TODO: Not yet in sensors-detect. */
890 /* Init: 0x55, 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
892 {0x13, "LPC47N237", {
893 /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */
895 {0x28, "FDC37N769", {
896 /* Init: 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
898 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
899 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
900 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
901 0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
902 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT
},
903 {0x28,0x9c,0x88,0x70,0x00,0x00,0xff,0x00,0x00,0x00,
904 0x00,0x00,0x02,0x28,NANA
,0x00,0x00,0x80,RSVD
,RSVD
,
905 NANA
,NANA
,NANA
,0x03,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,
906 0x80,0x00,0x3c,RSVD
,RSVD
,0x00,0x00,0x00,0x00,0x00,
907 0x00,0x00,RSVD
,0x00,0x00,0x03,0x00,0x00,EOT
}},
909 {0x29, "FDC37N3869/FDC37N869", {
910 /* Init: 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
912 {0x5a, "LPC47N227", {
913 /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */
915 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
916 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
917 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
918 0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
919 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,
920 0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,EOT
},
921 {0x28,0x9c,0x08,0x70,0x00,0x00,0xff,0x00,RSVD
,0x00,
922 0x00,0x00,0x02,0x5a,NANA
,0x00,0x00,0x80,MISC
,0x00,
923 NANA
,NANA
,NANA
,0x03,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,RSVD
,
924 RSVD
,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
925 0x00,0x80,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
926 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,EOT
}},
928 {0x5b, "SIO10N268", {
929 /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */
931 {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
932 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
933 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
934 0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
935 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,
936 0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,
937 0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,
938 0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
939 0x50,0x51,0x52,0x53,0x54,EOT
},
940 {0x20,0x98,0x00,0x70,0x00,0x00,0xff,0x00,0x00,0x00,
941 0x00,0x00,0x02,0x5b,NANA
,0x00,0x00,0x00,MISC
,0x00,
942 NANA
,NANA
,NANA
,0x03,0x00,NANA
,NANA
,0x00,0x00,0x00,
943 NANA
,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0xff,0x00,
944 0x00,0x80,0x00,0x00,0x0f,0x03,0x00,0x00,0x00,NANA
,
945 NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,0x00,0x00,
946 0x00,0x00,0x00,0x00,NANA
,NANA
,NANA
,NANA
,NANA
,0x50,
947 NANA
,0x00,NANA
,NANA
,NANA
,NANA
,NANA
,NANA
,0x00,0x01,
948 0x00,0x01,0x00,0x8c,MISC
,EOT
}},
950 {0x65, "FDC37C665GT/IR", {
951 /* Init: 0x55, 0x55. Exit: 0xaa. Port: 0x3f0. */
952 /* Chiprev: 0x02 = FDC37C665GT, 0x82 = FDC37C665IR */
954 {0x66, "FDC37C666GT", {
955 /* Init: 0x55, 0x55. Exit: 0xaa. Port: 0x3f0. Chiprev: 0x02. */
958 /* based on SCH5627 datasheet */
959 /* Init: 0x55. Exit: 0xaa. */
963 {0x0c, "LPC Interface",
966 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
967 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
968 /* DMA Channel 0 - 7 */
969 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
970 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
971 /* BAR configuration port */
972 0x60, 0x61, 0x62, 0x63,
974 0x64, 0x65, 0x66, 0x67,
976 0x68, 0x69, 0x6a, 0x6b,
978 0x6c, 0x6d, 0x6e, 0x6f,
979 /* BAR Runtime Registers */
980 0x70, 0x71, 0x72, 0x73,
982 0x78, 0x79, 0x7a, 0x7b,
983 /* BAR Floppy Disk Controller */
984 0x7c, 0x7d, 0x7e, 0x7f,
985 /* BAR Parallel Port */
986 0x80, 0x81, 0x82, 0x83,
993 static void enter_conf_mode_smsc(uint16_t port
)
995 /* Some of the SMSC Super I/Os have an 0x55,0x55 init, some only
996 * require one 0x55. We do 0x55,0x55 for all of them at the moment,
997 * in the assumption that the extra 0x55 won't hurt the other
998 * Super I/Os. This is verified to be true on (at least) the FDC37N769.
1004 static void exit_conf_mode_smsc(uint16_t port
)
1009 static void probe_idregs_smsc_helper(uint16_t port
, uint8_t idreg
,
1013 uint16_t runtime_base
;
1014 const char *info
= (idreg
== 0x20) ? "(idregs=0x20/0x21) "
1015 : "(idregs=0x0d/0x0e) ";
1017 probing_for("SMSC", info
, port
);
1019 enter_conf_mode_smsc(port
);
1021 id
= regval(port
, idreg
);
1022 rev
= regval(port
, revreg
);
1024 if (superio_unknown(reg_table
, id
)) {
1026 printf(NOTFOUND
"id=0x%02x, rev=0x%02x\n", id
, rev
);
1027 exit_conf_mode_smsc(port
);
1031 /* Infineon TPM causes false match of FDC37N972 */
1032 if (idreg
== DEVICE_ID_REG
&& revreg
== DEVICE_REV_REG
&&
1033 id
== 0x0b && rev
== 0x00) {
1034 /* Infineon sets config port in 0x27:0x26, but SMSC does not */
1035 if (((regval(port
, 0x27)<<8)|regval(port
, 0x26)) == port
) {
1037 printf(NOTFOUND
"id=0x%02x, rev=0x%02x\n",
1039 exit_conf_mode_smsc(port
);
1044 printf("Found %s %s (id=0x%02x, rev=0x%02x) at 0x%x\n",
1045 (id
== 0x77 ? "ASUS" : "SMSC"), get_superio_name(reg_table
, id
),
1049 dump_superio((id
== 0x77 ? "ASUS" : "SMSC"), reg_table
, port
, id
,
1054 case 0x5a: /* LPC47N227 */
1055 runtime_base
= regval(port
, 0x30) << 4;
1057 dump_io(runtime_base
, 16);
1059 printf("Runtime Register Block not mapped on this Super I/O.\n");
1061 case 0xc4: /* SMSC5545 */
1062 /* choose LPC interface */
1063 regwrite(port
, LDN_SEL
, 0x0c);
1064 runtime_base
= regval(port
, 0x73) << 8;
1065 runtime_base
|= regval(port
, 0x72);
1066 dump_io(runtime_base
, 0x34);
1069 printf("No extra registers known for this chip.\n");
1073 exit_conf_mode_smsc(port
);
1076 void probe_idregs_smsc(uint16_t port
)
1078 probe_idregs_smsc_helper(port
, DEVICE_ID_REG
, DEVICE_REV_REG
);
1079 probe_idregs_smsc_helper(port
, DEVICE_ID_REG_OLD
, DEVICE_REV_REG_OLD
);
1082 void print_smsc_chips(void)
1084 print_vendor_chips("SMSC", reg_table
);
1085 printf("SMSC LPC47N227 runtime register block\n\n");