From fcbcb97a505ac94234dbdf1f14b2526248803fbf Mon Sep 17 00:00:00 2001 From: "Sicelo A. Mhlongo" Date: Fri, 1 May 2026 13:43:26 +0200 Subject: [PATCH] device-nokia-n900: Implement fixes for boot/init issues 1. Modernize the boot parameters uboot passes to the kernel 2. Correct the volume keys. Upstream DTS actually sends F7 and F8 for these keys, which is the behavior from stock. Using hwdb to correct the keys allows us to drop the relevant DTS patch from linux-postmarketos-omap. Additionally add the hwdb database into initramfs to ensure the keys also work during system initialization 3. Disable OMAP 3430 OFF mode early in the initramfs. This is currently broken and causes system instability. We previously used a DTS patch to do this, but using an initramfs hook allows us to reduce the amount of kernel patches we maintain Signed-off-By: Sicelo A. Mhlongo Part-of: --- .../device-nokia-n900/10-initfs-input.files | 3 +++ device/community/device-nokia-n900/APKBUILD | 24 ++++++++++++------- .../device-nokia-n900.post-install | 3 +++ .../device-nokia-n900/uboot-script.cmd | 2 +- ...r-lib-udev-hwdb.d-99-n900-volume-keys.hwdb | 5 ++++ ...are-mkinitfs-hooks-01-omap-disable-idle.sh | 6 +++++ 6 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 device/community/device-nokia-n900/usr-lib-udev-hwdb.d-99-n900-volume-keys.hwdb create mode 100644 device/community/device-nokia-n900/usr-share-mkinitfs-hooks-01-omap-disable-idle.sh diff --git a/device/community/device-nokia-n900/10-initfs-input.files b/device/community/device-nokia-n900/10-initfs-input.files index 043ea8296..39e477160 100644 --- a/device/community/device-nokia-n900/10-initfs-input.files +++ b/device/community/device-nokia-n900/10-initfs-input.files @@ -7,3 +7,6 @@ # touchscreen calibration /usr/lib/udev/rules.d/90-touchscreen-dev.rules + +# volume key remapping +/etc/udev/hwdb.bin diff --git a/device/community/device-nokia-n900/APKBUILD b/device/community/device-nokia-n900/APKBUILD index a12c59b31..b0d58d659 100644 --- a/device/community/device-nokia-n900/APKBUILD +++ b/device/community/device-nokia-n900/APKBUILD @@ -1,7 +1,7 @@ # Reference: maintainer="Danct12 " pkgname=device-nokia-n900 -pkgver=55 +pkgver=56 pkgrel=0 pkgdesc="Nokia N900" url="https://postmarketos.org" @@ -51,7 +51,6 @@ source=" device-nokia-n900.start deviceinfo etc-profile.d-25wlr-pixman.sh - modules-initfs i3blocks/i3blocks.conf i3blocks/scripts/battery-bq27200 i3blocks/scripts/calendar @@ -66,11 +65,12 @@ source=" keymaps/rx51_it.map keymaps/rx51_ptes.map keymaps/rx51_us.map - screenlock.sh modem-load.conf modem-opts.conf modules.blocklist + modules-initfs pointercal + screenlock.sh sway/etc-sway-config.d-n900-status.conf sway/etc-sway-config.d-nokia-n900.conf sway/etc-xdg-foot-foot.ini @@ -79,6 +79,8 @@ source=" udev/15-bq27k.rules udev/90-touchscreen-dev.rules upower.conf + usr-lib-udev-hwdb.d-99-n900-volume-keys.hwdb + usr-share-mkinitfs-hooks-01-omap-disable-idle.sh xkb-keymap xorg.conf xresources @@ -115,6 +117,8 @@ package() { "$pkgdir"/usr/share/mkinitfs/files/10-initfs-input.files install -Dm644 "$srcdir"/10-initfs-keymap.sh \ "$pkgdir"/usr/share/mkinitfs/hooks/10-initfs-keymap.sh + install -D -m644 "$srcdir"/usr-share-mkinitfs-hooks-01-omap-disable-idle.sh \ + "$pkgdir"/usr/share/mkinitfs/hooks/01-omap-disable-idle.sh install -Dm755 "$srcdir"/$pkgname.start \ "$pkgdir"/etc/local.d/$pkgname.start install -Dm755 "$srcdir"/bq27k-monitor.sh \ @@ -122,13 +126,15 @@ package() { install -Dm755 "$srcdir"/screenlock.sh \ "$pkgdir"/usr/bin/screenlock.sh - # Udev rules + # Udev & hwdb rules install -D -m644 "$srcdir"/90-touchscreen-dev.rules \ "$pkgdir"/usr/lib/udev/rules.d/90-touchscreen-dev.rules install -D -m644 "$srcdir"/10-nokia-modem.rules \ "$pkgdir"/usr/lib/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 -D -m644 "$srcdir"/usr-lib-udev-hwdb.d-99-n900-volume-keys.hwdb \ + "$pkgdir"/usr/lib/udev/hwdb.d/99-n900-volume-keys.hwdb # Keymap install -D -m644 "$srcdir"/keymaps/rx51_us.bmap.gz \ @@ -257,7 +263,7 @@ wayland() { } sha512sums=" -4887bc1f9a3559614bf3092511114be4a824a4e94bec6dfda31f52b877f92b38164568c8223cab22234a1edf818f9e3b4af0d7f7244c9880bc3399fa4cb0ce37 10-initfs-input.files +a37c53a6fcf9559ce439ed4a56659375deb1722af1114d99d3c5a718d29684d3bd5ce49f9d8ff2fc7afcc66c36ab7eca8e987e7931700d406a3e874f5bdf26fc 10-initfs-input.files 4656d3b3ced0a86e2d6315c89322899f646a689e9cb64609aa8ad5a676b23d93706d8a37f3be6f6b12c6b1e8501b7d26ecafecf27322333850513a6805c61910 10-initfs-keymap.sh 2e6c324c2a0627fb37ee2feff249d6c828116a9c1a32d572481dddc12648c98b726eb3a475838398742f76a60e3f2249d7707502360473b8bf2e794bf22f57ce acpi.map eef1f3d5fab1148af498607d3bc7c6a866b61d808d2b90a4ea3e360d5fef779070380670431b67bd3d87111bc7d0e877ef9ab656f4de17c3071cfc360a2746e3 acpi_handler.sh @@ -269,7 +275,6 @@ c5b8e03ca9f720a794f2593a3e938640cbd91ac44dd761079bbf4614a0d288a9d7b72de8ed2493c0 e6bbac8de1a198ba716f44ade76606e1e0adcc574156b855ac41be5eb5308389d3277fd89cc34b119fbc33d9801ab9f79a6ff213392596bff40bc17e931c05ef device-nokia-n900.start b1ebed32232ca1890ed6a47372ce45f4ee004fcb76defc6f67048cfa7361d6e02ebd365a6370ba7c26d410e67926a6fada863f07aa18d7098dbdea1a3b057415 deviceinfo 1c7499eb84948eb5b73d58474b1b71a5f2f63116a2a3e1f9a4238064dcf6c152ccefa108bd4ab1074712a2319111c8fdd4bfcf0dbe4d26b5a319404def1b11d2 etc-profile.d-25wlr-pixman.sh -4efca73b4053e00b2a24ef3e79ead3da43b0e6db4f3447721fa9084b1c280e65f1ddaadd390d6073e26b6c635bb14f804fcf3c54d8ebf9df73eff80deff59d80 modules-initfs a8152e94262629e11abdd8809d187c3b7ed1866a6128fb1f435e17e72120536ac8114262e66df6decb2627743027f2b923ddbe8a94e3e844099b6fad02ec252b i3blocks.conf 8a35a4ea9de9a30a5c1a5f01f8a8d211a7dbd43b77773eaf904fe633d4f9d1b0641c0b81493599af2b5cefefb6947c9c9d7a4d633d041f3503394dbfa90cf4f5 battery-bq27200 d9ef88c714e9fce8822f63b7a9d7fc3e1ed472c8c876b44ba524d44efea322839f13ddd2fa652420608427ecf7279bfaac302c9b67667f32796ca21da332164d calendar @@ -284,19 +289,22 @@ dc585e11bf4e06e36c5c62bcc024eaacecc30437d9da5257df14be05e247a2f2bc208874be3058ed 082a5166e38296b097e873b0b4aeaf007e594d3bf4470c74e91ee3efedcf28ad25cd55c23dd63e460339898ae08e77e111b0e1092fa5e661db90bb40732103a1 rx51_it.map 6e4e8b10a41d0957968736f5d780f14c7070b03913d80859cb07180e9cec9a36bbc9c639748765e48962772640974f5491627520cc36bd3d6c9d01748f9ddaff rx51_ptes.map e440ed7a3070c17e003b86b72dbe6d8194d01b577ca8dd56dd066f216b6dda32bb965c780950f1789a66f7c948290016b048da9f1cf63aba9e11d7e7fd6873ba rx51_us.map -580753dfe302024cac6260be6aa0472f6fcca2899e31b41fae23e48a34e49ed482a7170a4ec38978618c0b222b28988d6f7e77e38f4bf7bcd72da98b9b5d7070 screenlock.sh 157b27feebcfddf800a1ffd8c6e369d2b58e5db25b1a44b4443dada8d9fe74abb91d036b9f0e97769bbafbdc72020b5637313682c6932fe7b0bddb9ebebbad42 modem-load.conf 695feac7f69a0ec8c5e007cdb651adcc3492f1c6236e7fd183edec2a5e25cb957d3ace630ea5fdb87fd703e35ac368f1d097c2f881ecb52c9cfd433564db2a6c modem-opts.conf 862ebc7cd2d7a1b3d41b10701b8418308c89eb0732eb99c42ec1091d48e08db9421727f67a3272b7309549798d59afb1b8d7d2fa48d1447b208fcb2329472d4d modules.blocklist +4efca73b4053e00b2a24ef3e79ead3da43b0e6db4f3447721fa9084b1c280e65f1ddaadd390d6073e26b6c635bb14f804fcf3c54d8ebf9df73eff80deff59d80 modules-initfs 143c21f0b18a016d37cb44178e9daea09f128a90769b48353c03c3f245cb9b1f7e773b9ccee084973fc78ddd7a18c2642e54888a85bda7c7daecddc9a8c62eff pointercal +580753dfe302024cac6260be6aa0472f6fcca2899e31b41fae23e48a34e49ed482a7170a4ec38978618c0b222b28988d6f7e77e38f4bf7bcd72da98b9b5d7070 screenlock.sh 3ec2e28a59298ad87ece5205be37b6e07c5f0f3bd0a98022f9f6824500444792cb06425bfbb62c9503c3072183f2d571c8504b6f23054062bb082c7a5b125a2b etc-sway-config.d-n900-status.conf 1e6939c583372dd4d493e1e2cfb6a4758a17606edd262d322bc01b2d3d76de4370581954f22f6ac976d86e87aab0979b2233e1c75780aeaff0670ea25dba62ca etc-sway-config.d-nokia-n900.conf 45da074b597a47825146ae1f3712538210e2ebe1c459f98a8189ccfc7c16ed54d221999b5890785c92aa750c6295dee7e920ef7f97d415d4212f8c0fea29169f etc-xdg-foot-foot.ini -42f916d87dd305111028992a1107bf6fe108bebbd782ae8edd065e76505db2b3a75e57515970c3e40cb0d1b7e83097a1bba92785be13df7c3fd80959a8d9c5c1 uboot-script.cmd +4be9626cd2ad96730671e145aba9473b8bb7e62b7dec109eb87b4c748e5ac8fcb7cb0deeecc2a07f6fc9e9a598dbd438e02ad32d21e13d109ed7fecfb29904cc uboot-script.cmd 465b9a0d2b46d0981c64b47cb1f656c2456a90b91b1751a2efad10af38a96030dd99108b1fd76ce31bf1ea0f236d55bed38b114d6bd712f09f8968de034c946c 10-nokia-modem.rules 1acc441b9f83dc91fd65fa3f89b8205bfd72a465286bc181b4e7e92dd4b8c0bc5c20a18dab46ff3ee8ae70940efd7d767b3dfb920edb4c74377bd418b838693d 15-bq27k.rules c6012aef28b096141b924fced226ec99fb93eb53b69c064a8887d8fecdf8dc08a3ba3db399e18d88374c6ef4c59013a30699c7e4d76e5cb771040582573a0527 90-touchscreen-dev.rules 1087d9699f6c4325a1d7ba2e6faf7fda87953fc0d3b0ef97de1da05187ba8f942f78806916cfb2ae9456fa2e63b2adf08e1e8118dc834c31a677755bab0fbf9a upower.conf +662d00f1ea0874037ccb573eb36ac0ed715f057ae40adb52319c358d06e81a4d8764dd39542374006546f66196d13262b5d7f66b0540c367469f003981dfb53a usr-lib-udev-hwdb.d-99-n900-volume-keys.hwdb +73dc0f29a97994e7efe0a2c8906f75099b2bca1d660f58ae50b44d3f00eec0cee2a89541a80a4de0f276605ef36a576dd757f0cd9a9a4fd47b535b9400a83526 usr-share-mkinitfs-hooks-01-omap-disable-idle.sh 4de54d007bd354461fe4d6d455fe3f29694c132a3996c79b68070d606b5ca1839f9027202ebb731035f0bf6504b42fbd5ab15c7b47b7f308ce768a84d45024c4 xkb-keymap a91f98daa60efa2beb2ff6b405097f92edca5f1bbb9e7675499139be52ca2570712f8f06f9032ef29f636f99c8f8da8b992f746eab6424aac04260c16158bcc2 xorg.conf 183dfdd545ba05e216209b1abe45e4af4e0ee16b2e73cff0e7ea7b9524ee35a1cf85213a77f32a1a94287aee6546885dbd71c6de1f4f1a1e2961e638ff27cdf6 xresources diff --git a/device/community/device-nokia-n900/device-nokia-n900.post-install b/device/community/device-nokia-n900/device-nokia-n900.post-install index acfa18fc9..3244150ba 100644 --- a/device/community/device-nokia-n900/device-nokia-n900.post-install +++ b/device/community/device-nokia-n900/device-nokia-n900.post-install @@ -5,4 +5,7 @@ for i in $(awk '{if($NF && ($1 !~ /^#/)) print $NF}' /etc/acpi.map); do ln -s /etc/acpi/handler.sh /etc/acpi/$i done +# Update hwdb +udevadm hwdb --update + exit 0 diff --git a/device/community/device-nokia-n900/uboot-script.cmd b/device/community/device-nokia-n900/uboot-script.cmd index ce3bfab21..dd776e293 100644 --- a/device/community/device-nokia-n900/uboot-script.cmd +++ b/device/community/device-nokia-n900/uboot-script.cmd @@ -2,7 +2,7 @@ setenv mmcnum 0 setenv mmcpart 1 setenv mmctype ext2 setenv setup_omap_atag 1 -setenv bootargs init=/init.sh rw console=tty0 PMOS_FORCE_PARTITION_RESIZE +setenv bootargs init=/init.sh rw console=tty0 pmos.force-partition-resize splash setenv mmckernfile /uImage setenv mmcinitrdfile /uInitrd setenv mmcscriptfile diff --git a/device/community/device-nokia-n900/usr-lib-udev-hwdb.d-99-n900-volume-keys.hwdb b/device/community/device-nokia-n900/usr-lib-udev-hwdb.d-99-n900-volume-keys.hwdb new file mode 100644 index 000000000..b523970c1 --- /dev/null +++ b/device/community/device-nokia-n900/usr-lib-udev-hwdb.d-99-n900-volume-keys.hwdb @@ -0,0 +1,5 @@ +# N900's volume keys actually emit F7 and F8 in the stock OS/kernel as well as +# upstream (kernel.org) DTS. Correct them via hwdb. +evdev:input:b0019v0001p0001e0003* + KEYBOARD_KEY_71=volumedown + KEYBOARD_KEY_72=volumeup diff --git a/device/community/device-nokia-n900/usr-share-mkinitfs-hooks-01-omap-disable-idle.sh b/device/community/device-nokia-n900/usr-share-mkinitfs-hooks-01-omap-disable-idle.sh new file mode 100644 index 000000000..73a3b947b --- /dev/null +++ b/device/community/device-nokia-n900/usr-share-mkinitfs-hooks-01-omap-disable-idle.sh @@ -0,0 +1,6 @@ +#!/bin/busybox ash + +# Disable OMAP 3430 SoC OFF mode. It is currently unreliable and leads to +# system lockup and crashes. +mount -t debugfs none /sys/kernel/debug || true +echo 0 > /sys/kernel/debug/pm_debug/enable_off_mode || true