2
0
mirror of https://github.com/lm-sensors/lm-sensors synced 2025-08-31 06:15:15 +00:00

Fix broken superio exit sequence handling.

git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@2323 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
Jean Delvare
2004-02-28 22:00:35 +00:00
parent e8eeb5f14a
commit b769ea66c5

View File

@@ -1299,8 +1299,8 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect
# This is a list of all recognized superio chips.
# Each entry must have the following fields:
# name: The full chip name
# driver: The driver name (without .o extension). Put in something like
# "Unwritten: <drivername>" if it is not yet available.
# driver: The driver name (without .o extension). Put in
# "to-be-written" if it is not yet available.
# addrreg: The address register
# datareg: The data register
# enter: The password sequence to write to the address register
@@ -1311,7 +1311,7 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect
# actreg (optional): The activation register within the logical device
# actmask (optional): The activation bit in the activation register
# basereg: The I/O base register within the logical device
# exitseq: Sequence of addr,val pairs which exits config modem
# exitseq: Sequence of addr,val pairs which exits config mode
# alias_detect (optional): For chips which can be both on the ISA and the
# I2C bus, a function which detectes whether two entries are the same.
# The function should take three parameters: The ISA address, the
@@ -1371,7 +1371,6 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect
name => "SMSC 47M10x Super IO Fan Sensors",
driver => "smsc47m1",
addrreg => 0x2e,
exitreg => 0x2e,
datareg => 0x2f,
enter => [0x55],
devidreg => 0x20,
@@ -1387,7 +1386,6 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect
name => "SMSC 47M14x Super IO Fan Sensors",
driver => "smsc47m1",
addrreg => 0x2e,
exitreg => 0x2e,
datareg => 0x2f,
enter => [0x55],
devidreg => 0x20,
@@ -1403,7 +1401,6 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect
name => "VT1211 Super IO Sensors",
driver => "vt1211",
addrreg => 0x2e,
exitreg => 0x2e,
datareg => 0x2f,
enter => [0x87, 0x87],
devidreg => 0x20,
@@ -1419,7 +1416,6 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect
name => "Winbond W83627HF Super IO Sensors",
driver => "w83627hf",
addrreg => 0x2e,
exitreg => 0x2e,
datareg => 0x2f,
enter => [0x87, 0x87],
devidreg => 0x20,
@@ -1435,7 +1431,6 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect
name => "Winbond W83627THF Super IO Sensors",
driver => "w83627hf",
addrreg => 0x2e,
exitreg => 0x2e,
datareg => 0x2f,
enter => [0x87, 0x87],
devidreg => 0x20,
@@ -1445,13 +1440,12 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect
actreg => 0x30,
actmask => 0x01,
basereg => 0x60,
exit => 0xaa,
exitseq => [0x2e, 0xaa],
},
{
name => "Winbond W83637HF Super IO Sensors",
driver => "w83627hf",
addrreg => 0x2e,
exitreg => 0x2e,
datareg => 0x2f,
enter => [0x87, 0x87],
devidreg => 0x20,
@@ -1467,7 +1461,6 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect
name => "Winbond W83697HF Super IO Sensors",
driver => "w83627hf",
addrreg => 0x2e,
exitreg => 0x2e,
datareg => 0x2f,
enter => [0x87, 0x87],
devidreg => 0x20,
@@ -1477,13 +1470,12 @@ use subs qw(mtp008_detect lm78_detect lm78_isa_detect lm78_alias_detect
actreg => 0x30,
actmask => 0x01,
basereg => 0x60,
exit => 0xaa,
exitseq => [0x2e, 0xaa],
},
{
name => "Winbond W83697UF Super IO PWM",
driver => "to-be-written",
addrreg => 0x2e,
exitreg => 0x2e,
datareg => 0x2f,
enter => [0x87, 0x87],
devidreg => 0x20,
@@ -2364,6 +2356,16 @@ sub scan_isa_bus
}
}
sub exit_superio
{
my $chip = shift;
my $addr;
while (defined($addr = shift(@{$$chip{exitseq}}))) {
outb($addr, shift(@{$$chip{exitseq}}));
}
}
sub scan_superio
{
my ($chip,$val,$addr,$conf);
@@ -2391,7 +2393,7 @@ sub scan_superio
$val = inb($$chip{datareg});
if(!($val & $$chip{actmask})) {
print " but not activated, module may not find\n";
outb($$chip{exitreg}, $$chip{exit});
exit_superio($chip);
next;
}
}
@@ -2402,7 +2404,7 @@ sub scan_superio
$addr = ($addr << 8) | inb($$chip{datareg});
if($addr == 0) {
print " but not activated, module may not find\n";
outb($$chip{addrreg}, $$chip{exit});
exit_superio($chip);
next;
}
printf " found at address 0x%04x\n", $addr;
@@ -2419,9 +2421,7 @@ sub scan_superio
printf " Failed! (0x%02x)\n", $val;
}
}
while ($addr = shift(@{$$chip{exitseq}})) {
outb($addr, shift(@{$$chip{exitseq}}));
}
exit_superio($chip);
}
}