static void twl6030_bci_battery_external_power_changed(struct power_supply *psy) { struct twl6030_bci_device_info *di = to_twl6030_bci_device_info(psy); cancel_delayed_work(&di->twl6030_bci_monitor_work); schedule_delayed_work(&di->twl6030_bci_monitor_work, 0); }
static int twl6030_bci_battery_get_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) { struct twl6030_bci_device_info *di; int status = 0; di = to_twl6030_bci_device_info(psy); switch (psp) { case POWER_SUPPLY_PROP_STATUS: val->intval = di->charge_status; return 0; default: break; } switch (psp) { case POWER_SUPPLY_PROP_VOLTAGE_NOW: val->intval = di->voltage_uV; break; case POWER_SUPPLY_PROP_CURRENT_NOW: val->intval = di->current_uA; break; case POWER_SUPPLY_PROP_TEMP: val->intval = di->temp_C; break; case POWER_SUPPLY_PROP_ONLINE: status = twl6030bci_status(); if ((status & CONTROLLER_CTRL1_EN_CHARGER)) { if ((status & CONTROLLER_CTRL1_SEL_CHARGER)) val->intval = POWER_SUPPLY_TYPE_MAINS; else if(usb_connected) val->intval = POWER_SUPPLY_TYPE_USB; else val->intval = 0; } else val->intval = 0; break; case POWER_SUPPLY_PROP_CAPACITY: /* FIXME correct the threshold * need to get the correct percentage value per the * battery characteristics. Approx values for now. */ if (di->voltage_uV < 3250) val->intval = 5; else if (di->voltage_uV > 3250 && di->voltage_uV < 3400) val->intval = 20; else if (di->voltage_uV > 3400 && di->voltage_uV < 3700) val->intval = 50; else if (di->voltage_uV > 3700 && di->voltage_uV < 3950) val->intval = 75; else if (di->voltage_uV > 3950) val->intval = 90; break; default: return -EINVAL; } return 0; }
static int twl6030_bci_battery_get_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) { struct twl6030_bci_device_info *di; di = to_twl6030_bci_device_info(psy); switch (psp) { case POWER_SUPPLY_PROP_STATUS: switch (di->state) { case STATE_USB: case STATE_AC: case STATE_FULL: /* TODO ?? */ val->intval = POWER_SUPPLY_STATUS_CHARGING; break; default: val->intval = POWER_SUPPLY_STATUS_DISCHARGING; } break; case POWER_SUPPLY_PROP_VOLTAGE_NOW: val->intval = twl6030_get_battery_voltage(di) * 1000; break; case POWER_SUPPLY_PROP_CURRENT_NOW: twl6030battery_current(di); val->intval = di->current_uA; break; case POWER_SUPPLY_PROP_CHARGE_COUNTER: val->intval = di->capacity_uAh; break; case POWER_SUPPLY_PROP_TEMP: val->intval = 275; // simulate a healthy battery temp break; case POWER_SUPPLY_PROP_ONLINE: val->intval = 1; break; case POWER_SUPPLY_PROP_CURRENT_AVG: val->intval = di->current_avg_uA; break; case POWER_SUPPLY_PROP_HEALTH: val->intval = di->bat_health; break; case POWER_SUPPLY_PROP_CAPACITY: val->intval = di->capacity; break; default: return -EINVAL; } return 0; }