diff options
author | Jean Delvare <jdelvare@suse.de> | 2014-06-11 12:35:56 -0400 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2014-06-12 11:36:30 -0400 |
commit | 590e8534447ce9f2f5e5e64681764079530ee8c7 (patch) | |
tree | 47731f746bb1b036a9fb8e8c36375104335e8928 | |
parent | c0214f98943b1fe43f7be61b7782b0c8f0836f28 (diff) |
hwmon: (lm85) Drop generic detection
Generic detection leads to too many false positives, so drop it. FWIW
sensors-detect does not have such generic detection. If the user wants
to force the driver to bind to a not yet supported chip, he/she can
still do so using sysfs attribute new_device.
Signed-off-by: Jean Delvare <jdelvare@suse.de>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
-rw-r--r-- | drivers/hwmon/lm85.c | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c index bed4af358308..b0129a54e1a6 100644 --- a/drivers/hwmon/lm85.c +++ b/drivers/hwmon/lm85.c | |||
@@ -5,7 +5,7 @@ | |||
5 | * Copyright (c) 2002, 2003 Philip Pokorny <ppokorny@penguincomputing.com> | 5 | * Copyright (c) 2002, 2003 Philip Pokorny <ppokorny@penguincomputing.com> |
6 | * Copyright (c) 2003 Margit Schubert-While <margitsw@t-online.de> | 6 | * Copyright (c) 2003 Margit Schubert-While <margitsw@t-online.de> |
7 | * Copyright (c) 2004 Justin Thiessen <jthiessen@penguincomputing.com> | 7 | * Copyright (c) 2004 Justin Thiessen <jthiessen@penguincomputing.com> |
8 | * Copyright (C) 2007--2009 Jean Delvare <jdelvare@suse.de> | 8 | * Copyright (C) 2007--2014 Jean Delvare <jdelvare@suse.de> |
9 | * | 9 | * |
10 | * Chip details at <http://www.national.com/ds/LM/LM85.pdf> | 10 | * Chip details at <http://www.national.com/ds/LM/LM85.pdf> |
11 | * | 11 | * |
@@ -39,7 +39,7 @@ | |||
39 | static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END }; | 39 | static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END }; |
40 | 40 | ||
41 | enum chips { | 41 | enum chips { |
42 | any_chip, lm85b, lm85c, | 42 | lm85, |
43 | adm1027, adt7463, adt7468, | 43 | adm1027, adt7463, adt7468, |
44 | emc6d100, emc6d102, emc6d103, emc6d103s | 44 | emc6d100, emc6d102, emc6d103, emc6d103s |
45 | }; | 45 | }; |
@@ -75,9 +75,6 @@ enum chips { | |||
75 | #define LM85_COMPANY_NATIONAL 0x01 | 75 | #define LM85_COMPANY_NATIONAL 0x01 |
76 | #define LM85_COMPANY_ANALOG_DEV 0x41 | 76 | #define LM85_COMPANY_ANALOG_DEV 0x41 |
77 | #define LM85_COMPANY_SMSC 0x5c | 77 | #define LM85_COMPANY_SMSC 0x5c |
78 | #define LM85_VERSTEP_VMASK 0xf0 | ||
79 | #define LM85_VERSTEP_GENERIC 0x60 | ||
80 | #define LM85_VERSTEP_GENERIC2 0x70 | ||
81 | #define LM85_VERSTEP_LM85C 0x60 | 78 | #define LM85_VERSTEP_LM85C 0x60 |
82 | #define LM85_VERSTEP_LM85B 0x62 | 79 | #define LM85_VERSTEP_LM85B 0x62 |
83 | #define LM85_VERSTEP_LM96000_1 0x68 | 80 | #define LM85_VERSTEP_LM96000_1 0x68 |
@@ -351,9 +348,9 @@ static const struct i2c_device_id lm85_id[] = { | |||
351 | { "adm1027", adm1027 }, | 348 | { "adm1027", adm1027 }, |
352 | { "adt7463", adt7463 }, | 349 | { "adt7463", adt7463 }, |
353 | { "adt7468", adt7468 }, | 350 | { "adt7468", adt7468 }, |
354 | { "lm85", any_chip }, | 351 | { "lm85", lm85 }, |
355 | { "lm85b", lm85b }, | 352 | { "lm85b", lm85 }, |
356 | { "lm85c", lm85c }, | 353 | { "lm85c", lm85 }, |
357 | { "emc6d100", emc6d100 }, | 354 | { "emc6d100", emc6d100 }, |
358 | { "emc6d101", emc6d100 }, | 355 | { "emc6d101", emc6d100 }, |
359 | { "emc6d102", emc6d102 }, | 356 | { "emc6d102", emc6d102 }, |
@@ -1281,7 +1278,7 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info) | |||
1281 | { | 1278 | { |
1282 | struct i2c_adapter *adapter = client->adapter; | 1279 | struct i2c_adapter *adapter = client->adapter; |
1283 | int address = client->addr; | 1280 | int address = client->addr; |
1284 | const char *type_name; | 1281 | const char *type_name = NULL; |
1285 | int company, verstep; | 1282 | int company, verstep; |
1286 | 1283 | ||
1287 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { | 1284 | if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { |
@@ -1297,16 +1294,6 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info) | |||
1297 | "Detecting device at 0x%02x with COMPANY: 0x%02x and VERSTEP: 0x%02x\n", | 1294 | "Detecting device at 0x%02x with COMPANY: 0x%02x and VERSTEP: 0x%02x\n", |
1298 | address, company, verstep); | 1295 | address, company, verstep); |
1299 | 1296 | ||
1300 | /* All supported chips have the version in common */ | ||
1301 | if ((verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC && | ||
1302 | (verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC2) { | ||
1303 | dev_dbg(&adapter->dev, | ||
1304 | "Autodetection failed: unsupported version\n"); | ||
1305 | return -ENODEV; | ||
1306 | } | ||
1307 | type_name = "lm85"; | ||
1308 | |||
1309 | /* Now, refine the detection */ | ||
1310 | if (company == LM85_COMPANY_NATIONAL) { | 1297 | if (company == LM85_COMPANY_NATIONAL) { |
1311 | switch (verstep) { | 1298 | switch (verstep) { |
1312 | case LM85_VERSTEP_LM85C: | 1299 | case LM85_VERSTEP_LM85C: |
@@ -1323,6 +1310,7 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info) | |||
1323 | "Found Winbond WPCD377I, ignoring\n"); | 1310 | "Found Winbond WPCD377I, ignoring\n"); |
1324 | return -ENODEV; | 1311 | return -ENODEV; |
1325 | } | 1312 | } |
1313 | type_name = "lm85"; | ||
1326 | break; | 1314 | break; |
1327 | } | 1315 | } |
1328 | } else if (company == LM85_COMPANY_ANALOG_DEV) { | 1316 | } else if (company == LM85_COMPANY_ANALOG_DEV) { |
@@ -1357,12 +1345,11 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info) | |||
1357 | type_name = "emc6d103s"; | 1345 | type_name = "emc6d103s"; |
1358 | break; | 1346 | break; |
1359 | } | 1347 | } |
1360 | } else { | ||
1361 | dev_dbg(&adapter->dev, | ||
1362 | "Autodetection failed: unknown vendor\n"); | ||
1363 | return -ENODEV; | ||
1364 | } | 1348 | } |
1365 | 1349 | ||
1350 | if (!type_name) | ||
1351 | return -ENODEV; | ||
1352 | |||
1366 | strlcpy(info->type, type_name, I2C_NAME_SIZE); | 1353 | strlcpy(info->type, type_name, I2C_NAME_SIZE); |
1367 | 1354 | ||
1368 | return 0; | 1355 | return 0; |