aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/power/bq27x00_battery.c45
1 files changed, 24 insertions, 21 deletions
diff --git a/drivers/power/bq27x00_battery.c b/drivers/power/bq27x00_battery.c
index b44555f1b633..740a0ac29dd1 100644
--- a/drivers/power/bq27x00_battery.c
+++ b/drivers/power/bq27x00_battery.c
@@ -565,36 +565,39 @@ static DEFINE_MUTEX(battery_mutex);
565static int bq27x00_read_i2c(struct bq27x00_device_info *di, u8 reg, bool single) 565static int bq27x00_read_i2c(struct bq27x00_device_info *di, u8 reg, bool single)
566{ 566{
567 struct i2c_client *client = to_i2c_client(di->dev); 567 struct i2c_client *client = to_i2c_client(di->dev);
568 struct i2c_msg msg[1]; 568 struct i2c_msg msg;
569 unsigned char data[2]; 569 unsigned char data[2];
570 int ret; 570 int ret;
571 571
572 if (!client->adapter) 572 if (!client->adapter)
573 return -ENODEV; 573 return -ENODEV;
574 574
575 msg->addr = client->addr; 575 msg.addr = client->addr;
576 msg->flags = 0; 576 msg.flags = 0;
577 msg->len = 1; 577 msg.len = 1;
578 msg->buf = data; 578 msg.buf = data;
579 579
580 data[0] = reg; 580 data[0] = reg;
581 ret = i2c_transfer(client->adapter, msg, 1); 581 ret = i2c_transfer(client->adapter, &msg, 1);
582
583 if (ret < 0)
584 return ret;
585
586 if (single)
587 msg.len = 1;
588 else
589 msg.len = 2;
590
591 msg.flags = I2C_M_RD;
592 ret = i2c_transfer(client->adapter, &msg, 1);
593 if (ret < 0)
594 return ret;
595
596 if (!single)
597 ret = get_unaligned_le16(data);
598 else
599 ret = data[0];
582 600
583 if (ret >= 0) {
584 if (!single)
585 msg->len = 2;
586 else
587 msg->len = 1;
588
589 msg->flags = I2C_M_RD;
590 ret = i2c_transfer(client->adapter, msg, 1);
591 if (ret >= 0) {
592 if (!single)
593 ret = get_unaligned_le16(data);
594 else
595 ret = data[0];
596 }
597 }
598 return ret; 601 return ret;
599} 602}
600 603