OSDN Git Service

hwmon: (lm85) Drop generic detection
authorJean Delvare <jdelvare@suse.de>
Wed, 11 Jun 2014 16:35:56 +0000 (18:35 +0200)
committerGuenter Roeck <linux@roeck-us.net>
Thu, 12 Jun 2014 15:36:30 +0000 (08:36 -0700)
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>
drivers/hwmon/lm85.c

index bed4af3..b0129a5 100644 (file)
@@ -5,7 +5,7 @@
  * Copyright (c) 2002, 2003  Philip Pokorny <ppokorny@penguincomputing.com>
  * Copyright (c) 2003        Margit Schubert-While <margitsw@t-online.de>
  * Copyright (c) 2004        Justin Thiessen <jthiessen@penguincomputing.com>
- * Copyright (C) 2007--2009  Jean Delvare <jdelvare@suse.de>
+ * Copyright (C) 2007--2014  Jean Delvare <jdelvare@suse.de>
  *
  * Chip details at           <http://www.national.com/ds/LM/LM85.pdf>
  *
@@ -39,7 +39,7 @@
 static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
 
 enum chips {
-       any_chip, lm85b, lm85c,
+       lm85,
        adm1027, adt7463, adt7468,
        emc6d100, emc6d102, emc6d103, emc6d103s
 };
@@ -75,9 +75,6 @@ enum chips {
 #define LM85_COMPANY_NATIONAL          0x01
 #define LM85_COMPANY_ANALOG_DEV                0x41
 #define LM85_COMPANY_SMSC              0x5c
-#define LM85_VERSTEP_VMASK              0xf0
-#define LM85_VERSTEP_GENERIC           0x60
-#define LM85_VERSTEP_GENERIC2          0x70
 #define LM85_VERSTEP_LM85C             0x60
 #define LM85_VERSTEP_LM85B             0x62
 #define LM85_VERSTEP_LM96000_1         0x68
@@ -351,9 +348,9 @@ static const struct i2c_device_id lm85_id[] = {
        { "adm1027", adm1027 },
        { "adt7463", adt7463 },
        { "adt7468", adt7468 },
-       { "lm85", any_chip },
-       { "lm85b", lm85b },
-       { "lm85c", lm85c },
+       { "lm85", lm85 },
+       { "lm85b", lm85 },
+       { "lm85c", lm85 },
        { "emc6d100", emc6d100 },
        { "emc6d101", emc6d100 },
        { "emc6d102", emc6d102 },
@@ -1281,7 +1278,7 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info)
 {
        struct i2c_adapter *adapter = client->adapter;
        int address = client->addr;
-       const char *type_name;
+       const char *type_name = NULL;
        int company, verstep;
 
        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)
                "Detecting device at 0x%02x with COMPANY: 0x%02x and VERSTEP: 0x%02x\n",
                address, company, verstep);
 
-       /* All supported chips have the version in common */
-       if ((verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC &&
-           (verstep & LM85_VERSTEP_VMASK) != LM85_VERSTEP_GENERIC2) {
-               dev_dbg(&adapter->dev,
-                       "Autodetection failed: unsupported version\n");
-               return -ENODEV;
-       }
-       type_name = "lm85";
-
-       /* Now, refine the detection */
        if (company == LM85_COMPANY_NATIONAL) {
                switch (verstep) {
                case LM85_VERSTEP_LM85C:
@@ -1323,6 +1310,7 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info)
                                        "Found Winbond WPCD377I, ignoring\n");
                                return -ENODEV;
                        }
+                       type_name = "lm85";
                        break;
                }
        } else if (company == LM85_COMPANY_ANALOG_DEV) {
@@ -1357,12 +1345,11 @@ static int lm85_detect(struct i2c_client *client, struct i2c_board_info *info)
                        type_name = "emc6d103s";
                        break;
                }
-       } else {
-               dev_dbg(&adapter->dev,
-                       "Autodetection failed: unknown vendor\n");
-               return -ENODEV;
        }
 
+       if (!type_name)
+               return -ENODEV;
+
        strlcpy(info->type, type_name, I2C_NAME_SIZE);
 
        return 0;