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; }
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); }