diff options
author | Jean Delvare <khali@linux-fr.org> | 2011-11-04 07:00:47 -0400 |
---|---|---|
committer | Jean Delvare <khali@endymion.delvare> | 2011-11-04 07:00:47 -0400 |
commit | 90f4102ce59226954edbe960b2434d8b3da5f086 (patch) | |
tree | 93fd275039932253b16ea125c1ba5eea2995b719 /drivers/hwmon/jc42.c | |
parent | 371f2e083b9b081adf68d04fba4978a27dc4e618 (diff) |
hwmon: Use i2c_smbus_{read,write}_word_swapped
Make use of the new i2c_smbus_{read,write}_word_swapped functions.
This makes the driver code more compact and readable. It also ensures
proper error handling.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
Acked-by: Guenter Roeck <guenter.roeck@ericsson.com>
Cc: Dirk Eibach <eibach@gdsys.de>
Cc: "Mark M. Hoffman" <mhoffman@lightlink.com>
Cc: Guillaume Ligneul <guillaume.ligneul@gmail.com>
Diffstat (limited to 'drivers/hwmon/jc42.c')
-rw-r--r-- | drivers/hwmon/jc42.c | 52 |
1 files changed, 20 insertions, 32 deletions
diff --git a/drivers/hwmon/jc42.c b/drivers/hwmon/jc42.c index 02cebb74e206..2d3d72805ff4 100644 --- a/drivers/hwmon/jc42.c +++ b/drivers/hwmon/jc42.c | |||
@@ -154,8 +154,6 @@ static int jc42_probe(struct i2c_client *client, | |||
154 | const struct i2c_device_id *id); | 154 | const struct i2c_device_id *id); |
155 | static int jc42_detect(struct i2c_client *client, struct i2c_board_info *info); | 155 | static int jc42_detect(struct i2c_client *client, struct i2c_board_info *info); |
156 | static int jc42_remove(struct i2c_client *client); | 156 | static int jc42_remove(struct i2c_client *client); |
157 | static int jc42_read_value(struct i2c_client *client, u8 reg); | ||
158 | static int jc42_write_value(struct i2c_client *client, u8 reg, u16 value); | ||
159 | 157 | ||
160 | static struct jc42_data *jc42_update_device(struct device *dev); | 158 | static struct jc42_data *jc42_update_device(struct device *dev); |
161 | 159 | ||
@@ -187,7 +185,7 @@ static int jc42_suspend(struct device *dev) | |||
187 | struct jc42_data *data = i2c_get_clientdata(client); | 185 | struct jc42_data *data = i2c_get_clientdata(client); |
188 | 186 | ||
189 | data->config |= JC42_CFG_SHUTDOWN; | 187 | data->config |= JC42_CFG_SHUTDOWN; |
190 | jc42_write_value(client, JC42_REG_CONFIG, data->config); | 188 | i2c_smbus_write_word_swapped(client, JC42_REG_CONFIG, data->config); |
191 | return 0; | 189 | return 0; |
192 | } | 190 | } |
193 | 191 | ||
@@ -197,7 +195,7 @@ static int jc42_resume(struct device *dev) | |||
197 | struct jc42_data *data = i2c_get_clientdata(client); | 195 | struct jc42_data *data = i2c_get_clientdata(client); |
198 | 196 | ||
199 | data->config &= ~JC42_CFG_SHUTDOWN; | 197 | data->config &= ~JC42_CFG_SHUTDOWN; |
200 | jc42_write_value(client, JC42_REG_CONFIG, data->config); | 198 | i2c_smbus_write_word_swapped(client, JC42_REG_CONFIG, data->config); |
201 | return 0; | 199 | return 0; |
202 | } | 200 | } |
203 | 201 | ||
@@ -315,7 +313,7 @@ static ssize_t set_##value(struct device *dev, \ | |||
315 | return -EINVAL; \ | 313 | return -EINVAL; \ |
316 | mutex_lock(&data->update_lock); \ | 314 | mutex_lock(&data->update_lock); \ |
317 | data->value = jc42_temp_to_reg(val, data->extended); \ | 315 | data->value = jc42_temp_to_reg(val, data->extended); \ |
318 | err = jc42_write_value(client, reg, data->value); \ | 316 | err = i2c_smbus_write_word_swapped(client, reg, data->value); \ |
319 | if (err < 0) \ | 317 | if (err < 0) \ |
320 | ret = err; \ | 318 | ret = err; \ |
321 | mutex_unlock(&data->update_lock); \ | 319 | mutex_unlock(&data->update_lock); \ |
@@ -357,7 +355,8 @@ static ssize_t set_temp_crit_hyst(struct device *dev, | |||
357 | data->config = (data->config | 355 | data->config = (data->config |
358 | & ~(JC42_CFG_HYST_MASK << JC42_CFG_HYST_SHIFT)) | 356 | & ~(JC42_CFG_HYST_MASK << JC42_CFG_HYST_SHIFT)) |
359 | | (hyst << JC42_CFG_HYST_SHIFT); | 357 | | (hyst << JC42_CFG_HYST_SHIFT); |
360 | err = jc42_write_value(client, JC42_REG_CONFIG, data->config); | 358 | err = i2c_smbus_write_word_swapped(client, JC42_REG_CONFIG, |
359 | data->config); | ||
361 | if (err < 0) | 360 | if (err < 0) |
362 | ret = err; | 361 | ret = err; |
363 | mutex_unlock(&data->update_lock); | 362 | mutex_unlock(&data->update_lock); |
@@ -452,10 +451,10 @@ static int jc42_detect(struct i2c_client *new_client, | |||
452 | I2C_FUNC_SMBUS_WORD_DATA)) | 451 | I2C_FUNC_SMBUS_WORD_DATA)) |
453 | return -ENODEV; | 452 | return -ENODEV; |
454 | 453 | ||
455 | cap = jc42_read_value(new_client, JC42_REG_CAP); | 454 | cap = i2c_smbus_read_word_swapped(new_client, JC42_REG_CAP); |
456 | config = jc42_read_value(new_client, JC42_REG_CONFIG); | 455 | config = i2c_smbus_read_word_swapped(new_client, JC42_REG_CONFIG); |
457 | manid = jc42_read_value(new_client, JC42_REG_MANID); | 456 | manid = i2c_smbus_read_word_swapped(new_client, JC42_REG_MANID); |
458 | devid = jc42_read_value(new_client, JC42_REG_DEVICEID); | 457 | devid = i2c_smbus_read_word_swapped(new_client, JC42_REG_DEVICEID); |
459 | 458 | ||
460 | if (cap < 0 || config < 0 || manid < 0 || devid < 0) | 459 | if (cap < 0 || config < 0 || manid < 0 || devid < 0) |
461 | return -ENODEV; | 460 | return -ENODEV; |
@@ -489,14 +488,14 @@ static int jc42_probe(struct i2c_client *new_client, | |||
489 | i2c_set_clientdata(new_client, data); | 488 | i2c_set_clientdata(new_client, data); |
490 | mutex_init(&data->update_lock); | 489 | mutex_init(&data->update_lock); |
491 | 490 | ||
492 | cap = jc42_read_value(new_client, JC42_REG_CAP); | 491 | cap = i2c_smbus_read_word_swapped(new_client, JC42_REG_CAP); |
493 | if (cap < 0) { | 492 | if (cap < 0) { |
494 | err = -EINVAL; | 493 | err = -EINVAL; |
495 | goto exit_free; | 494 | goto exit_free; |
496 | } | 495 | } |
497 | data->extended = !!(cap & JC42_CAP_RANGE); | 496 | data->extended = !!(cap & JC42_CAP_RANGE); |
498 | 497 | ||
499 | config = jc42_read_value(new_client, JC42_REG_CONFIG); | 498 | config = i2c_smbus_read_word_swapped(new_client, JC42_REG_CONFIG); |
500 | if (config < 0) { | 499 | if (config < 0) { |
501 | err = -EINVAL; | 500 | err = -EINVAL; |
502 | goto exit_free; | 501 | goto exit_free; |
@@ -504,7 +503,8 @@ static int jc42_probe(struct i2c_client *new_client, | |||
504 | data->orig_config = config; | 503 | data->orig_config = config; |
505 | if (config & JC42_CFG_SHUTDOWN) { | 504 | if (config & JC42_CFG_SHUTDOWN) { |
506 | config &= ~JC42_CFG_SHUTDOWN; | 505 | config &= ~JC42_CFG_SHUTDOWN; |
507 | jc42_write_value(new_client, JC42_REG_CONFIG, config); | 506 | i2c_smbus_write_word_swapped(new_client, JC42_REG_CONFIG, |
507 | config); | ||
508 | } | 508 | } |
509 | data->config = config; | 509 | data->config = config; |
510 | 510 | ||
@@ -535,25 +535,12 @@ static int jc42_remove(struct i2c_client *client) | |||
535 | hwmon_device_unregister(data->hwmon_dev); | 535 | hwmon_device_unregister(data->hwmon_dev); |
536 | sysfs_remove_group(&client->dev.kobj, &jc42_group); | 536 | sysfs_remove_group(&client->dev.kobj, &jc42_group); |
537 | if (data->config != data->orig_config) | 537 | if (data->config != data->orig_config) |
538 | jc42_write_value(client, JC42_REG_CONFIG, data->orig_config); | 538 | i2c_smbus_write_word_swapped(client, JC42_REG_CONFIG, |
539 | data->orig_config); | ||
539 | kfree(data); | 540 | kfree(data); |
540 | return 0; | 541 | return 0; |
541 | } | 542 | } |
542 | 543 | ||
543 | /* All registers are word-sized. */ | ||
544 | static int jc42_read_value(struct i2c_client *client, u8 reg) | ||
545 | { | ||
546 | int ret = i2c_smbus_read_word_data(client, reg); | ||
547 | if (ret < 0) | ||
548 | return ret; | ||
549 | return swab16(ret); | ||
550 | } | ||
551 | |||
552 | static int jc42_write_value(struct i2c_client *client, u8 reg, u16 value) | ||
553 | { | ||
554 | return i2c_smbus_write_word_data(client, reg, swab16(value)); | ||
555 | } | ||
556 | |||
557 | static struct jc42_data *jc42_update_device(struct device *dev) | 544 | static struct jc42_data *jc42_update_device(struct device *dev) |
558 | { | 545 | { |
559 | struct i2c_client *client = to_i2c_client(dev); | 546 | struct i2c_client *client = to_i2c_client(dev); |
@@ -564,28 +551,29 @@ static struct jc42_data *jc42_update_device(struct device *dev) | |||
564 | mutex_lock(&data->update_lock); | 551 | mutex_lock(&data->update_lock); |
565 | 552 | ||
566 | if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { | 553 | if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { |
567 | val = jc42_read_value(client, JC42_REG_TEMP); | 554 | val = i2c_smbus_read_word_swapped(client, JC42_REG_TEMP); |
568 | if (val < 0) { | 555 | if (val < 0) { |
569 | ret = ERR_PTR(val); | 556 | ret = ERR_PTR(val); |
570 | goto abort; | 557 | goto abort; |
571 | } | 558 | } |
572 | data->temp_input = val; | 559 | data->temp_input = val; |
573 | 560 | ||
574 | val = jc42_read_value(client, JC42_REG_TEMP_CRITICAL); | 561 | val = i2c_smbus_read_word_swapped(client, |
562 | JC42_REG_TEMP_CRITICAL); | ||
575 | if (val < 0) { | 563 | if (val < 0) { |
576 | ret = ERR_PTR(val); | 564 | ret = ERR_PTR(val); |
577 | goto abort; | 565 | goto abort; |
578 | } | 566 | } |
579 | data->temp_crit = val; | 567 | data->temp_crit = val; |
580 | 568 | ||
581 | val = jc42_read_value(client, JC42_REG_TEMP_LOWER); | 569 | val = i2c_smbus_read_word_swapped(client, JC42_REG_TEMP_LOWER); |
582 | if (val < 0) { | 570 | if (val < 0) { |
583 | ret = ERR_PTR(val); | 571 | ret = ERR_PTR(val); |
584 | goto abort; | 572 | goto abort; |
585 | } | 573 | } |
586 | data->temp_min = val; | 574 | data->temp_min = val; |
587 | 575 | ||
588 | val = jc42_read_value(client, JC42_REG_TEMP_UPPER); | 576 | val = i2c_smbus_read_word_swapped(client, JC42_REG_TEMP_UPPER); |
589 | if (val < 0) { | 577 | if (val < 0) { |
590 | ret = ERR_PTR(val); | 578 | ret = ERR_PTR(val); |
591 | goto abort; | 579 | goto abort; |