diff options
Diffstat (limited to 'drivers/power/bq27x00_battery.c')
| -rw-r--r-- | drivers/power/bq27x00_battery.c | 24 |
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 |