smsc.c
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 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 1074 static void exit_conf_mode_smsc(uint16_t port) 1075 { 1076 OUTB(0xaa, port); 1077 } 1078 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 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 1152 void print_smsc_chips(void) 1153 { 1154 print_vendor_chips("SMSC", reg_table); 1155 printf("SMSC LPC47N227 runtime register block\n\n"); 1156 }