diff options
author | Sebastian Reichel <sre@debian.org> | 2014-03-15 21:43:29 -0400 |
---|---|---|
committer | Lee Jones <lee.jones@linaro.org> | 2014-03-18 04:15:50 -0400 |
commit | 168ae30802368deadccaa8a8e85057efbae22975 (patch) | |
tree | aca9cf8b6d10bc2b243cc931abadb4a160164377 /drivers/mfd/twl4030-madc.c | |
parent | 204dfd63a07ec4785fc786ff3511d85eb1346b7b (diff) |
mfd: twl4030-madc: Use twl_i2c_read/write_u16 for 16 bit registers
Simplify reading and writing of 16 bit TWL registers in the
driver by using twl_i2c_read_u16 and twl_i2c_write_u16.
Signed-off-by: Sebastian Reichel <sre@debian.org>
Acked-by: Jonathan Cameron <jic23@kernel.org>
Tested-by: Marek Belisko <marek@goldelico.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Diffstat (limited to 'drivers/mfd/twl4030-madc.c')
-rw-r--r-- | drivers/mfd/twl4030-madc.c | 39 |
1 files changed, 8 insertions, 31 deletions
diff --git a/drivers/mfd/twl4030-madc.c b/drivers/mfd/twl4030-madc.c index 98b9c9874d26..8a014fbb98bc 100644 --- a/drivers/mfd/twl4030-madc.c +++ b/drivers/mfd/twl4030-madc.c | |||
@@ -205,25 +205,19 @@ const struct twl4030_madc_conversion_method twl4030_conversion_methods[] = { | |||
205 | */ | 205 | */ |
206 | static int twl4030_madc_channel_raw_read(struct twl4030_madc_data *madc, u8 reg) | 206 | static int twl4030_madc_channel_raw_read(struct twl4030_madc_data *madc, u8 reg) |
207 | { | 207 | { |
208 | u8 msb, lsb; | 208 | u16 val; |
209 | int ret; | 209 | int ret; |
210 | /* | 210 | /* |
211 | * For each ADC channel, we have MSB and LSB register pair. MSB address | 211 | * For each ADC channel, we have MSB and LSB register pair. MSB address |
212 | * is always LSB address+1. reg parameter is the address of LSB register | 212 | * is always LSB address+1. reg parameter is the address of LSB register |
213 | */ | 213 | */ |
214 | ret = twl_i2c_read_u8(TWL4030_MODULE_MADC, &msb, reg + 1); | 214 | ret = twl_i2c_read_u16(TWL4030_MODULE_MADC, &val, reg); |
215 | if (ret) { | 215 | if (ret) { |
216 | dev_err(madc->dev, "unable to read MSB register 0x%X\n", | 216 | dev_err(madc->dev, "unable to read register 0x%X\n", reg); |
217 | reg + 1); | ||
218 | return ret; | ||
219 | } | ||
220 | ret = twl_i2c_read_u8(TWL4030_MODULE_MADC, &lsb, reg); | ||
221 | if (ret) { | ||
222 | dev_err(madc->dev, "unable to read LSB register 0x%X\n", reg); | ||
223 | return ret; | 217 | return ret; |
224 | } | 218 | } |
225 | 219 | ||
226 | return (int)(((msb << 8) | lsb) >> 6); | 220 | return (int)(val >> 6); |
227 | } | 221 | } |
228 | 222 | ||
229 | /* | 223 | /* |
@@ -572,7 +566,6 @@ static int twl4030_madc_wait_conversion_ready(struct twl4030_madc_data *madc, | |||
572 | int twl4030_madc_conversion(struct twl4030_madc_request *req) | 566 | int twl4030_madc_conversion(struct twl4030_madc_request *req) |
573 | { | 567 | { |
574 | const struct twl4030_madc_conversion_method *method; | 568 | const struct twl4030_madc_conversion_method *method; |
575 | u8 ch_msb, ch_lsb; | ||
576 | int ret; | 569 | int ret; |
577 | 570 | ||
578 | if (!req || !twl4030_madc) | 571 | if (!req || !twl4030_madc) |
@@ -588,37 +581,21 @@ int twl4030_madc_conversion(struct twl4030_madc_request *req) | |||
588 | ret = -EBUSY; | 581 | ret = -EBUSY; |
589 | goto out; | 582 | goto out; |
590 | } | 583 | } |
591 | ch_msb = (req->channels >> 8) & 0xff; | ||
592 | ch_lsb = req->channels & 0xff; | ||
593 | method = &twl4030_conversion_methods[req->method]; | 584 | method = &twl4030_conversion_methods[req->method]; |
594 | /* Select channels to be converted */ | 585 | /* Select channels to be converted */ |
595 | ret = twl_i2c_write_u8(TWL4030_MODULE_MADC, ch_msb, method->sel + 1); | 586 | ret = twl_i2c_write_u16(TWL4030_MODULE_MADC, req->channels, method->sel); |
596 | if (ret) { | 587 | if (ret) { |
597 | dev_err(twl4030_madc->dev, | 588 | dev_err(twl4030_madc->dev, |
598 | "unable to write sel register 0x%X\n", method->sel + 1); | 589 | "unable to write sel register 0x%X\n", method->sel); |
599 | goto out; | ||
600 | } | ||
601 | ret = twl_i2c_write_u8(TWL4030_MODULE_MADC, ch_lsb, method->sel); | ||
602 | if (ret) { | ||
603 | dev_err(twl4030_madc->dev, | ||
604 | "unable to write sel register 0x%X\n", method->sel + 1); | ||
605 | goto out; | 590 | goto out; |
606 | } | 591 | } |
607 | /* Select averaging for all channels if do_avg is set */ | 592 | /* Select averaging for all channels if do_avg is set */ |
608 | if (req->do_avg) { | 593 | if (req->do_avg) { |
609 | ret = twl_i2c_write_u8(TWL4030_MODULE_MADC, | 594 | ret = twl_i2c_write_u16(TWL4030_MODULE_MADC, req->channels, |
610 | ch_msb, method->avg + 1); | 595 | method->avg); |
611 | if (ret) { | 596 | if (ret) { |
612 | dev_err(twl4030_madc->dev, | 597 | dev_err(twl4030_madc->dev, |
613 | "unable to write avg register 0x%X\n", | 598 | "unable to write avg register 0x%X\n", |
614 | method->avg + 1); | ||
615 | goto out; | ||
616 | } | ||
617 | ret = twl_i2c_write_u8(TWL4030_MODULE_MADC, | ||
618 | ch_lsb, method->avg); | ||
619 | if (ret) { | ||
620 | dev_err(twl4030_madc->dev, | ||
621 | "unable to write avg reg 0x%X\n", | ||
622 | method->avg); | 599 | method->avg); |
623 | goto out; | 600 | goto out; |
624 | } | 601 | } |