Changeset 5269

Show
Ignore:
Timestamp:
05/28/08 11:52:16 (5 years ago)
Author:
khali
Message:

Have a common function for LM78-like ISA access, so that we no longer have
to define it again each time we need it.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/branches/lm-sensors-3.0.0/prog/detect/sensors-detect

    r5268 r5269  
    22122212} 
    22132213 
     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. 
     2219sub isa_read_i5d6 
     2220{ 
     2221  my ($addr, $reg) = @_; 
     2222  return isa_read_byte($addr + 5, $addr + 6, $reg); 
     2223} 
     2224 
    22142225################# 
    22152226# AUTODETECTION # 
     
    35553566    return; 
    35563567  } 
    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); 
    35603571  return unless ($chip == 0 and ($reg == 0x00 or $reg == 0x20)) or 
    35613572                ($chip == 1 and $reg == 0x40) or 
     
    35633574 
    35643575  # Explicitly prevent misdetection of Winbond chips 
    3565   $reg = &$readproc(0x4f); 
     3576  $reg = isa_read_i5d6($addr, 0x4f); 
    35663577  return if $reg == 0xa3 || $reg == 0x5c; 
    35673578 
    35683579  # Explicitly prevent misdetection of ITE chips 
    3569   $reg = &$readproc(0x58); 
     3580  $reg = isa_read_i5d6($addr, 0x58); 
    35703581  return if $reg == 0x90; 
    35713582 
     
    35823593  my ($chip, $isa_addr, $file, $i2c_addr) = @_; 
    35833594  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; 
    35863597  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); 
    35883599  } 
    35893600  return 1; 
     
    45974608  my ($chip, $isa_addr, $file, $i2c_addr) = @_; 
    45984609  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; 
    46014612  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); 
    46034614  } 
    46044615  return 1; 
     
    46234634  } 
    46244635 
    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); 
    46284638  return unless (($reg1 & 0x80) == 0x00 and $reg2 == 0xa3) or 
    46294639                (($reg1 & 0x80) == 0x80 and $reg2 == 0x5c); 
    46304640  return unless ($reg1 & 0x07) == 0x00; 
    4631   $reg1 = &$read_proc(0x58); 
     4641  $reg1 = isa_read_i5d6($addr, 0x58); 
    46324642  return if $chip == 0 and  ($reg1 & 0xfe) != 0x10; 
    46334643  return if $chip == 1 and  ($reg1 & 0xfe) != 0x30; 
     
    49854995  my ($chip, $isa_addr, $file, $i2c_addr) = @_; 
    49864996  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; 
    49894999  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); 
    49915001  } 
    49925002  return 1;