summaryrefslogtreecommitdiff
path: root/util/superiotool/smsc.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/superiotool/smsc.c')
-rw-r--r--util/superiotool/smsc.c52
1 files changed, 51 insertions, 1 deletions
diff --git a/util/superiotool/smsc.c b/util/superiotool/smsc.c
index bf23188168..cc796b1127 100644
--- a/util/superiotool/smsc.c
+++ b/util/superiotool/smsc.c
@@ -437,7 +437,41 @@ static const struct superio_registers reg_table[] = {
{EOT}}},
{0x6f, "LPC47B397", {
{EOT}}},
- {0x74, "LPC47M182", {
+ {0x74, "LPC47M182", { /* Only for LD_NUM = 0 */
+ {NOLDN, NULL,
+ {0x02,0x03,0x07,0x20,0x21,0x22,0x23,0x24,0x26,0x27,
+ 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT},
+ {0x00,RSVD,0x00,0x74,RSVD,0x00,RSVD,0x44,MISC,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
+ {0x0, "Floppy",
+ {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf2,0xf4,
+ 0xf8,EOT},
+ {0x00,0x03,0xf0,0x06,0x02,0x0e,0x00,0xff,0x00,
+ 0x24,EOT}},
+ {0x1, "Parallel port",
+ {0x30,0x60,0x61,0x70,0x74,0xf0,0xf1,0xf8,EOT},
+ {0x00,0x00,0x00,0x00,0x04,0x3c,0x00,0x08,EOT}},
+ {0x2, "COM2",
+ {0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+ {0x00,0x00,0x00,0x00,0x00,0x02,0x03,EOT}},
+ {0x3, "COM1",
+ {0x30,0x60,0x61,0x70,0xf0,EOT},
+ {0x00,0x00,0x00,0x00,0x00,EOT}},
+ {0x4, "Power Control",
+ {0x30,0x60,0x61,0x70,0xf0,0xf1,EOT},
+ {0x00,0x00,0x00,0x00,NANA,0x00,EOT}},
+ {0x5, "Mouse",
+ {0x30,0x70,EOT},
+ {0x00,0x00,EOT}},
+ {0x6, "Keyboard",
+ {0x30,0x70,0xf0,EOT},
+ {0x00,0x00,0x00,EOT}},
+ {0x7, "GPIO",
+ {0x30,0x60,0x61,0x70,0x72,0xf0,EOT},
+ {0x00,0x00,0x00,0x00,0x00,0x00,EOT}},
+ {0xa, "Runtime registers",
+ {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT},
+ {0x00,0x00,0x00,0x00,0x00,NANA,RSVD,0x04,EOT}},
{EOT}}},
{0x76, "LPC47M584", { /* From sensors-detect (no datasheet) */
{EOT}}},
@@ -646,6 +680,22 @@ static void probe_idregs_smsc_helper(uint16_t port, uint8_t idreg,
dump_superio((id == 0x77 ? "ASUS" : "SMSC"), reg_table, port, id,
LDN_SEL);
+ if (extra_dump) {
+ uint16_t runtime_base;
+ switch (id) {
+ case 0x5a:
+ runtime_base = regval(port, 0x30) << 4;
+ if (runtime_base)
+ dump_io(runtime_base, 16);
+ else
+ printf("Runtime Register Block not mapped on this SuperIO.\n");
+
+ break;
+ default:
+ printf("No extra registers known for this chip\n");
+ }
+ }
+
exit_conf_mode_smsc(port);
}