arch/arm64: Support FEAT_CCIDX
[coreboot2.git] / util / superiotool / smsc.c
blobd98424e642cdf24f6f0242a99688eca7445acedb
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. */
13 {0x02, "FDC37C932", {
14 {NOLDN, NULL,
15 {0x02,0x03,0x20,0x21,0x22,0x23,0x24,0x2d,0x2e,
16 0x2f,EOT},
17 {0x00,0x03,0x02,0x01,0x00,0x00,0x04,NANA,NANA,
18 0x00,EOT}},
19 {0x0, "Floppy",
20 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
21 0xf5,EOT},
22 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
23 0x00,EOT}},
24 {0x1, "IDE 1",
25 {0x30,0x60,0x61,0x62,0x63,0x70,EOT},
26 {0x00,0x01,0xf0,0x03,0xf6,0x0e,EOT}},
27 {0x2, "IDE 2",
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}},
33 {0x4, "COM1",
34 {0x30,0x60,0x61,0x70,0xf0,EOT},
35 {0x00,0x00,0x00,0x00,0x00,EOT}},
36 {0x5, "COM2",
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}},
42 {0x7, "Keyboard",
43 {0x30,0x70,0x72,EOT},
44 {0x00,0x00,0x00,EOT}},
45 {0x8, "Aux I/O",
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}},
52 {EOT}}},
53 {0x03, "FDC37C93xFR", {
54 /* FIXME: There's another 0x03 but found on port 0x0d/0x0e! */
55 {EOT}}},
56 {0x07, "KBC1126", {
58 * Found in HP Elitebook 2760p and 8470p.
59 * The registers are taken from the datasheet of KBC1122 which is similar.
61 {NOLDN, NULL,
62 {0x02,0x03,0x07,0x17,0x20,0x21,0x22,0x23,0x24,0x25,
63 0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
64 EOT},
65 {0x00,RSVD,0x00,RSVD,0x07,0x00,0x00,0x00,0x04,0x04,
66 MISC,MISC,RSVD,RSVD,RSVD,RSVD,RSVD,RSVD,RSVD,RSVD,
67 EOT}},
68 {0x1, "Power management (PM1)",
69 {0x30,0x60,0x61,EOT},
70 {0x00,0x00,0x00,EOT}},
71 {0x4, "COM1",
72 {0x30,0x60,0x61,0x70,0xf0,EOT},
73 {0x00,0x00,0x00,0x00,0x00,EOT}},
74 {0x5, "COM2 / IRCC",
75 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
76 0xf2,0xf7,0xf8,EOT},
77 {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,
78 0x03,0x00,0x00,EOT}},
79 {0x7, "Keyboard",
80 {0x30,0x60,0x61,0x70,0x72,0xf0,EOT},
81 {0x00,0x00,0x60,0x00,0x00,0x00,EOT}},
82 {0x8, "Embedded controller (EC)",
83 {0x30,0x60,0x61,EOT},
84 {0x00,0x00,0x62,EOT}},
85 {0x9, "Mailbox",
86 {0x30,0x60,0x61,EOT},
87 {0x00,0x00,0x00,EOT}},
88 {0xa, "LPC/8051 addressable GPIO (LGPIO)",
89 {0x30,0x60,0x61,EOT},
90 {0x00,0x00,0x00,EOT}},
91 {0xb, "Share flash interface (SFI)",
92 {0x30,0xff,EOT},
93 {0x01,0x0c,EOT}},
94 {0xd, "EC channel 1",
95 {0x30,0x60,0x61,EOT},
96 {0x00,0x00,0x62,EOT}},
97 {0xe, "EC channel 2",
98 {0x30,0x60,0x61,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}},
103 {EOT}}},
104 {0x0a, "FDC37N971", {
105 {NOLDN, NULL,
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}},
110 {0x0, "Floppy",
111 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
112 0xf5,EOT},
113 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,RSVD,0x00,
114 0x00,EOT}},
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}},
121 {0x4, "COM1",
122 {0x30,0x60,0x61,0x70,0xf0,EOT},
123 {0x00,0x00,0x00,0x00,0x00,EOT}},
124 {0x5, "COM2",
125 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
126 0xf2,0xf7,0xf8,EOT},
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}},
132 {0x7, "Keyboard",
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}},
138 {0x9, "Mailbox",
139 {0x30,0x60,0x61,EOT},
140 {0x00,0x00,0x00,EOT}},
141 {EOT}}},
142 {0x0b, "FDC37N972", {
143 {NOLDN, NULL,
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}},
148 {0x0, "Floppy",
149 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
150 0xf5,EOT},
151 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,RSVD,0x00,
152 0x00,EOT}},
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}},
159 {0x4, "COM1",
160 {0x30,0x60,0x61,0x70,0xf0,EOT},
161 {0x00,0x00,0x00,0x00,0x00,EOT}},
162 {0x5, "COM2",
163 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
164 0xf2,0xf7,0xf8,EOT},
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}},
170 {0x7, "Keyboard",
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}},
176 {0x9, "Mailbox",
177 {0x30,0x60,0x61,EOT},
178 {0x00,0x00,0x00,EOT}},
179 {EOT}}},
180 {0x0e, "LPC47N252", { /* From sensors-detect */
181 {NOLDN, NULL,
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}},
186 {0x0, "Floppy",
187 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
188 0xf5,EOT},
189 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,RSVD,0x00,
190 0x00,EOT}},
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}},
197 {0x4, "COM1",
198 {0x30,0x60,0x61,0x70,0xf0,EOT},
199 {0x00,0x00,0x00,0x00,0x00,EOT}},
200 {0x5, "COM2 / IRCC",
201 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
202 0xf2,0xf7,0xf8,EOT},
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}},
208 {0x7, "Keyboard",
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}},
220 {EOT}}},
221 {0x14, "LPC47M172", {
222 {EOT}}},
223 {0x30, "FDC37C93xAPM", {
224 {EOT}}},
225 {0x40, "FDC37C67x", { /* E.g. FDC37C672. Chiprev: 0x01 */
226 {NOLDN, NULL,
227 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x2b,0x2c,
228 0x2d,0x2e,0x2f,EOT},
229 {0x03,0x40,NANA,0x00,0x00,0x04,MISC,MISC,NANA,NANA,
230 NANA,NANA,NANA,EOT}},
231 {0x0, "Floppy",
232 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
233 EOT},
234 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
235 EOT}},
236 {0x3, "Parallel port",
237 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
238 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
239 {0x4, "COM1",
240 {0x30,0x60,0x61,0x70,0xf0,EOT},
241 {0x00,0x00,0x00,0x00,0x00,EOT}},
242 {0x5, "COM2",
243 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
244 EOT},
245 {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
246 EOT}},
247 {0x7, "Keyboard",
248 {0x30,0x70,0x72,0xf0,EOT},
249 {0x00,0x00,0x00,0x00,EOT}},
250 {0x8, "Aux I/O",
251 {0x30,0xb4,0xb5,0xb6,0xb7,0xc0,0xc1,0xc2,0xc3,0xc4,
252 0xf1,0xf2,0xf3,0xf4,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
253 EOT},
254 {0x00,NANA,NANA,NANA,NANA,0x06,0x03,NANA,NANA,NANA,
255 0x00,0x00,0x00,MISC,RSVD,RSVD,RSVD,RSVD,RSVD,RSVD,
256 EOT}},
257 {EOT}}},
258 {0x42, "FDC37B80x/FDC37M707", {
259 {EOT}}},
260 {0x09, "FDC37N958FR", { /* Found in e.g. Dell Latitude CPi A366XT. */
261 {NOLDN, NULL,
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}},
266 {0x0, "Floppy",
267 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
268 EOT},
269 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
270 EOT}},
271 {0x3, "Parallel port",
272 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
273 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
274 {0x4, "COM1",
275 {0x30,0x60,0x61,0x70,0xf0,EOT},
276 {0x00,0x00,0x00,0x00,0x00,EOT}},
277 {0x5, "COM2",
278 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
279 EOT},
280 {NANA,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
281 EOT}},
282 {0x6, "Real-time clock (RTC)",
283 {0x30,0x62,0x63,0x70,0xf0,EOT},
284 {0x00,0x00,0x70,0x00,0x00,EOT}},
285 {0x7, "Keyboard",
286 {0x30,0x70,0x72,0xf0,EOT},
287 {0x00,0x00,0x00,0x00,EOT}},
288 {0x8, "Aux I/O",
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,
293 0xf9,0xfa,EOT},
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,
298 NANA,NANA,EOT}},
299 {0xa, "ACPI",
300 {0x30,0x60,0x61,0x70,0xf0,EOT},
301 {0x00,0x00,0x00,NANA,NANA,EOT}},
302 {EOT}}},
303 {0x43, "FDC37B77x", {
304 {EOT}}},
305 {0x44, "FDC37B78x", {
306 {NOLDN, NULL,
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}},
311 {0x0, "Floppy",
312 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
313 EOT},
314 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
315 EOT}},
316 {0x3, "Parallel port",
317 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
318 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
319 {0x4, "COM1",
320 {0x30,0x60,0x61,0x70,0xf0,EOT},
321 {0x00,0x00,0x00,0x00,0x00,EOT}},
322 {0x5, "COM2",
323 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
324 EOT},
325 {NANA,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
326 EOT}},
327 {0x6, "Real-time clock (RTC)",
328 {0x30,0x62,0x63,0x70,0xf0,EOT},
329 {0x00,0x00,0x70,0x00,0x00,EOT}},
330 {0x7, "Keyboard",
331 {0x30,0x70,0x72,0xf0,EOT},
332 {0x00,0x00,0x00,0x00,EOT}},
333 {0x8, "Aux I/O",
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,
338 0xf9,0xfa,EOT},
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,
343 NANA,NANA,EOT}},
344 {0xa, "ACPI",
345 {0x30,0x60,0x61,0x70,0xf0,EOT},
346 {0x00,0x00,0x00,NANA,NANA,EOT}},
347 {EOT}}},
348 {0x47, "FDC37M60x", { /* TODO: Not yet in sensors-detect */
349 {EOT}}},
350 {0x4c, "FDC37B72x", {
351 {NOLDN, NULL,
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}},
356 {0x0, "Floppy",
357 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
358 EOT},
359 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
360 EOT}},
361 {0x3, "Parallel port",
362 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
363 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
364 {0x4, "COM1",
365 {0x30,0x60,0x61,0x70,0xf0,EOT},
366 {0x00,0x00,0x00,0x00,0x00,EOT}},
367 {0x5, "COM2",
368 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
369 {NANA,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
370 {0x7, "Keyboard",
371 {0x30,0x70,0x72,0xf0,EOT},
372 {0x00,0x00,0x00,0x00,EOT}},
373 {0x8, "Aux I/O",
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,
378 0xf9,0xfa,EOT},
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,
383 NANA,NANA,EOT}},
384 {0xa, "ACPI",
385 {0x30,0x60,0x61,0x70,0xf0,EOT},
386 {0x00,0x00,0x00,NANA,NANA,EOT}},
387 {EOT}}},
388 #if 0
389 /* FIXME: FDC37M81x and MEC1308 have conflicting device IDs */
390 {0x4d, "FDC37M81x", {
391 {NOLDN, NULL,
392 {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x2b,0x2c,
393 0x2d,0x2e,0x2f,EOT},
394 {0x03,0x4d,NANA,0x00,0x00,0x04,MISC,MISC,NANA,NANA,
395 NANA,NANA,NANA,EOT}},
396 {0x0, "Floppy",
397 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
398 0xf5,EOT},
399 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
400 0x00,EOT}},
401 {0x3, "Parallel port",
402 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
403 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
404 {0x4, "COM1",
405 {0x30,0x60,0x61,0x70,0xf0,EOT},
406 {0x00,0x00,0x00,0x00,0x00,EOT}},
407 {0x5, "COM2",
408 {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,EOT},
409 {0x00,0x00,0x00,RSVD,RSVD,0x00,0x00,0x02,0x03,EOT}},
410 {0x7, "Keyboard",
411 {0x30,0x70,0x72,0xf0,EOT},
412 {0x00,0x00,0x00,0x00,EOT}},
413 {0x8, "Aux I/O",
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}},
421 {EOT}}},
422 #endif
423 {0x4d, "MEC1308", {
424 {NOLDN, NULL,
425 {0x02,0x03,0x07,0x17,0x20,0x21,0x22,0x23,0x24,0x25,
426 0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
427 EOT},
428 {0x00,RSVD,0x00,RSVD,0x4d,0x00,0x00,0x00,0x04,0x04,
429 MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,
430 EOT}},
431 {0x1, "PM1",
432 {0x30,0x60,0x61,EOT},
433 {0x00,0x00,0x00,EOT}},
434 {0x4, "COM1",
435 {0x30,0x60,0x61,0x70,EOT},
436 {0x00,0x00,0x00,0x00,EOT}},
437 {0x7, "KBD",
438 {0x30,0x70,0x72,0xf0,EOT},
439 {0x00,0x00,0x00,0x00,EOT}},
440 {0x8, "EC/ACPI",
441 {0x30,0x60,0x61,EOT},
442 {0x00,0x00,0x62,EOT}},
443 {0x9, "Mailbox",
444 {0x30,0x60,0x61,EOT},
445 {0x00,0x00,0x00,EOT}},
446 {0x10, "CIRV",
447 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf3,0xf4,EOT},
448 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
449 {EOT}}},
450 {0x51, "LPC47B27x", {
451 {NOLDN, NULL,
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}},
456 {0x0, "Floppy",
457 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
458 EOT},
459 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
460 EOT}},
461 {0x3, "Parallel port",
462 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
463 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
464 {0x4, "COM1",
465 {0x30,0x60,0x61,0x70,0xf0,EOT},
466 {0x00,0x00,0x00,0x00,0x00,EOT}},
467 {0x5, "COM2",
468 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
469 EOT},
470 {NANA,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
471 EOT}},
472 {0x7, "Keyboard",
473 {0x30,0x70,0x72,0xf0,EOT},
474 {0x00,0x00,0x00,0x00,EOT}},
475 {0x9, "Game port",
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}},
484 {EOT}}},
485 {0x52, "LPC47B37x", {
486 {EOT}}},
487 {0x54, "LPC47U33x", {
488 {NOLDN, NULL,
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}},
493 {0x0, "Floppy",
494 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
495 EOT},
496 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
497 EOT}},
498 {0x3, "Parallel port",
499 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
500 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
501 {0x4, "COM1",
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}},
507 {0x7, "Keyboard",
508 {0x30,0x70,0x72,0xf0,EOT},
509 {0x00,0x00,0x00,0x00,EOT}},
510 {0x9, "Game port",
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}},
516 {0xb, "SMBus",
517 {0x30,0x60,0x61,0x70,EOT},
518 {0x00,0x00,0x00,0x00,EOT}},
519 {EOT}}},
520 {0x56, "LPC47B34x", {
521 {EOT}}},
522 {0x57, "LPC47S42x", {
523 {EOT}}},
524 {0x59, "LPC47M10x/112/13x", {
525 {NOLDN, NULL,
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}},
530 {0x0, "Floppy",
531 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
532 0xf5,EOT},
533 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
534 0x00,EOT}},
535 {0x3, "Parallel port",
536 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
537 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
538 {0x4, "COM1",
539 {0x30,0x60,0x61,0x70,0xf0,EOT},
540 {0x00,0x00,0x00,0x00,0x00,EOT}},
541 {0x5, "COM2",
542 {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
543 0xf2,EOT},
544 {NANA,0x00,0x00,RSVD,RSVD,0x00,RSVD,0x00,0x02,
545 0x03,EOT}},
546 {0x7, "Keyboard",
547 {0x30,0x70,0x72,0xf0,EOT},
548 {0x00,0x00,0x00,0x00,EOT}},
549 {0x9, "Game port",
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}},
555 {0xb, "MPU-401",
556 {0x30,0x60,0x61,0x70,EOT},
557 {0x00,0x03,0x30,0x05,EOT}},
558 {EOT}}},
559 {0x5d, "LPC47B357", { /* From sensors-detect (no datasheet) */
560 {EOT}}},
561 {0x5f, "LPC47M14x", {
562 {EOT}}},
563 {0x60, "LPC47M15x/192/997", {
564 {NOLDN, NULL,
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}},
569 {0x0, "Floppy",
570 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
571 EOT},
572 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
573 EOT}},
574 {0x3, "Parallel port",
575 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
576 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
577 {0x4, "COM1",
578 {0x30,0x60,0x61,0x70,0xf0,EOT},
579 {0x00,0x00,0x00,0x00,0x00,EOT}},
580 {0x5, "COM2 / IR",
581 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
582 {NANA,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
583 {0x7, "Keyboard",
584 {0x30,0x70,0x72,0xf0,EOT},
585 {0x00,0x00,0x00,0x00,EOT}},
586 {0x9, "Game port",
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}},
592 {0xb, "MPU-401",
593 {0x30,0x60,0x61,0x70,EOT},
594 {0x00,0x03,0x30,0x05,EOT}},
595 {EOT}}},
596 {0x62, "LPC47S45x", {
597 {EOT}}},
598 {0x67, "EMC2700LPC", { /* From sensors-detect */
599 {EOT}}},
600 {0x6b, "LPC47M292", { /* From sensors-detect */
601 {EOT}}},
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. */
606 {EOT}}},
607 {0x6f, "LPC47B397", {
608 {EOT}}},
609 {0x74, "LPC47M182", { /* Only for LD_NUM = 0 */
610 {NOLDN, NULL,
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}},
615 {0x0, "Floppy",
616 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
617 0xf8,EOT},
618 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
619 0x24,EOT}},
620 {0x1, "Parallel port",
621 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf8,EOT},
622 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,0x08,EOT}},
623 {0x2, "COM2",
624 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
625 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
626 {0x3, "COM1",
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}},
632 {0x5, "Mouse",
633 {0x30,0x70,EOT},
634 {0x00,0x00,EOT}},
635 {0x6, "Keyboard",
636 {0x30,0x70,0xf0,EOT},
637 {0x00,0x00,0x00,EOT}},
638 {0x7, "GPIO",
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}},
644 {EOT}}},
645 {0x76, "LPC47M584", { /* From sensors-detect (no datasheet) */
646 {EOT}}},
647 {0x77, "A8000", { /* ASUS A8000, a rebranded DME1737(?) */
648 {NOLDN, NULL,
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}},
653 {0x0, "Floppy",
654 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
655 0xf5,EOT},
656 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
657 0x00,EOT}},
658 {0x3, "Parallel port",
659 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
660 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
661 {0x4, "COM1",
662 {0x30,0x60,0x61,0x70,0xf0,EOT},
663 {0x00,0x00,0x00,0x00,0x00,EOT}},
664 {0x5, "COM2",
665 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
666 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
667 {0x7, "Keyboard",
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}},
673 {EOT}}},
674 {0x78, "DME1737", {
675 {NOLDN, NULL,
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}},
680 {0x0, "Floppy",
681 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
682 0xf5,EOT},
683 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
684 0x00,EOT}},
685 {0x3, "Parallel port",
686 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
687 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
688 {0x4, "COM1",
689 {0x30,0x60,0x61,0x70,0xf0,EOT},
690 {0x00,0x00,0x00,0x00,0x00,EOT}},
691 {0x5, "COM2",
692 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
693 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
694 {0x7, "Keyboard",
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}},
700 {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}},
707 {0x0, "Floppy",
708 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
709 0xf5,EOT},
710 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
711 0x00,EOT}},
712 {0x3, "Parallel port",
713 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
714 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
715 {0x4, "COM1",
716 {0x30,0x60,0x61,0x70,0xf0,EOT},
717 {0x00,0x00,0x00,0x00,0x00,EOT}},
718 {0x5, "COM2",
719 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
720 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
721 {0x7, "Keyboard",
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}},
727 {EOT}}},
728 {0x7a, "LPC47N217", { /* Found in Toshiba Satellite A80-117. */
729 {NOLDN, NULL,
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}},
742 {EOT}}},
743 {0x7c, "SCH3112", {
744 {NOLDN, NULL,
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}},
749 {0x0, "Floppy",
750 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
751 0xf5,EOT},
752 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
753 0x00,EOT}},
754 {0x3, "Parallel port",
755 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
756 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
757 {0x4, "COM1",
758 {0x30,0x60,0x61,0x70,0xf0,EOT},
759 {0x00,0x00,0x00,0x00,0x00,EOT}},
760 {0x5, "COM2",
761 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
762 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
763 {0x7, "Keyboard",
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}},
769 {EOT}}},
770 {0x7d, "SCH3114", {
771 {NOLDN, NULL,
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}},
776 {0x0, "Floppy",
777 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
778 0xf5,EOT},
779 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
780 0x00,EOT}},
781 {0x3, "Parallel port",
782 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
783 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
784 {0x4, "COM1",
785 {0x30,0x60,0x61,0x70,0xf0,EOT},
786 {0x00,0x00,0x00,0x00,0x00,EOT}},
787 {0x5, "COM2",
788 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
789 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
790 {0x7, "Keyboard",
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}},
796 {0xb, "COM3",
797 {0x30,0x60,0x61,0x70,0xf0,EOT},
798 {0x00,0x00,0x00,0x00,0x00,EOT}},
799 {0xc, "COM4",
800 {0x30,0x60,0x61,0x70,0xf0,EOT},
801 {0x00,0x00,0x00,0x00,0x00,EOT}},
802 {EOT}}},
803 {0x7f, "SCH3116", {
804 {NOLDN, NULL,
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}},
809 {0x0, "Floppy",
810 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
811 0xf5,EOT},
812 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
813 0x00,EOT}},
814 {0x3, "Parallel port",
815 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
816 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
817 {0x4, "COM1",
818 {0x30,0x60,0x61,0x70,0xf0,EOT},
819 {0x00,0x00,0x00,0x00,0x00,EOT}},
820 {0x5, "COM2",
821 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
822 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
823 {0x7, "Keyboard",
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}},
829 {0xb, "COM3",
830 {0x30,0x60,0x61,0x70,0xf0,EOT},
831 {0x00,0x00,0x00,0x00,0x00,EOT}},
832 {0xc, "COM4",
833 {0x30,0x60,0x61,0x70,0xf0,EOT},
834 {0x00,0x00,0x00,0x00,0x00,EOT}},
835 {0xd, "COM5",
836 {0x30,0x60,0x61,0x70,0xf0,EOT},
837 {0x00,0x00,0x00,0x00,0x00,EOT}},
838 {0xe, "COM6",
839 {0x30,0x60,0x61,0x70,0xf0,EOT},
840 {0x00,0x00,0x00,0x00,0x00,EOT}},
841 {EOT}}},
842 {0x81, "SCH5307", {
843 {EOT}}},
844 {0x83, "SCH5514D", { /* From sensors-detect */
845 {EOT}}},
846 {0x86, "SCH5127", { /* From sensors-detect, dump from datasheet */
847 {NOLDN, NULL,
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}},
852 {0x0, "Floppy",
853 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
854 0xf5,EOT},
855 {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
856 0x00,EOT}},
857 {0x3, "Parallel port",
858 {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
859 {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
860 {0x4, "COM1",
861 {0x30,0x60,0x61,0x70,0xf0,EOT},
862 {0x00,0x00,0x00,0x00,0x00,EOT}},
863 {0x5, "COM2",
864 {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
865 {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
866 {0x7, "Keyboard",
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}},
872 {EOT}}},
873 {0x89, "SCH5027", { /* From sensors-detect (no public datasheet) */
874 {EOT}}},
875 {0x8c, "SCH5317", { /* From sensors-detect */
876 /* The SCH5317 can have either 0x85 or 0x8c as device ID. */
877 {EOT}}},
878 {0x90, "SCH4307", { /* From sensors-detect */
879 {EOT}}},
881 /* The following Super I/Os use the 0x0d/0x0e ID registers. */
882 {0x03, "FDC37C669", {
883 /* Init: 0x55, 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
884 /* Chiprev: 0x02. */
885 /* FIXME: There's another 0x03 but found on port 0x20/0x21! */
886 {EOT}}},
887 {0x04, "FDC37C669FR", { /* TODO: Not yet in sensors-detect. */
888 /* Init: 0x55, 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
889 {EOT}}},
890 {0x13, "LPC47N237", {
891 /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */
892 {EOT}}},
893 {0x28, "FDC37N769", {
894 /* Init: 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
895 {NOLDN, NULL,
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}},
906 {EOT}}},
907 {0x29, "FDC37N3869/FDC37N869", {
908 /* Init: 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
909 {EOT}}},
910 {0x5a, "LPC47N227", {
911 /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */
912 {NOLDN, NULL,
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}},
925 {EOT}}},
926 {0x5b, "SIO10N268", {
927 /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */
928 {NOLDN, NULL,
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}},
947 {EOT}}},
948 {0x65, "FDC37C665GT/IR", {
949 /* Init: 0x55, 0x55. Exit: 0xaa. Port: 0x3f0. */
950 /* Chiprev: 0x02 = FDC37C665GT, 0x82 = FDC37C665IR */
951 {EOT}}},
952 {0x66, "FDC37C666GT", {
953 /* Init: 0x55, 0x55. Exit: 0xaa. Port: 0x3f0. Chiprev: 0x02. */
954 {EOT}}},
955 {0xc4, "SCH5545", {
956 /* based on SCH5627 datasheet */
957 /* Init: 0x55. Exit: 0xaa. */
958 {0x7, "COM1",
959 {0x30, 0xf0, EOT},
960 {0x00, 0x00, EOT}},
961 {0x0c, "LPC Interface",
962 {0x30,
963 /* IRQ config */
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,
971 /* BAR EMI */
972 0x64, 0x65, 0x66, 0x67,
973 /* BAR UART1 */
974 0x68, 0x69, 0x6a, 0x6b,
975 /* BAR UART2 */
976 0x6c, 0x6d, 0x6e, 0x6f,
977 /* BAR Runtime Registers */
978 0x70, 0x71, 0x72, 0x73,
979 /* BAR 8042 */
980 0x78, 0x79, 0x7a, 0x7b,
981 /* BAR Floppy Disk Controller */
982 0x7c, 0x7d, 0x7e, 0x7f,
983 /* BAR Parallel Port */
984 0x80, 0x81, 0x82, 0x83,
985 EOT},
986 {EOT}},
987 {EOT}}},
988 /* FIXME: Conflicting ID with MEC5035
989 {0x46, "FDC37M602", { Found in Biostar M6TLD.
990 {EOT}}},
992 {0x46, "MEC5035", {
993 {NOLDN, NULL,
994 {0x07, 0x20, 0x21, 0x24, EOT},
995 {0x00, 0x46, 0x00, 0x00, EOT}},
996 {0x1, "Keyboard Controller",
997 {0x30, EOT},
998 {0x00, EOT}},
999 {0x6, "UART",
1000 {0x30, 0xF0, EOT},
1001 {0x00, 0x00, EOT}},
1002 {0xC, "LPC Interface",
1003 {0x30,
1004 /* IRQ Config */
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,
1024 /* BAR UART */
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,
1030 EOT},
1031 {0x00,
1032 /* IRQ Config */
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,
1052 /* BAR UART */
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,
1058 EOT}},
1059 {EOT}}},
1060 {EOT}
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.
1070 OUTB(0x55, port);
1071 OUTB(0x55, port);
1074 static void exit_conf_mode_smsc(uint16_t port)
1076 OUTB(0xaa, port);
1079 static void probe_idregs_smsc_helper(uint16_t port, uint8_t idreg,
1080 uint8_t revreg)
1082 uint8_t id, rev;
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)) {
1095 if (verbose)
1096 printf(NOTFOUND "id=0x%02x, rev=0x%02x\n", id, rev);
1097 exit_conf_mode_smsc(port);
1098 return;
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) {
1106 if (verbose)
1107 printf(NOTFOUND "id=0x%02x, rev=0x%02x\n",
1108 id, rev);
1109 exit_conf_mode_smsc(port);
1110 return;
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),
1116 id, rev, port);
1117 chip_found = 1;
1119 dump_superio((id == 0x77 ? "ASUS" : "SMSC"), reg_table, port, id,
1120 LDN_SEL);
1122 if (extra_dump) {
1123 switch (id) {
1124 case 0x5a: /* LPC47N227 */
1125 runtime_base = regval(port, 0x30) << 4;
1126 if (runtime_base)
1127 dump_io(runtime_base, 16);
1128 else
1129 printf("Runtime Register Block not mapped on this Super I/O.\n");
1130 break;
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);
1137 break;
1138 default:
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");