Laptop loses charge despite being plugged into stock USB-PD adapter while powered on

Laptop details
Batch 5, DIY, BIOS v3.06, i7-1165G7 mainboard, stock 2x16gb memory, cards in clockwise order from upper right: USB-C, USB-A, USB-A, USB-C; stock A/C adapter, Arch Linux (SwayWM, BTRFS on LUKS), possibly relevant systemd units enabled: TLP;

What’s going wrong
I’ve been happily using the Framework laptop for just shy of a month. Yesterday, I noticed that the laptop refused to charge past 93% when I plugged it into my usual charging port (upper left). Confused, I ran:

while true; do acpi; sleep 0.2; done
(my usual battery icon only updates once every five seconds)

When I left the laptop alone, ACPI reported constant discharge (but the laptop remained ‘plugged in’). If I started up tasks, ACPI reported intermittent charging. Anecdotally, the more intensive the tasks, the more often the intermittent charge, but I never reached consistent charging.

I then removed all of my expansion cards and tested each port one by one. All ports resulted in consistent charging except for the upper left.

I flipped the power cable over and tried the same, with the same results.

I rebooted and tried the same, with the same results.

I returned to (attempting) charging in the upper left and started doing silly things like putting light pressure at various angles on the charging cable at the laptop port, tilting the laptop, tapping hard at the keyboard, opening/closing the lid to various angles, squeezing at the edges of the frame, rapidly n-tuple clicking, and singing soft lullabies.

Nothing seemed to have a predictable effect, except for running intensive tasks, and even then it was inconsistent.

Running sensors showed for BAT1-acpi-0 a current read-out that changed as expected with load (going from 200+ to 500-ish milliamps). Bizarrely, the current didn’t drop to its original level when the load was removed, instead hovering around 400 milliamps. With TLP enabled, the load eventually settled to the 200s of milliamps. There were some bizarre unpredictable drops to sub-100 milliamps for a second at a time.

Running the command:

while true; do sensors | grep curr1; acpi; sleep 0.2; done

showed a very loose correlation between current and charging state (high current = more likely to be charging), but not in an obvious way. Maybe there’s a time delay and I should be number-crunching with autocorrelations or whatever, or maybe I’d rather be told to contact support. :-/

Charging via the upper left while powered completely off resulted in a successful charge from 93% to 100%.

Running the command:

upower -i $(upower -e | grep BAT)

on two separate occassions in the same session with the power cable plugged in without interruption showed my battery level dropping… while plugged in…

As a sanity check against tlp.service:

sudo tlp-stat -b

provided (not available)s for both charge_control_(start|end)_threshold properties.

Throughout all of the above, the external side LEDs behaved (almost) as expected: a cool white when full, a green when charging. The exception is that while ‘plugged in’ and failing to charge the battery, the side-LED stayed on green (it is unclear to me whether that’s intended or not).

At this point I have a number of concerns:

  1. Is this somehow related to the charging bug in BIOS 3.06? (different symptoms, same underlying problem?)
  2. Is this some kind of rapid degradation that occurred to my USB-C port? Will my other ports ‘die’ the same way if I use them instead?
  3. And of course: what the heck is causing this behavior?

Addenda/Errata
No peripherals were attached for any experiment above.

I have seen similar issues with mine. Mine usually stops at 99% though.

I posted about it here: Fedora 35 - Not Charging 99%.
But didn’t receive any responses.

But wanted to say you aren’t alone. :slight_smile:

It may just be the battery.

@nomb85 Huh, interesting. Your upower output reports a pending-charge, mine outright reported discharging while plugged in. Did you check if your battery degraded and the OS missed recalibrating (I haven’t looked up what pending-charge means here)?

@Josh_Cook If it were I’d expect the different USB-C ports to all react the same way; that didn’t happen though. Does the battery have independent connections to those ports?

Anyway, I’m currently discharging my laptop to a much lower charge level for a test.

I’m considering recording a loop script that outputs battery level, CPU load, temperature, and charge state while plugged in starting from <50% battery (and vaguely considering looping a sleep 20; <intensive-process-here-for-ten-seconds> in parallel to that). If anyone’s got any more suggestions of things to record, please tell me.

I’ll also, I guess, open up the laptop and do a visual examination of the USB-C port itself. Apparently in early batches the EMI shield could get misplaced and cause connection issues (though I’d expect my entire board to fry if the USB-PD currents touched other components??).

EDIT:
So Framework got back to me and notified me that Arch is unsupported and that I should check with Ubuntu 21.04.3+ [sic] or Fedora 35 (fair enough).

Honestly I do not know much about how Linux handles batteries. I just know sometimes it worked correctly like right now, and I can unplug it and plug it back in and it will be incorrect. Do it again and it may be correct again. It’s very inconsistent

That’s disappointing. Although I had just as many issues in those too.

1 Like