Loading drivers/hwmon/tmp401.c +97 −108 Original line number Diff line number Diff line Loading @@ -91,17 +91,6 @@ static const u8 TMP411_TEMP_HIGHEST_LSB[2] = { 0x33, 0x37 }; #define TMP401_DEVICE_ID 0x11 #define TMP411_DEVICE_ID 0x12 /* * Functions declarations */ static int tmp401_probe(struct i2c_client *client, const struct i2c_device_id *id); static int tmp401_detect(struct i2c_client *client, struct i2c_board_info *info); static int tmp401_remove(struct i2c_client *client); static struct tmp401_data *tmp401_update_device(struct device *dev); /* * Driver data (common to all clients) */ Loading @@ -113,18 +102,6 @@ static const struct i2c_device_id tmp401_id[] = { }; MODULE_DEVICE_TABLE(i2c, tmp401_id); static struct i2c_driver tmp401_driver = { .class = I2C_CLASS_HWMON, .driver = { .name = "tmp401", }, .probe = tmp401_probe, .remove = tmp401_remove, .id_table = tmp401_id, .detect = tmp401_detect, .address_list = normal_i2c, }; /* * Client data (each client gets its own) */ Loading Loading @@ -194,6 +171,71 @@ static u8 tmp401_crit_temp_to_register(long temp, u8 config) return (temp + 500) / 1000; } static struct tmp401_data *tmp401_update_device_reg16( struct i2c_client *client, struct tmp401_data *data) { int i; for (i = 0; i < 2; i++) { /* * High byte must be read first immediately followed * by the low byte */ data->temp[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_MSB[i]) << 8; data->temp[i] |= i2c_smbus_read_byte_data(client, TMP401_TEMP_LSB[i]); data->temp_low[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_LOW_LIMIT_MSB_READ[i]) << 8; data->temp_low[i] |= i2c_smbus_read_byte_data(client, TMP401_TEMP_LOW_LIMIT_LSB[i]); data->temp_high[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_HIGH_LIMIT_MSB_READ[i]) << 8; data->temp_high[i] |= i2c_smbus_read_byte_data(client, TMP401_TEMP_HIGH_LIMIT_LSB[i]); data->temp_crit[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_CRIT_LIMIT[i]); if (data->kind == tmp411) { data->temp_lowest[i] = i2c_smbus_read_byte_data(client, TMP411_TEMP_LOWEST_MSB[i]) << 8; data->temp_lowest[i] |= i2c_smbus_read_byte_data( client, TMP411_TEMP_LOWEST_LSB[i]); data->temp_highest[i] = i2c_smbus_read_byte_data( client, TMP411_TEMP_HIGHEST_MSB[i]) << 8; data->temp_highest[i] |= i2c_smbus_read_byte_data( client, TMP411_TEMP_HIGHEST_LSB[i]); } } return data; } static struct tmp401_data *tmp401_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct tmp401_data *data = i2c_get_clientdata(client); mutex_lock(&data->update_lock); if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { data->status = i2c_smbus_read_byte_data(client, TMP401_STATUS); data->config = i2c_smbus_read_byte_data(client, TMP401_CONFIG_READ); tmp401_update_device_reg16(client, data); data->temp_crit_hyst = i2c_smbus_read_byte_data(client, TMP401_TEMP_CRIT_HYST); data->last_updated = jiffies; data->valid = 1; } mutex_unlock(&data->update_lock); return data; } static ssize_t show_temp_value(struct device *dev, struct device_attribute *devattr, char *buf) { Loading Loading @@ -535,6 +577,27 @@ static int tmp401_detect(struct i2c_client *client, return 0; } static int tmp401_remove(struct i2c_client *client) { struct tmp401_data *data = i2c_get_clientdata(client); int i; if (data->hwmon_dev) hwmon_device_unregister(data->hwmon_dev); for (i = 0; i < ARRAY_SIZE(tmp401_attr); i++) device_remove_file(&client->dev, &tmp401_attr[i].dev_attr); if (data->kind == tmp411) { for (i = 0; i < ARRAY_SIZE(tmp411_attr); i++) device_remove_file(&client->dev, &tmp411_attr[i].dev_attr); } kfree(data); return 0; } static int tmp401_probe(struct i2c_client *client, const struct i2c_device_id *id) { Loading Loading @@ -587,91 +650,17 @@ static int tmp401_probe(struct i2c_client *client, return err; } static int tmp401_remove(struct i2c_client *client) { struct tmp401_data *data = i2c_get_clientdata(client); int i; if (data->hwmon_dev) hwmon_device_unregister(data->hwmon_dev); for (i = 0; i < ARRAY_SIZE(tmp401_attr); i++) device_remove_file(&client->dev, &tmp401_attr[i].dev_attr); if (data->kind == tmp411) { for (i = 0; i < ARRAY_SIZE(tmp411_attr); i++) device_remove_file(&client->dev, &tmp411_attr[i].dev_attr); } kfree(data); return 0; } static struct tmp401_data *tmp401_update_device_reg16( struct i2c_client *client, struct tmp401_data *data) { int i; for (i = 0; i < 2; i++) { /* * High byte must be read first immediately followed * by the low byte */ data->temp[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_MSB[i]) << 8; data->temp[i] |= i2c_smbus_read_byte_data(client, TMP401_TEMP_LSB[i]); data->temp_low[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_LOW_LIMIT_MSB_READ[i]) << 8; data->temp_low[i] |= i2c_smbus_read_byte_data(client, TMP401_TEMP_LOW_LIMIT_LSB[i]); data->temp_high[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_HIGH_LIMIT_MSB_READ[i]) << 8; data->temp_high[i] |= i2c_smbus_read_byte_data(client, TMP401_TEMP_HIGH_LIMIT_LSB[i]); data->temp_crit[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_CRIT_LIMIT[i]); if (data->kind == tmp411) { data->temp_lowest[i] = i2c_smbus_read_byte_data(client, TMP411_TEMP_LOWEST_MSB[i]) << 8; data->temp_lowest[i] |= i2c_smbus_read_byte_data( client, TMP411_TEMP_LOWEST_LSB[i]); data->temp_highest[i] = i2c_smbus_read_byte_data( client, TMP411_TEMP_HIGHEST_MSB[i]) << 8; data->temp_highest[i] |= i2c_smbus_read_byte_data( client, TMP411_TEMP_HIGHEST_LSB[i]); } } return data; } static struct tmp401_data *tmp401_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct tmp401_data *data = i2c_get_clientdata(client); mutex_lock(&data->update_lock); if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { data->status = i2c_smbus_read_byte_data(client, TMP401_STATUS); data->config = i2c_smbus_read_byte_data(client, TMP401_CONFIG_READ); tmp401_update_device_reg16(client, data); data->temp_crit_hyst = i2c_smbus_read_byte_data(client, TMP401_TEMP_CRIT_HYST); data->last_updated = jiffies; data->valid = 1; } mutex_unlock(&data->update_lock); return data; } static struct i2c_driver tmp401_driver = { .class = I2C_CLASS_HWMON, .driver = { .name = "tmp401", }, .probe = tmp401_probe, .remove = tmp401_remove, .id_table = tmp401_id, .detect = tmp401_detect, .address_list = normal_i2c, }; static int __init tmp401_init(void) { Loading Loading
drivers/hwmon/tmp401.c +97 −108 Original line number Diff line number Diff line Loading @@ -91,17 +91,6 @@ static const u8 TMP411_TEMP_HIGHEST_LSB[2] = { 0x33, 0x37 }; #define TMP401_DEVICE_ID 0x11 #define TMP411_DEVICE_ID 0x12 /* * Functions declarations */ static int tmp401_probe(struct i2c_client *client, const struct i2c_device_id *id); static int tmp401_detect(struct i2c_client *client, struct i2c_board_info *info); static int tmp401_remove(struct i2c_client *client); static struct tmp401_data *tmp401_update_device(struct device *dev); /* * Driver data (common to all clients) */ Loading @@ -113,18 +102,6 @@ static const struct i2c_device_id tmp401_id[] = { }; MODULE_DEVICE_TABLE(i2c, tmp401_id); static struct i2c_driver tmp401_driver = { .class = I2C_CLASS_HWMON, .driver = { .name = "tmp401", }, .probe = tmp401_probe, .remove = tmp401_remove, .id_table = tmp401_id, .detect = tmp401_detect, .address_list = normal_i2c, }; /* * Client data (each client gets its own) */ Loading Loading @@ -194,6 +171,71 @@ static u8 tmp401_crit_temp_to_register(long temp, u8 config) return (temp + 500) / 1000; } static struct tmp401_data *tmp401_update_device_reg16( struct i2c_client *client, struct tmp401_data *data) { int i; for (i = 0; i < 2; i++) { /* * High byte must be read first immediately followed * by the low byte */ data->temp[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_MSB[i]) << 8; data->temp[i] |= i2c_smbus_read_byte_data(client, TMP401_TEMP_LSB[i]); data->temp_low[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_LOW_LIMIT_MSB_READ[i]) << 8; data->temp_low[i] |= i2c_smbus_read_byte_data(client, TMP401_TEMP_LOW_LIMIT_LSB[i]); data->temp_high[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_HIGH_LIMIT_MSB_READ[i]) << 8; data->temp_high[i] |= i2c_smbus_read_byte_data(client, TMP401_TEMP_HIGH_LIMIT_LSB[i]); data->temp_crit[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_CRIT_LIMIT[i]); if (data->kind == tmp411) { data->temp_lowest[i] = i2c_smbus_read_byte_data(client, TMP411_TEMP_LOWEST_MSB[i]) << 8; data->temp_lowest[i] |= i2c_smbus_read_byte_data( client, TMP411_TEMP_LOWEST_LSB[i]); data->temp_highest[i] = i2c_smbus_read_byte_data( client, TMP411_TEMP_HIGHEST_MSB[i]) << 8; data->temp_highest[i] |= i2c_smbus_read_byte_data( client, TMP411_TEMP_HIGHEST_LSB[i]); } } return data; } static struct tmp401_data *tmp401_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct tmp401_data *data = i2c_get_clientdata(client); mutex_lock(&data->update_lock); if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { data->status = i2c_smbus_read_byte_data(client, TMP401_STATUS); data->config = i2c_smbus_read_byte_data(client, TMP401_CONFIG_READ); tmp401_update_device_reg16(client, data); data->temp_crit_hyst = i2c_smbus_read_byte_data(client, TMP401_TEMP_CRIT_HYST); data->last_updated = jiffies; data->valid = 1; } mutex_unlock(&data->update_lock); return data; } static ssize_t show_temp_value(struct device *dev, struct device_attribute *devattr, char *buf) { Loading Loading @@ -535,6 +577,27 @@ static int tmp401_detect(struct i2c_client *client, return 0; } static int tmp401_remove(struct i2c_client *client) { struct tmp401_data *data = i2c_get_clientdata(client); int i; if (data->hwmon_dev) hwmon_device_unregister(data->hwmon_dev); for (i = 0; i < ARRAY_SIZE(tmp401_attr); i++) device_remove_file(&client->dev, &tmp401_attr[i].dev_attr); if (data->kind == tmp411) { for (i = 0; i < ARRAY_SIZE(tmp411_attr); i++) device_remove_file(&client->dev, &tmp411_attr[i].dev_attr); } kfree(data); return 0; } static int tmp401_probe(struct i2c_client *client, const struct i2c_device_id *id) { Loading Loading @@ -587,91 +650,17 @@ static int tmp401_probe(struct i2c_client *client, return err; } static int tmp401_remove(struct i2c_client *client) { struct tmp401_data *data = i2c_get_clientdata(client); int i; if (data->hwmon_dev) hwmon_device_unregister(data->hwmon_dev); for (i = 0; i < ARRAY_SIZE(tmp401_attr); i++) device_remove_file(&client->dev, &tmp401_attr[i].dev_attr); if (data->kind == tmp411) { for (i = 0; i < ARRAY_SIZE(tmp411_attr); i++) device_remove_file(&client->dev, &tmp411_attr[i].dev_attr); } kfree(data); return 0; } static struct tmp401_data *tmp401_update_device_reg16( struct i2c_client *client, struct tmp401_data *data) { int i; for (i = 0; i < 2; i++) { /* * High byte must be read first immediately followed * by the low byte */ data->temp[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_MSB[i]) << 8; data->temp[i] |= i2c_smbus_read_byte_data(client, TMP401_TEMP_LSB[i]); data->temp_low[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_LOW_LIMIT_MSB_READ[i]) << 8; data->temp_low[i] |= i2c_smbus_read_byte_data(client, TMP401_TEMP_LOW_LIMIT_LSB[i]); data->temp_high[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_HIGH_LIMIT_MSB_READ[i]) << 8; data->temp_high[i] |= i2c_smbus_read_byte_data(client, TMP401_TEMP_HIGH_LIMIT_LSB[i]); data->temp_crit[i] = i2c_smbus_read_byte_data(client, TMP401_TEMP_CRIT_LIMIT[i]); if (data->kind == tmp411) { data->temp_lowest[i] = i2c_smbus_read_byte_data(client, TMP411_TEMP_LOWEST_MSB[i]) << 8; data->temp_lowest[i] |= i2c_smbus_read_byte_data( client, TMP411_TEMP_LOWEST_LSB[i]); data->temp_highest[i] = i2c_smbus_read_byte_data( client, TMP411_TEMP_HIGHEST_MSB[i]) << 8; data->temp_highest[i] |= i2c_smbus_read_byte_data( client, TMP411_TEMP_HIGHEST_LSB[i]); } } return data; } static struct tmp401_data *tmp401_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct tmp401_data *data = i2c_get_clientdata(client); mutex_lock(&data->update_lock); if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { data->status = i2c_smbus_read_byte_data(client, TMP401_STATUS); data->config = i2c_smbus_read_byte_data(client, TMP401_CONFIG_READ); tmp401_update_device_reg16(client, data); data->temp_crit_hyst = i2c_smbus_read_byte_data(client, TMP401_TEMP_CRIT_HYST); data->last_updated = jiffies; data->valid = 1; } mutex_unlock(&data->update_lock); return data; } static struct i2c_driver tmp401_driver = { .class = I2C_CLASS_HWMON, .driver = { .name = "tmp401", }, .probe = tmp401_probe, .remove = tmp401_remove, .id_table = tmp401_id, .detect = tmp401_detect, .address_list = normal_i2c, }; static int __init tmp401_init(void) { Loading