You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
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:
+28
-7
@@ -191,21 +191,27 @@ config SENSORS_ADT7470
|
||||
will be called adt7470.
|
||||
|
||||
config SENSORS_ADT7473
|
||||
tristate "Analog Devices ADT7473"
|
||||
tristate "Analog Devices ADT7473 (DEPRECATED)"
|
||||
depends on I2C && EXPERIMENTAL
|
||||
select SENSORS_ADT7475
|
||||
help
|
||||
If you say yes here you get support for the Analog Devices
|
||||
ADT7473 temperature monitoring chips.
|
||||
|
||||
This driver is deprecated, you should use the adt7475 driver
|
||||
instead.
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called adt7473.
|
||||
|
||||
config SENSORS_ADT7475
|
||||
tristate "Analog Devices ADT7475"
|
||||
tristate "Analog Devices ADT7473, ADT7475, ADT7476 and ADT7490"
|
||||
depends on I2C && EXPERIMENTAL
|
||||
select HWMON_VID
|
||||
help
|
||||
If you say yes here you get support for the Analog Devices
|
||||
ADT7475 hardware monitoring chips.
|
||||
ADT7473, ADT7475, ADT7476 and ADT7490 hardware monitoring
|
||||
chips.
|
||||
|
||||
This driver can also be build as a module. If so, the module
|
||||
will be called adt7475.
|
||||
@@ -305,12 +311,12 @@ config SENSORS_F71805F
|
||||
will be called f71805f.
|
||||
|
||||
config SENSORS_F71882FG
|
||||
tristate "Fintek F71858FG, F71862FG, F71882FG and F8000"
|
||||
tristate "Fintek F71858FG, F71862FG, F71882FG, F71889FG and F8000"
|
||||
depends on EXPERIMENTAL
|
||||
help
|
||||
If you say yes here you get support for hardware monitoring
|
||||
features of the Fintek F71858FG, F71862FG/71863FG, F71882FG/F71883FG
|
||||
and F8000 Super-I/O chips.
|
||||
features of the Fintek F71858FG, F71862FG/71863FG, F71882FG/F71883FG,
|
||||
F71889FG and F8000 Super-I/O chips.
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called f71882fg.
|
||||
@@ -442,6 +448,15 @@ config SENSORS_LM70
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called lm70.
|
||||
|
||||
config SENSORS_LM73
|
||||
tristate "National Semiconductor LM73"
|
||||
depends on I2C
|
||||
help
|
||||
If you say yes here you get support for National Semiconductor LM73
|
||||
sensor chips.
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called lm73.
|
||||
|
||||
config SENSORS_LM75
|
||||
tristate "National Semiconductor LM75 and compatibles"
|
||||
depends on I2C
|
||||
@@ -841,7 +856,7 @@ config SENSORS_W83781D
|
||||
|
||||
config SENSORS_W83791D
|
||||
tristate "Winbond W83791D"
|
||||
depends on I2C && EXPERIMENTAL
|
||||
depends on I2C
|
||||
select HWMON_VID
|
||||
help
|
||||
If you say yes here you get support for the Winbond W83791D chip.
|
||||
@@ -1008,6 +1023,12 @@ config SENSORS_APPLESMC
|
||||
Say Y here if you have an applicable laptop and want to experience
|
||||
the awesome power of applesmc.
|
||||
|
||||
config SENSORS_MC13783_ADC
|
||||
tristate "Freescale MC13783 ADC"
|
||||
depends on MFD_MC13783
|
||||
help
|
||||
Support for the A/D converter on MC13783 PMIC.
|
||||
|
||||
if ACPI
|
||||
|
||||
comment "ACPI drivers"
|
||||
|
||||
@@ -57,6 +57,7 @@ obj-$(CONFIG_SENSORS_LIS3LV02D) += lis3lv02d.o hp_accel.o
|
||||
obj-$(CONFIG_SENSORS_LIS3_SPI) += lis3lv02d.o lis3lv02d_spi.o
|
||||
obj-$(CONFIG_SENSORS_LM63) += lm63.o
|
||||
obj-$(CONFIG_SENSORS_LM70) += lm70.o
|
||||
obj-$(CONFIG_SENSORS_LM73) += lm73.o
|
||||
obj-$(CONFIG_SENSORS_LM75) += lm75.o
|
||||
obj-$(CONFIG_SENSORS_LM77) += lm77.o
|
||||
obj-$(CONFIG_SENSORS_LM78) += lm78.o
|
||||
@@ -73,6 +74,7 @@ obj-$(CONFIG_SENSORS_LTC4245) += ltc4245.o
|
||||
obj-$(CONFIG_SENSORS_MAX1111) += max1111.o
|
||||
obj-$(CONFIG_SENSORS_MAX1619) += max1619.o
|
||||
obj-$(CONFIG_SENSORS_MAX6650) += max6650.o
|
||||
obj-$(CONFIG_SENSORS_MC13783_ADC)+= mc13783-adc.o
|
||||
obj-$(CONFIG_SENSORS_PC87360) += pc87360.o
|
||||
obj-$(CONFIG_SENSORS_PC87427) += pc87427.o
|
||||
obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
|
||||
|
||||
+25
-51
@@ -288,9 +288,8 @@ static int adm1021_detect(struct i2c_client *client, int kind,
|
||||
struct i2c_board_info *info)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
int i;
|
||||
const char *type_name = "";
|
||||
int conv_rate, status, config;
|
||||
const char *type_name;
|
||||
int conv_rate, status, config, man_id, dev_id;
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
|
||||
pr_debug("adm1021: detect failed, "
|
||||
@@ -303,62 +302,37 @@ static int adm1021_detect(struct i2c_client *client, int kind,
|
||||
ADM1021_REG_CONV_RATE_R);
|
||||
config = i2c_smbus_read_byte_data(client, ADM1021_REG_CONFIG_R);
|
||||
|
||||
/* Now, we do the remaining detection. */
|
||||
if (kind < 0) {
|
||||
if ((status & 0x03) != 0x00 || (config & 0x3F) != 0x00
|
||||
|| (conv_rate & 0xF8) != 0x00) {
|
||||
pr_debug("adm1021: detect failed, "
|
||||
"chip not detected!\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
/* Check unused bits */
|
||||
if ((status & 0x03) || (config & 0x3F) || (conv_rate & 0xF8)) {
|
||||
pr_debug("adm1021: detect failed, chip not detected!\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Determine the chip type. */
|
||||
if (kind <= 0) {
|
||||
i = i2c_smbus_read_byte_data(client, ADM1021_REG_MAN_ID);
|
||||
if (i == 0x41)
|
||||
if ((i2c_smbus_read_byte_data(client,
|
||||
ADM1021_REG_DEV_ID) & 0xF0) == 0x30)
|
||||
kind = adm1023;
|
||||
else
|
||||
kind = adm1021;
|
||||
else if (i == 0x49)
|
||||
kind = thmc10;
|
||||
else if (i == 0x23)
|
||||
kind = gl523sm;
|
||||
else if ((i == 0x4d) &&
|
||||
(i2c_smbus_read_byte_data(client,
|
||||
ADM1021_REG_DEV_ID) == 0x01))
|
||||
kind = max1617a;
|
||||
else if (i == 0x54)
|
||||
kind = mc1066;
|
||||
/* LM84 Mfr ID in a different place, and it has more unused bits */
|
||||
else if (conv_rate == 0x00
|
||||
&& (kind == 0 /* skip extra detection */
|
||||
|| ((config & 0x7F) == 0x00
|
||||
&& (status & 0xAB) == 0x00)))
|
||||
kind = lm84;
|
||||
else
|
||||
kind = max1617;
|
||||
}
|
||||
man_id = i2c_smbus_read_byte_data(client, ADM1021_REG_MAN_ID);
|
||||
dev_id = i2c_smbus_read_byte_data(client, ADM1021_REG_DEV_ID);
|
||||
|
||||
if (kind == max1617) {
|
||||
type_name = "max1617";
|
||||
} else if (kind == max1617a) {
|
||||
if (man_id == 0x4d && dev_id == 0x01)
|
||||
type_name = "max1617a";
|
||||
} else if (kind == adm1021) {
|
||||
type_name = "adm1021";
|
||||
} else if (kind == adm1023) {
|
||||
type_name = "adm1023";
|
||||
} else if (kind == thmc10) {
|
||||
else if (man_id == 0x41) {
|
||||
if ((dev_id & 0xF0) == 0x30)
|
||||
type_name = "adm1023";
|
||||
else
|
||||
type_name = "adm1021";
|
||||
} else if (man_id == 0x49)
|
||||
type_name = "thmc10";
|
||||
} else if (kind == lm84) {
|
||||
type_name = "lm84";
|
||||
} else if (kind == gl523sm) {
|
||||
else if (man_id == 0x23)
|
||||
type_name = "gl523sm";
|
||||
} else if (kind == mc1066) {
|
||||
else if (man_id == 0x54)
|
||||
type_name = "mc1066";
|
||||
}
|
||||
/* LM84 Mfr ID in a different place, and it has more unused bits */
|
||||
else if (conv_rate == 0x00
|
||||
&& (config & 0x7F) == 0x00
|
||||
&& (status & 0xAB) == 0x00)
|
||||
type_name = "lm84";
|
||||
else
|
||||
type_name = "max1617";
|
||||
|
||||
pr_debug("adm1021: Detected chip %s at adapter %d, address 0x%02x.\n",
|
||||
type_name, i2c_adapter_id(adapter), client->addr);
|
||||
strlcpy(info->type, type_name, I2C_NAME_SIZE);
|
||||
|
||||
+20
-53
@@ -2,7 +2,7 @@
|
||||
* adm1025.c
|
||||
*
|
||||
* Copyright (C) 2000 Chen-Yuan Wu <gwu@esoft.com>
|
||||
* Copyright (C) 2003-2008 Jean Delvare <khali@linux-fr.org>
|
||||
* Copyright (C) 2003-2009 Jean Delvare <khali@linux-fr.org>
|
||||
*
|
||||
* The ADM1025 is a sensor chip made by Analog Devices. It reports up to 6
|
||||
* voltages (including its own power source) and up to two temperatures
|
||||
@@ -413,67 +413,34 @@ static int adm1025_detect(struct i2c_client *client, int kind,
|
||||
struct i2c_board_info *info)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
const char *name = "";
|
||||
u8 config;
|
||||
const char *name;
|
||||
u8 man_id, chip_id;
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
||||
return -ENODEV;
|
||||
|
||||
/*
|
||||
* Now we do the remaining detection. A negative kind means that
|
||||
* the driver was loaded with no force parameter (default), so we
|
||||
* must both detect and identify the chip. 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.
|
||||
*/
|
||||
config = i2c_smbus_read_byte_data(client, ADM1025_REG_CONFIG);
|
||||
if (kind < 0) { /* detection */
|
||||
if ((config & 0x80) != 0x00
|
||||
|| (i2c_smbus_read_byte_data(client,
|
||||
ADM1025_REG_STATUS1) & 0xC0) != 0x00
|
||||
|| (i2c_smbus_read_byte_data(client,
|
||||
ADM1025_REG_STATUS2) & 0xBC) != 0x00) {
|
||||
dev_dbg(&adapter->dev,
|
||||
"ADM1025 detection failed at 0x%02x.\n",
|
||||
client->addr);
|
||||
return -ENODEV;
|
||||
}
|
||||
/* Check for unused bits */
|
||||
if ((i2c_smbus_read_byte_data(client, ADM1025_REG_CONFIG) & 0x80)
|
||||
|| (i2c_smbus_read_byte_data(client, ADM1025_REG_STATUS1) & 0xC0)
|
||||
|| (i2c_smbus_read_byte_data(client, ADM1025_REG_STATUS2) & 0xBC)) {
|
||||
dev_dbg(&adapter->dev, "ADM1025 detection failed at 0x%02x\n",
|
||||
client->addr);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (kind <= 0) { /* identification */
|
||||
u8 man_id, chip_id;
|
||||
/* Identification */
|
||||
chip_id = i2c_smbus_read_byte_data(client, ADM1025_REG_CHIP_ID);
|
||||
if ((chip_id & 0xF0) != 0x20)
|
||||
return -ENODEV;
|
||||
|
||||
man_id = i2c_smbus_read_byte_data(client, ADM1025_REG_MAN_ID);
|
||||
chip_id = i2c_smbus_read_byte_data(client, ADM1025_REG_CHIP_ID);
|
||||
|
||||
if (man_id == 0x41) { /* Analog Devices */
|
||||
if ((chip_id & 0xF0) == 0x20) { /* ADM1025/ADM1025A */
|
||||
kind = adm1025;
|
||||
}
|
||||
} else
|
||||
if (man_id == 0xA1) { /* Philips */
|
||||
if (client->addr != 0x2E
|
||||
&& (chip_id & 0xF0) == 0x20) { /* NE1619 */
|
||||
kind = ne1619;
|
||||
}
|
||||
}
|
||||
|
||||
if (kind <= 0) { /* identification failed */
|
||||
dev_info(&adapter->dev,
|
||||
"Unsupported chip (man_id=0x%02X, "
|
||||
"chip_id=0x%02X).\n", man_id, chip_id);
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
|
||||
if (kind == adm1025) {
|
||||
man_id = i2c_smbus_read_byte_data(client, ADM1025_REG_MAN_ID);
|
||||
if (man_id == 0x41)
|
||||
name = "adm1025";
|
||||
} else if (kind == ne1619) {
|
||||
else if (man_id == 0xA1 && client->addr != 0x2E)
|
||||
name = "ne1619";
|
||||
}
|
||||
else
|
||||
return -ENODEV;
|
||||
|
||||
strlcpy(info->type, name, I2C_NAME_SIZE);
|
||||
|
||||
return 0;
|
||||
|
||||
+19
-28
@@ -1672,35 +1672,26 @@ static int adm1026_detect(struct i2c_client *client, int kind,
|
||||
i2c_adapter_id(client->adapter), client->addr,
|
||||
company, verstep);
|
||||
|
||||
/* If auto-detecting, Determine the chip type. */
|
||||
if (kind <= 0) {
|
||||
dev_dbg(&adapter->dev, "Autodetecting device at %d,0x%02x "
|
||||
"...\n", i2c_adapter_id(adapter), address);
|
||||
if (company == ADM1026_COMPANY_ANALOG_DEV
|
||||
&& verstep == ADM1026_VERSTEP_ADM1026) {
|
||||
kind = adm1026;
|
||||
} else if (company == ADM1026_COMPANY_ANALOG_DEV
|
||||
&& (verstep & 0xf0) == ADM1026_VERSTEP_GENERIC) {
|
||||
dev_err(&adapter->dev, "Unrecognized stepping "
|
||||
"0x%02x. Defaulting to ADM1026.\n", verstep);
|
||||
kind = adm1026;
|
||||
} else if ((verstep & 0xf0) == ADM1026_VERSTEP_GENERIC) {
|
||||
dev_err(&adapter->dev, "Found version/stepping "
|
||||
"0x%02x. Assuming generic ADM1026.\n",
|
||||
verstep);
|
||||
kind = any_chip;
|
||||
} else {
|
||||
dev_dbg(&adapter->dev, "Autodetection failed\n");
|
||||
/* Not an ADM1026 ... */
|
||||
if (kind == 0) { /* User used force=x,y */
|
||||
dev_err(&adapter->dev, "Generic ADM1026 not "
|
||||
"found at %d,0x%02x. Try "
|
||||
"force_adm1026.\n",
|
||||
i2c_adapter_id(adapter), address);
|
||||
}
|
||||
return -ENODEV;
|
||||
}
|
||||
/* Determine the chip type. */
|
||||
dev_dbg(&adapter->dev, "Autodetecting device at %d,0x%02x...\n",
|
||||
i2c_adapter_id(adapter), address);
|
||||
if (company == ADM1026_COMPANY_ANALOG_DEV
|
||||
&& verstep == ADM1026_VERSTEP_ADM1026) {
|
||||
/* Analog Devices ADM1026 */
|
||||
} else if (company == ADM1026_COMPANY_ANALOG_DEV
|
||||
&& (verstep & 0xf0) == ADM1026_VERSTEP_GENERIC) {
|
||||
dev_err(&adapter->dev, "Unrecognized stepping "
|
||||
"0x%02x. Defaulting to ADM1026.\n", verstep);
|
||||
} else if ((verstep & 0xf0) == ADM1026_VERSTEP_GENERIC) {
|
||||
dev_err(&adapter->dev, "Found version/stepping "
|
||||
"0x%02x. Assuming generic ADM1026.\n",
|
||||
verstep);
|
||||
} else {
|
||||
dev_dbg(&adapter->dev, "Autodetection failed\n");
|
||||
/* Not an ADM1026... */
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
strlcpy(info->type, "adm1026", I2C_NAME_SIZE);
|
||||
|
||||
return 0;
|
||||
|
||||
+16
-39
@@ -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;
|
||||
|
||||
+7
-19
@@ -817,31 +817,19 @@ static int adm1031_detect(struct i2c_client *client, int kind,
|
||||
struct i2c_board_info *info)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
const char *name = "";
|
||||
const char *name;
|
||||
int id, co;
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
||||
return -ENODEV;
|
||||
|
||||
if (kind < 0) {
|
||||
int id, co;
|
||||
id = i2c_smbus_read_byte_data(client, 0x3d);
|
||||
co = i2c_smbus_read_byte_data(client, 0x3e);
|
||||
id = i2c_smbus_read_byte_data(client, 0x3d);
|
||||
co = i2c_smbus_read_byte_data(client, 0x3e);
|
||||
|
||||
if (!((id == 0x31 || id == 0x30) && co == 0x41))
|
||||
return -ENODEV;
|
||||
kind = (id == 0x30) ? adm1030 : adm1031;
|
||||
}
|
||||
if (!((id == 0x31 || id == 0x30) && co == 0x41))
|
||||
return -ENODEV;
|
||||
name = (id == 0x30) ? "adm1030" : "adm1031";
|
||||
|
||||
if (kind <= 0)
|
||||
kind = adm1031;
|
||||
|
||||
/* Given the detected chip type, set the chip name and the
|
||||
* auto fan control helper table. */
|
||||
if (kind == adm1030) {
|
||||
name = "adm1030";
|
||||
} else if (kind == adm1031) {
|
||||
name = "adm1031";
|
||||
}
|
||||
strlcpy(info->type, name, I2C_NAME_SIZE);
|
||||
|
||||
return 0;
|
||||
|
||||
+22
-39
@@ -556,51 +556,34 @@ static int adm9240_detect(struct i2c_client *new_client, int kind,
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
||||
return -ENODEV;
|
||||
|
||||
if (kind == 0) {
|
||||
kind = adm9240;
|
||||
/* verify chip: reg address should match i2c address */
|
||||
if (i2c_smbus_read_byte_data(new_client, ADM9240_REG_I2C_ADDR)
|
||||
!= address) {
|
||||
dev_err(&adapter->dev, "detect fail: address match, 0x%02x\n",
|
||||
address);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (kind < 0) {
|
||||
|
||||
/* verify chip: reg address should match i2c address */
|
||||
if (i2c_smbus_read_byte_data(new_client, ADM9240_REG_I2C_ADDR)
|
||||
!= address) {
|
||||
dev_err(&adapter->dev, "detect fail: address match, "
|
||||
"0x%02x\n", address);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* check known chip manufacturer */
|
||||
man_id = i2c_smbus_read_byte_data(new_client,
|
||||
ADM9240_REG_MAN_ID);
|
||||
if (man_id == 0x23) {
|
||||
kind = adm9240;
|
||||
} else if (man_id == 0xda) {
|
||||
kind = ds1780;
|
||||
} else if (man_id == 0x01) {
|
||||
kind = lm81;
|
||||
} else {
|
||||
dev_err(&adapter->dev, "detect fail: unknown manuf, "
|
||||
"0x%02x\n", man_id);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* successful detect, print chip info */
|
||||
die_rev = i2c_smbus_read_byte_data(new_client,
|
||||
ADM9240_REG_DIE_REV);
|
||||
dev_info(&adapter->dev, "found %s revision %u\n",
|
||||
man_id == 0x23 ? "ADM9240" :
|
||||
man_id == 0xda ? "DS1780" : "LM81", die_rev);
|
||||
}
|
||||
|
||||
/* either forced or detected chip kind */
|
||||
if (kind == adm9240) {
|
||||
/* check known chip manufacturer */
|
||||
man_id = i2c_smbus_read_byte_data(new_client, ADM9240_REG_MAN_ID);
|
||||
if (man_id == 0x23) {
|
||||
name = "adm9240";
|
||||
} else if (kind == ds1780) {
|
||||
} else if (man_id == 0xda) {
|
||||
name = "ds1780";
|
||||
} else if (kind == lm81) {
|
||||
} else if (man_id == 0x01) {
|
||||
name = "lm81";
|
||||
} else {
|
||||
dev_err(&adapter->dev, "detect fail: unknown manuf, 0x%02x\n",
|
||||
man_id);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* successful detect, print chip info */
|
||||
die_rev = i2c_smbus_read_byte_data(new_client, ADM9240_REG_DIE_REV);
|
||||
dev_info(&adapter->dev, "found %s revision %u\n",
|
||||
man_id == 0x23 ? "ADM9240" :
|
||||
man_id == 0xda ? "DS1780" : "LM81", die_rev);
|
||||
|
||||
strlcpy(info->type, name, I2C_NAME_SIZE);
|
||||
|
||||
return 0;
|
||||
|
||||
+10
-12
@@ -191,6 +191,7 @@ static int ads7828_detect(struct i2c_client *client, int kind,
|
||||
struct i2c_board_info *info)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
int ch;
|
||||
|
||||
/* Check we have a valid client */
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_READ_WORD_DATA))
|
||||
@@ -202,20 +203,17 @@ static int ads7828_detect(struct i2c_client *client, int kind,
|
||||
- Read from the 8 channel addresses
|
||||
- Check the top 4 bits of each result are not set (12 data bits)
|
||||
*/
|
||||
if (kind < 0) {
|
||||
int ch;
|
||||
for (ch = 0; ch < ADS7828_NCH; ch++) {
|
||||
u16 in_data;
|
||||
u8 cmd = channel_cmd_byte(ch);
|
||||
in_data = ads7828_read_value(client, cmd);
|
||||
if (in_data & 0xF000) {
|
||||
printk(KERN_DEBUG
|
||||
"%s : Doesn't look like an ads7828 device\n",
|
||||
__func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
for (ch = 0; ch < ADS7828_NCH; ch++) {
|
||||
u16 in_data;
|
||||
u8 cmd = channel_cmd_byte(ch);
|
||||
in_data = ads7828_read_value(client, cmd);
|
||||
if (in_data & 0xF000) {
|
||||
pr_debug("%s : Doesn't look like an ads7828 device\n",
|
||||
__func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
|
||||
strlcpy(info->type, "ads7828", I2C_NAME_SIZE);
|
||||
|
||||
return 0;
|
||||
|
||||
+10
-15
@@ -1906,27 +1906,22 @@ static int adt7462_detect(struct i2c_client *client, int kind,
|
||||
struct i2c_board_info *info)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
int vendor, device, revision;
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
||||
return -ENODEV;
|
||||
|
||||
if (kind <= 0) {
|
||||
int vendor, device, revision;
|
||||
vendor = i2c_smbus_read_byte_data(client, ADT7462_REG_VENDOR);
|
||||
if (vendor != ADT7462_VENDOR)
|
||||
return -ENODEV;
|
||||
|
||||
vendor = i2c_smbus_read_byte_data(client, ADT7462_REG_VENDOR);
|
||||
if (vendor != ADT7462_VENDOR)
|
||||
return -ENODEV;
|
||||
device = i2c_smbus_read_byte_data(client, ADT7462_REG_DEVICE);
|
||||
if (device != ADT7462_DEVICE)
|
||||
return -ENODEV;
|
||||
|
||||
device = i2c_smbus_read_byte_data(client, ADT7462_REG_DEVICE);
|
||||
if (device != ADT7462_DEVICE)
|
||||
return -ENODEV;
|
||||
|
||||
revision = i2c_smbus_read_byte_data(client,
|
||||
ADT7462_REG_REVISION);
|
||||
if (revision != ADT7462_REVISION)
|
||||
return -ENODEV;
|
||||
} else
|
||||
dev_dbg(&adapter->dev, "detection forced\n");
|
||||
revision = i2c_smbus_read_byte_data(client, ADT7462_REG_REVISION);
|
||||
if (revision != ADT7462_REVISION)
|
||||
return -ENODEV;
|
||||
|
||||
strlcpy(info->type, "adt7462", I2C_NAME_SIZE);
|
||||
|
||||
|
||||
+10
-15
@@ -1229,27 +1229,22 @@ static int adt7470_detect(struct i2c_client *client, int kind,
|
||||
struct i2c_board_info *info)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
int vendor, device, revision;
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
||||
return -ENODEV;
|
||||
|
||||
if (kind <= 0) {
|
||||
int vendor, device, revision;
|
||||
vendor = i2c_smbus_read_byte_data(client, ADT7470_REG_VENDOR);
|
||||
if (vendor != ADT7470_VENDOR)
|
||||
return -ENODEV;
|
||||
|
||||
vendor = i2c_smbus_read_byte_data(client, ADT7470_REG_VENDOR);
|
||||
if (vendor != ADT7470_VENDOR)
|
||||
return -ENODEV;
|
||||
device = i2c_smbus_read_byte_data(client, ADT7470_REG_DEVICE);
|
||||
if (device != ADT7470_DEVICE)
|
||||
return -ENODEV;
|
||||
|
||||
device = i2c_smbus_read_byte_data(client, ADT7470_REG_DEVICE);
|
||||
if (device != ADT7470_DEVICE)
|
||||
return -ENODEV;
|
||||
|
||||
revision = i2c_smbus_read_byte_data(client,
|
||||
ADT7470_REG_REVISION);
|
||||
if (revision != ADT7470_REVISION)
|
||||
return -ENODEV;
|
||||
} else
|
||||
dev_dbg(&adapter->dev, "detection forced\n");
|
||||
revision = i2c_smbus_read_byte_data(client, ADT7470_REG_REVISION);
|
||||
if (revision != ADT7470_REVISION)
|
||||
return -ENODEV;
|
||||
|
||||
strlcpy(info->type, "adt7470", I2C_NAME_SIZE);
|
||||
|
||||
|
||||
+12
-16
@@ -174,7 +174,6 @@ static const struct i2c_device_id adt7473_id[] = {
|
||||
{ "adt7473", adt7473 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, adt7473_id);
|
||||
|
||||
static struct i2c_driver adt7473_driver = {
|
||||
.class = I2C_CLASS_HWMON,
|
||||
@@ -1090,27 +1089,22 @@ static int adt7473_detect(struct i2c_client *client, int kind,
|
||||
struct i2c_board_info *info)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
int vendor, device, revision;
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
||||
return -ENODEV;
|
||||
|
||||
if (kind <= 0) {
|
||||
int vendor, device, revision;
|
||||
vendor = i2c_smbus_read_byte_data(client, ADT7473_REG_VENDOR);
|
||||
if (vendor != ADT7473_VENDOR)
|
||||
return -ENODEV;
|
||||
|
||||
vendor = i2c_smbus_read_byte_data(client, ADT7473_REG_VENDOR);
|
||||
if (vendor != ADT7473_VENDOR)
|
||||
return -ENODEV;
|
||||
device = i2c_smbus_read_byte_data(client, ADT7473_REG_DEVICE);
|
||||
if (device != ADT7473_DEVICE)
|
||||
return -ENODEV;
|
||||
|
||||
device = i2c_smbus_read_byte_data(client, ADT7473_REG_DEVICE);
|
||||
if (device != ADT7473_DEVICE)
|
||||
return -ENODEV;
|
||||
|
||||
revision = i2c_smbus_read_byte_data(client,
|
||||
ADT7473_REG_REVISION);
|
||||
if (revision != ADT7473_REV_68 && revision != ADT7473_REV_69)
|
||||
return -ENODEV;
|
||||
} else
|
||||
dev_dbg(&adapter->dev, "detection forced\n");
|
||||
revision = i2c_smbus_read_byte_data(client, ADT7473_REG_REVISION);
|
||||
if (revision != ADT7473_REV_68 && revision != ADT7473_REV_69)
|
||||
return -ENODEV;
|
||||
|
||||
strlcpy(info->type, "adt7473", I2C_NAME_SIZE);
|
||||
|
||||
@@ -1171,6 +1165,8 @@ static int adt7473_remove(struct i2c_client *client)
|
||||
|
||||
static int __init adt7473_init(void)
|
||||
{
|
||||
pr_notice("The adt7473 driver is deprecated, please use the adt7475 "
|
||||
"driver instead\n");
|
||||
return i2c_add_driver(&adt7473_driver);
|
||||
}
|
||||
|
||||
|
||||
+469
-71
File diff suppressed because it is too large
Load Diff
+17
-36
@@ -701,6 +701,7 @@ static int asb100_detect(struct i2c_client *client, int kind,
|
||||
struct i2c_board_info *info)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
int val1, val2;
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
|
||||
pr_debug("asb100.o: detect failed, "
|
||||
@@ -708,50 +709,30 @@ static int asb100_detect(struct i2c_client *client, int kind,
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* The chip may be stuck in some other bank than bank 0. This may
|
||||
make reading other information impossible. Specify a force=... or
|
||||
force_*=... parameter, and the chip will be reset to the right
|
||||
bank. */
|
||||
if (kind < 0) {
|
||||
val1 = i2c_smbus_read_byte_data(client, ASB100_REG_BANK);
|
||||
val2 = i2c_smbus_read_byte_data(client, ASB100_REG_CHIPMAN);
|
||||
|
||||
int val1 = i2c_smbus_read_byte_data(client, ASB100_REG_BANK);
|
||||
int val2 = i2c_smbus_read_byte_data(client, ASB100_REG_CHIPMAN);
|
||||
/* If we're in bank 0 */
|
||||
if ((!(val1 & 0x07)) &&
|
||||
/* Check for ASB100 ID (low byte) */
|
||||
(((!(val1 & 0x80)) && (val2 != 0x94)) ||
|
||||
/* Check for ASB100 ID (high byte ) */
|
||||
((val1 & 0x80) && (val2 != 0x06)))) {
|
||||
pr_debug("asb100: detect failed, bad chip id 0x%02x!\n", val2);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* If we're in bank 0 */
|
||||
if ((!(val1 & 0x07)) &&
|
||||
/* Check for ASB100 ID (low byte) */
|
||||
(((!(val1 & 0x80)) && (val2 != 0x94)) ||
|
||||
/* Check for ASB100 ID (high byte ) */
|
||||
((val1 & 0x80) && (val2 != 0x06)))) {
|
||||
pr_debug("asb100.o: detect failed, "
|
||||
"bad chip id 0x%02x!\n", val2);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
} /* kind < 0 */
|
||||
|
||||
/* We have either had a force parameter, or we have already detected
|
||||
Winbond. Put it now into bank 0 and Vendor ID High Byte */
|
||||
/* Put it now into bank 0 and Vendor ID High Byte */
|
||||
i2c_smbus_write_byte_data(client, ASB100_REG_BANK,
|
||||
(i2c_smbus_read_byte_data(client, ASB100_REG_BANK) & 0x78)
|
||||
| 0x80);
|
||||
|
||||
/* Determine the chip type. */
|
||||
if (kind <= 0) {
|
||||
int val1 = i2c_smbus_read_byte_data(client, ASB100_REG_WCHIPID);
|
||||
int val2 = i2c_smbus_read_byte_data(client, ASB100_REG_CHIPMAN);
|
||||
val1 = i2c_smbus_read_byte_data(client, ASB100_REG_WCHIPID);
|
||||
val2 = i2c_smbus_read_byte_data(client, ASB100_REG_CHIPMAN);
|
||||
|
||||
if ((val1 == 0x31) && (val2 == 0x06))
|
||||
kind = asb100;
|
||||
else {
|
||||
if (kind == 0)
|
||||
dev_warn(&adapter->dev, "ignoring "
|
||||
"'force' parameter for unknown chip "
|
||||
"at adapter %d, address 0x%02x.\n",
|
||||
i2c_adapter_id(adapter), client->addr);
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
if (val1 != 0x31 || val2 != 0x06)
|
||||
return -ENODEV;
|
||||
|
||||
strlcpy(info->type, "asb100", I2C_NAME_SIZE);
|
||||
|
||||
|
||||
+11
-21
@@ -2220,33 +2220,23 @@ static int dme1737_i2c_detect(struct i2c_client *client, int kind,
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* A negative kind means that the driver was loaded with no force
|
||||
* parameter (default), so we must identify the chip. */
|
||||
if (kind < 0) {
|
||||
company = i2c_smbus_read_byte_data(client, DME1737_REG_COMPANY);
|
||||
verstep = i2c_smbus_read_byte_data(client, DME1737_REG_VERSTEP);
|
||||
company = i2c_smbus_read_byte_data(client, DME1737_REG_COMPANY);
|
||||
verstep = i2c_smbus_read_byte_data(client, DME1737_REG_VERSTEP);
|
||||
|
||||
if (company == DME1737_COMPANY_SMSC &&
|
||||
(verstep & DME1737_VERSTEP_MASK) == DME1737_VERSTEP) {
|
||||
kind = dme1737;
|
||||
} else if (company == DME1737_COMPANY_SMSC &&
|
||||
verstep == SCH5027_VERSTEP) {
|
||||
kind = sch5027;
|
||||
} else {
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
|
||||
if (kind == sch5027) {
|
||||
if (company == DME1737_COMPANY_SMSC &&
|
||||
verstep == SCH5027_VERSTEP) {
|
||||
name = "sch5027";
|
||||
} else {
|
||||
kind = dme1737;
|
||||
|
||||
} else if (company == DME1737_COMPANY_SMSC &&
|
||||
(verstep & DME1737_VERSTEP_MASK) == DME1737_VERSTEP) {
|
||||
name = "dme1737";
|
||||
} else {
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dev_info(dev, "Found a %s chip at 0x%02x (rev 0x%02x).\n",
|
||||
kind == sch5027 ? "SCH5027" : "DME1737", client->addr,
|
||||
verstep);
|
||||
verstep == SCH5027_VERSTEP ? "SCH5027" : "DME1737",
|
||||
client->addr, verstep);
|
||||
strlcpy(info->type, name, I2C_NAME_SIZE);
|
||||
|
||||
return 0;
|
||||
|
||||
+9
-13
@@ -237,20 +237,16 @@ static int ds1621_detect(struct i2c_client *client, int kind,
|
||||
return -ENODEV;
|
||||
|
||||
/* Now, we do the remaining detection. It is lousy. */
|
||||
if (kind < 0) {
|
||||
/* The NVB bit should be low if no EEPROM write has been
|
||||
requested during the latest 10ms, which is highly
|
||||
improbable in our case. */
|
||||
conf = i2c_smbus_read_byte_data(client, DS1621_REG_CONF);
|
||||
if (conf < 0 || conf & DS1621_REG_CONFIG_NVB)
|
||||
/* The NVB bit should be low if no EEPROM write has been requested
|
||||
during the latest 10ms, which is highly improbable in our case. */
|
||||
conf = i2c_smbus_read_byte_data(client, DS1621_REG_CONF);
|
||||
if (conf < 0 || conf & DS1621_REG_CONFIG_NVB)
|
||||
return -ENODEV;
|
||||
/* The 7 lowest bits of a temperature should always be 0. */
|
||||
for (i = 0; i < ARRAY_SIZE(DS1621_REG_TEMP); i++) {
|
||||
temp = i2c_smbus_read_word_data(client, DS1621_REG_TEMP[i]);
|
||||
if (temp < 0 || (temp & 0x7f00))
|
||||
return -ENODEV;
|
||||
/* The 7 lowest bits of a temperature should always be 0. */
|
||||
for (i = 0; i < ARRAY_SIZE(DS1621_REG_TEMP); i++) {
|
||||
temp = i2c_smbus_read_word_data(client,
|
||||
DS1621_REG_TEMP[i]);
|
||||
if (temp < 0 || (temp & 0x7f00))
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
|
||||
strlcpy(info->type, "ds1621", I2C_NAME_SIZE);
|
||||
|
||||
+236
-116
File diff suppressed because it is too large
Load Diff
+11
-21
@@ -681,30 +681,20 @@ static int f75375_detect(struct i2c_client *client, int kind,
|
||||
struct i2c_board_info *info)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
u8 version = 0;
|
||||
const char *name = "";
|
||||
u16 vendid, chipid;
|
||||
u8 version;
|
||||
const char *name;
|
||||
|
||||
if (kind < 0) {
|
||||
u16 vendid = f75375_read16(client, F75375_REG_VENDOR);
|
||||
u16 chipid = f75375_read16(client, F75375_CHIP_ID);
|
||||
version = f75375_read8(client, F75375_REG_VERSION);
|
||||
if (chipid == 0x0306 && vendid == 0x1934) {
|
||||
kind = f75375;
|
||||
} else if (chipid == 0x0204 && vendid == 0x1934) {
|
||||
kind = f75373;
|
||||
} else {
|
||||
dev_err(&adapter->dev,
|
||||
"failed,%02X,%02X,%02X\n",
|
||||
chipid, version, vendid);
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
|
||||
if (kind == f75375) {
|
||||
vendid = f75375_read16(client, F75375_REG_VENDOR);
|
||||
chipid = f75375_read16(client, F75375_CHIP_ID);
|
||||
if (chipid == 0x0306 && vendid == 0x1934)
|
||||
name = "f75375";
|
||||
} else if (kind == f75373) {
|
||||
else if (chipid == 0x0204 && vendid == 0x1934)
|
||||
name = "f75373";
|
||||
}
|
||||
else
|
||||
return -ENODEV;
|
||||
|
||||
version = f75375_read8(client, F75375_REG_VERSION);
|
||||
dev_info(&adapter->dev, "found %s version: %02X\n", name, version);
|
||||
strlcpy(info->type, name, I2C_NAME_SIZE);
|
||||
|
||||
|
||||
+23
-28
@@ -1000,43 +1000,38 @@ static void fschmd_dmi_decode(const struct dmi_header *header, void *dummy)
|
||||
}
|
||||
}
|
||||
|
||||
static int fschmd_detect(struct i2c_client *client, int kind,
|
||||
static int fschmd_detect(struct i2c_client *client, int _kind,
|
||||
struct i2c_board_info *info)
|
||||
{
|
||||
enum chips kind;
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
char id[4];
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
|
||||
return -ENODEV;
|
||||
|
||||
/* Detect & Identify the chip */
|
||||
if (kind <= 0) {
|
||||
char id[4];
|
||||
id[0] = i2c_smbus_read_byte_data(client, FSCHMD_REG_IDENT_0);
|
||||
id[1] = i2c_smbus_read_byte_data(client, FSCHMD_REG_IDENT_1);
|
||||
id[2] = i2c_smbus_read_byte_data(client, FSCHMD_REG_IDENT_2);
|
||||
id[3] = '\0';
|
||||
|
||||
id[0] = i2c_smbus_read_byte_data(client,
|
||||
FSCHMD_REG_IDENT_0);
|
||||
id[1] = i2c_smbus_read_byte_data(client,
|
||||
FSCHMD_REG_IDENT_1);
|
||||
id[2] = i2c_smbus_read_byte_data(client,
|
||||
FSCHMD_REG_IDENT_2);
|
||||
id[3] = '\0';
|
||||
|
||||
if (!strcmp(id, "PEG"))
|
||||
kind = fscpos;
|
||||
else if (!strcmp(id, "HER"))
|
||||
kind = fscher;
|
||||
else if (!strcmp(id, "SCY"))
|
||||
kind = fscscy;
|
||||
else if (!strcmp(id, "HRC"))
|
||||
kind = fschrc;
|
||||
else if (!strcmp(id, "HMD"))
|
||||
kind = fschmd;
|
||||
else if (!strcmp(id, "HDS"))
|
||||
kind = fschds;
|
||||
else if (!strcmp(id, "SYL"))
|
||||
kind = fscsyl;
|
||||
else
|
||||
return -ENODEV;
|
||||
}
|
||||
if (!strcmp(id, "PEG"))
|
||||
kind = fscpos;
|
||||
else if (!strcmp(id, "HER"))
|
||||
kind = fscher;
|
||||
else if (!strcmp(id, "SCY"))
|
||||
kind = fscscy;
|
||||
else if (!strcmp(id, "HRC"))
|
||||
kind = fschrc;
|
||||
else if (!strcmp(id, "HMD"))
|
||||
kind = fschmd;
|
||||
else if (!strcmp(id, "HDS"))
|
||||
kind = fschds;
|
||||
else if (!strcmp(id, "SYL"))
|
||||
kind = fscsyl;
|
||||
else
|
||||
return -ENODEV;
|
||||
|
||||
strlcpy(info->type, fschmd_id[kind - 1].name, I2C_NAME_SIZE);
|
||||
|
||||
|
||||
+7
-22
@@ -488,36 +488,21 @@ static int gl518_detect(struct i2c_client *client, int kind,
|
||||
struct i2c_board_info *info)
|
||||
{
|
||||
struct i2c_adapter *adapter = client->adapter;
|
||||
int i;
|
||||
int rev;
|
||||
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |
|
||||
I2C_FUNC_SMBUS_WORD_DATA))
|
||||
return -ENODEV;
|
||||
|
||||
/* Now, we do the remaining detection. */
|
||||
|
||||
if (kind < 0) {
|
||||
if ((gl518_read_value(client, GL518_REG_CHIP_ID) != 0x80)
|
||||
|| (gl518_read_value(client, GL518_REG_CONF) & 0x80))
|
||||
return -ENODEV;
|
||||
}
|
||||
if ((gl518_read_value(client, GL518_REG_CHIP_ID) != 0x80)
|
||||
|| (gl518_read_value(client, GL518_REG_CONF) & 0x80))
|
||||
return -ENODEV;
|
||||
|
||||
/* Determine the chip type. */
|
||||
if (kind <= 0) {
|
||||
i = gl518_read_value(client, GL518_REG_REVISION);
|
||||
if (i == 0x00) {
|
||||
kind = gl518sm_r00;
|
||||
} else if (i == 0x80) {
|
||||
kind = gl518sm_r80;
|
||||
} else {
|
||||
if (kind <= 0)
|
||||
dev_info(&adapter->dev,
|
||||
"Ignoring 'force' parameter for unknown "
|
||||
"chip at adapter %d, address 0x%02x\n",
|
||||
i2c_adapter_id(adapter), client->addr);
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
rev = gl518_read_value(client, GL518_REG_REVISION);
|
||||
if (rev != 0x00 && rev != 0x80)
|
||||
return -ENODEV;
|
||||
|
||||
strlcpy(info->type, "gl518sm", I2C_NAME_SIZE);
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user