Show
Ignore:
Timestamp:
06/01/11 18:20:05 (12 months ago)
Author:
groeck
Message:

Add detection of MAX6642

Files:
1 modified

Legend:

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

    r5977 r5978  
    848848                i2c_addrs => [0x2c, 0x2e, 0x2f], 
    849849                i2c_detect => sub { max6639_detect(@_); }, 
     850        }, { 
     851                name => "Maxim MAX6642", 
     852                driver => "max6642", 
     853                i2c_addrs => [0x48..0x4f], 
     854                i2c_detect => sub { max6642_detect(@_); }, 
    850855        }, { 
    851856                name => "Maxim MAX6655/MAX6656", 
     
    57905795} 
    57915796 
     5797# Chip to detect: MAX6642 
     5798# Registers used: 
     5799#   0x02: Status register 
     5800#   0x03: Configuration register 
     5801#   0xfe: Manufacturer ID 
     5802#   0x04, 0x06, 0xff: No registers 
     5803# We use the 0x04, 0x06 and 0xff addresses (unused) to improve reliability. 
     5804# These are not real registers and will always return the last returned value. 
     5805# This isn't documented. 
     5806sub max6642_detect 
     5807{ 
     5808        my ($file, $addr) = @_; 
     5809        my ($man_id, $conf, $status); 
     5810 
     5811        $man_id = i2c_smbus_read_byte_data($file, 0xfe); 
     5812        return unless $man_id == 0x4d;  # Maxim 
     5813        return if i2c_smbus_read_byte_data($file, 0x04, NO_CACHE) != $man_id; 
     5814        return if i2c_smbus_read_byte_data($file, 0x06, NO_CACHE) != $man_id; 
     5815        return if i2c_smbus_read_byte_data($file, 0xff, NO_CACHE) != $man_id; 
     5816 
     5817        $status = i2c_smbus_read_byte_data($file, 0x02); 
     5818        # Bit 5, 3, 1 and 0 should be zero 
     5819        return unless ($status & 0x2b) == 0x00; 
     5820        return if i2c_smbus_read_byte_data($file, 0x04, NO_CACHE) != $status; 
     5821        return if i2c_smbus_read_byte_data($file, 0x06, NO_CACHE) != $status; 
     5822        return if i2c_smbus_read_byte_data($file, 0xff, NO_CACHE) != $status; 
     5823 
     5824        $conf = i2c_smbus_read_byte_data($file, 0x03); 
     5825        # The 4 lower bits should be zero 
     5826        return unless ($conf & 0x0f) == 0x00; 
     5827 
     5828        return 5; 
     5829} 
     5830 
    57925831sub max6655_detect 
    57935832{