/ util / superiotool / smsc.c
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  }