Classic Reform2 battery reporting is erratic when reform2-lpc module is reloaded
- Model: reform2-dsi with mb3.0
- OS: Gentoo Linux
- Kernel: 6.16.5 with patches applied from reform-debian-packages
- LPC firmware: MREF2LPC30_R120250701 (from keyboard status screen)
When reform2-lpc
module is loaded first time after the boot it reports 0 version:
[ 18.667872] reform2_lpc: loading out-of-tree module taints kernel.
[ 18.835340] reform2_lpc spi1.0: version: 0 ()
in this configuration I can read all the values from sysfs correctly, e.g.:
# cat /sys/class/power_supply/BAT0/voltage_now
27043000
# cat /sys/class/power_supply/BAT0/voltage_now
27041000
# cat /sys/class/power_supply/BAT0/voltage_now
27038000
# cat /sys/class/power_supply/BAT0/voltage_now
27041000
# cat /sys/class/power_supply/BAT0/capacity
100
# cat /sys/class/power_supply/BAT0/capacity
100
Sometimes (not always), if I reload the module, it registers (what I assume is) correct version of LPC:
# rmmod reform2-lpc ; modprobe reform2-lpc
[ 2625.530965] reform2_lpc spi1.0: version: 20250701 (20250701)
but then reading sysfs ends up in random erroneous values:
# cat /sys/class/power_supply/BAT0/voltage_now
cat: /sys/class/power_supply/BAT0/voltage_now: Device or resource busy
# cat /sys/class/power_supply/BAT0/voltage_now
cat: /sys/class/power_supply/BAT0/voltage_now: Device or resource busy
# cat /sys/class/power_supply/BAT0/voltage_now
25186000
# cat /sys/class/power_supply/BAT0/voltage_now
cat: /sys/class/power_supply/BAT0/voltage_now: Device or resource busy
# cat /sys/class/power_supply/BAT0/voltage_now
16962000
# cat /sys/class/power_supply/BAT0/voltage_now
cat: /sys/class/power_supply/BAT0/voltage_now: Device or resource busy
# cat /sys/class/power_supply/BAT0/voltage_now
cat: /sys/class/power_supply/BAT0/voltage_now: Device or resource busy
# cat /sys/class/power_supply/BAT0/voltage_now
25186000
# cat /sys/class/power_supply/BAT0/voltage_now
cat: /sys/class/power_supply/BAT0/voltage_now: Device or resource busy
# cat /sys/class/power_supply/BAT0/voltage_now
cat: /sys/class/power_supply/BAT0/voltage_now: Device or resource busy
# cat /sys/class/power_supply/BAT0/voltage_now
25186000
# cat /sys/class/power_supply/BAT0/voltage_now
26151000
# cat /sys/class/power_supply/BAT0/capacity
80
# cat /sys/class/power_supply/BAT0/capacity
66
# cat /sys/class/power_supply/BAT0/capacity
98
# cat /sys/class/power_supply/BAT0/capacity
98
# cat /sys/class/power_supply/BAT0/capacity
98
# cat /sys/class/power_supply/BAT0/capacity
cat: /sys/class/power_supply/BAT0/capacity: Device or resource busy
[ 2627.379077] power_supply BAT0: driver failed to report `voltage_now' property: -16
[ 2629.395001] power_supply BAT0: driver failed to report `capacity' property: -16
[ 2631.410909] power_supply BAT0: driver failed to report `capacity' property: -16
[ 2635.503093] power_supply BAT0: driver failed to report `capacity' property: -16
[ 2637.519077] power_supply BAT0: driver failed to report `capacity' property: -16
[ 2639.539062] power_supply BAT0: driver failed to report `capacity' property: -16
[ 2643.623177] power_supply BAT0: driver failed to report `capacity' property: -16
[ 2645.691001] power_supply BAT0: driver failed to report `voltage_now' property: -16
[ 2647.707020] power_supply BAT0: driver failed to report `capacity' property: -16
[ 2676.850612] power_supply BAT0: driver failed to report `voltage_now' property: -16
[ 2677.042661] power_supply BAT0: driver failed to report `capacity' property: -16
[ 2679.058650] power_supply BAT0: driver failed to report `capacity' property: -16
[ 2681.074633] power_supply BAT0: driver failed to report `capacity' property: -16
Loading and reloading module few times makes it register version 0 again and sysfs value reporting is fixed after that.
Sometimes reloading the module just registers correct version and everything works just fine, but after a while (minutes to hours) it still degrades into aforementioned state.
[ 1181.412662] reform2_lpc spi1.0: version: 20250701 (20250701)
[ 1498.991601] reform2_lpc spi1.0: version: 20250701 (20250701)
[ 1502.579571] reform2_lpc spi1.0: version: 20250701 (20250701)
[ 1504.651671] reform2_lpc spi1.0: version: 20250701 (20250701)
[ 1675.830805] reform2_lpc spi1.0: version: 20250701 (20250701)
[ 1676.446834] reform2_lpc spi1.0: version: 20250701 (20250701)
Erratic readings from sysfs are also resemble behaviour that I observe on keyboard battery status screen: sometimes screen flickers into reporting 0V voltages for some cells, 1V for others, no capacity percentage or charging status is reported, after a brief moment screen flips back to correct readings and this may happen few times per minute when laptop is on battery power or much more frequently if the charger is connected.