summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorPhil Reid <preid@electromag.com.au>2017-07-11 17:43:43 +0800
committerSebastian Reichel <sre@kernel.org>2017-07-25 11:30:28 +0200
commitadcf04c9f8fce54e65f11bae2fbd37c1282ef128 (patch)
tree0d68411b96dc7e372adffd049eca0321decde2e8 /drivers/power
parentb70f0a28966082d5392f90c2d4cb1514a2d65ac6 (diff)
power: supply: sbs-battery: Add delay when changing capacity mode bit
At least with the Inspired Energy compatible batteries a delay is required after setting the capacity mode bit from amp to watts or the reverse. Setting the bit and then immediately pooling the status register results in an unknown error being returned in the register. Add the delay results in and ok status being return. This was also seen when reading the charge and energy registers where the wrong value was returned for the requested mode. Signed-off-by: Phil Reid <preid@electromag.com.au> Tested-by: Michael Heinemann <committed@heine.so> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/supply/sbs-battery.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/power/supply/sbs-battery.c b/drivers/power/supply/sbs-battery.c
index a5eacc4b35e3..b19a73176910 100644
--- a/drivers/power/supply/sbs-battery.c
+++ b/drivers/power/supply/sbs-battery.c
@@ -14,6 +14,7 @@
* more details.
*/
+#include <linux/delay.h>
#include <linux/err.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
@@ -527,6 +528,8 @@ static enum sbs_battery_mode sbs_set_battery_mode(struct i2c_client *client,
if (ret < 0)
return ret;
+ usleep_range(1000, 2000);
+
return original_val & BATTERY_MODE_MASK;
}