2
0
mirror of https://github.com/lm-sensors/lm-sensors synced 2025-09-04 00:05:10 +00:00

Add detection of MAX6642

git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@5978 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
Guenter Roeck
2011-06-01 16:20:05 +00:00
parent 5b2e1333ed
commit ab116c9658
2 changed files with 40 additions and 0 deletions

View File

@@ -13,6 +13,7 @@ SVN HEAD
Add detection of SMSC EMC6W201 Add detection of SMSC EMC6W201
Drop unreliable detection of Maxim MAX6650 Drop unreliable detection of Maxim MAX6650
Add detection of SMSC EMC2300 Add detection of SMSC EMC2300
Add detection of MAX6642
3.3.0 (2011-03-28) 3.3.0 (2011-03-28)
Makefile: Check for bison and flex Makefile: Check for bison and flex

View File

@@ -847,6 +847,11 @@ use vars qw(@i2c_adapter_names);
driver => "max6639", driver => "max6639",
i2c_addrs => [0x2c, 0x2e, 0x2f], i2c_addrs => [0x2c, 0x2e, 0x2f],
i2c_detect => sub { max6639_detect(@_); }, i2c_detect => sub { max6639_detect(@_); },
}, {
name => "Maxim MAX6642",
driver => "max6642",
i2c_addrs => [0x48..0x4f],
i2c_detect => sub { max6642_detect(@_); },
}, { }, {
name => "Maxim MAX6655/MAX6656", name => "Maxim MAX6655/MAX6656",
driver => "max6655", driver => "max6655",
@@ -5789,6 +5794,40 @@ sub max6639_detect
return 6; return 6;
} }
# Chip to detect: MAX6642
# Registers used:
# 0x02: Status register
# 0x03: Configuration register
# 0xfe: Manufacturer ID
# 0x04, 0x06, 0xff: No registers
# We use the 0x04, 0x06 and 0xff addresses (unused) to improve reliability.
# These are not real registers and will always return the last returned value.
# This isn't documented.
sub max6642_detect
{
my ($file, $addr) = @_;
my ($man_id, $conf, $status);
$man_id = i2c_smbus_read_byte_data($file, 0xfe);
return unless $man_id == 0x4d; # Maxim
return if i2c_smbus_read_byte_data($file, 0x04, NO_CACHE) != $man_id;
return if i2c_smbus_read_byte_data($file, 0x06, NO_CACHE) != $man_id;
return if i2c_smbus_read_byte_data($file, 0xff, NO_CACHE) != $man_id;
$status = i2c_smbus_read_byte_data($file, 0x02);
# Bit 5, 3, 1 and 0 should be zero
return unless ($status & 0x2b) == 0x00;
return if i2c_smbus_read_byte_data($file, 0x04, NO_CACHE) != $status;
return if i2c_smbus_read_byte_data($file, 0x06, NO_CACHE) != $status;
return if i2c_smbus_read_byte_data($file, 0xff, NO_CACHE) != $status;
$conf = i2c_smbus_read_byte_data($file, 0x03);
# The 4 lower bits should be zero
return unless ($conf & 0x0f) == 0x00;
return 5;
}
sub max6655_detect sub max6655_detect
{ {
my ($file, $addr) = @_; my ($file, $addr) = @_;