hwmon: (max6650) Drop device detection
Jean Delvare [Wed, 25 May 2011 18:43:32 +0000 (20:43 +0200)]
MAX6650 device detection is unreliable, we got reports of false
positives. We now have many ways to let users instantiate the devices
explicitly, so unreliable detection should be dropped.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Acked-by: "Hans J. Koch" <hjk@hansjkoch.de>
Acked-by: Guenter Roeck <guenter.roeck@ericsson.com>

Documentation/hwmon/max6650
drivers/hwmon/max6650.c

index c565650..b26fef5 100644 (file)
@@ -4,7 +4,7 @@ Kernel driver max6650
 Supported chips:
   * Maxim 6650 / 6651
     Prefix: 'max6650'
-    Addresses scanned: I2C 0x1b, 0x1f, 0x48, 0x4b
+    Addresses scanned: none
     Datasheet: http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf
 
 Authors:
@@ -36,6 +36,13 @@ fan1_div     rw      sets the speed range the inputs can handle. Legal
                        values are 1, 2, 4, and 8. Use lower values for
                        faster fans.
 
+Usage notes
+-----------
+
+This driver does not auto-detect devices. You will have to instantiate the
+devices explicitly. Please see Documentation/i2c/instantiating-devices for
+details.
+
 Module parameters
 -----------------
 
index 9a11532..cced186 100644 (file)
 #include <linux/err.h>
 
 /*
- * Addresses to scan. There are four disjoint possibilities, by pin config.
- */
-
-static const unsigned short normal_i2c[] = {0x1b, 0x1f, 0x48, 0x4b,
-                                               I2C_CLIENT_END};
-
-/*
  * Insmod parameters
  */
 
@@ -114,8 +107,6 @@ module_param(clock, int, S_IRUGO);
 
 static int max6650_probe(struct i2c_client *client,
                         const struct i2c_device_id *id);
-static int max6650_detect(struct i2c_client *client,
-                         struct i2c_board_info *info);
 static int max6650_init_client(struct i2c_client *client);
 static int max6650_remove(struct i2c_client *client);
 static struct max6650_data *max6650_update_device(struct device *dev);
@@ -131,15 +122,12 @@ static const struct i2c_device_id max6650_id[] = {
 MODULE_DEVICE_TABLE(i2c, max6650_id);
 
 static struct i2c_driver max6650_driver = {
-       .class          = I2C_CLASS_HWMON,
        .driver = {
                .name   = "max6650",
        },
        .probe          = max6650_probe,
        .remove         = max6650_remove,
        .id_table       = max6650_id,
-       .detect         = max6650_detect,
-       .address_list   = normal_i2c,
 };
 
 /*
@@ -525,38 +513,6 @@ static struct attribute_group max6650_attr_grp = {
  * Real code
  */
 
-/* Return 0 if detection is successful, -ENODEV otherwise */
-static int max6650_detect(struct i2c_client *client,
-                         struct i2c_board_info *info)
-{
-       struct i2c_adapter *adapter = client->adapter;
-       int address = client->addr;
-
-       dev_dbg(&adapter->dev, "max6650_detect called\n");
-
-       if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
-               dev_dbg(&adapter->dev, "max6650: I2C bus doesn't support "
-                                       "byte read mode, skipping.\n");
-               return -ENODEV;
-       }
-
-       if (((i2c_smbus_read_byte_data(client, MAX6650_REG_CONFIG) & 0xC0)
-           ||(i2c_smbus_read_byte_data(client, MAX6650_REG_GPIO_STAT) & 0xE0)
-           ||(i2c_smbus_read_byte_data(client, MAX6650_REG_ALARM_EN) & 0xE0)
-           ||(i2c_smbus_read_byte_data(client, MAX6650_REG_ALARM) & 0xE0)
-           ||(i2c_smbus_read_byte_data(client, MAX6650_REG_COUNT) & 0xFC))) {
-               dev_dbg(&adapter->dev,
-                       "max6650: detection failed at 0x%02x.\n", address);
-               return -ENODEV;
-       }
-
-       dev_info(&adapter->dev, "max6650: chip found at 0x%02x.\n", address);
-
-       strlcpy(info->type, "max6650", I2C_NAME_SIZE);
-
-       return 0;
-}
-
 static int max6650_probe(struct i2c_client *client,
                         const struct i2c_device_id *id)
 {