Am Mon, Mar 29, 2021 at 07:16:18AM +0200 schrieb Klemens Nanni: > The datasheet says the hardware's default State-Of-Charge threshold is > three percent, i.e. the gauge pulls down the pin to logic low at 3% > remaining battery life. > > My Pinebook Pro's fuel gauge actually shows an alert level of zero > percent however and the latest device tree (both from our dtb package > and other sources) no longer provide the "cellwise,alert-level" > property.
If there's no alert-level property, then maybe we should just remove it. Then you could hard code a value for "below will be critical", like you now do with the 50%? > The current code still looks for that property but falls back to the > define; crank it such that apm(8) does not always report "high" battery > state. > > While here, use all three available states in the same way acpibat(4) > sys/dev/acpi/acpi.c does. > > Feedback? OK? > > Index: cwfg.c > =================================================================== > RCS file: /cvs/src/sys/dev/fdt/cwfg.c,v > retrieving revision 1.4 > diff -u -p -r1.4 cwfg.c > --- cwfg.c 26 Mar 2021 22:54:41 -0000 1.4 > +++ cwfg.c 29 Mar 2021 05:03:58 -0000 > @@ -101,7 +101,7 @@ struct cwfg_softc { > > #define CWFG_MONITOR_INTERVAL_DEFAULT 5000 > #define CWFG_DESIGN_CAPACITY_DEFAULT 2000 > -#define CWFG_ALERT_LEVEL_DEFAULT 0 > +#define CWFG_ALERT_LEVEL_DEFAULT 25 > > int cwfg_match(struct device *, void *, void *); > void cwfg_attach(struct device *, struct device *, void *); > @@ -387,9 +387,13 @@ cwfg_update_sensors(void *arg) > sc->sc_sensor[CWFG_SENSOR_SOC].value = val * 1000; > sc->sc_sensor[CWFG_SENSOR_SOC].flags &= ~SENSOR_FINVALID; > #if NAPM > 0 > - cwfg_power.battery_state = val > sc->sc_alert_level ? > - APM_BATT_HIGH : APM_BATT_LOW; > cwfg_power.battery_life = val; > + if (val > 50) > + cwfg_power.battery_state = APM_BATT_HIGH; > + else if (val > sc->sc_alert_level) > + cwfg_power.battery_state = APM_BATT_LOW; > + else > + cwfg_power.battery_state = APM_BATT_CRITICAL; > #endif > } > >