diff options
author | Guenter Roeck <linux@roeck-us.net> | 2014-04-13 14:56:15 -0400 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2014-05-21 19:02:26 -0400 |
commit | c254ffdefc002b57f1e9eedddcb3569c0d80578f (patch) | |
tree | a74e48aac71bc02c00d35f67603ed24a6cbcd802 /drivers/hwmon/lm80.c | |
parent | 85b3ee07b986e90d5e9821dcb28bde340dfc7805 (diff) |
hwmon: (lm80) Rearrange code to avoid forward declarations
Avoid need for forward declarations by rearranging code.
No functional change.
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon/lm80.c')
-rw-r--r-- | drivers/hwmon/lm80.c | 290 |
1 files changed, 139 insertions, 151 deletions
diff --git a/drivers/hwmon/lm80.c b/drivers/hwmon/lm80.c index 420ad7c5ec28..4bcd9b882948 100644 --- a/drivers/hwmon/lm80.c +++ b/drivers/hwmon/lm80.c | |||
@@ -140,39 +140,130 @@ struct lm80_data { | |||
140 | u16 alarms; /* Register encoding, combined */ | 140 | u16 alarms; /* Register encoding, combined */ |
141 | }; | 141 | }; |
142 | 142 | ||
143 | /* | 143 | static int lm80_read_value(struct i2c_client *client, u8 reg) |
144 | * Functions declaration | 144 | { |
145 | */ | 145 | return i2c_smbus_read_byte_data(client, reg); |
146 | } | ||
146 | 147 | ||
147 | static int lm80_probe(struct i2c_client *client, | 148 | static int lm80_write_value(struct i2c_client *client, u8 reg, u8 value) |
148 | const struct i2c_device_id *id); | 149 | { |
149 | static int lm80_detect(struct i2c_client *client, struct i2c_board_info *info); | 150 | return i2c_smbus_write_byte_data(client, reg, value); |
150 | static void lm80_init_client(struct i2c_client *client); | 151 | } |
151 | static struct lm80_data *lm80_update_device(struct device *dev); | ||
152 | static int lm80_read_value(struct i2c_client *client, u8 reg); | ||
153 | static int lm80_write_value(struct i2c_client *client, u8 reg, u8 value); | ||
154 | 152 | ||
155 | /* | 153 | /* Called when we have found a new LM80 and after read errors */ |
156 | * Driver data (common to all clients) | 154 | static void lm80_init_client(struct i2c_client *client) |
157 | */ | 155 | { |
156 | /* | ||
157 | * Reset all except Watchdog values and last conversion values | ||
158 | * This sets fan-divs to 2, among others. This makes most other | ||
159 | * initializations unnecessary | ||
160 | */ | ||
161 | lm80_write_value(client, LM80_REG_CONFIG, 0x80); | ||
162 | /* Set 11-bit temperature resolution */ | ||
163 | lm80_write_value(client, LM80_REG_RES, 0x08); | ||
158 | 164 | ||
159 | static const struct i2c_device_id lm80_id[] = { | 165 | /* Start monitoring */ |
160 | { "lm80", 0 }, | 166 | lm80_write_value(client, LM80_REG_CONFIG, 0x01); |
161 | { "lm96080", 1 }, | 167 | } |
162 | { } | ||
163 | }; | ||
164 | MODULE_DEVICE_TABLE(i2c, lm80_id); | ||
165 | 168 | ||
166 | static struct i2c_driver lm80_driver = { | 169 | static struct lm80_data *lm80_update_device(struct device *dev) |
167 | .class = I2C_CLASS_HWMON, | 170 | { |
168 | .driver = { | 171 | struct lm80_data *data = dev_get_drvdata(dev); |
169 | .name = "lm80", | 172 | struct i2c_client *client = data->client; |
170 | }, | 173 | int i; |
171 | .probe = lm80_probe, | 174 | int rv; |
172 | .id_table = lm80_id, | 175 | int prev_rv; |
173 | .detect = lm80_detect, | 176 | struct lm80_data *ret = data; |
174 | .address_list = normal_i2c, | 177 | |
175 | }; | 178 | mutex_lock(&data->update_lock); |
179 | |||
180 | if (data->error) | ||
181 | lm80_init_client(client); | ||
182 | |||
183 | if (time_after(jiffies, data->last_updated + 2 * HZ) || !data->valid) { | ||
184 | dev_dbg(dev, "Starting lm80 update\n"); | ||
185 | for (i = 0; i <= 6; i++) { | ||
186 | rv = lm80_read_value(client, LM80_REG_IN(i)); | ||
187 | if (rv < 0) | ||
188 | goto abort; | ||
189 | data->in[i_input][i] = rv; | ||
190 | |||
191 | rv = lm80_read_value(client, LM80_REG_IN_MIN(i)); | ||
192 | if (rv < 0) | ||
193 | goto abort; | ||
194 | data->in[i_min][i] = rv; | ||
195 | |||
196 | rv = lm80_read_value(client, LM80_REG_IN_MAX(i)); | ||
197 | if (rv < 0) | ||
198 | goto abort; | ||
199 | data->in[i_max][i] = rv; | ||
200 | } | ||
201 | |||
202 | rv = lm80_read_value(client, LM80_REG_FAN1); | ||
203 | if (rv < 0) | ||
204 | goto abort; | ||
205 | data->fan[f_input][0] = rv; | ||
206 | |||
207 | rv = lm80_read_value(client, LM80_REG_FAN_MIN(1)); | ||
208 | if (rv < 0) | ||
209 | goto abort; | ||
210 | data->fan[f_min][0] = rv; | ||
211 | |||
212 | rv = lm80_read_value(client, LM80_REG_FAN2); | ||
213 | if (rv < 0) | ||
214 | goto abort; | ||
215 | data->fan[f_input][1] = rv; | ||
216 | |||
217 | rv = lm80_read_value(client, LM80_REG_FAN_MIN(2)); | ||
218 | if (rv < 0) | ||
219 | goto abort; | ||
220 | data->fan[f_min][1] = rv; | ||
221 | |||
222 | prev_rv = rv = lm80_read_value(client, LM80_REG_TEMP); | ||
223 | if (rv < 0) | ||
224 | goto abort; | ||
225 | rv = lm80_read_value(client, LM80_REG_RES); | ||
226 | if (rv < 0) | ||
227 | goto abort; | ||
228 | data->temp[t_input] = (prev_rv << 8) | (rv & 0xf0); | ||
229 | |||
230 | for (i = t_input + 1; i < t_num_temp; i++) { | ||
231 | rv = lm80_read_value(client, temp_regs[i]); | ||
232 | if (rv < 0) | ||
233 | goto abort; | ||
234 | data->temp[i] = rv << 8; | ||
235 | } | ||
236 | |||
237 | rv = lm80_read_value(client, LM80_REG_FANDIV); | ||
238 | if (rv < 0) | ||
239 | goto abort; | ||
240 | data->fan_div[0] = (rv >> 2) & 0x03; | ||
241 | data->fan_div[1] = (rv >> 4) & 0x03; | ||
242 | |||
243 | prev_rv = rv = lm80_read_value(client, LM80_REG_ALARM1); | ||
244 | if (rv < 0) | ||
245 | goto abort; | ||
246 | rv = lm80_read_value(client, LM80_REG_ALARM2); | ||
247 | if (rv < 0) | ||
248 | goto abort; | ||
249 | data->alarms = prev_rv + (rv << 8); | ||
250 | |||
251 | data->last_updated = jiffies; | ||
252 | data->valid = 1; | ||
253 | data->error = 0; | ||
254 | } | ||
255 | goto done; | ||
256 | |||
257 | abort: | ||
258 | ret = ERR_PTR(rv); | ||
259 | data->valid = 0; | ||
260 | data->error = 1; | ||
261 | |||
262 | done: | ||
263 | mutex_unlock(&data->update_lock); | ||
264 | |||
265 | return ret; | ||
266 | } | ||
176 | 267 | ||
177 | /* | 268 | /* |
178 | * Sysfs stuff | 269 | * Sysfs stuff |
@@ -553,130 +644,27 @@ static int lm80_probe(struct i2c_client *client, | |||
553 | return PTR_ERR_OR_ZERO(hwmon_dev); | 644 | return PTR_ERR_OR_ZERO(hwmon_dev); |
554 | } | 645 | } |
555 | 646 | ||
556 | static int lm80_read_value(struct i2c_client *client, u8 reg) | 647 | /* |
557 | { | 648 | * Driver data (common to all clients) |
558 | return i2c_smbus_read_byte_data(client, reg); | 649 | */ |
559 | } | ||
560 | |||
561 | static int lm80_write_value(struct i2c_client *client, u8 reg, u8 value) | ||
562 | { | ||
563 | return i2c_smbus_write_byte_data(client, reg, value); | ||
564 | } | ||
565 | |||
566 | /* Called when we have found a new LM80. */ | ||
567 | static void lm80_init_client(struct i2c_client *client) | ||
568 | { | ||
569 | /* | ||
570 | * Reset all except Watchdog values and last conversion values | ||
571 | * This sets fan-divs to 2, among others. This makes most other | ||
572 | * initializations unnecessary | ||
573 | */ | ||
574 | lm80_write_value(client, LM80_REG_CONFIG, 0x80); | ||
575 | /* Set 11-bit temperature resolution */ | ||
576 | lm80_write_value(client, LM80_REG_RES, 0x08); | ||
577 | |||
578 | /* Start monitoring */ | ||
579 | lm80_write_value(client, LM80_REG_CONFIG, 0x01); | ||
580 | } | ||
581 | |||
582 | static struct lm80_data *lm80_update_device(struct device *dev) | ||
583 | { | ||
584 | struct lm80_data *data = dev_get_drvdata(dev); | ||
585 | struct i2c_client *client = data->client; | ||
586 | int i; | ||
587 | int rv; | ||
588 | int prev_rv; | ||
589 | struct lm80_data *ret = data; | ||
590 | |||
591 | mutex_lock(&data->update_lock); | ||
592 | |||
593 | if (data->error) | ||
594 | lm80_init_client(client); | ||
595 | |||
596 | if (time_after(jiffies, data->last_updated + 2 * HZ) || !data->valid) { | ||
597 | dev_dbg(dev, "Starting lm80 update\n"); | ||
598 | for (i = 0; i <= 6; i++) { | ||
599 | rv = lm80_read_value(client, LM80_REG_IN(i)); | ||
600 | if (rv < 0) | ||
601 | goto abort; | ||
602 | data->in[i_input][i] = rv; | ||
603 | |||
604 | rv = lm80_read_value(client, LM80_REG_IN_MIN(i)); | ||
605 | if (rv < 0) | ||
606 | goto abort; | ||
607 | data->in[i_min][i] = rv; | ||
608 | |||
609 | rv = lm80_read_value(client, LM80_REG_IN_MAX(i)); | ||
610 | if (rv < 0) | ||
611 | goto abort; | ||
612 | data->in[i_max][i] = rv; | ||
613 | } | ||
614 | |||
615 | rv = lm80_read_value(client, LM80_REG_FAN1); | ||
616 | if (rv < 0) | ||
617 | goto abort; | ||
618 | data->fan[f_input][0] = rv; | ||
619 | |||
620 | rv = lm80_read_value(client, LM80_REG_FAN_MIN(1)); | ||
621 | if (rv < 0) | ||
622 | goto abort; | ||
623 | data->fan[f_min][0] = rv; | ||
624 | |||
625 | rv = lm80_read_value(client, LM80_REG_FAN2); | ||
626 | if (rv < 0) | ||
627 | goto abort; | ||
628 | data->fan[f_input][1] = rv; | ||
629 | |||
630 | rv = lm80_read_value(client, LM80_REG_FAN_MIN(2)); | ||
631 | if (rv < 0) | ||
632 | goto abort; | ||
633 | data->fan[f_min][1] = rv; | ||
634 | |||
635 | prev_rv = rv = lm80_read_value(client, LM80_REG_TEMP); | ||
636 | if (rv < 0) | ||
637 | goto abort; | ||
638 | rv = lm80_read_value(client, LM80_REG_RES); | ||
639 | if (rv < 0) | ||
640 | goto abort; | ||
641 | data->temp[t_input] = (prev_rv << 8) | (rv & 0xf0); | ||
642 | |||
643 | for (i = t_input + 1; i < t_num_temp; i++) { | ||
644 | rv = lm80_read_value(client, temp_regs[i]); | ||
645 | if (rv < 0) | ||
646 | goto abort; | ||
647 | data->temp[i] = rv << 8; | ||
648 | } | ||
649 | |||
650 | rv = lm80_read_value(client, LM80_REG_FANDIV); | ||
651 | if (rv < 0) | ||
652 | goto abort; | ||
653 | data->fan_div[0] = (rv >> 2) & 0x03; | ||
654 | data->fan_div[1] = (rv >> 4) & 0x03; | ||
655 | |||
656 | prev_rv = rv = lm80_read_value(client, LM80_REG_ALARM1); | ||
657 | if (rv < 0) | ||
658 | goto abort; | ||
659 | rv = lm80_read_value(client, LM80_REG_ALARM2); | ||
660 | if (rv < 0) | ||
661 | goto abort; | ||
662 | data->alarms = prev_rv + (rv << 8); | ||
663 | |||
664 | data->last_updated = jiffies; | ||
665 | data->valid = 1; | ||
666 | data->error = 0; | ||
667 | } | ||
668 | goto done; | ||
669 | |||
670 | abort: | ||
671 | ret = ERR_PTR(rv); | ||
672 | data->valid = 0; | ||
673 | data->error = 1; | ||
674 | 650 | ||
675 | done: | 651 | static const struct i2c_device_id lm80_id[] = { |
676 | mutex_unlock(&data->update_lock); | 652 | { "lm80", 0 }, |
653 | { "lm96080", 1 }, | ||
654 | { } | ||
655 | }; | ||
656 | MODULE_DEVICE_TABLE(i2c, lm80_id); | ||
677 | 657 | ||
678 | return ret; | 658 | static struct i2c_driver lm80_driver = { |
679 | } | 659 | .class = I2C_CLASS_HWMON, |
660 | .driver = { | ||
661 | .name = "lm80", | ||
662 | }, | ||
663 | .probe = lm80_probe, | ||
664 | .id_table = lm80_id, | ||
665 | .detect = lm80_detect, | ||
666 | .address_list = normal_i2c, | ||
667 | }; | ||
680 | 668 | ||
681 | module_i2c_driver(lm80_driver); | 669 | module_i2c_driver(lm80_driver); |
682 | 670 | ||