hwmon: (w83795) Drop duplicate enum
authorJean Delvare <khali@linux-fr.org>
Thu, 28 Oct 2010 18:31:45 +0000 (20:31 +0200)
committerJean Delvare <khali@endymion.delvare>
Thu, 28 Oct 2010 18:31:45 +0000 (20:31 +0200)
Enum chips and chip_types are redundant, get rid of the former. Fix
the detection code to properly identify the chip variant and name the
client accordingly.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
drivers/hwmon/w83795.c

index 7b93ac2..d7e1d36 100644 (file)
@@ -38,8 +38,6 @@
 /* Addresses to scan */
 static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, I2C_CLIENT_END };
 
-enum chips { w83795 };
-
 
 static int reset;
 module_param(reset, bool, 0);
@@ -1686,6 +1684,7 @@ static int w83795_detect(struct i2c_client *client,
        u8 tmp, bank;
        struct i2c_adapter *adapter = client->adapter;
        unsigned short address = client->addr;
+       const char *chip_name;
 
        if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
                return -ENODEV;
@@ -1718,18 +1717,21 @@ static int w83795_detect(struct i2c_client *client,
                return -ENODEV;
        }
 
-#if 0
-       /* Check 795 chip type: 795G or 795ADG */
+       /* Check 795 chip type: 795G or 795ADG
+          Usually we don't write to chips during detection, but here we don't
+          quite have the choice; hopefully it's OK, we are about to return
+          success anyway */
+       if ((bank & 0x07) != 0)
+               i2c_smbus_write_byte_data(client, W83795_REG_BANKSEL,
+                                         bank & ~0x07);
        if (W83795_REG_CONFIG_CONFIG48 &
-                 w83795_read(client, W83795_REG_CONFIG)) {
-               data->chip_type = w83795adg;
+                 i2c_smbus_read_byte_data(client, W83795_REG_CONFIG)) {
+               chip_name = "w83795adg";
        } else {
-               data->chip_type = w83795g;
+               chip_name = "w83795g";
        }
-#endif
 
-       /* Fill in the remaining client fields and put into the global list */
-       strlcpy(info->type, "w83795", I2C_NAME_SIZE);
+       strlcpy(info->type, chip_name, I2C_NAME_SIZE);
 
        return 0;
 }
@@ -1750,20 +1752,13 @@ static int w83795_probe(struct i2c_client *client,
        }
 
        i2c_set_clientdata(client, data);
+       data->chip_type = id->driver_data;
        data->bank = i2c_smbus_read_byte_data(client, W83795_REG_BANKSEL);
        mutex_init(&data->update_lock);
 
        /* Initialize the chip */
        w83795_init_client(client);
 
-       /* Check 795 chip type: 795G or 795ADG */
-       if (W83795_REG_CONFIG_CONFIG48 &
-                 w83795_read(client, W83795_REG_CONFIG)) {
-               data->chip_type = w83795adg;
-       } else {
-               data->chip_type = w83795g;
-       }
-
        data->has_in = w83795_read(client, W83795_REG_VOLT_CTRL1);
        data->has_in |= w83795_read(client, W83795_REG_VOLT_CTRL2) << 8;
        /* VSEN11-9 not for 795adg */
@@ -2097,7 +2092,8 @@ static int w83795_remove(struct i2c_client *client)
 
 
 static const struct i2c_device_id w83795_id[] = {
-       { "w83795", w83795 },
+       { "w83795g", w83795g },
+       { "w83795adg", w83795adg },
        { }
 };
 MODULE_DEVICE_TABLE(i2c, w83795_id);