I am getting 17h of battery time on my Librem5. Are you?

I will try this out as well.

Just to confirm, there are no apps running during the test, correct.

This is Linux so, unless them implement some sort of policy mechanism to suspend apps in the background like on Android, they are going to be running just like they would on a desktop. However, I just completed a test with suspend and I got 27.5 h with 1 min suspend, wifi/blootooth button turned on, the other two buttons turned off and no apps running.

You have 30% left after a full day of basic / low usage? Neat, that is probably good enough for me, thanks for that datapoint.

Oh, wait a minute. You run a hotspot? Are any client devices able to browse the internet? When I turn on the hotspot, neither my clients nor my clients can browse the internet.

This device is not on a data plan so it might be because it is not configured to be connected to a wifi router and act as an access point at the same time. This is not a feature that I need but I will have to do some troubleshooting. Just curious about the results of your wifi capability.

Interesting. That was my original plan as well and I will probably go through with it because Linux doesn’t suspend apps like Android, at least I am not aware of any mechanism that does and our video drivers don’t seem to be on par with native Android drivers in terms of performance so I expect daily driving to drain the batter far more than on the other platforms.

When you say charger, you mean the power supply that plugs into the wall, not an actual power charging dock on a desk where one might be able to plug a few batteries in to charge?

If the latter, I would love to have one of those.

I will try this test as well. Interesting.

Yes. An in-person friend who also has a Librem 5 did better research than I did and linked me which one to buy on Amazon. As a note, they’re pretty cheap and one of my three chargers is damaged or something and sometimes doesn’t charge and flickers its little battery % indicator instead, but even then when I mostly only run 2 of the 3 chargers its often enough.

Here are some pictures taken with my Librem5 of the chargers:


No. Freaking. Way. I did not expect this, thanks! Okay, off to Amazon and the L5 store I guess.

Thanks so much for that.

// Edit: Here it is for anyone looking: Amazon.com

As a side point, maybe Librem should get a branded version of these into their stores.


I was going to include the amazon link in my previous post but I clicked on Reply instead of Attach for those images.

Here is a link I got from Amazon from my purchase history:


They’re super cheap!

(Looks like you already found it!)


Then there would be no data connections for the hotspot to bridge to.

1 Like

Yes, I think that might be correct. It expects to route from WiFi clients associated with the Librem 5 hotspot to the cellular modem connection.

Some wireless devices are not even capable of carrying out multiple WiFi roles simultaneously but if the particular WiFi card that you have in the Librem 5 can do that, I don’t think the Librem 5 is expecting to route in that way.

Those are the two obstacles that I see you would need to look at first.

There’s probably not a lot of benefit in this working because any WiFi client that can associate with the Librem 5 hotspot could alternatively associate with the Wireless Access Point that the Librem 5 is itself using. I can’t come up with a really plausible use case but am open to suggestions.


See also: External battery charger for Librem5 - #4 by irvinewade
and Tested Accessories · Wiki · Librem5 / Librem 5 Community Wiki · GitLab if you want to add other accessories.


I just did the same test playing an FHD video with VLC and the battery lasted almost precisely 3:15h just like yours. The phone was warm as well.

So we are right on point here.

Next, I am trying the same test with a 4k video file + VLC.

1 Like

Why 4K instead HD? i mean it will better Result.

Test results for a 4k video file: 2.5h


A fix is to run this on boot: echo 'on' | sudo tee /sys/bus/usb/devices/1-1.2/power/control

It turns off suspend on the USB bus for the modem so that the kernel doesn’t try to put it to sleep while the modem is in use, meaning you don’t get any data.


Hey, although I seem to be late to this discussion, I wanted to let you know that I’m currently working on adding different clockrates and voltages to the devicetree on my Librem5.

So far I managed to get it to run at 200mhz@0.7V when idling (or all the time depending on the chosen cpu-governor), battery consumption is probably still higher than on suspend, but should beat the stock settings.

I’m still testing on a seperate OS on sd-card though, since I didn’t want to brick my main OS on the eMMC.



Now THIS is why I want a linux phone. Not only do I get access to freedom but I get to be part of something cool, watch people work on cool things and even learn!

I would love to learn more about what you are doing and how, kernel hacking / drivers has always been on my todo list.


Maybe to your surprise I’m no expert in Kernel-related things.

But let me share the little I assume to know and what I did so far:

On the Librem 5 platform like on many other ARM-based devices there’s no BIOS-Chip or BIOS-UI, so device specific config and settings (for instance cpu-clockrate or display-parameters) have to be somewhere else.
In case of Linux on ARM there are devicetree-binaries in the boot-partition, the devicetree-sources for the librem5 actually are part of the mainline-Linux-kernel-sources, these can be compiled with the device-tree-compiler dtc.
Although trying to compile these for the librem 5 and placing them in the boot partition of my devices resulted in weird graphical glitches, no clue what happened there)

But dtc can also decompile those binaries back to some sourcecode, which to my surprise is fairly readable. So I decompiled the working dtb-files from the device back to dts files, compiled them unchanged and placed these on the boot partition… no glitches :slight_smile:

(dtc decompile command:
dtc -I dtb -O dts imx8mq-librem5-r4.dtb -o imx8mq-librem-r4.dts
dtc compile command:
dtc -I dts -O dtb imx8mq-librem5-r4.dts -o imx8mq-librem-r4.dtb

In the dts files there’s a section “opp-table” which defines different operating points of the CPU, in the imx8mq.dts, which is for the cpu the librem5 uses and is also included in the imx8mq-librem5-r4.dts file, theres 4 different opp’s 800mhz, 1000mhz, 1300mhz and 1500mhz, while 800 and 1300 are commented to be “industrial only” and the other two as “consumer only”.
All 4 opps have each values for opp-supported-hw:
800mhz : <0x0f 0x04> (industrial only)
1000mhz: <0x0e 0x03> (consumer only)
1300mhz: <0x0c 0x04>(industrial only)
1500mhz: <0x08 0x03>(consumer only)

So I went ahead and changed both 0x04 values to 0x03, used dtc to compile the dts to a dtb, put it onto the phones-boot partition replacing the existing imx8mq-librem-r4.dtb file and rebooted the phone, hoping it wouldn’t be bricked, which to my relief it wasn’t.
Checking which frequencies were available, through “cat /sys/devices/cpu/cpu0/cpufreq/scaling_available_frequencies”, I found that my tiny change actually worked and, instead of only having 1000000 and 1500000, I also had 800000 and 1300000 available.
Through the program cpupower I set the cpu-governor to powersave, and checked the frequency through “cat /sys/devices/cpu/cpu0/cpufreq/cpuinfo_cpu_freq”, which appeared to be 800000.

Apparently this really unlocked those other two operating points and the cpu did run at 800mhz.

I then edited the dts file further and just copy-pasted the 800mhz opp two times and edited them to 200mhz and 600mhz, compiled it, put the dtb on the phone, rebooted and checked the available frequencies.
200mhz and 600mhz unlocked :smiley:
Set the cpu-governor to powersave again, and checked the clockspeed: yup 200mhz!

Since in the opp-table theres also “opp-microvolt” values for each operating point, I tried to lower the voltage for 200mhz down to 0.6Volts. This change resulted in 200mhz not being listed as available frequency, so I tried 0.7V and that did work.
I don’t know why 0.6V did not work at all, either the volategcontroller doesn’t support such low voltage as Vcpu, or something checks at boot which operating points are stable. Normally I would have expected the system to become unstable and crash with a too low voltage for the frequency.

Yesterday I did try to test this config for power consumption on the secondary OS, I have on sd-card, with the cpu-governor set to conservative.
But somehow the udev-process decided to pin a single CPU-Core to 100%Usage which resulted in the governor to clock it up to full-speed. No clue if this came from instability through my new dtb or if the OS is just somehow borked. But since the device was otherwise operational I put the dtb in the boot-partition of the eMMC with pureOS on it.


Not completely.
When I don’t use the L5 and leave it laying around while the modem is activated, I get 8 hours easily.
However, when I make some calls, browse the forum etc. my battery will be depleted after nearly 6 hours
(I don’t use suspend).

1 Like

Today I tested my Settings with PureOS Byzantium, resuting in exactly 14h Battery from fully charged to auto-shutdown

With 200Mhz@0.7V
No Suspend
Wifi ON
Modem ON
Mobile Data OFF
Blutooth Off
Including one ~30sec Incoming Call
Basically all hardware-switches on, only bt off and no mobile data connected

What I found was that battery was draining way faster while being out of reach of any known wifi network, than while staying connected. So better turn wifi off when your not using it (also for security and privacy reasons).

Also I found why I couldn’t go below 0.7V: the Power-Management-IC’s (bd71837) DC-DC-Converter for the CPU is only rated down to 0.7V.
And yes this lower limit is also defined in the devicetree-files, so there might be a chance to go lower on the voltage, also the pmic’s switching frequency of 2Mhz seems a bit high to me, but I might be wrong there, just a rough guess based on my pc-overclocking experience