void twl6030_init_battery_charging(void) { u8 stat1 = 0; int battery_volt = 0; int ret = 0; /* Enable VBAT measurement */ twl6030_i2c_write_u8(TWL6030_CHIP_PM, VBAT_MEAS, MISC1); /* Enable GPADC module */ ret = twl6030_i2c_write_u8(TWL6030_CHIP_CHARGER, FGS | GPADCS, TOGGLE1); if (ret) { printf("Failed to enable GPADC\n"); return; } battery_volt = twl6030_get_battery_voltage(); if (battery_volt < 0) return; if (battery_volt < 3000) printf("Main battery voltage too low!\n"); /* Check for the presence of USB charger */ twl6030_i2c_read_u8(TWL6030_CHIP_CHARGER, &stat1, CONTROLLER_STAT1); /* check for battery presence indirectly via Fuel gauge */ if ((stat1 & VBUS_DET) && (battery_volt < 3300)) twl6030_start_usb_charging(); return; }
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; }
int do_vbat(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { if (argc == 2) { if (strncmp(argv[1], "startcharge", 12) == 0) twl6030_start_usb_charging(); else if (strncmp(argv[1], "stopcharge", 11) == 0) twl6030_stop_usb_charging(); else if (strncmp(argv[1], "status", 7) == 0) { twl6030_get_battery_voltage(); twl6030_get_battery_current(); } else { goto bat_cmd_usage; } } else { goto bat_cmd_usage; } return 0; bat_cmd_usage: return cmd_usage(cmdtp); }