Skip to content

Commit

Permalink
hwmon: (max6650) Drop device detection
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jean Delvare authored and Jean Delvare committed May 25, 2011
1 parent 7d03336 commit 67b670f
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 45 deletions.
9 changes: 8 additions & 1 deletion Documentation/hwmon/max6650
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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
-----------------

Expand Down
44 changes: 0 additions & 44 deletions drivers/hwmon/max6650.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,6 @@
#include <linux/hwmon-sysfs.h>
#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
*/
Expand Down Expand Up @@ -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);
Expand All @@ -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,
};

/*
Expand Down Expand Up @@ -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)
{
Expand Down

0 comments on commit 67b670f

Please sign in to comment.