/* 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);
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;
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;
}
}
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 */
static const struct i2c_device_id w83795_id[] = {
- { "w83795", w83795 },
+ { "w83795g", w83795g },
+ { "w83795adg", w83795adg },
{ }
};
MODULE_DEVICE_TABLE(i2c, w83795_id);