Changeset 5269
- Timestamp:
- 05/28/08 11:52:16 (6 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
lm-sensors/branches/lm-sensors-3.0.0/prog/detect/sensors-detect
r5268 r5269 2212 2212 } 2213 2213 2214 # $_[0]: Base address 2215 # $_[1]: Register to read 2216 # Returns: read value 2217 # This one can be used for any ISA chip with index register at 2218 # offset 5 and data register at offset 6. 2219 sub isa_read_i5d6 2220 { 2221 my ($addr, $reg) = @_; 2222 return isa_read_byte($addr + 5, $addr + 6, $reg); 2223 } 2224 2214 2225 ################# 2215 2226 # AUTODETECTION # … … 3555 3566 return; 3556 3567 } 3557 my $readproc = sub { isa_read_byte($addr + 5, $addr + 6, @_) }; 3558 return unless ( &$readproc(0x40) & 0x80) == 0x00;3559 my $reg = &$readproc(0x49);3568 3569 return unless (isa_read_i5d6($addr, 0x40) & 0x80) == 0x00; 3570 my $reg = isa_read_i5d6($addr, 0x49); 3560 3571 return unless ($chip == 0 and ($reg == 0x00 or $reg == 0x20)) or 3561 3572 ($chip == 1 and $reg == 0x40) or … … 3563 3574 3564 3575 # Explicitly prevent misdetection of Winbond chips 3565 $reg = &$readproc(0x4f);3576 $reg = isa_read_i5d6($addr, 0x4f); 3566 3577 return if $reg == 0xa3 || $reg == 0x5c; 3567 3578 3568 3579 # Explicitly prevent misdetection of ITE chips 3569 $reg = &$readproc(0x58);3580 $reg = isa_read_i5d6($addr, 0x58); 3570 3581 return if $reg == 0x90; 3571 3582 … … 3582 3593 my ($chip, $isa_addr, $file, $i2c_addr) = @_; 3583 3594 my $i; 3584 my $readproc = sub { isa_read_byte($isa_addr + 5, $isa_addr + 6, @_) }; 3585 return 0 unless &$readproc(0x48) == $i2c_addr;3595 3596 return 0 unless isa_read_i5d6($isa_addr, 0x48) == $i2c_addr; 3586 3597 for ($i = 0x2b; $i <= 0x3d; $i ++) { 3587 return 0 unless &$readproc($i) == i2c_smbus_read_byte_data($file, $i);3598 return 0 unless isa_read_i5d6($isa_addr, $i) == i2c_smbus_read_byte_data($file, $i); 3588 3599 } 3589 3600 return 1; … … 4597 4608 my ($chip, $isa_addr, $file, $i2c_addr) = @_; 4598 4609 my $i; 4599 my $readproc = sub { isa_read_byte($isa_addr + 5, $isa_addr + 6, @_) }; 4600 return 0 unless &$readproc(0x48) == $i2c_addr;4610 4611 return 0 unless isa_read_i5d6($isa_addr, 0x48) == $i2c_addr; 4601 4612 for ($i = 0x2b; $i <= 0x3d; $i ++) { 4602 return 0 unless &$readproc($i) == i2c_smbus_read_byte_data($file, $i);4613 return 0 unless isa_read_i5d6($isa_addr, $i) == i2c_smbus_read_byte_data($file, $i); 4603 4614 } 4604 4615 return 1; … … 4623 4634 } 4624 4635 4625 my $read_proc = sub { isa_read_byte($addr + 5, $addr + 6, @_) }; 4626 $reg1 = &$read_proc(0x4e); 4627 $reg2 = &$read_proc(0x4f); 4636 $reg1 = isa_read_i5d6($addr, 0x4e); 4637 $reg2 = isa_read_i5d6($addr, 0x4f); 4628 4638 return unless (($reg1 & 0x80) == 0x00 and $reg2 == 0xa3) or 4629 4639 (($reg1 & 0x80) == 0x80 and $reg2 == 0x5c); 4630 4640 return unless ($reg1 & 0x07) == 0x00; 4631 $reg1 = &$read_proc(0x58);4641 $reg1 = isa_read_i5d6($addr, 0x58); 4632 4642 return if $chip == 0 and ($reg1 & 0xfe) != 0x10; 4633 4643 return if $chip == 1 and ($reg1 & 0xfe) != 0x30; … … 4985 4995 my ($chip, $isa_addr, $file, $i2c_addr) = @_; 4986 4996 my $i; 4987 my $readproc = sub { isa_read_byte($isa_addr + 5, $isa_addr + 6, @_) }; 4988 return 0 unless &$readproc(0x48) == $i2c_addr;4997 4998 return 0 unless isa_read_i5d6($isa_addr, 0x48) == $i2c_addr; 4989 4999 for ($i = 0x30; $i <= 0x45; $i++) { 4990 return 0 unless &$readproc($i) == i2c_smbus_read_byte_data($file, $i);5000 return 0 unless isa_read_i5d6($isa_addr, $i) == i2c_smbus_read_byte_data($file, $i); 4991 5001 } 4992 5002 return 1;
