I’m using Fedora Linux 42.20250417.0 (Silverblue). I’m running kernel version Linux 6.14.2-300.fc42.x86_64. I’m using BIOS version: 03.05. I have a Framework Laptop 13 model with a 12th Gen Intel® Core™ i7-1260P processor.
The recently released Fedora Silverblue 42 contains GNOME 48, which contains a ‘Preserve Battery Health’ feature (see the release notes here: GNOME Release Notes)
It says: ‘It is only available on hardware which supports the feature.’ and as there is a similar setting available in the BIOS I assumed my Framework would support this GNOME feature as well. But it doesn’t right away.
I’m using it on my 13 with the AMD 7840U CPU, BIOS 3.08, with Arch Linux on kernel 6.14.2-arch1-1.
It’s not too difficult to set up, but you’ll have to disable Framework’s charge-limiting features:
Uninstall any kernel module you might have enabled for Framework stuff, like framework-laptop-kmod.
Reset the battery limit in the BIOS back to 100%.
Disable the battery extender if it’s available in your BIOS.
Stop using tools like framework_tool, cros_ec to set the charge limits.
Run sudo tee /etc/modprobe.d/fw_use_cros_charging.conf <<< "options cros_charge_control probe_with_fwk_charge_control=Y". This tells the native kernel module that we swear not to use any other means to change the battery limits.
Reboot.
Check if the driver is enabled with journalctl -b0 | grep "Framework charge control detected, preventing load". If this command has no output, you’re good to go.
You should see the new “Preserve Battery Health” entry under Settings->Energy.
I followed these instructions, which was quite straightforward because I was not using any of those tools other then the limit in the BIOS. journalctl -b0 | grep "Framework charge control detected, preventing load" doesn’t give any output, so it appears as if I’m all set. But it doesn’t work. The new GNOME feature still doesn’t show up, sadly.
To be honest I don’t know if my guide applies to every motherboard version.
If you run lsmod | grep cros_charge_control do you get some output?
With cat /sys/class/power_supply/BAT1/charge_control_end_threshold do you get a number as output or an error?
Maybe 12th gen is just one gen too old for this? Or it’s not supported on Intel?
For good measure, I’ve updated my BIOS to be on 03.08 as well, so I’m on the same version as Guldoman. But to no avail.
lsmod | grep cros_charge_control does give me some output but cat /sys/class/power_supply/BAT1/charge_control_end_threshold gives me No such file or directory. I’m not sure what that means, though.
No, in general it is for all models. There are few caveats though.
There are different featuresets supported by different ECs and firmware versions in different Framework models. Look for the sysfs files charge_behaviour, charge_control_start_threshold and charge_control_end_threshold.
The generic ChromeOS EC driver charge control logic interacts badly with the one Framework implemented on top.
So a module parameter for cros_charge_control is necessary to enable it: probe_with_fwk_charge_control=1.
And then make sure not to use any of the Framework-specific functionality.