coreboot/util/superiotool/smsc.c
<<
>>
Prefs
   1/*
   2 * This file is part of the superiotool project.
   3 *
   4 * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
   5 * Copyright (C) 2008 coresystems GmbH <info@coresystems.de>
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation; either version 2 of the License, or
  10 * (at your option) any later version.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  20 */
  21
  22#include "superiotool.h"
  23
  24#define DEVICE_ID_REG_OLD       0x0d
  25#define DEVICE_REV_REG_OLD      0x0e
  26
  27#define DEVICE_ID_REG           0x20
  28#define DEVICE_REV_REG          0x21
  29
  30static const struct superio_registers reg_table[] = {
  31        /* The following Super I/Os use the 0x20/0x21 ID registers. */
  32        {0x02, "FDC37C932", {
  33                {NOLDN, NULL,
  34                        {0x02,0x03,0x20,0x21,0x22,0x23,0x24,0x2d,0x2e,
  35                         0x2f,EOT},
  36                        {0x00,0x03,0x02,0x01,0x00,0x00,0x04,NANA,NANA,
  37                         0x00,EOT}},
  38                {0x0, "Floppy",
  39                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
  40                         0xf5,EOT},
  41                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
  42                         0x00,EOT}},
  43                {0x1, "IDE 1",
  44                        {0x30,0x60,0x61,0x62,0x63,0x70,EOT},
  45                        {0x00,0x01,0xf0,0x03,0xf6,0x0e,EOT}},
  46                {0x2, "IDE 2",
  47                        {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,EOT},
  48                        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
  49                {0x3, "Parallel port",
  50                        {0x30,0x60,0x61,0x70,0x74,0xf0,EOT},
  51                        {0x00,0x00,0x00,0x00,0x04,0x3c,EOT}},
  52                {0x4, "COM1",
  53                        {0x30,0x60,0x61,0x70,0xf0,EOT},
  54                        {0x00,0x00,0x00,0x00,0x00,EOT}},
  55                {0x5, "COM2",
  56                        {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
  57                        {0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
  58                {0x6, "Real-time clock (RTC)",
  59                        {0x30,0x70,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,EOT},
  60                        {0x00,0x00,0x00,0x00,0x00,NANA,MISC,NANA,NANA,EOT}},
  61                {0x7, "Keyboard",
  62                        {0x30,0x70,0x72,EOT},
  63                        {0x00,0x00,0x00,EOT}},
  64                {0x8, "Aux I/O",
  65                        {0x30,0x60,0x61,0x62,0x63,0xe0,0xe1,0xe2,0xe3,0xe4,
  66                         0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xf0,
  67                         0xf1,0xf2,0xf3,0xf4,EOT},
  68                        {0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,
  69                         0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
  70                         0x00,0x00,0x00,MISC,EOT}},
  71                {EOT}}},
  72        {0x03, "FDC37C93xFR", {
  73                /* FIXME: There's another 0x03 but found on port 0x0d/0x0e! */
  74                {EOT}}},
  75        {0x0a, "FDC37N971", {
  76                {NOLDN, NULL,
  77                        {0x02,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
  78                         0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
  79                        {0x00,0x0a,0x00,0x00,0x00,0x04,0x04,NANA,NANA,0x00,
  80                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
  81                {0x0, "Floppy",
  82                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
  83                         0xf5,EOT},
  84                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,RSVD,0x00,
  85                         0x00,EOT}},
  86                {0x1, "Power management (PM1)",
  87                        {0x30,0x60,0x61,EOT},
  88                        {0x00,0x00,0x00,EOT}},
  89                {0x3, "Parallel port",
  90                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
  91                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
  92                {0x4, "COM1",
  93                        {0x30,0x60,0x61,0x70,0xf0,EOT},
  94                        {0x00,0x00,0x00,0x00,0x00,EOT}},
  95                {0x5, "COM2",
  96                        {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
  97                         0xf2,0xf7,0xf8,EOT},
  98                        {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,
  99                         0x03,0x00,0x00,EOT}},
 100                {0x6, "Real-time clock (RTC)",
 101                        {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,EOT},
 102                        {0x00,0x00,0x70,0x00,0x74,0x00,0x00,NANA,EOT}},
 103                {0x7, "Keyboard",
 104                        {0x30,0x60,0x61,0x70,0x72,0xf0,EOT},
 105                        {0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
 106                {0x8, "Embedded controller (EC)",
 107                        {0x30,0x60,0x61,EOT},
 108                        {0x00,0x00,0x62,EOT}},
 109                {0x9, "Mailbox",
 110                        {0x30,0x60,0x61,EOT},
 111                        {0x00,0x00,0x00,EOT}},
 112                {EOT}}},
 113        {0x0b, "FDC37N972", {
 114                {NOLDN, NULL,
 115                        {0x02,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
 116                         0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
 117                        {0x00,0x0b,0x00,0x00,0x00,0x04,0x04,NANA,NANA,0x00,
 118                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
 119                {0x0, "Floppy",
 120                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
 121                         0xf5,EOT},
 122                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,RSVD,0x00,
 123                         0x00,EOT}},
 124                {0x1, "Power management (PM1)",
 125                        {0x30,0x60,0x61,EOT},
 126                        {0x00,0x00,0x00,EOT}},
 127                {0x3, "Parallel port",
 128                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
 129                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
 130                {0x4, "COM1",
 131                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 132                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 133                {0x5, "COM2",
 134                        {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
 135                         0xf2,0xf7,0xf8,EOT},
 136                        {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,
 137                         0x03,0x00,0x00,EOT}},
 138                {0x6, "Real-time clock (RTC)",
 139                        {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,EOT},
 140                        {0x00,0x00,0x70,0x00,0x74,0x00,0x00,NANA,EOT}},
 141                {0x7, "Keyboard",
 142                        {0x30,0x60,0x61,0x70,0x72,0xf0,EOT},
 143                        {0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
 144                {0x8, "Embedded controller (EC)",
 145                        {0x30,0x60,0x61,EOT},
 146                        {0x00,0x00,0x62,EOT}},
 147                {0x9, "Mailbox",
 148                        {0x30,0x60,0x61,EOT},
 149                        {0x00,0x00,0x00,EOT}},
 150                {EOT}}},
 151        {0x0e, "LPC47N252", {   /* From sensors-detect */
 152                {NOLDN, NULL,
 153                        {0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
 154                         0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
 155                        {0x0e,NANA,0x00,0x00,0x04,0x04,NANA,NANA,0x00,
 156                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
 157                {0x0, "Floppy",
 158                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf3,0xf4,
 159                         0xf5,EOT},
 160                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,RSVD,0x00,
 161                         0x00,EOT}},
 162                {0x1, "Power management (PM1)",
 163                        {0x30,0x60,0x61,EOT},
 164                        {0x00,0x00,0x00,EOT}},
 165                {0x3, "Parallel port",
 166                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
 167                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
 168                {0x4, "COM1",
 169                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 170                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 171                {0x5, "COM2 / IRCC",
 172                        {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
 173                         0xf2,0xf7,0xf8,EOT},
 174                        {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,
 175                         0x03,0x00,0x00,EOT}},
 176                {0x6, "Real-time clock (RTC)",
 177                        {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,EOT},
 178                        {0x00,0x00,0x70,0x00,0x74,0x00,0x00,NANA,EOT}},
 179                {0x7, "Keyboard",
 180                        {0x30,0x60,0x61,0x70,0x72,0xf0,EOT},
 181                        {0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
 182                {0x8, "Embedded controller (EC)",
 183                        {0x30,0x60,0x61,EOT},
 184                        {0x00,0x00,0x62,EOT}},
 185                {0x9, "Mailbox Interface",
 186                        {0x30,0x60,0x61,EOT},
 187                        {0x00,0x00,0x00,EOT}},
 188                {0xa, "LPC/8051 addressable GPIO (LGPIO)",
 189                        {0x30,0x60,0x61,EOT},
 190                        {0x00,0x00,0x00,EOT}},
 191                {EOT}}},
 192        {0x14, "LPC47M172", {
 193                {EOT}}},
 194        {0x30, "FDC37C93xAPM", {
 195                {EOT}}},
 196        {0x40, "FDC37C67x", {   /* E.g. FDC37C672. Chiprev: 0x01 */
 197                {NOLDN, NULL,
 198                        {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x2b,0x2c,
 199                         0x2d,0x2e,0x2f,EOT},
 200                        {0x03,0x40,NANA,0x00,0x00,0x04,MISC,MISC,NANA,NANA,
 201                         NANA,NANA,NANA,EOT}},
 202                {0x0, "Floppy",
 203                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
 204                         EOT},
 205                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
 206                         EOT}},
 207                {0x3, "Parallel port",
 208                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
 209                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
 210                {0x4, "COM1",
 211                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 212                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 213                {0x5, "COM2",
 214                        {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
 215                         EOT},
 216                        {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
 217                         EOT}},
 218                {0x7, "Keyboard",
 219                        {0x30,0x70,0x72,0xf0,EOT},
 220                        {0x00,0x00,0x00,0x00,EOT}},
 221                {0x8, "Aux I/O",
 222                        {0x30,0xb4,0xb5,0xb6,0xb7,0xc0,0xc1,0xc2,0xc3,0xc4,
 223                         0xf1,0xf2,0xf3,0xf4,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
 224                         EOT},
 225                        {0x00,NANA,NANA,NANA,NANA,0x06,0x03,NANA,NANA,NANA,
 226                         0x00,0x00,0x00,MISC,RSVD,RSVD,RSVD,RSVD,RSVD,RSVD,
 227                         EOT}},
 228                {EOT}}},
 229        {0x42, "FDC37B80x/FDC37M707", {
 230                {EOT}}},
 231        {0x09, "FDC37N958FR", { /* Found in e.g. Dell Latitude CPi A366XT. */
 232                {NOLDN, NULL,
 233                        {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2b,
 234                         0x2c,0x2d,0x2e,0x2f,EOT},
 235                        {0x03,0x44,0x00,0x00,0x00,0x04,MISC,MISC,0x00,NANA,
 236                         NANA,NANA,NANA,NANA,EOT}},
 237                {0x0, "Floppy",
 238                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
 239                         EOT},
 240                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
 241                         EOT}},
 242                {0x3, "Parallel port",
 243                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
 244                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
 245                {0x4, "COM1",
 246                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 247                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 248                {0x5, "COM2",
 249                        {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
 250                         EOT},
 251                        {NANA,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
 252                         EOT}},
 253                {0x6, "Real-time clock (RTC)",
 254                        {0x30,0x62,0x63,0x70,0xf0,EOT},
 255                        {0x00,0x00,0x70,0x00,0x00,EOT}},
 256                {0x7, "Keyboard",
 257                        {0x30,0x70,0x72,0xf0,EOT},
 258                        {0x00,0x00,0x00,0x00,EOT}},
 259                {0x8, "Aux I/O",
 260                        {0x30,0xb0,0xb1,0xb2,0xb3,0xb8,0xc0,0xc1,0xc2,0xc3,
 261                         0xc4,0xc5,0xc6,0xc8,0xca,0xcb,0xcc,0xd0,0xd1,0xd2,
 262                         0xd3,0xd4,0xd5,0xd6,0xd7,0xe0,0xe1,0xe2,0xe3,0xe4,
 263                         0xe5,0xe6,0xe7,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf6,
 264                         0xf9,0xfa,EOT},
 265                        {0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x01,NANA,NANA,
 266                         NANA,0x00,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
 267                         NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
 268                         NANA,NANA,NANA,NANA,NANA,0x00,0x00,0x00,0x00,NANA,
 269                         NANA,NANA,EOT}},
 270                {0xa, "ACPI",
 271                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 272                        {0x00,0x00,0x00,NANA,NANA,EOT}},
 273                {EOT}}},
 274        {0x43, "FDC37B77x", {
 275                {EOT}}},
 276        {0x44, "FDC37B78x", {
 277                {NOLDN, NULL,
 278                        {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2b,
 279                         0x2c,0x2d,0x2e,0x2f,EOT},
 280                        {0x03,0x44,0x00,0x00,0x00,0x04,MISC,MISC,0x00,NANA,
 281                         NANA,NANA,NANA,NANA,EOT}},
 282                {0x0, "Floppy",
 283                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
 284                         EOT},
 285                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
 286                         EOT}},
 287                {0x3, "Parallel port",
 288                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
 289                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
 290                {0x4, "COM1",
 291                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 292                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 293                {0x5, "COM2",
 294                        {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
 295                         EOT},
 296                        {NANA,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
 297                         EOT}},
 298                {0x6, "Real-time clock (RTC)",
 299                        {0x30,0x62,0x63,0x70,0xf0,EOT},
 300                        {0x00,0x00,0x70,0x00,0x00,EOT}},
 301                {0x7, "Keyboard",
 302                        {0x30,0x70,0x72,0xf0,EOT},
 303                        {0x00,0x00,0x00,0x00,EOT}},
 304                {0x8, "Aux I/O",
 305                        {0x30,0xb0,0xb1,0xb2,0xb3,0xb8,0xc0,0xc1,0xc2,0xc3,
 306                         0xc4,0xc5,0xc6,0xc8,0xca,0xcb,0xcc,0xd0,0xd1,0xd2,
 307                         0xd3,0xd4,0xd5,0xd6,0xd7,0xe0,0xe1,0xe2,0xe3,0xe4,
 308                         0xe5,0xe6,0xe7,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf6,
 309                         0xf9,0xfa,EOT},
 310                        {0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x01,NANA,NANA,
 311                         NANA,0x00,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
 312                         NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
 313                         NANA,NANA,NANA,NANA,NANA,0x00,0x00,0x00,0x00,NANA,
 314                         NANA,NANA,EOT}},
 315                {0xa, "ACPI",
 316                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 317                        {0x00,0x00,0x00,NANA,NANA,EOT}},
 318                {EOT}}},
 319        {0x46, "FDC37M602", {   /* Found in Biostar M6TLD. */
 320                {EOT}}},
 321        {0x47, "FDC37M60x", {   /* TODO: Not yet in sensors-detect */
 322                {EOT}}},
 323        {0x4c, "FDC37B72x", {
 324                {NOLDN, NULL,
 325                        {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2b,
 326                         0x2c,0x2d,0x2e,0x2f,EOT},
 327                        {0x03,0x4c,0x00,0x00,0x00,0x04,MISC,MISC,0x00,NANA,
 328                         NANA,NANA,NANA,NANA,EOT}},
 329                {0x0, "Floppy",
 330                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
 331                         EOT},
 332                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
 333                         EOT}},
 334                {0x3, "Parallel port",
 335                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
 336                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
 337                {0x4, "COM1",
 338                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 339                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 340                {0x5, "COM2",
 341                        {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
 342                        {NANA,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
 343                {0x7, "Keyboard",
 344                        {0x30,0x70,0x72,0xf0,EOT},
 345                        {0x00,0x00,0x00,0x00,EOT}},
 346                {0x8, "Aux I/O",
 347                        {0x30,0xb0,0xb1,0xb2,0xb3,0xb8,0xc0,0xc1,0xc2,0xc3,
 348                         0xc4,0xc5,0xc6,0xc8,0xca,0xcb,0xcc,0xd0,0xd1,0xd2,
 349                         0xd3,0xd4,0xd5,0xd6,0xd7,0xe0,0xe1,0xe2,0xe3,0xe4,
 350                         0xe5,0xe6,0xe7,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf6,
 351                         0xf9,0xfa,EOT},
 352                        {0x00,NANA,NANA,NANA,NANA,NANA,0x00,0x01,NANA,NANA,
 353                         NANA,0x00,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
 354                         NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,
 355                         NANA,NANA,NANA,NANA,NANA,0x00,0x00,0x00,MISC,NANA,
 356                         NANA,NANA,EOT}},
 357                {0xa, "ACPI",
 358                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 359                        {0x00,0x00,0x00,NANA,NANA,EOT}},
 360                {EOT}}},
 361#if 0
 362        /* FIXME: FDC37M81x and MEC1308 have conflicting device IDs */
 363        {0x4d, "FDC37M81x", {
 364                {NOLDN, NULL,
 365                        {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x2b,0x2c,
 366                         0x2d,0x2e,0x2f,EOT},
 367                        {0x03,0x4d,NANA,0x00,0x00,0x04,MISC,MISC,NANA,NANA,
 368                         NANA,NANA,NANA,EOT}},
 369                {0x0, "Floppy",
 370                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
 371                         0xf5,EOT},
 372                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
 373                         0x00,EOT}},
 374                {0x3, "Parallel port",
 375                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
 376                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
 377                {0x4, "COM1",
 378                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 379                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 380                {0x5, "COM2",
 381                        {0x30,0x60,0x61,0x62,0x63,0x70,0xf0,0xf1,0xf2,EOT},
 382                        {0x00,0x00,0x00,RSVD,RSVD,0x00,0x00,0x02,0x03,EOT}},
 383                {0x7, "Keyboard",
 384                        {0x30,0x70,0x72,0xf0,EOT},
 385                        {0x00,0x00,0x00,0x00,EOT}},
 386                {0x8, "Aux I/O",
 387                        /* Only 0xf6 existing (and reserved) or 0xf6..0xfb? */
 388                        {0x30,0xb4,0xb5,0xb6,0xb7,0xc0,0xc1,0xc2,0xc3,0xc4,
 389                         0xc5,0xc6,0xc7,0xc8,0xf1,0xf2,0xf3,0xf4,0xf6,0xf7,
 390                         0xf8,0xf9,0xfa,0xfb,EOT},
 391                        {0x00,NANA,NANA,NANA,NANA,0x02,0x01,NANA,NANA,NANA,
 392                         NANA,NANA,NANA,NANA,0x00,0x00,0x00,0x00,RSVD,RSVD,
 393                         RSVD,RSVD,RSVD,RSVD,EOT}},
 394                {EOT}}},
 395#endif
 396        {0x4d, "MEC1308", {
 397                {NOLDN, NULL,
 398                        {0x02,0x03,0x07,0x17,0x20,0x21,0x22,0x23,0x24,0x25,
 399                         0x26,0x27,0X28,0X29,0X2a,0X2b,0X2c,0X2d,0X2e,0X2f,
 400                         EOT},
 401                        {0x00,RSVD,0x00,RSVD,0x4d,0x00,0x00,0x00,0x04,0x04,
 402                         MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,MISC,
 403                         EOT}},
 404                {0x1, "PM1",
 405                        {0x30,0x60,0x61,EOT},
 406                        {0x00,0x00,0x00,EOT}},
 407                {0x4, "COM1",
 408                        {0x30,0x60,0x61,0x70,EOT},
 409                        {0x00,0x00,0x00,0x00,EOT}},
 410                {0x7, "KBD",
 411                        {0x30,0x70,0x72,0xF0,EOT},
 412                        {0x00,0x00,0x00,0x00,EOT}},
 413                {0x8, "EC/ACPI",
 414                        {0x30,0x60,0x61,EOT},
 415                        {0x00,0x00,0x62,EOT}},
 416                {0x9, "Mailbox",
 417                        {0x30,0x60,0x61,EOT},
 418                        {0x00,0x00,0x00,EOT}},
 419                {0x10, "CIRV",
 420                        {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf3,0xf4,EOT},
 421                        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
 422                {EOT}}},
 423        {0x51, "LPC47B27x", {
 424                {NOLDN, NULL,
 425                        {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,
 426                         0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
 427                        {RSVD,0x51,NANA,0x00,0x00,0x04,MISC,MISC,RSVD,
 428                         NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
 429                {0x0, "Floppy",
 430                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
 431                         EOT},
 432                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
 433                         EOT}},
 434                {0x3, "Parallel port",
 435                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
 436                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
 437                {0x4, "COM1",
 438                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 439                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 440                {0x5, "COM2",
 441                        {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,0xf2,
 442                         EOT},
 443                        {NANA,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x03,
 444                         EOT}},
 445                {0x7, "Keyboard",
 446                        {0x30,0x70,0x72,0xf0,EOT},
 447                        {0x00,0x00,0x00,0x00,EOT}},
 448                {0x9, "Game port",
 449                        {0x30,0x60,0x61,EOT},
 450                        {0x00,0x00,0x00,EOT}},
 451                {0xa, "Power-management events (PME)",
 452                        {0x30,0x60,0x61,0xf0,0xf1,EOT},
 453                        {0x00,0x00,0x00,NANA,NANA,EOT}},
 454                {0xb, "MIDI port (MPU-401)",
 455                        {0x30,0x60,0x61,0x70,EOT},
 456                        {0x00,0x03,0x30,0x05,EOT}},
 457                {EOT}}},
 458        {0x52, "LPC47B37x", {
 459                {EOT}}},
 460        {0x54, "LPC47U33x", {
 461                {NOLDN, NULL,
 462                        {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x2a,0x2b,
 463                         0x2c,0x2d,0x2e,0x2f,EOT},
 464                        {RSVD,0x54,NANA,0x00,0x00,0x04,MISC,MISC,NANA,NANA,
 465                         NANA,NANA,NANA,NANA,EOT}},
 466                {0x0, "Floppy",
 467                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
 468                         EOT},
 469                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
 470                         EOT}},
 471                {0x3, "Parallel port",
 472                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
 473                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
 474                {0x4, "COM1",
 475                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 476                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 477                {0x5, "MIDI port (MPU-401)",
 478                        {0x30,0x60,0x61,0x70,EOT},
 479                        {0x00,0x03,0x30,0x05,EOT}},
 480                {0x7, "Keyboard",
 481                        {0x30,0x70,0x72,0xf0,EOT},
 482                        {0x00,0x00,0x00,0x00,EOT}},
 483                {0x9, "Game port",
 484                        {0x30,0x60,0x61,EOT},
 485                        {0x00,0x00,0x00,EOT}},
 486                {0xa, "Runtime registers",
 487                        {0x30,0x60,0x61,0xf0,0xf1,EOT},
 488                        {0x00,0x00,0x00,NANA,NANA,EOT}},
 489                {0xb, "SMBus",
 490                        {0x30,0x60,0x61,0x70,EOT},
 491                        {0x00,0x00,0x00,0x00,EOT}},
 492                {EOT}}},
 493        {0x56, "LPC47B34x", {
 494                {EOT}}},
 495        {0x57, "LPC47S42x", {
 496                {EOT}}},
 497        {0x59, "LPC47M10x/112/13x", {
 498                {NOLDN, NULL,
 499                        {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,
 500                         0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
 501                        {RSVD,0x59,NANA,0x00,0x00,0x44,MISC,MISC,RSVD,NANA,
 502                         NANA,NANA,NANA,NANA,NANA,EOT}},
 503                {0x0, "Floppy",
 504                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
 505                         0xf5,EOT},
 506                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
 507                         0x00,EOT}},
 508                {0x3, "Parallel port",
 509                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
 510                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
 511                {0x4, "COM1",
 512                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 513                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 514                {0x5, "COM2",
 515                        {0x30,0x60,0x61,0x62,0x63,0x70,0x74,0xf0,0xf1,
 516                         0xf2,EOT},
 517                        {NANA,0x00,0x00,RSVD,RSVD,0x00,RSVD,0x00,0x02,
 518                         0x03,EOT}},
 519                {0x7, "Keyboard",
 520                        {0x30,0x70,0x72,0xf0,EOT},
 521                        {0x00,0x00,0x00,0x00,EOT}},
 522                {0x9, "Game port",
 523                        {0x30,0x60,0x61,EOT},
 524                        {0x00,0x00,0x00,EOT}},
 525                {0xa, "Power management events (PME)",
 526                        {0x30,0x60,0x61,0xf0,0xf1,EOT},
 527                        {0x00,0x00,0x00,NANA,RSVD,EOT}},
 528                {0xb, "MPU-401",
 529                        {0x30,0x60,0x61,0x70,EOT},
 530                        {0x00,0x03,0x30,0x05,EOT}},
 531                {EOT}}},
 532        {0x5d, "LPC47B357", {   /* From sensors-detect (no datasheet) */
 533                {EOT}}},
 534        {0x5f, "LPC47M14x", {
 535                {EOT}}},
 536        {0x60, "LPC47M15x/192/997", {
 537                {NOLDN, NULL,
 538                        {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,
 539                         0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
 540                        {RSVD,0x60,NANA,0x00,0x00,0x44,MISC,MISC,RSVD,NANA,
 541                         NANA,NANA,NANA,NANA,NANA,EOT}},
 542                {0x0, "Floppy",
 543                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,0xf5,
 544                         EOT},
 545                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,0x00,
 546                         EOT}},
 547                {0x3, "Parallel port",
 548                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
 549                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
 550                {0x4, "COM1",
 551                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 552                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 553                {0x5, "COM2 / IR",
 554                        {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
 555                        {NANA,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
 556                {0x7, "Keyboard",
 557                        {0x30,0x70,0x72,0xf0,EOT},
 558                        {0x00,0x00,0x00,0x00,EOT}},
 559                {0x9, "Game port",
 560                        {0x30,0x60,0x61,EOT},
 561                        {0x00,0x00,0x00,EOT}},
 562                {0xa, "Power management events (PME)",
 563                        {0x30,0x60,0x61,0xf0,EOT},
 564                        {0x00,0x00,0x00,NANA,EOT}},
 565                {0xb, "MPU-401",
 566                        {0x30,0x60,0x61,0x70,EOT},
 567                        {0x00,0x03,0x30,0x05,EOT}},
 568                {EOT}}},
 569        {0x62, "LPC47S45x", {
 570                {EOT}}},
 571        {0x67, "EMC2700LPC", {  /* From sensors-detect */
 572                {EOT}}},
 573        {0x6b, "LPC47M292", {   /* From sensors-detect */
 574                {EOT}}},
 575        {0x6e, "LPC47B387", {   /* TODO: Not yet in sensors-detect */
 576                /* Found in the HP Compaq Business Desktop d530 Series */
 577                /* http://article.gmane.org/gmane.linux.bios/27192 */
 578                /* We cannot find a public datasheet for this Super I/O. */
 579                {EOT}}},
 580        {0x6f, "LPC47B397", {
 581                {EOT}}},
 582        {0x74, "LPC47M182", { /* Only for LD_NUM = 0 */
 583                {NOLDN, NULL,
 584                        {0x02,0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,
 585                         0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
 586                        {0x00,RSVD,0x74,RSVD,0x00,RSVD,0x44,MISC,0x00,
 587                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
 588                {0x0, "Floppy",
 589                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
 590                         0xf8,EOT},
 591                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
 592                         0x24,EOT}},
 593                {0x1, "Parallel port",
 594                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf8,EOT},
 595                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,0x08,EOT}},
 596                {0x2, "COM2",
 597                        {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
 598                        {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
 599                {0x3, "COM1",
 600                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 601                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 602                {0x4, "Power control",
 603                        {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
 604                        {0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
 605                {0x5, "Mouse",
 606                        {0x30,0x70,EOT},
 607                        {0x00,0x00,EOT}},
 608                {0x6, "Keyboard",
 609                        {0x30,0x70,0xf0,EOT},
 610                        {0x00,0x00,0x00,EOT}},
 611                {0x7, "GPIO",
 612                        {0x30,0x60,0x61,0x70,0x72,0xf0,EOT},
 613                        {0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
 614                {0xa, "Runtime registers",
 615                        {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT},
 616                        {0x00,0x00,0x00,0x00,0x00,NANA,RSVD,0x04,EOT}},
 617                {EOT}}},
 618        {0x76, "LPC47M584", {   /* From sensors-detect (no datasheet) */
 619                {EOT}}},
 620        {0x77, "A8000", {       /* ASUS A8000, a rebranded DME1737(?) */
 621                {NOLDN, NULL,
 622                        {0x03,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,
 623                         0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
 624                        {RSVD,0x77,NANA,0x00,RSVD,0x44,MISC,MISC,RSVD,NANA,
 625                         NANA,NANA,NANA,NANA,NANA,EOT}},
 626                {0x0, "Floppy",
 627                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
 628                         0xf5,EOT},
 629                        {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
 630                         0x00,EOT}},
 631                {0x3, "Parallel port",
 632                        {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,EOT},
 633                        {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,EOT}},
 634                {0x4, "COM1",
 635                        {0x30,0x60,0x61,0x70,0xf0,EOT},
 636                        {0x00,0x00,0x00,0x00,0x00,EOT}},
 637                {0x5, "COM2",
 638                        {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
 639                        {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
 640                {0x7, "Keyboard",
 641                        {0x30,0x70,0x72,0xf0,EOT},
 642                        {0x00,0x00,0x00,0x00,EOT}},
 643                {0xa, "Runtime registers",
 644                        {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT},
 645                        {0x00,0x00,0x00,0x00,0x00,NANA,RSVD,0x04,EOT}},
 646                {EOT}}},
 647        {0x78, "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        {0x79, "SCH5504", {     /* From sensors-detect (no datasheet) */
 675                {EOT}}},
 676        {0x7a, "LPC47N217", {   /* Found in Toshiba Satellite A80-117. */
 677                {EOT}}},
 678        {0x7c, "SCH3112", {
 679                {EOT}}},
 680        {0x7d, "SCH3114", {
 681                {EOT}}},
 682        {0x7f, "SCH3116", {
 683                {EOT}}},
 684        {0x81, "SCH5307", {
 685                {EOT}}},
 686        {0x83, "SCH5514D", {    /* From sensors-detect */
 687                {EOT}}},
 688        {0x85, "SCH5317", {     /* From sensors-detect */
 689                /* The SCH5317 can have either 0x85 or 0x8c as device ID. */
 690                {EOT}}},
 691        {0x86, "SCH5127", {     /* From sensors-detect */
 692                {EOT}}},
 693        {0x89, "SCH5027", {     /* From sensors-detect (no public datasheet) */
 694                {EOT}}},
 695        {0x8c, "SCH5317", {     /* From sensors-detect */
 696                /* The SCH5317 can have either 0x85 or 0x8c as device ID. */
 697                {EOT}}},
 698        {0x90, "SCH4307", {     /* From sensors-detect */
 699                {EOT}}},
 700
 701        /* The following Super I/Os use the 0x0d/0x0e ID registers. */
 702        {0x03, "FDC37C669", {
 703                /* Init: 0x55, 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
 704                /* Chiprev: 0x02. */
 705                /* FIXME: There's another 0x03 but found on port 0x20/0x21! */
 706                {EOT}}},
 707        {0x04, "FDC37C669FR", { /* TODO: Not yet in sensors-detect. */
 708                /* Init: 0x55, 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
 709                {EOT}}},
 710        {0x13, "LPC47N237", {
 711                /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */
 712                {EOT}}},
 713        {0x28, "FDC37N769", {
 714                /* Init: 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
 715                {NOLDN, NULL,
 716                        {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
 717                         0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
 718                         0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
 719                         0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
 720                         0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
 721                        {0x28,0x9c,0x88,0x70,0x00,0x00,0xff,0x00,0x00,0x00,
 722                         0x00,0x00,0x02,0x28,NANA,0x00,0x00,0x80,RSVD,RSVD,
 723                         NANA,NANA,NANA,0x03,RSVD,RSVD,RSVD,RSVD,RSVD,RSVD,
 724                         0x80,0x00,0x3c,RSVD,RSVD,0x00,0x00,0x00,0x00,0x00,
 725                         0x00,0x00,RSVD,0x00,0x00,0x03,0x00,0x00,EOT}},
 726                {EOT}}},
 727        {0x29, "FDC37N3869/FDC37N869", {
 728                /* Init: 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */
 729                {EOT}}},
 730        {0x5a, "LPC47N227", {
 731                /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */
 732                {NOLDN, NULL,
 733                        {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
 734                         0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
 735                         0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
 736                         0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
 737                         0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,
 738                         0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,EOT},
 739                        {0x28,0x9c,0x08,0x70,0x00,0x00,0xff,0x00,RSVD,0x00,
 740                         0x00,0x00,0x02,0x5a,NANA,0x00,0x00,0x80,MISC,0x00,
 741                         NANA,NANA,NANA,0x03,RSVD,RSVD,RSVD,RSVD,RSVD,RSVD,
 742                         RSVD,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 743                         0x00,0x80,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
 744                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,EOT}},
 745                {EOT}}},
 746        {0x5b, "SIO10N268", {
 747                /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */
 748                {NOLDN, NULL,
 749                        {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
 750                         0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
 751                         0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
 752                         0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
 753                         0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,
 754                         0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,
 755                         0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,
 756                         0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
 757                         0x50,0x51,0x52,0x53,0x54,EOT},
 758                        {0x20,0x98,0x00,0x70,0x00,0x00,0xff,0x00,0x00,0x00,
 759                         0x00,0x00,0x02,0x5b,NANA,0x00,0x00,0x00,MISC,0x00,
 760                         NANA,NANA,NANA,0x03,0x00,NANA,NANA,0x00,0x00,0x00,
 761                         NANA,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0xff,0x00,
 762                         0x00,0x80,0x00,0x00,0x0f,0x03,0x00,0x00,0x00,NANA,
 763                         NANA,NANA,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x00,
 764                         0x00,0x00,0x00,0x00,NANA,NANA,NANA,NANA,NANA,0x50,
 765                         NANA,0x00,NANA,NANA,NANA,NANA,NANA,NANA,0x00,0x01,
 766                         0x00,0x01,0x00,0x8c,MISC,EOT}},
 767                {EOT}}},
 768        {0x65, "FDC37C665GT/IR", {
 769                /* Init: 0x55, 0x55. Exit: 0xaa. Port: 0x3f0. */
 770                /* Chiprev: 0x02 = FDC37C665GT, 0x82 = FDC37C665IR */
 771                {EOT}}},
 772        {0x66, "FDC37C666GT", {
 773                /* Init: 0x55, 0x55. Exit: 0xaa. Port: 0x3f0. Chiprev: 0x02. */
 774                {EOT}}},
 775        {EOT}
 776};
 777
 778static void enter_conf_mode_smsc(uint16_t port)
 779{
 780        /* Some of the SMSC Super I/Os have an 0x55,0x55 init, some only
 781         * require one 0x55. We do 0x55,0x55 for all of them at the moment,
 782         * in the assumption that the extra 0x55 won't hurt the other
 783         * Super I/Os. This is verified to be true on (at least) the FDC37N769.
 784         */
 785        OUTB(0x55, port);
 786        OUTB(0x55, port);
 787}
 788
 789static void exit_conf_mode_smsc(uint16_t port)
 790{
 791        OUTB(0xaa, port);
 792}
 793
 794static void probe_idregs_smsc_helper(uint16_t port, uint8_t idreg,
 795                                     uint8_t revreg)
 796{
 797        uint8_t id, rev;
 798        uint16_t runtime_base;
 799        const char *info = (idreg == 0x20) ? "(idregs=0x20/0x21) "
 800                                           : "(idregs=0x0d/0x0e) ";
 801
 802        probing_for("SMSC", info, port);
 803
 804        enter_conf_mode_smsc(port);
 805
 806        id = regval(port, idreg);
 807        rev = regval(port, revreg);
 808
 809        if (superio_unknown(reg_table, id)) {
 810                if (verbose)
 811                        printf(NOTFOUND "id=0x%02x, rev=0x%02x\n", id, rev);
 812                exit_conf_mode_smsc(port);
 813                return;
 814        }
 815
 816        printf("Found %s %s (id=0x%02x, rev=0x%02x) at 0x%x\n",
 817               (id == 0x77 ? "ASUS" : "SMSC"), get_superio_name(reg_table, id),
 818               id, rev, port);
 819        chip_found = 1;
 820
 821        dump_superio((id == 0x77 ? "ASUS" : "SMSC"), reg_table, port, id,
 822                     LDN_SEL);
 823
 824        if (extra_dump) {
 825                switch (id) {
 826                case 0x5a: /* LPC47N227 */
 827                        runtime_base = regval(port, 0x30) << 4;
 828                        if (runtime_base)
 829                                dump_io(runtime_base, 16);
 830                        else
 831                                printf("Runtime Register Block not mapped on this Super I/O.\n");
 832                        break;
 833                default:
 834                        printf("No extra registers known for this chip.\n");
 835                }
 836        }
 837
 838        exit_conf_mode_smsc(port);
 839}
 840
 841void probe_idregs_smsc(uint16_t port)
 842{
 843        probe_idregs_smsc_helper(port, DEVICE_ID_REG, DEVICE_REV_REG);
 844        probe_idregs_smsc_helper(port, DEVICE_ID_REG_OLD, DEVICE_REV_REG_OLD);
 845}
 846
 847void print_smsc_chips(void)
 848{
 849        print_vendor_chips("SMSC", reg_table);
 850        printf("SMSC LPC47N227 runtime register block\n\n");
 851}
 852
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.