In-depth Linux review, firmware analysis and working fixes for the 8-inch Intel N150 2-in-1 mini laptop sold as KOOSMILE and KOOFORWAY (family "P8"; earlier N100 units sold as Topton, Crelander, Aslay). Covers the broken ACPI/DPTF fan code and its fix, tablet-mode switch, screen rotation of the portrait DSI panel, battery gauge placeholders, thermal throttling, and why an ARM SoC would have served this chassis better.
This page mirrors the README of the companion repository — browse the fixes, scripts and ACPI table dumps there.

Vendor product image (KOOSMILE Amazon listing).
Is this your machine? It sells as KOOSMILE 8” Mini Laptop (Amazon), KOOFORWAY 8 inch Mini Laptop (kooforway.com), and as unbranded “Mini Laptop 8 inch N150 Touchscreen 2 in 1 / Pocket PC” listings on Amazon and AliExpress; the chassis family — “P8” — also includes earlier Intel N100 units sold as Topton, Crelander and Aslay. You can recognize it by: BIOS version GLF-BI-8-S8_AN_G04R100-F70A-015-A, every DMI/SMBIOS identity field reading “To be filled by O.E.M.”, a battery calling itself SR Real Battery, an 8-inch 1280×800 portrait-native DSI panel, and the dual-axis double hinge. If that matches, everything below — including the fixes — applies to your device.
As read from the machine itself (PCI/USB IDs included deliberately — with the DMI fields blank, they’re the only searchable identity this device has; vendor-sheet figures marked as such):
| SoC | Intel N150 (Alder Lake-N / “Twin Lake”), 4 cores / 4 threads, 0.7–3.6 GHz¹ |
| Memory | 12 GB LPDDR5, soldered (11.4 GiB usable)² |
| Display | 8.0″ 1280×800 IPS touch — portrait-native DSI panel without EDID (see review) |
| Storage | 1 TB M.2 2242 B-key SSD² — shipped drive is SATA (hdparm -t ≈ 468 MB/s) |
| GPU | Intel UHD Graphics, Alder Lake-N (8086:46d4) |
| Wi-Fi | Intel Wi-Fi 6 AX101, CNVi (8086:54f0) |
| Bluetooth | 5.2 — Intel AX201 (USB 8087:0026) |
| Ethernet | Realtek RTL8111/8168 PCIe Gigabit (10ec:8168); RJ45 on the back — no link/activity LEDs |
| Audio | Intel HD Audio (8086:54c8), stereo speakers, built-in microphone (works fine, decent quality) |
| Camera | 2 MP / 1080p — “icSpring” (USB 32e6:9005) |
| Input | Backlit condensed keyboard + optical touch sensor (SINO WEALTH, USB 258a:0131); Elan touchscreen (04f3:2f33); pen; MXC6655 accelerometer |
| Battery | 36.48 Wh design (3-cell, 3200 mAh) — as reported by a placeholder gauge, see review |
| Ports | 1× USB-A (USB 3), 1× USB-C (PD 30 W in; USB 2/3 data, DP alt mode untested), 1× full-size HDMI out, 1× Gigabit RJ45 (rear, no LEDs), 3.5 mm headset jack (stereo + mic) |
| Dimensions / weight | 198 × 138 × 19.8 mm, 0.78 kg (vendor figures) |
| Firmware | BIOS GLF-BI-8-S8_AN_G04R100-F70A-015-A (2025-04-22); every DMI identity field “To be filled by O.E.M.”; SMBIOS chassis type: “Desktop” |
| OS (shipped) | Windows 11 Pro |
¹ 3.6 GHz is single-core burst only; the fused all-core ceiling is 2.9 GHz, and this unit sustains ~2.2 GHz — see the review.
² Also sold with less RAM and smaller SSDs; the 12 GB / 1 TB configuration reviewed here was — and probably still is — the top of the family.
This repository doubles as the companion repo for the review below. If you
own this machine — sold as KOOSMILE and KOOFORWAY, and as unbranded 8-inch
N150 convertibles with the identical spec sheet — the runtime fixes that make
Linux behave live in fixes/:
| Problem | Fix | How to apply |
|---|---|---|
DPTF fan ACPI broken: kernel error spam, sensors/hwmon hangs, no fan speed |
fixes/acpi-fix/ — SSDT that maps the missing CFSP field onto the fan tach found in EC RAM |
sudo ./1-dump-tables.sh → ./2-build-fix.sh → sudo ./3-install.sh live to test now, then uki (mkinitcpio-built UKIs) or initrd (explicit boot entries) for persistence — details in its README |
| No tablet-mode switch device (no VBTN/INT33D6) | fixes/tablet-mode-orientation/intel-hid.conf |
copy to /etc/modprobe.d/, regenerate the initramfs |
| Portrait DSI panel without EDID: wrong console/desktop orientation | kernel command line | add fbcon=rotate:1 video=DSI-1:panel_orientation=right_side_up |
| mutter loses orientation on tablet→laptop transitions; on-screen keyboard unreliable | fixes/tablet-mode-orientation/ — switch-watching handler + idempotent enforcement helper |
tablet-mode-handler → /usr/local/bin/, restore.py → /usr/local/lib/tablet-orientation/, the .service → /etc/systemd/system/, then systemctl enable --now tablet-mode-handler (needs evtest) |
| Unattended battery drain; EC hard-cutoff fires at a lying gauge percentage | fixes/sleep-ladder/ — battery-idle sleep ladder (blank → s2idle → deep S3 → hibernate) with a debounced terminal-voltage emergency hibernate |
progressive-sleep → /usr/local/bin/, the .service → /etc/systemd/system/, then systemctl enable --now progressive-sleep (assumes a working hibernate/resume setup; tune thresholds via the env vars in the unit) |
Everything was developed and verified on the reviewed unit (and, where noted, reproduced on a second identical one). The review below explains why each of these is necessary.
Other owners have walked this road and published fixes of their own — worth knowing as corroboration and complement: Breczek/kooforway-linux-fixes targets the same Kooforway under Fedora/GNOME with a libinput calibration matrix for the rotated ELAN 04f3:2f33 stylus axes and an accelerometer rotation listener (independently confirming GNOME won’t rotate this panel unassisted), and nbailey.ca’s P8 post carries the GRUB/GDM/libinput rotation recipes for the family’s earlier N100 generation.
I finally found a small convertible laptop (8”) with decent I/O and RAM, even a backlit keyboard — genuinely needed, because after four months I still haven’t entirely internalized the extra-weird condensed layout into muscle memory. Obviously I’d run Linux on it. I tried Debian first, then Arch — though not, it turns out, on the same machine. A friend found the first unit about four months ago and wanted Debian 13 on it; setting that up, I liked the hardware enough that two months later I had an identical one of my own, running Arch. Mine is the machine I travel with, and the one this review is typed on. The thermal, battery and firmware measurements in this post were all made on my own unit; the display and tablet-mode workarounds were first worked out on the friend’s — and reproduced identically on mine, so none of this is a one-bad-unit anecdote. It’s the product. And the story of this product is not the spec sheet; it’s the gap between the spec sheet and what the firmware actually lets the hardware do.
Short version: the chassis is a small miracle. The firmware is Intel’s reference code for a desktop mini-PC, shipped in a battery-powered convertible with the serial numbers not so much filed off as never filled in. Four months of living with it — and, eventually, fixing part of it myself — follow.
Credit where due: this form factor is wonderful, and no mainstream vendor makes it. An aluminum 8-inch 2-in-1 the size of a paperback, with a double hinge working on two different axes — one opens the clamshell flat to 180 degrees, the other flips the display over on itself; a mechanism rarer today than even the ubiquitous Yoga-style 360° fold — plus a real (if thumb-sized) keyboard, pen and touch input, an accelerometer for rotation, and a port cluster genuinely rare at this size: a USB 3 Type-A, USB-C with 30 W PD charging, full-size HDMI out, even a Gigabit RJ45 (LED-less, tucked on the back), and a 3.5 mm headset jack. Wi-Fi 6. A user-replaceable M.2 2242 SSD — though the shipped drive is a SATA device, not PCIe/NVMe: hdparm -t clocks it at ~468 MB/s, it introduces itself as, literally, “M.2 SSD 1TB” (no brand, in keeping with house style), and whether the slot itself would carry an NVMe drive is untested. The second, empty AHCI port ships firmware-locked in a way that silently defeats TLP’s SATA link-power setting for the real drive until you denylist it. (No microSD slot either — genuinely annoying on a machine this pocketable — and no fingerprint reader.) And that backlit keyboard — an outright rarity at this size, and the difference between usable and useless in a dim room when your fingers still haven’t memorized where the vendor hid the apostrophe.
It slips into a coat pocket. Flip the display over the keyboard and it’s a tablet for reading; flip the display while the base sits flat on a table and it’s its own stand for video. A word about weight, though: this is a small machine, not a light one — pocketable but dense, roughly two iPad minis in tablet mode. For perspective, the 11-inch Chromebook Duet’s tablet half weighs 500 g — less than this entire 8-inch clamshell (0.78 kg by the vendor’s own sheet) — and even the Duet’s complete kit with keyboard and folio stand is only 874 g. The heft is the x86 tax made physical: a fan assembly, plus a battery sized to feed ~12 W of platform draw. The ARM section below puts numbers on it. When The Gadgeteer reviewed the rival X-Plus Piccolo they called it “a love letter to the netbook days,” and the phrase fits this whole resurgent class. That two vendors are independently building 8-inch aluminum 2-in-1s again is itself the good news.
This chassis deserves to exist. It deserved better than what was put inside it.
The machine: an Intel N150 (Alder Lake-N/Twin Lake, four E-cores), 12 GB LPDDR5, 1 TB SSD, an 800×1280 touch panel, a 36.48 Wh battery, Windows 11 Pro preinstalled — $499 as configured. It’s sold as KOOSMILE on Amazon and direct from Kooforway, and spec-identical unbranded listings (same 8” N150, 12 GB, G-sensor, 2 MP camera, 30 W PD, stylus) float around Amazon (B0F9YV1FGW, B0F9YZ159H, B0F9YWW1VD) and AliExpress (3256808424853779) — almost certainly the same unit wearing different stickers.
Who actually makes it? The BIOS splash screen says “Kooforway” — a strong hint that Kooforway is the ODM rather than another rebrander, with KOOSMILE as a retail channel. That attribution matters: the firmware neglect documented below would then be their own work, not something they bought in blind. The BIOS identifies itself as GLF-BI-8-S8_AN_G04R100-F70A-015-A, dated 2025-04-22 — a string with zero public search hits as of this writing. I’m publishing it deliberately: if you’re eyeing some other 8-inch N150 convertible and its BIOS string starts with GLF-BI-8-S8, you’re reading a review of your machine.
The family is also older than this generation: an Intel N100 version of the same chassis — known as the “P8” and sold as Topton, Crelander and Aslay — was reviewed running Linux by nbailey.ca in March 2025: same condensed keyboard, same built-in Ethernet, same portrait-panel rotation gauntlet. This is a lineage, not a one-off.
One clarification, because the two get conflated: the X-Plus “Piccolo” (reviewed by The Gadgeteer, covered by Liliputing) shares the pocket size and much of the spec sheet, but it is a distinct competing product, not a rebrand — different panel (1920×1200 vs this unit’s 800×1280), different battery (25.9 Wh vs 36.48 Wh), different chassis (658 g, and a conventional 360-degree convertible fold per its reviews, not this unit’s dual-axis double hinge). That said, the breed seems to share its firmware culture: even the Piccolo drew a Liliputing commenter’s verdict of “cannot run Linux, like, at all — the display output just doesn’t work.” Mine can, with work. Out of the box, that diagnosis is understandable.
Strip the marketing and what ships is essentially Intel’s reference firmware for a NUC-style mini-PC, minimally adapted to a battery-powered convertible. That is not rhetoric; the firmware says so itself, repeatedly, in its own words:
MODEL_NAME=SR Real Battery, MANUFACTURER=Intel SR 1, serial 123456789, technology “Unknown”, cycle count 0 forever. ENERGY_FULL is hardwired equal to design capacity, so the pack’s aging is invisible by construction — the reported percentage quietly loses meaning over the device’s life.xh_adl_N), referencing the Type-C/USB4 subsystem that N-series silicon doesn’t even have — two ACPI errors at every single boot, from hardware that was never there.CFSP that the vendor’s EC firmware never implements. It’s declared as an external reference and defined in none of the twenty ACPI tables the machine loads. The fan-status method therefore aborts on every call: permanent error spam in the kernel log, dead fan telemetry, and fan sysfs reads that hang for minutes, wedging any monitoring tool that walks hwmon. The fan only spins because the EC drives it autonomously, blind to the thermal-policy layer above it. (I eventually fixed this one myself — story below.)MSR_PKG_CST_CONFIG_CONTROL = 0x8000). Measured consequence: 0.00 % S0ix residency across a complete suspend-to-idle cycle. “Suspend” on this machine parks the cores and leaves the package running. On a desktop NUC that’s a defensible latency tweak; on a battery-powered convertible it is disqualifying — and locked.The vendor’s Windows 11 image papers over these gaps with OS-level workarounds. On any other OS, each one has to be rediscovered and reproduced by hand. I know, because I did.
Marketing says 3.6 GHz. Here is what the silicon and firmware actually permit, measured under sustained four-core load with turbostat:
Net result: ~2.2 GHz sustained all-core at 99.8 % utilization, with the fan audible the whole time. That’s 24 % below the fused ceiling and 39 % below the number on the box. The three limits compound cruelly: a perfect repaste can only ever claw back to 2.9 GHz, because the locked 80 °C cap wastes whatever margin a better cooler would add.
Because the gauge is a placeholder (see above), honest battery numbers required building my own telemetry: roughly 43,000 power-draw samples collected from the power daemon’s logging spanning June 3 to August 10, 2026 — two months of real use, at home and on the road — now supplemented by a persistent one-sample-per-minute logger. The numbers below are from the verified analysis pass of 2026-08-11:
energy_now as exactly capacity-percent times design capacity — over 641 calibration rows the deviation never exceeded 0.001 Wh. There is one real signal in there, and it isn’t energy.Everything above had to be discovered before it could be worked around. The current stack, condensed (full write-ups, scripts and services are in the companion repository):
| Firmware gap | Workaround |
|---|---|
| No tablet-mode switch device in ACPI | intel_hid enable_sw_tablet_mode=2 module parameter — the EC’s hinge events are real; this surfaces them |
| Portrait panel, no EDID, no orientation data | fbcon=rotate:1 plus video=DSI-1:panel_orientation=right_side_up on the kernel command line |
| Compositor loses orientation on tablet→laptop transitions | A watchdog service that re-enforces landscape via the compositor’s D-Bus API, idempotently |
| On-screen keyboard unreliable in user sessions | The same handler toggles the OSK per mode; a shell extension covers terminal apps |
| No sane AC/battery power policy | TLP drop-in tuning EPP, ASPM, iGPU clamps, USB/PCIe runtime PM |
| Firmware-locked AHCI port breaks SATA power setting | Deny-listed for link power management |
| Static power limits | A udev-driven RAPL switcher: raised limits on AC, OEM defaults on battery |
| Locked 80 °C throttle, weak cooler | Nothing possible in software |
| Locked PC0, no S0ix | Nothing possible in software; progressive sleep escalation to hibernate instead |
Phantom EC fan register (CFSP) |
A stub SSDT loaded from the initramfs, later upgraded to read the EC’s real tachometer — see below |
Each row is an evening or three. The display and tablet-mode rows were fought through first on the friend’s Debian unit and replayed on mine without modification — reproducibility a lab would envy, for defects a lab should have caught. The last row was a small war, and I want to tell it properly, because it ends with something I didn’t expect: me shipping the vendor a firmware fix.
From the very first boot, the kernel log was carpeted with this:
ACPI BIOS Error (bug): Could not resolve symbol [\_SB.PC00.LPCB.HEC.CFSP], AE_NOT_FOUND
ACPI Error: Aborting method \_SB.PC00.LPCB.H_EC.TFN1._FST due to previous error
Beyond the spam, the practical damage: the fan-status method aborts on every call, so fan telemetry is dead, and — much worse — reading the fan’s hwmon or cooling-device files hangs for minutes, which wedges sensors, btop, and anything else that innocently walks sysfs.
Theory one wrote itself: look at the error. The code says HEC, the device is declared H_EC — obviously someone did a half-finished rename of the reference code, and the fix is a rename override. Theory two, after that didn’t survive contact with the disassembly: maybe two different generations of Intel reference code were mixed, one expecting each name. Both wrong. The truth required dumping all twenty ACPI tables — including the six dynamically-loaded ones, which turn out to be innocent CPU power-management tables — and byte-searching them: no HEC name segment exists in any loaded table. The kernel’s “HEC” spelling is an artifact of ACPICA’s error printer rendering H_EC. I lost real days to trusting an error message’s spelling.
The actual bug is dumber and worse: the DPTF fan code reads the EC field CFSP — declared as an external reference, defined nowhere. Intel’s reference thermal stack shipped wired to an EC interface that this vendor’s EC firmware simply never implements. It cannot ever have worked, on any unit, under any OS. Nobody at the factory looked at a kernel log even once.
The first fix was almost anticlimactic: a stub SSDT defining CFSP = 0 so the method completes (fan speed reads as a placeholder 0 for the moment — the EC drives the fan autonomously, so the bug only ever cost observability). The build script re-verifies the diagnosis against a fresh table dump and refuses to build if it ever finds a real CFSP definition. Delivery was the fun part: first live-loaded through configfs for a no-reboot test, then made persistent via a small mkinitcpio hook that embeds the override table into the early cpio inside every Unified Kernel Image — surviving kernel updates, re-signed for Secure Boot each time. Reboot-verified on 2026-08-12: the stub table loads 0.012 seconds into boot, zero CFSP errors across the entire log for the first time in this machine’s life, and fan sysfs reads return instantly. The only ACPI errors left are the two from Intel’s verbatim USB table probing for Type-C hardware this chip has never had — deliberately not stubbed, because faking USB ports to silence two boot lines is a bad trade.
That should have been the end: errors gone, hwmon unwedged, fan speed politely reading 0. But a zero next to an audibly spinning fan nags. The EC never implements the field Intel’s code reads — fine — but the EC obviously knows the fan speed, because it’s the thing driving the fan. So I went looking for the real signal. Using the kernel’s read-only ec_sys debugfs interface, I sampled all 256 bytes of EC RAM once per second through a scripted idle → four-core-load → cooldown cycle — 195 samples, logged alongside the package temperature — and looked for anything that moved like a fan. Something did: a little-endian 16-bit word at offset 0x8D/0x8E, sitting around 430–490 at idle, ramping to ~1100 under load, decaying smoothly through cooldown — and visibly chasing a soft-ramp fan target at 0xA1/0xA2 that steps in perfect increments of 10. (The scan also turned up EC copies of the CPU temperature at 0x70/0x71 and slower board sensors at 0x62/0x72/0x73. The EC is quietly competent; nobody upstairs ever asked it anything.)
So the stub got a promotion: CFSP is no longer a constant 0 but a real 16-bit field into the EC’s operation region at offset 0x8D. Rebuilt into the UKIs, rebooted, verified: still zero ACPI errors across the entire boot, and sensors now reports live fan speed — 449 at idle, climbing with the audible fan. One honest caveat: I don’t know the unit. Plausibly RPM, possibly a scaled tach count; what matters is that it’s monotone with the actual fan. The vendor shipped Intel’s thermal stack wired to an EC interface nobody ever implemented; this machine now reports genuine fan telemetry through that very plumbing, because a customer finished the wiring for them.
I bought a $499 laptop and ended up authoring the firmware patch its vendor never wrote. I’d call that a strange definition of “included accessories,” but honestly, it was the most fun I’ve had with this machine.
Step back from the individual defects and notice where they all live: SMBIOS identity strings, ACPI bytecode, a discrete embedded controller running a proprietary blob, DPTF, VBT tables, locked MSRs — the whole 1980s-lineage “rich BIOS plus EC” architecture that x86 drags behind it, in which a small ODM has a thousand opportunities to leave reference scaffolding in place. This one took most of them. The N150 itself is blameless silicon; the platform around it is an integration exam the vendor failed.
A modern ARM tablet SoC deletes most of that exam. Identity, thermal behavior, panel description and charging live in a device tree the silicon vendor already validated — and while a device tree can lie about identity too — plenty of retail ARM hardware boots a copy-pasted reference-board compatible, and out-of-tree trees sometimes carry no usable model string at all — it cannot say nothing: the name selects the description the kernel boots by (thermal zones, panel, gauge), so even a vendor who phones in the identity has had to make the description work. This machine demonstrates the opposite: hardware that runs fine while every layer describing it is blank or wrong. To check that this isn’t just theory, I compared against ARM silicon that was mass-produced and in retail devices in the same window this machine shipped (the N150 launched at CES in January 2025; this unit’s BIOS is dated April 2025, on sale around June):
| This device (N150) | Kompanio 838 — Lenovo Duet 11 | Kompanio Ultra 910 — Lenovo CB+ 14 | Snapdragon X X1-26-100 | |
|---|---|---|---|---|
| In market | ~June 2025 ($499) | Nov 2024 (€320–450) | announced Mar 2025, retail Jun–Aug 2025 ($749) | CES Jan 2025, $600-class laptops |
| Form | 8” convertible, fan | 11” detachable, fanless | 14” OLED laptop, fanless | 13–15” laptops |
| GB6 single / multi | ~1,258 / ~3,010 rated (nanoreview); sustains 2.2 of 2.9 GHz all-core here | 1,003 / 2,291 | 2,535 / 7,659 | ~2,120 / ~10,339 (nanoreview) |
| Battery | 36.48 Wh → ~3.1 h measured median | 29 Wh → ~11–12 h measured | 60 Wh → 14.6–15+ h measured | (class: 15–20 h) |
| Runtime per Wh | 0.085 h/Wh | ~0.40 h/Wh | ~0.25 h/Wh (14” OLED!) | — |
| Weight | ~0.7 kg class (competitor: 658 g) | 500 g tablet / 874 g with kbd+stand | 1.17 kg (14”) | — |
Read that table slowly. At the same price, the Kompanio 838 Duet delivers the multicore throughput this box actually sustains — from a fanless 500 g tablet running 11–12 hours on a smaller battery behind a larger, sharper display. Per watt-hour it goes about 4.7× further; this machine’s locked 3 W package-idle floor alone exceeds the Duet’s entire average draw. On the same shelf a tier up, the MediaTek Kompanio Ultra 910’s Cortex-X925 sustains 3.62 GHz fanless — the number printed on this machine’s box, which its own silicon can only burst to — at twice the single-core and two-and-a-half times the multi-core score, in silence. And even keeping Windows, the Snapdragon X was announced at the very CES where the N150 launched, aimed at the same $600 shelf, at ~1.7× single and ~3.4× multi.
Two honest caveats, because the comparison is otherwise too easy:
Also fair: ARM-land has firmware sins of its own — vendor BSP kernels, GPU blobs, out-of-tree device trees on no-name tablets. But Chromebook-class SoCs ship mainline support as a platform requirement, and the specific category of defect that defines this machine — identity placeholders silently breaking every quirk-matching system downstream — structurally cannot happen where identity is load-bearing.
As delivered, native x86 is the only thing this firmware provides, and it provides it while misreporting the battery, throttling the CPU a gigahertz under its own ceiling, forbidding sleep, and wearing a name tag that reads “To be filled by O.E.M.”
Love the chassis, don’t trust the firmware. The hardware genuinely delivers something no mainstream vendor offers: a pocketable aluminum convertible with real ports, a real keyboard (backlit!), and a serviceable SSD. If you want this shape badly enough to do firmware archaeology — dumping ACPI tables, building your own battery telemetry, shipping yourself the fixes the vendor didn’t — it will reward you, in its way. I clearly did, and it clearly has.
Everyone else should skip it. The advertised clock is unreachable by design. The battery gauge is a stage prop that gets less truthful as the pack ages. Real-world runtime is about three hours. Sleep doesn’t sleep. The machine can never be matched by an OS quirk or found by a BIOS update, because it doesn’t know its own name. And the vendor’s Windows image is best understood as a patch kit for the vendor’s own firmware.
If someone builds this exact chassis around a modern MediaTek, Qualcomm or Samsung tablet-class SoC, buy it on day one — I will. This one, as shipped, is a reference design wearing a very charming coat.
Does the KOOSMILE / Kooforway 8-inch N150 mini laptop run Linux?
Yes — well, after the workarounds in fixes/ and the kernel command line described above. Out of the box the display comes up sideways and the console is unusable, which is why owners conclude it “cannot run Linux.” It can; it just doesn’t want to.
Why does the screen come up rotated / portrait under Linux?
The panel is portrait-native (800×1280) with no EDID and no orientation info anywhere. Add fbcon=rotate:1 video=DSI-1:panel_orientation=right_side_up to the kernel command line; for GNOME auto-rotation and tablet mode, install the handler in fixes/tablet-mode-orientation/.
Why do sensors, btop or hwmon tools hang for minutes?
The firmware’s DPTF fan code reads an EC field that doesn’t exist, so the ACPI fan-status method aborts and its sysfs reads hang. The fix — an SSDT loaded from the initramfs that maps the field onto the fan tachometer we found in EC RAM — is in fixes/acpi-fix/, and it also gives you a real fan-speed reading.
Why is battery life only ~3 hours?
Median platform draw is ~11.7 W: the BIOS locks package C-states to PC0 (so the package can never idle and S0ix/modern standby is impossible — measured 0.00 % residency) on top of x86 overheads. Nothing can unlock it in software. The sleep ladder in fixes/sleep-ladder/ keeps unattended drain survivable.
Why doesn’t the battery percentage warn before it dies?
The gauge is an Intel reference-firmware placeholder (energy_now is literally percent × design capacity) and the EC’s hard cutoff is load-dependent — observed dying at a displayed “20 %”. Trust terminal voltage only; the sleep ladder includes a debounced voltage-floor emergency hibernate.
Can I upgrade the SSD? It’s a user-replaceable M.2 2242 (B-key per the vendor sheet). The shipped 1 TB drive is SATA (~468 MB/s); whether the slot also carries NVMe is untested.
Does the CPU really run at 3.6 GHz? Single-core bursts only. The fused all-core limit is 2.9 GHz, the firmware locks the thermal throttle at 80 °C, and the cooler sheds ~9.5 W — sustained all-core is ~2.2 GHz.
The ACPI table dumps from the reviewed unit are in fixes/acpi-fix/tables/, the stub-SSDT fix and the EC-RAM fan-hunt script (with its captured samples) in fixes/acpi-fix/, and the battery-telemetry logger in data/battery-telemetry/. The raw timestamped battery logs themselves stay private — two months of power draw is also a map of someone’s days — but the logger reproduces the dataset on any unit, and every aggregate that matters is quoted above.