This patch adds support for max6695/96 to sensors-detect. --- v2: Fix and improve max6680/81 vs. max6695/96 detection code Remove chip==7 code from lm90_detect --- Index: prog/detect/sensors-detect =================================================================== --- prog/detect/sensors-detect (revision 5857) +++ prog/detect/sensors-detect (working copy) @@ -921,8 +921,13 @@ name => "Maxim MAX6680/MAX6681", driver => "lm90", i2c_addrs => [0x18..0x1a, 0x29..0x2b, 0x4c..0x4e], - i2c_detect => sub { lm90_detect(@_, 7); }, + i2c_detect => sub { max6680_95_detect(@_, 0); }, }, { + name => "Maxim MAX6695/MAX6696", + driver => "lm90", + i2c_addrs => [0x18..0x1a, 0x29..0x2b, 0x4c..0x4e], + i2c_detect => sub { max6680_95_detect(@_, 1); }, + }, { name => "Winbond W83L771W/G", driver => "to-be-written", i2c_addrs => [0x4c], @@ -4051,10 +4056,47 @@ return $confidence; } +# Chip to detect: 0 = MAX6680/81, 1 = MAX6695/96 +# Registers used: +# 0x03: Configuration +# 0x04: Conversion rate +# 0x12: Status2 +# 0x16: Overtemperature 2 +# 0xfe: Manufacturer ID +# 0xff: Chip ID / die revision +sub max6680_95_detect +{ + my ($file, $addr, $chip) = @_; + my $cid = i2c_smbus_read_byte_data($file, 0xff); + my $conf = i2c_smbus_read_byte_data($file, 0x03); + my $mid = i2c_smbus_read_byte_data($file, 0xfe, NO_CACHE); + my $emerg = i2c_smbus_read_byte_data($file, 0x16, NO_CACHE); + my $rate = i2c_smbus_read_byte_data($file, 0x04, NO_CACHE); + my $emerg2 = i2c_smbus_read_byte_data($file, 0x16, NO_CACHE); + + # Check common conditions + return if $rate > 0x07; + return if $mid != 0x4d; # Not Maxim + return if $cid != 0x01; # None of the chips we are looking for + + if ($chip == 0) { + return if ($conf & 0x03) != 0; + return 8 if $emerg != $emerg2; # MAX6680/MAX6681 + } + if ($chip == 1) { + my $status2 = i2c_smbus_read_byte_data($file, 0x12); + + return if ($conf & 0x10) != 0; + return if ($status2 & 0x01) != 0; + return 8 if $emerg == $emerg2; # MAX6695/MAX6696 + } + return; +} + # Chip to detect: 0 = LM90, 1 = LM89/LM99, 2 = LM86, 3 = ADM1032, # 4 = MAX6654, 5 = ADT7461, # 6 = MAX6646/MAX6647/MAX6648/MAX6649/MAX6692, -# 7 = MAX6680/MAX6681, 8 = W83L771W/G, 9 = TMP401, 10 = TMP411, +# 8 = W83L771W/G, 9 = TMP401, 10 = TMP411, # 11 = W83L771AWG/ASG, 12 = MAX6690 # Registers used: # 0x03: Configuration @@ -4115,12 +4157,6 @@ return if $mid != 0x4d; # Maxim return 8 if $cid == 0x59; # MAX6648/MAX6692 } - if ($chip == 7) { - return if ($conf & 0x03) != 0; - return if $rate > 0x07; - return if $mid != 0x4d; # Maxim - return 8 if $cid == 0x01; # MAX6680/MAX6681 - } if ($chip == 8) { return if ($conf & 0x2a) != 0; return if $rate > 0x09; _______________________________________________ lm-sensors mailing list lm-sensors@xxxxxxxxxxxxxx http://lists.lm-sensors.org/mailman/listinfo/lm-sensors