More than a decade after Microsoft shipped its ill-fated Surface RT tablet, the open-source community has delivered a kernel driver that brings proper battery monitoring and charger status reporting to the device when running mainline Linux. The new power-supply driver for the Surface RT’s embedded controller (EC) landed in the Linux 6.2 kernel, eliminating the need for out-of-tree patches and giving one of Windows RT’s most prominent pieces of hardware a small but meaningful second life.
The driver, submitted and merged during the 6.2 development cycle, parses data from the Surface RT’s EC on the I2C bus. It exposes standard sysfs attributes for battery capacity, charge state, AC adapter presence, and voltage/current readings—exactly the data points that owners of these aging ARM tablets have been manually scraping or doing without for years.
An unlikely candidate for mainline love
The Surface RT debuted in October 2012 alongside Windows RT, a locked-down ARM version of Windows 8 that could only run Store apps. Microsoft stopped RT software updates years ago, leaving the device in a security limbo. While x86 Surface models enjoy robust community Linux support, the RT’s locked bootloader and Tegra 3 SoC made running alternative operating systems a niche pursuit. Only a handful of enthusiasts, armed with custom Secure Boot keys and a willingness to compile their own kernels, ever succeeded in getting Linux to boot on the RT.
Despite that small user base, the upstream Linux kernel has slowly accumulated support for various Surface RT components. The EC battery driver is the latest addition, but it’s arguably the most practical one. Without it, users had to rely on AC power alone, guess remaining runtime, or manually read EC registers through low-level I2C tools. Now, with a mainline kernel, GNOME’s power indicator, KDE’s battery widget, and command-line tools like upower all work out of the box.
What the driver actually does
The new driver—formally named surface-rt-ec-battery—registers as a standard Linux power-supply class device. It communicates with the Surface RT’s embedded controller, a specialized microcontroller that manages power events, keyboard/touchpad connectivity, and sensors. The EC constantly monitors the battery’s charge level, charge/discharge rate, and whether an AC adapter is connected, but until now there was no upstream driver to relay that information to the operating system.
Once loaded, the driver creates entries under /sys/class/power_supply/surface-rt-ec/ that expose:
- Battery capacity: Percentage remaining, with configurable full and design capacity values.
- Charging status: Whether the battery is charging, discharging, full, or not present.
- AC adapter presence: Boolean indicator of whether the charger is plugged in.
- Voltage and current: Instantaneous voltage (in microvolts) and current (in microamps), enabling accurate power-draw estimates.
- Health and technology: Reports “Good” health unless a fault is detected, and identifies the technology as “Li-ion.”
The driver is intentionally minimal. It does not support advanced features like battery wear leveling or firmware updates—those remain under the EC’s own logic. But it covers the basics, and for a tablet that was never designed to run Linux, that’s a significant step forward.
A brief history of Surface RT on Linux
Getting Linux onto the Surface RT has always been a multi-layered challenge. The device’s UEFI firmware is signed with Microsoft’s keys, and the bootloader is locked by default. However, a bug in the Tegra 3 boot ROM allowed the community to extract and re-sign a bootloader with custom keys—a process that requires desoldering the eMMC or exploiting a secure-boot bypass. Once unlocked, early efforts centered around vendor kernels based on Linux 3.x and 4.x, heavily patched to enable basic display, Wi-Fi, and input.
The biggest turning point came when Maximilian Luz, a prolific contributor to the linux-surface project, began upstreaming patches for various Surface devices. His work on the Surface Pro, Surface Book, and Surface Laptop models earned him maintainership of the platform’s kernel subsystem. In late 2022, Luz turned his attention to the neglected Surface RT, submitting a series of patches that added the EC driver, fixed I2C issues, and improved Tegra 3 power management. The battery driver in 6.2 is part of that broader push.
Kernel 6.2: more than just an RT revival
While the Surface RT EC driver is a highlight for retrocomputing enthusiasts, Linux 6.2 is a substantial release in its own right. It features initial support for the Apple M1 Pro/Max/Ultra, improved Intel Arc graphics performance, the long-awaited NVMe-of-TCP transport, and a rework of the Intel P-State driver for hybrid architectures. AMD Ryzen 7000 series and RDNA3 GPUs also received early enablement, making the kernel a solid choice for cutting-edge hardware.
That such a modern kernel still accepts contributions for a device from 2012 underscores Linux’s unique position in the OS ecosystem. Microsoft ended mainstream support for the Surface RT in 2017 and extended support in 2019, yet the kernel community continues to improve its viability. As long as developers are willing to write and maintain the code, Linux will run on almost anything.
Community reaction and practical implications
The response from the Surface RT Linux community has been overwhelmingly positive. Forum threads on XDA-Developers and the linux-surface Discord lit up with reports of successful battery detection. One user noted, “For the first time I can actually see my battery percentage in KDE. I don’t have to blindly trust that the tablet won’t die mid-update.” Another pointed out that the driver exposes voltage and current, allowing them to estimate power consumption and optimize performance based on whether they’re on battery or AC.
Practically, the driver makes the Surface RT a more usable portable Linux machine. With a lightweight desktop environment like Xfce or Sway, the tablet can serve as a low-power note-taking device, a secondary terminal, or a dedicated retro-gaming handheld. The Tegra 3’s GPU is supported by the open-source Nouveau driver, though performance is modest. Still, the ability to run a modern kernel with upstream battery support breathes new life into hardware that otherwise would be e-waste.
How to enable the driver
For anyone looking to test the new driver, the process isn’t entirely plug-and-play. You’ll need a Surface RT with an unlocked bootloader and a mainline kernel (6.2 or later). The driver is tristate, so it can be built as a module (CONFIG_SURFACE_RT_EC_BATTERY=m). Most distributions will enable it automatically when compiling for the ARM architecture. Once the device boots, the module loads via the I2C subsystem, and the power-supply class takes care of the rest.
There are no configuration files to tweak. If you’re running a desktop environment, the battery icon should appear automatically. For headless setups, cat /sys/class/power_supply/surface-rt-ec/capacity gives you the current percentage. The driver also generates standard udev events on state changes, so scripts can react to AC connect/disconnect events.
What’s next for Surface RT mainline support
With the EC battery driver merged, attention may shift to other missing pieces. The Surface RT’s Type Cover 2 touchpad still requires an out-of-tree driver for multitouch; the magnetometer and ambient light sensor lack mainline drivers; and power management, while improved, is not as efficient as the original Windows RT firmware. Luz has expressed interest in tackling these areas, but time and test hardware are limited.
The Tegra 3 (T30) platform itself also sees occasional mainline patches from the Nouveau and Linux on ARM communities, which could indirectly benefit the Surface RT. Modern kernel features like the CONFIG_ARM_TEGRA_CPUIDLE driver help reduce idle power draw, though the tablet’s battery life on Linux still lags behind the six to eight hours it achieved under Windows RT.
A statement on open-source longevity
The Surface RT was widely considered a dead end within two years of its release. Windows RT failed to gain traction, and Microsoft pivoted to x86-based Surface Pro and Surface Go lines. Yet here we are, in 2024, discussing a mainline kernel driver for the device’s battery. It’s a reminder that in the open-source world, hardware never truly dies as long as someone cares enough to keep it running.
The driver’s inclusion also highlights the way Linux consolidates support for niche hardware without burdening the core kernel team. A single developer can contribute a driver that benefits a tiny user base, and the kernel’s maintainers will accept it as long as it meets quality standards. This isn’t charity; it’s the power of a modular, community-driven development model.
For the few hundred or few thousand people who still own a Surface RT, kernel 6.2 is a milestone release. It won’t turn the tablet into a daily driver, but it does make it a more complete Linux device. And for the rest of us, it’s a fascinating footnote in the long history of giving old hardware a second chance through free software.