Battery percentage goes down in cold weather but does not come back up in warm

Sony Xperia XA2, SailfishOS 3.4.0.24

It’s very cold around here atm, 10 to 20 degrees Celsius below. When I move around outside, and my phone is in a cold jacket pocket, the battery goes flat very fast.
But it comes back up when it gets warm again; however, the battery percentage displayed does not come back up. This can lead to a situation where the OS shuts down because it thinks that the battery is at 0%. If I then warm the phone up again, I still cannot start it because of that.
Only when I connect the charger, it jumps to a much higher percentage almost immediately, and I can boot again.

This has happened many times now; and I don’t even know if this is a SailfishOS or a hard/firmware problem.

I seem to remember from years back that Android used to have the same problem (on another device), but it got fixed in later versions (on yet another device).

What can be done?

The journal right now shows:

journalctl | grep -i batt | grep -vi batteryoverlay
Jan 17 19:30:26 XperiaXA2-DualSIM kernel: FG: fg_gen3_probe: battery SOC:1 voltage: 3831289uV temp: 330 id: 0KOhms
Jan 17 19:30:26 XperiaXA2-DualSIM kernel: FG: fg_get_time_to_full_locked: battery profile is not loaded
Jan 17 19:30:26 XperiaXA2-DualSIM kernel: of_batterydata_get_best_profile: 1309-2682 found
Jan 17 19:30:31 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): charger_type: none -> usb
Jan 17 19:30:31 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): charger_state: undefined -> on
Jan 17 19:30:31 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_state: unknown -> charging
Jan 17 19:30:31 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_status: undefined -> ok
Jan 17 19:30:31 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_level : -1 -> 1
Jan 17 19:30:59 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_level : 1 -> 2
Jan 17 19:31:15 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_level : 2 -> 4
Jan 17 19:31:48 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_level : 4 -> 5
Jan 17 19:31:56 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_level : 5 -> 6
Jan 17 19:32:04 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_level : 6 -> 7
Jan 17 19:32:21 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_level : 7 -> 8
Jan 17 19:32:37 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_level : 8 -> 9
Jan 17 19:32:53 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_level : 9 -> 10
Jan 17 19:33:08 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_level : 10 -> 11
Jan 17 19:33:26 XperiaXA2-DualSIM mce[2879]: modules/battery-udev.c: mcebat_update(): battery_level : 11 -> 12
Jan 17 19:33:57 XperiaXA2-DualSIM kernel: QPNP SMB2 probed successfully usb:present=1 type=0 batt:present = 1 health = 1 charge = 3
Jan 17 19:33:57 XperiaXA2-DualSIM kernel: FG: fg_gen3_probe: battery SOC:14 voltage: 3856679uV temp: 320 id: 0KOhms
Jan 17 19:33:57 XperiaXA2-DualSIM kernel: FG: fg_get_time_to_full_locked: battery profile is not loaded
Jan 17 19:33:57 XperiaXA2-DualSIM kernel: of_batterydata_get_best_profile: 1309-2682 found
Jan 17 19:34:02 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): charger_type: none -> usb
Jan 17 19:34:02 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): charger_state: undefined -> on
Jan 17 19:34:02 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_state: unknown -> charging
Jan 17 19:34:02 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_status: undefined -> ok
Jan 17 19:34:02 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : -1 -> 14
Jan 17 19:34:03 XperiaXA2-DualSIM systemd[1]: Starting Battery Buddy file permission daemon...
Jan 17 19:34:03 XperiaXA2-DualSIM unknown: type=1130 audit(1610904843.286:51): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=harbour-batterybuddy-oneshot comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
Jan 17 19:34:03 XperiaXA2-DualSIM unknown: type=1130 audit(1610904843.286:51): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=harbour-batterybuddy-oneshot comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
Jan 17 19:34:03 XperiaXA2-DualSIM systemd[1]: Started Battery Buddy file permission daemon.
Jan 17 19:34:03 XperiaXA2-DualSIM audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=harbour-batterybuddy-oneshot comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
Jan 17 19:34:08 XperiaXA2-DualSIM systemd[4976]: Started Battery Buddy background daemon.
Jan 17 19:34:14 XperiaXA2-DualSIM healthd: BatteryFullChargePath not found
Jan 17 19:34:14 XperiaXA2-DualSIM healthd: BatteryCycleCountPath not found
Jan 17 19:34:14 XperiaXA2-DualSIM healthd: battery l=14 v=3786 t=32.0 h=2 st=2 c=342 chg=u
Jan 17 19:34:18 XperiaXA2-DualSIM healthd: battery l=14 v=3787 t=32.0 h=2 st=2 c=310 chg=u
Jan 17 19:34:21 XperiaXA2-DualSIM healthd: battery l=14 v=3774 t=32.0 h=2 st=2 c=401 chg=u
Jan 17 19:34:51 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 14 -> 15
Jan 17 19:35:07 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 15 -> 16
Jan 17 19:35:14 XperiaXA2-DualSIM healthd: battery l=17 v=3861 t=33.0 h=2 st=2 c=-219 chg=u
Jan 17 19:35:21 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 16 -> 17
Jan 17 19:35:40 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 17 -> 18
Jan 17 19:35:49 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 18 -> 19
Jan 17 19:35:56 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 19 -> 20
Jan 17 19:36:12 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 20 -> 21
Jan 17 19:36:14 XperiaXA2-DualSIM healthd: battery l=21 v=3892 t=33.0 h=2 st=2 c=-410 chg=u
Jan 17 19:36:29 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 21 -> 22
Jan 17 19:36:45 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 22 -> 23
Jan 17 19:37:01 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 23 -> 24
Jan 17 19:37:14 XperiaXA2-DualSIM healthd: battery l=25 v=3890 t=32.0 h=2 st=2 c=-366 chg=u
Jan 17 19:37:14 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 24 -> 25
Jan 17 19:37:34 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 25 -> 26
Jan 17 19:37:44 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 26 -> 27
Jan 17 19:38:06 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 27 -> 28
Jan 17 19:38:14 XperiaXA2-DualSIM healthd: battery l=29 v=3857 t=32.0 h=2 st=2 c=-86 chg=u
Jan 17 19:38:27 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 28 -> 29
Jan 17 19:38:36 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 29 -> 30
Jan 17 19:38:59 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 30 -> 31
Jan 17 19:39:14 XperiaXA2-DualSIM healthd: battery l=32 v=3903 t=32.0 h=2 st=2 c=-451 chg=u
Jan 17 19:39:16 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 31 -> 33
Jan 17 19:39:32 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 33 -> 34
Jan 17 19:39:48 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 34 -> 35
Jan 17 19:40:05 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 35 -> 36
Jan 17 19:40:14 XperiaXA2-DualSIM healthd: battery l=36 v=3840 t=31.0 h=2 st=2 c=81 chg=u
Jan 17 19:40:22 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 36 -> 37
Jan 17 19:40:39 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 37 -> 38
Jan 17 19:40:55 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 38 -> 39
Jan 17 19:41:09 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 39 -> 40
Jan 17 19:41:14 XperiaXA2-DualSIM healthd: battery l=40 v=3871 t=31.0 h=2 st=2 c=-184 chg=u
Jan 17 19:41:27 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 40 -> 41
Jan 17 19:41:36 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 41 -> 42
Jan 17 19:42:00 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 42 -> 43
Jan 17 19:42:02 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 43 -> 44
Jan 17 19:42:14 XperiaXA2-DualSIM healthd: battery l=44 v=3895 t=31.0 h=2 st=2 c=-358 chg=u
Jan 17 19:42:29 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 44 -> 45
Jan 17 19:42:49 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 45 -> 47
Jan 17 19:43:14 XperiaXA2-DualSIM healthd: battery l=48 v=3909 t=31.0 h=2 st=2 c=-429 chg=u
Jan 17 19:43:26 XperiaXA2-DualSIM mce[2866]: modules/battery-udev.c: mcebat_update(): battery_level : 47 -> 48
Jan 17 19:44:14 XperiaXA2-DualSIM healthd: battery l=48 v=3890 t=31.0 h=2 st=2 c=-265 chg=u
Jan 17 19:45:14 XperiaXA2-DualSIM healthd: battery l=48 v=3905 t=31.0 h=2 st=2 c=-393 chg=u
3 Likes

Not an expert, but you are taking the battery below its operational temperature, which is bad. I’m not sure whether what you’re experiencing is expected or not, but I’m sure I had similar situations with Lithium polymers.
Keep the phone in a pocket near your body, so it doesn’t get that cold.

1 Like

Regardless of the fact that this might not be a real bug as @gabrielg pointed out, I can reproduce this with my XA2 Dual-Sim. For some reason this winter in particular have caused the battery to go flat.

1 Like

Same thing happened to me. Phone shut down in my pocket, but when I connected the charger there was still plenty of charge left.

I didn’t think much of it, just thought that the phone doesn’t handle cold well. But if there’s a remedy that would of course be better.

Sony XA2.

1 Like

I know enough about batteries in general to know that this is normal. But I also know that the charge goes up again as the battery gets warmer again.

However, there seems to be a distinct soft/firmware element here - the fact that the reported percentage (or battery charge) does not go up again once it went down, and the system acts according to that.

What I don’t know is whether that is hardcoded in some firmware, or softcoded in the operating system.

I think I seem to remember that this was first present, then fixed on Android…

Nevertheless, I appreciate the advice about not letting the phone get too cold.
I could find no specifications for this model, but in general smartphones shouldn’t go below zero it seems.

If i read this right you mean that the battery indicator drops when its cold but it doesn’t go up if you take the phone somewhere warm right.
I think i remember thins with my J1. So its probably a “bug” of some sort where the OS doesn’t recalculate the battery charge. Or to put it differently if it goes down the only way to go up again is to charge it.

Well, if we know exactly what this fix is and can be easily ported to Sailfish OS, I don’t see why we couldn’t have it, we will just need the git URL, I guess :slight_smile:
If, however, this is yet another google/android/vendor obscure firmware blob that for some reason we can’t incorporate, I would attribute the problem to firmware/hardware that vendors are not interested in opening up.

^ Not sure what to make of your reaction; maybe I shouldn’t have mentioned Android. Even if I remember this correctly, it’s not very useful because it was several devices ago.

Exactly.

In any case, I’m not complaining, just hoping to find some confirmation or to establish where the problem actually occurs.
Ideally a fix of course.

In retrospect, I should’ve chosen a less extreme example. I’ve had the described effect happening in temperatures slightly above zero, too.
I know I should just put it in an inside pocket, but
a) I don’t have one when cycling
b) sometimes I just forget…

It seems the Jolla phones worked better in that respect - they had a battery sensor, and the percentage reported came back up after it went down.
See here:


At this point I’d just like to find out whether this is a flaw in the operating system or the battery’s firmware.

I can tell you I don’t experience this on the Xperia X, but this means the issue could be in the hardware adaptation or -like I mentioned- some obscure piece of code hidden in a blob that may or may not be available to us.
If you have the chance to test the same device with stock Android, that would clarify the above.

The situation as described has definitely improved with recent versions of SFOS. Whether it’s the OS itself or some battery firmware, IDK.

A real voltage, current and source impedance of battery display would be hot !!