The Linux kernel’s Human Interface Devices (HID) subsystem has an existing architectural limitation that there is just up to one battery per HID device. But with modern devices — especially among various gaming peripherals — there can be more than one battery when considering earbuds with a battery for each earbud, multi-device wireless receivers, etc. A proposal was raised today to address this limitation.
Lucas Zampieri of Red Hat sent out the patch today proposing support for multiple batteries per HID devices to overcome this HID subsystem limitation of assuming up to just one battery per device/
Some of the multi-battery device scenarios considered as part of this proposal included:
“Multiple battery scenarios that cannot be properly reported today:
1. Gaming headsets with charging docks (e.g., SteelSeries Arctis Nova Pro Wireless) – headset battery reported, dock battery invisible
2. Graphics tablets with stylus batteries (Wacom) – requires driver-specific workarounds
3. Wireless earbuds with per-earbud batteries plus charging case
4. Multi-device receivers (Logitech Unifying) – requires proprietary HID++ protocol parsingThis forces manufacturers to use proprietary protocols and vendor-specific software. Community projects parse USB packets directly because standard HID battery reporting cannot handle multi-battery scenarios.”
As for the proposal while retaining backwards compatibility:
“## Why This Matters
The current limitation creates a cycle: OS lacks support, so manufacturers implement proprietary protocols, which makes vendor software necessary, which reduces pressure to fix the OS limitation. Improving HID core support for multiple batteries would enable standardized reporting, reduce the need for vendor software, improve OS integration, reduce driver duplication, and provide a foundation for future multi-battery devices.
## Proposed Solution
This patch introduces struct hid_battery to encapsulate individual battery state, adds a batteries list to struct hid_device for tracking multiple batteries, and uses report ID-based identification. The implementation maintains full backwards compatibility with existing single-battery code.”
So assuming this proposal goes through, Linux HID drivers would be able to properly report multiple batteries independently per HID device.
