diff options
author | Jean Delvare <khali@linux-fr.org> | 2009-03-30 15:46:40 -0400 |
---|---|---|
committer | Jean Delvare <khali@linux-fr.org> | 2009-03-30 15:46:40 -0400 |
commit | 9202add67454c6a6f9508f41e733edce705dc56e (patch) | |
tree | c95085164215c9374e838f1bf3f6051b74d99441 /drivers/hwmon/ds1621.c | |
parent | 0d34fb8e93ceba7b6dad0062dbb4a0813bacd75b (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.c | 123 |
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 | ||
84 | static int ds1621_probe(struct i2c_client *client, | ||
85 | const struct i2c_device_id *id); | ||
86 | static int ds1621_detect(struct i2c_client *client, int kind, | ||
87 | struct i2c_board_info *info); | ||
88 | static void ds1621_init_client(struct i2c_client *client); | ||
89 | static int ds1621_remove(struct i2c_client *client); | ||
90 | static struct ds1621_data *ds1621_update_client(struct device *dev); | ||
91 | |||
92 | static const struct i2c_device_id ds1621_id[] = { | ||
93 | { "ds1621", ds1621 }, | ||
94 | { "ds1625", ds1621 }, | ||
95 | { } | ||
96 | }; | ||
97 | MODULE_DEVICE_TABLE(i2c, ds1621_id); | ||
98 | |||
99 | /* This is the driver that will be inserted */ | ||
100 | static 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 | ||
121 | static 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 | |||
149 | static ssize_t show_temp(struct device *dev, struct device_attribute *da, | 160 | static 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 | ||
308 | static const struct i2c_device_id ds1621_id[] = { | ||
309 | { "ds1621", ds1621 }, | ||
310 | { "ds1625", ds1621 }, | ||
311 | { } | ||
312 | }; | ||
313 | MODULE_DEVICE_TABLE(i2c, ds1621_id); | ||
297 | 314 | ||
298 | static struct ds1621_data *ds1621_update_client(struct device *dev) | 315 | /* This is the driver that will be inserted */ |
299 | { | 316 | static 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 | ||
337 | static int __init ds1621_init(void) | 328 | static int __init ds1621_init(void) |
338 | { | 329 | { |