xref: /aosp_15_r20/external/coreboot/util/superiotool/smsc.c (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include "superiotool.h"
4 
5 #define DEVICE_ID_REG_OLD	0x0d
6 #define DEVICE_REV_REG_OLD	0x0e
7 
8 #define DEVICE_ID_REG		0x20
9 #define DEVICE_REV_REG		0x21
10 
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", {
57 		/*
58 		 * Found in HP Elitebook 2760p and 8470p.
59 		 * The registers are taken from the datasheet of KBC1122 which is similar.
60 		 */
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}}},
880 
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}}},
991 	*/
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}
1061 };
1062 
enter_conf_mode_smsc(uint16_t port)1063 static void enter_conf_mode_smsc(uint16_t port)
1064 {
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.
1069 	 */
1070 	OUTB(0x55, port);
1071 	OUTB(0x55, port);
1072 }
1073 
exit_conf_mode_smsc(uint16_t port)1074 static void exit_conf_mode_smsc(uint16_t port)
1075 {
1076 	OUTB(0xaa, port);
1077 }
1078 
probe_idregs_smsc_helper(uint16_t port,uint8_t idreg,uint8_t revreg)1079 static void probe_idregs_smsc_helper(uint16_t port, uint8_t idreg,
1080 				     uint8_t revreg)
1081 {
1082 	uint8_t id, rev;
1083 	uint16_t runtime_base;
1084 	const char *info = (idreg == 0x20) ? "(idregs=0x20/0x21) "
1085 					   : "(idregs=0x0d/0x0e) ";
1086 
1087 	probing_for("SMSC", info, port);
1088 
1089 	enter_conf_mode_smsc(port);
1090 
1091 	id = regval(port, idreg);
1092 	rev = regval(port, revreg);
1093 
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;
1099 	}
1100 
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;
1111 		}
1112 	}
1113 
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;
1118 
1119 	dump_superio((id == 0x77 ? "ASUS" : "SMSC"), reg_table, port, id,
1120 		     LDN_SEL);
1121 
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");
1140 		}
1141 	}
1142 
1143 	exit_conf_mode_smsc(port);
1144 }
1145 
probe_idregs_smsc(uint16_t port)1146 void probe_idregs_smsc(uint16_t port)
1147 {
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);
1150 }
1151 
print_smsc_chips(void)1152 void print_smsc_chips(void)
1153 {
1154 	print_vendor_chips("SMSC", reg_table);
1155 	printf("SMSC LPC47N227 runtime register block\n\n");
1156 }
1157