summaryrefslogtreecommitdiff
path: root/drivers/power/bq27x00_battery.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/power/bq27x00_battery.c')
-rw-r--r--drivers/power/bq27x00_battery.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/drivers/power/bq27x00_battery.c b/drivers/power/bq27x00_battery.c
index 9a491f027a2..1cc928fe2c9 100644
--- a/drivers/power/bq27x00_battery.c
+++ b/drivers/power/bq27x00_battery.c
@@ -232,6 +232,7 @@ static __initdata u8 bq276xx_regs[NUM_REGS] = {
#define BQ27XXX_FLAG_DSC BIT(0)
#define BQ27XXX_FLAG_SOCF BIT(1) /* State-of-Charge threshold final */
#define BQ27XXX_FLAG_SOC1 BIT(2) /* State-of-Charge threshold 1 */
+#define BQ27XXX_FLAG_CHG BIT(8)
#define BQ27XXX_FLAG_FC BIT(9)
#define BQ27XXX_FLAG_OTD BIT(14)
#define BQ27XXX_FLAG_OTC BIT(15)
@@ -411,12 +412,15 @@ static __initdata enum power_supply_property bq276xx_battery_props[] = {
* Customize these values and, if necessary, add more based on system needs.
*/
static struct dm_reg bq274xx_dm_regs[] = {
+ {36, 6, 1, 90}, /* FC Clear % */
{82, 0, 2, 16384}, /* Qmax */
- {82, 5, 1, 0x81}, /* Load Select */
+ {82, 3, 2, 15}, /* Reserve Cap-mAh */
+ {82, 5, 1, 0x01}, /* Load Select */
{82, 10, 2, 300}, /* Design Capacity */
{82, 12, 2, 1140}, /* Design Energy */
- {82, 16, 2, 3090}, /* Terminate Voltage */
- {82, 27, 2, 40}, /* Taper rate */
+ {82, 16, 2, 3100}, /* Terminate Voltage */
+ {82, 26, 1, 5}, /* SOC Delta (5%) */
+ {82, 27, 2, 75}, /* Taper rate */
};
static struct dm_reg bq276xx_dm_regs[] = {
@@ -1203,6 +1207,10 @@ static int bq27x00_charger_status(struct bq27x00_device_info *di) {
olio_debug("Got client data for dev %s\n", dev_name(ts81001->dev));
+ if(di->cache.flags & BQ27XXX_FLAG_CHG) {
+ ts81001->ops->request_charge(ts81001);
+ }
+
state = ts81001->ops->get_status(ts81001);
olio_debug("Got status\n");
@@ -1241,12 +1249,14 @@ static int bq27x00_battery_status(struct bq27x00_device_info *di,
else
status = POWER_SUPPLY_STATUS_DISCHARGING;
} else {
+ #ifdef CONFIG_OLIO_TS81001
+ status = bq27x00_charger_status (di);
+ if(status != POWER_SUPPLY_STATUS_DISCHARGING && di->cache.flags & BQ27XXX_FLAG_FC) {
+ status = POWER_SUPPLY_STATUS_FULL;
+ }
+ #else
if (di->cache.flags & BQ27XXX_FLAG_FC)
status = POWER_SUPPLY_STATUS_FULL;
-#ifdef CONFIG_OLIO_TS81001
- else
- status = bq27x00_charger_status (di);
-#else
else if (di->cache.flags & BQ27XXX_FLAG_DSC)
status = POWER_SUPPLY_STATUS_DISCHARGING;
else