Loading drivers/hwmon/lm77.c +81 −92 Original line number Diff line number Diff line Loading @@ -57,36 +57,6 @@ struct lm77_data { u8 alarms; }; static int lm77_probe(struct i2c_client *client, const struct i2c_device_id *id); static int lm77_detect(struct i2c_client *client, struct i2c_board_info *info); static void lm77_init_client(struct i2c_client *client); static int lm77_remove(struct i2c_client *client); static u16 lm77_read_value(struct i2c_client *client, u8 reg); static int lm77_write_value(struct i2c_client *client, u8 reg, u16 value); static struct lm77_data *lm77_update_device(struct device *dev); static const struct i2c_device_id lm77_id[] = { { "lm77", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, lm77_id); /* This is the driver that will be inserted */ static struct i2c_driver lm77_driver = { .class = I2C_CLASS_HWMON, .driver = { .name = "lm77", }, .probe = lm77_probe, .remove = lm77_remove, .id_table = lm77_id, .detect = lm77_detect, .address_list = normal_i2c, }; /* straight from the datasheet */ #define LM77_TEMP_MIN (-55000) #define LM77_TEMP_MAX 125000 Loading @@ -106,6 +76,62 @@ static inline int LM77_TEMP_FROM_REG(s16 reg) return (reg / 8) * 500; } /* * All registers are word-sized, except for the configuration register. * The LM77 uses the high-byte first convention. */ static u16 lm77_read_value(struct i2c_client *client, u8 reg) { if (reg == LM77_REG_CONF) return i2c_smbus_read_byte_data(client, reg); else return i2c_smbus_read_word_swapped(client, reg); } static int lm77_write_value(struct i2c_client *client, u8 reg, u16 value) { if (reg == LM77_REG_CONF) return i2c_smbus_write_byte_data(client, reg, value); else return i2c_smbus_write_word_swapped(client, reg, value); } static struct lm77_data *lm77_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct lm77_data *data = i2c_get_clientdata(client); mutex_lock(&data->update_lock); if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || !data->valid) { dev_dbg(&client->dev, "Starting lm77 update\n"); data->temp_input = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP)); data->temp_hyst = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_HYST)); data->temp_crit = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_CRIT)); data->temp_min = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_MIN)); data->temp_max = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_MAX)); data->alarms = lm77_read_value(client, LM77_REG_TEMP) & 0x0007; data->last_updated = jiffies; data->valid = 1; } mutex_unlock(&data->update_lock); return data; } /* sysfs stuff */ /* read routines for temperature limits */ Loading Loading @@ -333,6 +359,14 @@ static int lm77_detect(struct i2c_client *client, struct i2c_board_info *info) return 0; } static void lm77_init_client(struct i2c_client *client) { /* Initialize the LM77 chip - turn off shutdown mode */ int conf = lm77_read_value(client, LM77_REG_CONF); if (conf & 1) lm77_write_value(client, LM77_REG_CONF, conf & 0xfe); } static int lm77_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct device *dev = &client->dev; Loading Loading @@ -375,69 +409,24 @@ static int lm77_remove(struct i2c_client *client) return 0; } /* * All registers are word-sized, except for the configuration register. * The LM77 uses the high-byte first convention. */ static u16 lm77_read_value(struct i2c_client *client, u8 reg) { if (reg == LM77_REG_CONF) return i2c_smbus_read_byte_data(client, reg); else return i2c_smbus_read_word_swapped(client, reg); } static int lm77_write_value(struct i2c_client *client, u8 reg, u16 value) { if (reg == LM77_REG_CONF) return i2c_smbus_write_byte_data(client, reg, value); else return i2c_smbus_write_word_swapped(client, reg, value); } static void lm77_init_client(struct i2c_client *client) { /* Initialize the LM77 chip - turn off shutdown mode */ int conf = lm77_read_value(client, LM77_REG_CONF); if (conf & 1) lm77_write_value(client, LM77_REG_CONF, conf & 0xfe); } static struct lm77_data *lm77_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct lm77_data *data = i2c_get_clientdata(client); mutex_lock(&data->update_lock); if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || !data->valid) { dev_dbg(&client->dev, "Starting lm77 update\n"); data->temp_input = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP)); data->temp_hyst = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_HYST)); data->temp_crit = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_CRIT)); data->temp_min = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_MIN)); data->temp_max = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_MAX)); data->alarms = lm77_read_value(client, LM77_REG_TEMP) & 0x0007; data->last_updated = jiffies; data->valid = 1; } mutex_unlock(&data->update_lock); static const struct i2c_device_id lm77_id[] = { { "lm77", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, lm77_id); return data; } /* This is the driver that will be inserted */ static struct i2c_driver lm77_driver = { .class = I2C_CLASS_HWMON, .driver = { .name = "lm77", }, .probe = lm77_probe, .remove = lm77_remove, .id_table = lm77_id, .detect = lm77_detect, .address_list = normal_i2c, }; module_i2c_driver(lm77_driver); Loading Loading
drivers/hwmon/lm77.c +81 −92 Original line number Diff line number Diff line Loading @@ -57,36 +57,6 @@ struct lm77_data { u8 alarms; }; static int lm77_probe(struct i2c_client *client, const struct i2c_device_id *id); static int lm77_detect(struct i2c_client *client, struct i2c_board_info *info); static void lm77_init_client(struct i2c_client *client); static int lm77_remove(struct i2c_client *client); static u16 lm77_read_value(struct i2c_client *client, u8 reg); static int lm77_write_value(struct i2c_client *client, u8 reg, u16 value); static struct lm77_data *lm77_update_device(struct device *dev); static const struct i2c_device_id lm77_id[] = { { "lm77", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, lm77_id); /* This is the driver that will be inserted */ static struct i2c_driver lm77_driver = { .class = I2C_CLASS_HWMON, .driver = { .name = "lm77", }, .probe = lm77_probe, .remove = lm77_remove, .id_table = lm77_id, .detect = lm77_detect, .address_list = normal_i2c, }; /* straight from the datasheet */ #define LM77_TEMP_MIN (-55000) #define LM77_TEMP_MAX 125000 Loading @@ -106,6 +76,62 @@ static inline int LM77_TEMP_FROM_REG(s16 reg) return (reg / 8) * 500; } /* * All registers are word-sized, except for the configuration register. * The LM77 uses the high-byte first convention. */ static u16 lm77_read_value(struct i2c_client *client, u8 reg) { if (reg == LM77_REG_CONF) return i2c_smbus_read_byte_data(client, reg); else return i2c_smbus_read_word_swapped(client, reg); } static int lm77_write_value(struct i2c_client *client, u8 reg, u16 value) { if (reg == LM77_REG_CONF) return i2c_smbus_write_byte_data(client, reg, value); else return i2c_smbus_write_word_swapped(client, reg, value); } static struct lm77_data *lm77_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct lm77_data *data = i2c_get_clientdata(client); mutex_lock(&data->update_lock); if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || !data->valid) { dev_dbg(&client->dev, "Starting lm77 update\n"); data->temp_input = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP)); data->temp_hyst = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_HYST)); data->temp_crit = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_CRIT)); data->temp_min = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_MIN)); data->temp_max = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_MAX)); data->alarms = lm77_read_value(client, LM77_REG_TEMP) & 0x0007; data->last_updated = jiffies; data->valid = 1; } mutex_unlock(&data->update_lock); return data; } /* sysfs stuff */ /* read routines for temperature limits */ Loading Loading @@ -333,6 +359,14 @@ static int lm77_detect(struct i2c_client *client, struct i2c_board_info *info) return 0; } static void lm77_init_client(struct i2c_client *client) { /* Initialize the LM77 chip - turn off shutdown mode */ int conf = lm77_read_value(client, LM77_REG_CONF); if (conf & 1) lm77_write_value(client, LM77_REG_CONF, conf & 0xfe); } static int lm77_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct device *dev = &client->dev; Loading Loading @@ -375,69 +409,24 @@ static int lm77_remove(struct i2c_client *client) return 0; } /* * All registers are word-sized, except for the configuration register. * The LM77 uses the high-byte first convention. */ static u16 lm77_read_value(struct i2c_client *client, u8 reg) { if (reg == LM77_REG_CONF) return i2c_smbus_read_byte_data(client, reg); else return i2c_smbus_read_word_swapped(client, reg); } static int lm77_write_value(struct i2c_client *client, u8 reg, u16 value) { if (reg == LM77_REG_CONF) return i2c_smbus_write_byte_data(client, reg, value); else return i2c_smbus_write_word_swapped(client, reg, value); } static void lm77_init_client(struct i2c_client *client) { /* Initialize the LM77 chip - turn off shutdown mode */ int conf = lm77_read_value(client, LM77_REG_CONF); if (conf & 1) lm77_write_value(client, LM77_REG_CONF, conf & 0xfe); } static struct lm77_data *lm77_update_device(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); struct lm77_data *data = i2c_get_clientdata(client); mutex_lock(&data->update_lock); if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || !data->valid) { dev_dbg(&client->dev, "Starting lm77 update\n"); data->temp_input = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP)); data->temp_hyst = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_HYST)); data->temp_crit = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_CRIT)); data->temp_min = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_MIN)); data->temp_max = LM77_TEMP_FROM_REG(lm77_read_value(client, LM77_REG_TEMP_MAX)); data->alarms = lm77_read_value(client, LM77_REG_TEMP) & 0x0007; data->last_updated = jiffies; data->valid = 1; } mutex_unlock(&data->update_lock); static const struct i2c_device_id lm77_id[] = { { "lm77", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, lm77_id); return data; } /* This is the driver that will be inserted */ static struct i2c_driver lm77_driver = { .class = I2C_CLASS_HWMON, .driver = { .name = "lm77", }, .probe = lm77_probe, .remove = lm77_remove, .id_table = lm77_id, .detect = lm77_detect, .address_list = normal_i2c, }; module_i2c_driver(lm77_driver); Loading