When looking into these types of issues, I suggest getting a dump of the actual PMIC state. Something along the lines of:
void loop() {
{
PMIC power(true);
Log.trace("Current PMIC settings:");
Log.trace("VIN Vmin: %u", power.getInputVoltageLimit());
Log.trace("VIN Imax: %u", power.getInputCurrentLimit());
Log.trace("Ichg: %u", power.getChargeCurrentValue());
Log.trace("Iterm: %u", power.getChargeVoltageValue());
int powerSource = System.powerSource();
int batteryState = System.batteryState();
float batterySoc = System.batteryCharge();
constexpr char const* batteryStates[] = {
"unknown", "not charging", "charging",
"charged", "discharging", "fault", "disconnected"
};
constexpr char const* powerSources[] = {
"unknown", "vin", "usb host", "usb adapter",
"usb otg", "battery"
};
Log.trace("Power source: %s", powerSources[std::max(0, powerSource)]);
Log.trace("Battery state: %s", batteryStates[std::max(0, batteryState)]);
Log.trace("Battery charge: %f", batterySoc);
}
delay(1000);
}