aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/ds1621.c
diff options
context:
space:
mode:
authorJean Delvare <khali@linux-fr.org>2009-03-30 15:46:40 -0400
committerJean Delvare <khali@linux-fr.org>2009-03-30 15:46:40 -0400
commit9202add67454c6a6f9508f41e733edce705dc56e (patch)
treec95085164215c9374e838f1bf3f6051b74d99441 /drivers/hwmon/ds1621.c
parent0d34fb8e93ceba7b6dad0062dbb4a0813bacd75b (diff)
hwmon: (ds1621) Reorder code statements
Reorder the ds1621 driver code so that we can get rid of forward function declarations. Signed-off-by: Jean Delvare <khali@linux-fr.org> Cc: Aurelien Jarno <aurelien@aurel32.net>
Diffstat (limited to 'drivers/hwmon/ds1621.c')
-rw-r--r--drivers/hwmon/ds1621.c123
1 files changed, 57 insertions, 66 deletions
diff --git a/drivers/hwmon/ds1621.c b/drivers/hwmon/ds1621.c
index 7415381601c3..e688798e115f 100644
--- a/drivers/hwmon/ds1621.c
+++ b/drivers/hwmon/ds1621.c
@@ -81,34 +81,6 @@ struct ds1621_data {
81 u8 conf; /* Register encoding, combined */ 81 u8 conf; /* Register encoding, combined */
82}; 82};
83 83
84static int ds1621_probe(struct i2c_client *client,
85 const struct i2c_device_id *id);
86static int ds1621_detect(struct i2c_client *client, int kind,
87 struct i2c_board_info *info);
88static void ds1621_init_client(struct i2c_client *client);
89static int ds1621_remove(struct i2c_client *client);
90static struct ds1621_data *ds1621_update_client(struct device *dev);
91
92static const struct i2c_device_id ds1621_id[] = {
93 { "ds1621", ds1621 },
94 { "ds1625", ds1621 },
95 { }
96};
97MODULE_DEVICE_TABLE(i2c, ds1621_id);
98
99/* This is the driver that will be inserted */
100static struct i2c_driver ds1621_driver = {
101 .class = I2C_CLASS_HWMON,
102 .driver = {
103 .name = "ds1621",
104 },
105 .probe = ds1621_probe,
106 .remove = ds1621_remove,
107 .id_table = ds1621_id,
108 .detect = ds1621_detect,
109 .address_data = &addr_data,
110};
111
112/* All registers are word-sized, except for the configuration register. 84/* All registers are word-sized, except for the configuration register.
113 DS1621 uses a high-byte first convention, which is exactly opposite to 85 DS1621 uses a high-byte first convention, which is exactly opposite to
114 the SMBus standard. */ 86 the SMBus standard. */
@@ -146,6 +118,45 @@ static void ds1621_init_client(struct i2c_client *client)
146 i2c_smbus_write_byte(client, DS1621_COM_START); 118 i2c_smbus_write_byte(client, DS1621_COM_START);
147} 119}
148 120
121static struct ds1621_data *ds1621_update_client(struct device *dev)
122{
123 struct i2c_client *client = to_i2c_client(dev);
124 struct ds1621_data *data = i2c_get_clientdata(client);
125 u8 new_conf;
126
127 mutex_lock(&data->update_lock);
128
129 if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
130 || !data->valid) {
131 int i;
132
133 dev_dbg(&client->dev, "Starting ds1621 update\n");
134
135 data->conf = ds1621_read_value(client, DS1621_REG_CONF);
136
137 for (i = 0; i < ARRAY_SIZE(data->temp); i++)
138 data->temp[i] = ds1621_read_value(client,
139 DS1621_REG_TEMP[i]);
140
141 /* reset alarms if necessary */
142 new_conf = data->conf;
143 if (data->temp[0] > data->temp[1]) /* input > min */
144 new_conf &= ~DS1621_ALARM_TEMP_LOW;
145 if (data->temp[0] < data->temp[2]) /* input < max */
146 new_conf &= ~DS1621_ALARM_TEMP_HIGH;
147 if (data->conf != new_conf)
148 ds1621_write_value(client, DS1621_REG_CONF,
149 new_conf);
150
151 data->last_updated = jiffies;
152 data->valid = 1;
153 }
154
155 mutex_unlock(&data->update_lock);
156
157 return data;
158}
159
149static ssize_t show_temp(struct device *dev, struct device_attribute *da, 160static ssize_t show_temp(struct device *dev, struct device_attribute *da,
150 char *buf) 161 char *buf)
151{ 162{
@@ -294,45 +305,25 @@ static int ds1621_remove(struct i2c_client *client)
294 return 0; 305 return 0;
295} 306}
296 307
308static const struct i2c_device_id ds1621_id[] = {
309 { "ds1621", ds1621 },
310 { "ds1625", ds1621 },
311 { }
312};
313MODULE_DEVICE_TABLE(i2c, ds1621_id);
297 314
298static struct ds1621_data *ds1621_update_client(struct device *dev) 315/* This is the driver that will be inserted */
299{ 316static struct i2c_driver ds1621_driver = {
300 struct i2c_client *client = to_i2c_client(dev); 317 .class = I2C_CLASS_HWMON,
301 struct ds1621_data *data = i2c_get_clientdata(client); 318 .driver = {
302 u8 new_conf; 319 .name = "ds1621",
303 320 },
304 mutex_lock(&data->update_lock); 321 .probe = ds1621_probe,
305 322 .remove = ds1621_remove,
306 if (time_after(jiffies, data->last_updated + HZ + HZ / 2) 323 .id_table = ds1621_id,
307 || !data->valid) { 324 .detect = ds1621_detect,
308 int i; 325 .address_data = &addr_data,
309 326};
310 dev_dbg(&client->dev, "Starting ds1621 update\n");
311
312 data->conf = ds1621_read_value(client, DS1621_REG_CONF);
313
314 for (i = 0; i < ARRAY_SIZE(data->temp); i++)
315 data->temp[i] = ds1621_read_value(client,
316 DS1621_REG_TEMP[i]);
317
318 /* reset alarms if necessary */
319 new_conf = data->conf;
320 if (data->temp[0] > data->temp[1]) /* input > min */
321 new_conf &= ~DS1621_ALARM_TEMP_LOW;
322 if (data->temp[0] < data->temp[2]) /* input < max */
323 new_conf &= ~DS1621_ALARM_TEMP_HIGH;
324 if (data->conf != new_conf)
325 ds1621_write_value(client, DS1621_REG_CONF,
326 new_conf);
327
328 data->last_updated = jiffies;
329 data->valid = 1;
330 }
331
332 mutex_unlock(&data->update_lock);
333
334 return data;
335}
336 327
337static int __init ds1621_init(void) 328static int __init ds1621_init(void)
338{ 329{