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:
1
CHANGES
1
CHANGES
@@ -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
|
||||||
|
@@ -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) = @_;
|
||||||
|
Reference in New Issue
Block a user