Changeset 5908 for lm-sensors/trunk/prog

Show
Ignore:
Timestamp:
01/22/11 19:19:08 (16 months ago)
Author:
groeck
Message:

Add code to detect EMC1023, EMC1043, EMC1053, and EMC1063

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/prog/detect/sensors-detect

    r5907 r5908  
    11961196                i2c_detect => sub { fintek_detect(@_, 7); }, 
    11971197        }, { 
     1198                name => "SMSC EMC1023", 
     1199                driver => "to-be-written",      # emc1023 
     1200                i2c_addrs => [0x48, 0x49, 0x4c, 0x4d], 
     1201                i2c_detect => sub { emc1023_detect(@_, 0); }, 
     1202        }, { 
     1203                name => "SMSC EMC1043", 
     1204                driver => "to-be-written",      # emc1023 
     1205                i2c_addrs => [0x48, 0x49, 0x4c, 0x4d], 
     1206                i2c_detect => sub { emc1023_detect(@_, 1); }, 
     1207        }, { 
     1208                name => "SMSC EMC1053", 
     1209                driver => "to-be-written",      # emc1023 
     1210                i2c_addrs => [0x48, 0x49, 0x4c, 0x4d], 
     1211                i2c_detect => sub { emc1023_detect(@_, 2); }, 
     1212        }, { 
     1213                name => "SMSC EMC1063", 
     1214                driver => "to-be-written",      # emc1023 
     1215                i2c_addrs => [0x48, 0x49, 0x4c, 0x4d], 
     1216                i2c_detect => sub { emc1023_detect(@_, 3); }, 
     1217        }, { 
    11981218                name => "SMSC EMC1403", 
    11991219                driver => "emc1403", 
     
    53685388        } elsif ($chip == 7) { # custom power control IC 
    53695389                return unless $chipid == 0x0302; 
     5390        } 
     5391 
     5392        return 7; 
     5393} 
     5394 
     5395# Chips to detect: 0 = EMC1023, 1 = EMC1043, 2 = EMC1053, 3 = EMC1063 
     5396# Registers used: 
     5397#   0xed: Device ID register 
     5398#   0xfe: Vendor ID register 
     5399#   0xff: Revision register 
     5400sub emc1023_detect 
     5401{ 
     5402        my ($file, $addr, $chip) = @_; 
     5403        my $dev_id = i2c_smbus_read_byte_data($file, 0xed); 
     5404        my $man_id = i2c_smbus_read_byte_data($file, 0xfe); 
     5405        my $rev = i2c_smbus_read_byte_data($file, 0xff); 
     5406 
     5407        return unless $man_id == 0x5d;  # SMSC 
     5408        return unless $rev <= 1; 
     5409 
     5410        if ($chip == 0) { 
     5411                return if ($addr == 0x4c) && ($dev_id != 0x04); # EMC1023-1 
     5412                return if ($addr == 0x4d) && ($dev_id != 0x05); # EMC1023-2 
     5413                return if ($addr == 0x48) && ($dev_id != 0x06); # EMC1023-3 
     5414                return if ($addr == 0x49) && ($dev_id != 0x07); # EMC1023-4 
     5415        } elsif ($chip == 1) { 
     5416                if ($addr == 0x4c) {                            # EMC1043-1, EMC1043-5 
     5417                        return unless ($dev_id == 0x0c) || ($dev_id == 0x2c); 
     5418                } 
     5419                return if ($addr == 0x4d) && ($dev_id != 0x0d); # EMC1043-2 
     5420                return if ($addr == 0x48) && ($dev_id != 0x0e); # EMC1043-3 
     5421                return if ($addr == 0x49) && ($dev_id != 0x0f); # EMC1043-4 
     5422        } elsif ($chip == 2) { 
     5423                return if ($addr == 0x4c) && ($dev_id != 0x3c); # EMC1053-1 
     5424                return if ($addr == 0x4d) && ($dev_id != 0x3d); # EMC1053-2 
     5425                return if ($addr == 0x48) && ($dev_id != 0x3e); # EMC1053-3 
     5426                return if ($addr == 0x49) && ($dev_id != 0x3f); # EMC1053-4 
     5427        } elsif ($chip == 3) { 
     5428                return if ($addr == 0x4c) && ($dev_id != 0x30); # EMC1063-1 
     5429                return if ($addr == 0x4d) && ($dev_id != 0x31); # EMC1063-2 
     5430                return if ($addr == 0x48) && ($dev_id != 0x32); # EMC1063-3 
     5431                return if ($addr == 0x49) && ($dev_id != 0x33); # EMC1063-4 
    53705432        } 
    53715433