From a7ad8ad9cc379d062f2e42f4e40efc4e7e72a763 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 18 Feb 2009 20:26:20 +0000 Subject: [PATCH] sensors-detect: Add a special case for probing i2c address 0x73 for FSC chips, as at least the Syleus locks up with our regular probe code. Note that to our current knowledge only FSC chips live on this address, and for them this probe method is safe. git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@5657 7894878c-1315-0410-8ee3-d5d059ff63e0 --- CHANGES | 1 + prog/detect/sensors-detect | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/CHANGES b/CHANGES index 7a70a235..0d41f6b6 100644 --- a/CHANGES +++ b/CHANGES @@ -78,6 +78,7 @@ SVN-HEAD Fix detection of older DS1621 Add nNidia nForce MCP67, MCP73, MCP79 SMBus support Exclude auto-loaded PCI and USB drivers from list (#2368) + Special case probing i2c address 0x73 (to not crash FSC ICs) sensors-detect-stat.pl: Delete (functionality merged into sensors-detect) sysconfig-lm_sensors-convert: Sample config file conversion script (#2246) diff --git a/prog/detect/sensors-detect b/prog/detect/sensors-detect index 6f82b6b5..1c39e498 100755 --- a/prog/detect/sensors-detect +++ b/prog/detect/sensors-detect @@ -2516,6 +2516,7 @@ use constant SMBUS_WORD_DATA => 3; use constant I2C_FUNC_SMBUS_QUICK => 0x00010000; use constant I2C_FUNC_SMBUS_READ_BYTE => 0x00020000; +use constant I2C_FUNC_SMBUS_READ_BYTE_DATA => 0x00080000; # Get the i2c adapter's functionalities # $_[0]: Reference to an opened filehandle @@ -2639,6 +2640,13 @@ sub i2c_probe # protection address. return 0 unless ($funcs & I2C_FUNC_SMBUS_READ_BYTE); return i2c_smbus_access($file, SMBUS_READ, 0, SMBUS_BYTE, []); + } elsif ($addr == 0x73) { + # Special case for FSC chips, as at least the Syleus locks + # up with our regular probe code. Note that to our current + # knowledge only FSC chips live on this address, and for them + # this probe method is safe. + return 0 unless ($funcs & I2C_FUNC_SMBUS_READ_BYTE_DATA); + return i2c_smbus_access($file, SMBUS_READ, 0, SMBUS_BYTE_DATA, []); } else { return 0 unless ($funcs & I2C_FUNC_SMBUS_QUICK); return i2c_smbus_access($file, SMBUS_WRITE, 0, SMBUS_QUICK, []);