Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging
* 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging: (41 commits) hwmon: (adt7475) Add VID support for the ADT7476 hwmon: (adt7475) Add an entry in MAINTAINERS hwmon: (adt7475) Add support for the ADT7476 hwmon: (adt7475) Voltage attenuators can be bypassed hwmon: (adt7475) Print device information on probe hwmon: (adt7475) Handle alternative pin functions hwmon: (adt7475) Move sysfs files removal to a separate function hwmon: (adt7475) Add support for the ADT7490 hwmon: (adt7475) Improve device detection hwmon: (adt7475) Add missing static marker hwmon: (adt7475) Rework voltage inputs handling hwmon: (adt7475) Implement pwm_use_point2_pwm_at_crit hwmon: (adt7475) New documentation hwmon: (adt7475) Add support for the ADT7473 hwmon: (f71882fg) Add support for the f71889fg (version 2) hwmon: (f71882fg) Fix sysfs file removal hwmon: (f71882fg) Cleanup sysfs attr creation 2/2 hwmon: (f71882fg) Cleanup sysfs attr creation 1/2 hwmon: (thmc50) Stop using I2C_CLIENT_MODULE_PARM hwmon: Add Freescale MC13783 ADC driver ...
This commit is contained in:
@@ -301,59 +301,36 @@ static int adm1029_detect(struct i2c_client *client, int kind,
|
||||
struct i2c_board_info *info)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
u8 man_id, chip_id, temp_devices_installed, nb_fan_support;
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
||||
return -ENODEV;
|
||||
|
||||
/* Now we do the detection and identification. A negative kind
|
||||
* means that the driver was loaded with no force parameter
|
||||
* (default), so we must both detect and identify the chip
|
||||
* (actually there is only one possible kind of chip for now, adm1029).
|
||||
* A zero kind means that the driver was loaded with the force
|
||||
* parameter, the detection step shall be skipped. A positive kind
|
||||
* means that the driver was loaded with the force parameter and a
|
||||
* given kind of chip is requested, so both the detection and the
|
||||
* identification steps are skipped. */
|
||||
|
||||
/* Default to an adm1029 if forced */
|
||||
if (kind == 0)
|
||||
kind = adm1029;
|
||||
|
||||
/* ADM1029 doesn't have CHIP ID, check just MAN ID
|
||||
* For better detection we check also ADM1029_TEMP_DEVICES_INSTALLED,
|
||||
* ADM1029_REG_NB_FAN_SUPPORT and compare it with possible values
|
||||
* documented
|
||||
*/
|
||||
|
||||
if (kind <= 0) { /* identification */
|
||||
u8 man_id, chip_id, temp_devices_installed, nb_fan_support;
|
||||
|
||||
man_id = i2c_smbus_read_byte_data(client, ADM1029_REG_MAN_ID);
|
||||
chip_id = i2c_smbus_read_byte_data(client, ADM1029_REG_CHIP_ID);
|
||||
temp_devices_installed = i2c_smbus_read_byte_data(client,
|
||||
man_id = i2c_smbus_read_byte_data(client, ADM1029_REG_MAN_ID);
|
||||
chip_id = i2c_smbus_read_byte_data(client, ADM1029_REG_CHIP_ID);
|
||||
temp_devices_installed = i2c_smbus_read_byte_data(client,
|
||||
ADM1029_REG_TEMP_DEVICES_INSTALLED);
|
||||
nb_fan_support = i2c_smbus_read_byte_data(client,
|
||||
nb_fan_support = i2c_smbus_read_byte_data(client,
|
||||
ADM1029_REG_NB_FAN_SUPPORT);
|
||||
/* 0x41 is Analog Devices */
|
||||
if (man_id == 0x41 && (temp_devices_installed & 0xf9) == 0x01
|
||||
&& nb_fan_support == 0x03) {
|
||||
if ((chip_id & 0xF0) == 0x00) {
|
||||
kind = adm1029;
|
||||
} else {
|
||||
/* There are no "official" CHIP ID, so actually
|
||||
* we use Major/Minor revision for that */
|
||||
printk(KERN_INFO
|
||||
"adm1029: Unknown major revision %x, "
|
||||
"please let us know\n", chip_id);
|
||||
}
|
||||
}
|
||||
/* 0x41 is Analog Devices */
|
||||
if (man_id != 0x41 || (temp_devices_installed & 0xf9) != 0x01
|
||||
|| nb_fan_support != 0x03)
|
||||
return -ENODEV;
|
||||
|
||||
if (kind <= 0) { /* identification failed */
|
||||
pr_debug("adm1029: Unsupported chip (man_id=0x%02X, "
|
||||
"chip_id=0x%02X)\n", man_id, chip_id);
|
||||
return -ENODEV;
|
||||
}
|
||||
if ((chip_id & 0xF0) != 0x00) {
|
||||
/* There are no "official" CHIP ID, so actually
|
||||
* we use Major/Minor revision for that */
|
||||
pr_info("adm1029: Unknown major revision %x, "
|
||||
"please let us know\n", chip_id);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
strlcpy(info->type, "adm1029", I2C_NAME_SIZE);
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user