summaryrefslogtreecommitdiff
path: root/driver/battery/bq27541.c
diff options
context:
space:
mode:
authorVincent Palatin <vpalatin@chromium.org>2014-07-09 20:18:57 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-07-29 02:20:11 +0000
commit63429076b3473ab261316a1136c02ab376256c20 (patch)
tree4602e12ca9f2b35389d6980d8ae5e2df3465c320 /driver/battery/bq27541.c
parentf4ebbb821ba20340f98c4602d5034be44f53de6c (diff)
downloadchrome-ec-63429076b3473ab261316a1136c02ab376256c20.tar.gz
battery: fix BQ27541/BQ27741 gas gauge driver
Update the code to be compatible with charge v2 expectations : never return EC_ERROR_UNIMPLEMENTED for battery information else the charge code continuously tries to read them again. Fix the State Of Charge reading : on BQ27741 the gas gauge gets confused if we do a 16-bit I2C read while a 8-bit read works perfectly. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> BRANCH=none BUG=none TEST=run a Ryu connected to a Kirby battery and check the output of the "battery" command. Change-Id: Ic1d6128dc02efa47662fa5ca5b9e5de62420ebe8 Reviewed-on: https://chromium-review.googlesource.com/207273 Reviewed-by: Vic Yang <victoryang@chromium.org> Tested-by: Vic Yang <victoryang@chromium.org> Commit-Queue: Vic Yang <victoryang@chromium.org>
Diffstat (limited to 'driver/battery/bq27541.c')
-rw-r--r--driver/battery/bq27541.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/driver/battery/bq27541.c b/driver/battery/bq27541.c
index 81d0a0dc42..ee8d2cc61d 100644
--- a/driver/battery/bq27541.c
+++ b/driver/battery/bq27541.c
@@ -136,22 +136,30 @@ int battery_time_at_rate(int rate, int *minutes)
int battery_manufacturer_name(char *dest, int size)
{
- return EC_ERROR_UNIMPLEMENTED;
+ strzcpy(dest, "<unkn>", size);
+
+ return EC_SUCCESS;
}
int battery_device_chemistry(char *dest, int size)
{
- return EC_ERROR_UNIMPLEMENTED;
+ strzcpy(dest, "<unkn>", size);
+
+ return EC_SUCCESS;
}
int battery_serial_number(int *serial)
{
- return EC_ERROR_UNIMPLEMENTED;
+ *serial = 0x0BAD0BAD;
+
+ return EC_SUCCESS;
}
int battery_design_voltage(int *voltage)
{
- return EC_ERROR_UNIMPLEMENTED;
+ *voltage = battery_get_info()->voltage_normal;
+
+ return EC_SUCCESS;
}
/**
@@ -193,7 +201,7 @@ void battery_get_params(struct batt_params *batt)
else
batt->flags |= BATT_FLAG_RESPONSIVE; /* Battery is responding */
- if (bq27541_read(REG_STATE_OF_CHARGE, &batt->state_of_charge))
+ if (bq27541_read8(REG_STATE_OF_CHARGE, &batt->state_of_charge))
batt->flags |= BATT_FLAG_BAD_STATE_OF_CHARGE;
if (bq27541_read(REG_VOLTAGE, &batt->voltage))
@@ -219,10 +227,17 @@ void battery_get_params(struct batt_params *batt)
* current.
*/
batt->desired_voltage = battery_get_info()->voltage_max;
- batt->desired_current = 99999;
+ batt->desired_current = 4096;
}
}
+/* Wait until battery is totally stable */
+int battery_wait_for_stable(void)
+{
+ /* TODO(crosbug.com/p/30426): implement me */
+ return EC_SUCCESS;
+}
+
#ifdef CONFIG_BATTERY_REVIVE_DISCONNECT
/*
* Check if battery is in disconnect state, a state entered by pulling