6

Follow-up on spurious wakeups

 2 years ago
source link: https://hoelz.ro/blog/follow-up-on-spurious-wakeups
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Follow-up on spurious wakeups

So, the fix I implemented for my wakeup problem a few weeks ago had an interesting side effect. Normally, when I put my laptop to sleep, it loses about 10% of its charge per day, which seems reasonable. After my fix, however, it started to lose 40% per day - it's not uncommon for me not to touch my laptop for a few days, so that's not great. So here's a follow-up on how I addressed that issue!

The first step was to verify that it was indeed my change that is causing this - I did some tests to measure battery usage while sleeping (just dumping acpi -b to a terminal every few minutes), and it was indeed the case! As a result of the tests, I discovered that the spurious wakeup problem I fixed only happens when the laptop is plugged in - so really, the problem I'm having is this:

  • When the laptop is plugged in, it wakes up and goes back to sleep, unless RP13 is disabled in ACPI wakeups
  • When the laptop is not plugged in, it loses battery fast, unless RP13 is enabled in ACPI wakeups

My simple solution to this new problem is to just check if the laptop is plugged in just before suspending - if it is, disable RP13; otherwise, enable it. Now, if it's plugged in, I shut the lid, and then I unplug it, that risks the battery drain problem - but I figured this would be rare enough that I'm fine with the solution.

I wrote a little script to do this:

#!/bin/bash

if acpi -a | grep -q on-line ; then
    if grep enabled /proc/acpi/wakeup | grep -q RP13 ; then
        echo "plugged in and RP13 found - disabling"
        echo RP13 > /proc/acpi/wakeup
    fi
else
    if ! ( grep enabled /proc/acpi/wakeup | grep -q RP13 ) ; then
        echo "on battery and RP13 not found - enabling"
        echo RP13 > /proc/acpi/wakeup
    fi
fi

...and I adapted the systemd service I wrote to run that script, and also to be pulled in by sleep.target rather than basic.target so that it runs when the laptop goes to sleep.

Published on 2022-01-12


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK