Skip to content
Snippets Groups Projects
Unverified Commit ea97c08f authored by sicelo's avatar sicelo :speech_balloon: Committed by Oliver Smith
Browse files

device-nokia-n900: implement udev-based battery monitoring (MR 5868)

The bq27200 fuel gauge depends on its battery-backed memory for capacity
reporting. If the supply is off for some time, the fuel gauge's last known
capacity is reset, after which a capacity value can only be read after a
full charge cycle. Thus, most of the time, as used on the Nokia N900, the
reported percentage cannot be relied on for making power-off decisions on
battery low conditions, e.g. through UPower.

However the fuel gauge can very accurately detect and report a low battery
condition internally, even if the reported capacity is incorrect, e.g. when
it has been reset. The low battery condition is reported by the kernel via
capacity_level in sysfs, and also generates uevents.

So we can implement safe battery shutdown by requesting the kernel to more
regularly polling for status changes, then performing an immediate shutdown
when the capacity_level is reported as Low and the device is not charging.
parent 06aaf0ab
Branches
No related tags found
1 merge request!5868device-nokia-n900: various fixes
......@@ -2,7 +2,7 @@
# Maintainer: Sicelo <absicsz@gmail.com>
# Co-Maintainer: Danct12 <danct12@disroot.org>
pkgname=device-nokia-n900
pkgver=33
pkgver=34
pkgrel=0
pkgdesc="Nokia N900"
url="https://postmarketos.org"
......@@ -38,6 +38,8 @@ source="
asound.state.headset
asound.state.speakers
backlight-enable.sh
bq27k-options.conf
bq27k-monitor.sh
device-nokia-n900.start
deviceinfo
modules-initfs
......@@ -62,6 +64,7 @@ source="
proxishot.sh
uboot-script.cmd
udev/10-nokia-modem.rules
udev/15-bq27k.rules
udev/80-feedbackd-twl4030.rules
udev/90-touchscreen-dev.rules
upower.conf
......@@ -101,12 +104,16 @@ package() {
"$pkgdir"/usr/share/mkinitfs/hooks/10-initfs-keymap.sh
install -Dm755 "$srcdir"/$pkgname.start \
"$pkgdir"/etc/local.d/$pkgname.start
install -Dm755 "$srcdir"/bq27k-monitor.sh \
"$pkgdir"/usr/bin/bq27k-monitor
# Udev rules
install -D -m644 "$srcdir"/90-touchscreen-dev.rules \
"$pkgdir"/etc/udev/rules.d/90-touchscreen-dev.rules
install -D -m644 "$srcdir"/10-nokia-modem.rules \
"$pkgdir"/etc/udev/rules.d/10-nokia-modem.rules
install -D -m644 "$srcdir"/15-bq27k.rules \
"$pkgdir"/usr/lib/udev/rules.d/15-bq27xxx-battery.rules
install -Dm644 "$srcdir"/80-feedbackd-twl4030.rules \
"$pkgdir"/usr/lib/udev/rules.d/80-feedbackd-twl4030.rules
......@@ -133,6 +140,8 @@ package() {
"$pkgdir"/etc/modprobe.d/nokia-modem.conf
install -D -m644 "$srcdir"/modules.blocklist \
"$pkgdir"/etc/modprobe.d/n900-module-blocklist.conf
install -D -m644 "$srcdir"/bq27k-options.conf \
"$pkgdir"/etc/modprobe.d/bq27xxx-battery.conf
postmarketos-mvcfg-package "$pkgdir" "$pkgname"
}
......@@ -205,6 +214,8 @@ ff51909873160c2d4c6f0c0119b6d4a02751df29f571b8596b4bc8b04ce2541913c11a583b0e5dab
5b87071834313a389f83d29f86f6e3ea108d0921f17dc918be7a46de7e74c73a4418044ef600a0fbf72c8fad22b7730dcd5bfe3d6d01d76bf01556f8540f0b32 asound.state.headset
67acc17a33bc75113300393b4a5bba15319014032407e774d079abf310368e75f4f697dbb4856ba2d2d8ea184b056bb33561f42918de3ee91ab6a77df89a133c asound.state.speakers
3d55e34b95791636e44a5f41754f3d0de039dbba41f7a556d43a95c9e64afcfa930046b4b96b40020b6f196096ffba93514682927e32fa4488686fdd19c6da5a backlight-enable.sh
344ec50cee2a4d864debad12810a83070ab8257f9f07dcfa9be3eea1d8b26f3ab4fbe322fe05a384152b40fc5e1481df51d191624c7062186dd70f95a0784ea8 bq27k-options.conf
c5b8e03ca9f720a794f2593a3e938640cbd91ac44dd761079bbf4614a0d288a9d7b72de8ed2493c062dc9f37be580bea529f454d2335f55b7a9f4d14024b42a9 bq27k-monitor.sh
e6bbac8de1a198ba716f44ade76606e1e0adcc574156b855ac41be5eb5308389d3277fd89cc34b119fbc33d9801ab9f79a6ff213392596bff40bc17e931c05ef device-nokia-n900.start
40aaeb44941a988ab8ec58d331bc6cd42c4a23c6b6e8fc302f9216a38b46baab38d0a0137606a5b7959a51326983c03d684615c5ba9c58b0e36314ec8c49cfbb deviceinfo
f48b8dd7297d03008f73e1ecd55b77ace535ecb03f9bdf021123b96fb5f4fb491ff4c532e226b835c8118fa8d505cc4c635a2b604a3e42a162746021552a551c modules-initfs
......@@ -229,6 +240,7 @@ e440ed7a3070c17e003b86b72dbe6d8194d01b577ca8dd56dd066f216b6dda32bb965c780950f178
134f51d20decc0c63ab08010931a0b410b70d2f85bf6899f2ff137b1680f59f706a6287d01f5fbb41fa5309125df75a430d0783149bd1a6a1bca07d22f4f6a21 proxishot.sh
42f916d87dd305111028992a1107bf6fe108bebbd782ae8edd065e76505db2b3a75e57515970c3e40cb0d1b7e83097a1bba92785be13df7c3fd80959a8d9c5c1 uboot-script.cmd
465b9a0d2b46d0981c64b47cb1f656c2456a90b91b1751a2efad10af38a96030dd99108b1fd76ce31bf1ea0f236d55bed38b114d6bd712f09f8968de034c946c 10-nokia-modem.rules
1acc441b9f83dc91fd65fa3f89b8205bfd72a465286bc181b4e7e92dd4b8c0bc5c20a18dab46ff3ee8ae70940efd7d767b3dfb920edb4c74377bd418b838693d 15-bq27k.rules
03079030237440080e833dbfeff80327c1ad6a8129c6c730b401a3052cd00a986783ec3473a526b14ae73ba1f20653b4c7b2a6590839bfe6cc156bbbc3b7bb74 80-feedbackd-twl4030.rules
c6012aef28b096141b924fced226ec99fb93eb53b69c064a8887d8fecdf8dc08a3ba3db399e18d88374c6ef4c59013a30699c7e4d76e5cb771040582573a0527 90-touchscreen-dev.rules
d46adf47194c02b434cb46751003e67ee008d60978458e69b1f59dc709a7135a70f542918c29e359ba8308bdeda58a21e8efa446d06625511af05403db90e455 upower.conf
......
#!/bin/sh
set -e
echo "Capacity: $POWER_SUPPLY_CAPACITY; Voltage: $POWER_SUPPLY_VOLTAGE_NOW; Level: $POWER_SUPPLY_CAPACITY_LEVEL" >> /tmp/bq27k.log
if [ "$POWER_SUPPLY_CAPACITY_LEVEL" = "Low" ] || [ "$POWER_SUPPLY_CAPACITY_LEVEL" = "Critical" ]; then
if [ "$POWER_SUPPLY_STATUS" != "Charging" ]; then
/sbin/poweroff
fi
fi
# Adjust polling rate based on reported voltage. As voltage drops to near
# critical levels, poll more frequently, in order to catch status changes
# early
if [ "$POWER_SUPPLY_VOLTAGE_NOW" -le 3350000 ]; then
echo 5 > /sys/module/bq27xxx_battery/parameters/poll_interval
elif [ "$POWER_SUPPLY_VOLTAGE_NOW" -ge 3500000 ]; then
echo 45 > /sys/module/bq27xxx_battery/parameters/poll_interval
fi
options bq27xxx-battery poll_interval=30
KERNEL=="bq27200-0", SUBSYSTEM=="power_supply", ACTION=="change", RUN+="/usr/bin/bq27k-monitor"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment