Skip to contentSkip to conversation

Battery change in sleep mode breaks battery support

DISCUSSION Lorenzo Colitti 2 participants 4 messages Feb 9, 2005 – Feb 11, 2005 3 messages not in the archive ACPI

lore
Share & tools
lore
#0 lore raw

Hi,

I am having problems with battery monitoring and sleep mode: if I plug in or unplug the battery while the machine is asleep, when it wakes up the change has not been registered and no further changes are logged.

This means that I suspend the machine while on AC power and wake it up on battery power, there is no way for me to keep track of how much charge is left, which is a problem!

As an example, I started with init=/bin/sh, with no battery and AC plugged in, and did the following:

Quoted 6 lines

sh-3.00# modprobe battery
ACPI: Battery Slot [C138] (battery absent)
ACPI: Battery Slot [C137] (battery absent)
sh-3.00# modprobe ac
ACPI: AC Adapter [C135] (on-line)
sh-3.00# echo 3 > /proc/acpi/sleep

While the machine was asleep, I plugged in the battery and removed AC power, then turned the machine on. The kernel didn't notice that the battery had been plugged in:

Quoted 4 lines

sh-3.00# cat /proc/acpi/battery/C138/info present: no
sh-3.00# cat /proc/acpi/battery/C137/info
present: no
sh-3.00# cat /proc/acpi/ac_adapter/C135/state state: off-line

Unplugging and reinserting the battery and/or reloading the battery module didn't help. :(

The machine is an HP NC6000 on which ACPI mostly works (decompiling and recompiling the DSDT yields only the warning "Unknown reserved name (_WDG)"). I have ACPI debugging enabled in the kernel, but I don't know how to use it.

Any ideas?

Thanks!
Lorenzo

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click

A message that is not in the archive (sent off-list or not yet received): [email protected]

#2 lore raw
Quoted 24 lines · Lorenzo Colitti

Hi,

I am having problems with battery monitoring and sleep mode: if I plug in or unplug the battery while the machine is asleep, when it wakes up the change has not been registered and no further changes are logged.

This means that I suspend the machine while on AC power and wake it up on battery power, there is no way for me to keep track of how much charge is left, which is a problem!

As an example, I started with init=/bin/sh, with no battery and AC plugged in, and did the following:

Quoted 6 lines

sh-3.00# modprobe battery
ACPI: Battery Slot [C138] (battery absent)
ACPI: Battery Slot [C137] (battery absent)
sh-3.00# modprobe ac
ACPI: AC Adapter [C135] (on-line)
sh-3.00# echo 3 > /proc/acpi/sleep

While the machine was asleep, I plugged in the battery and removed AC power, then turned the machine on. The kernel didn't notice that the battery had been plugged in:

Quoted 4 lines

sh-3.00# cat /proc/acpi/battery/C138/info present: no
sh-3.00# cat /proc/acpi/battery/C137/info
present: no
sh-3.00# cat /proc/acpi/ac_adapter/C135/state state: off-line

Quoted 6 lines

Unplugging and reinserting the battery and/or reloading the battery module didn't help. :(

The machine is an HP NC6000 on which ACPI mostly works (decompiling and recompiling the DSDT yields only the warning "Unknown reserved name (_WDG)"). I have ACPI debugging enabled in the kernel, but I don't know how to use it.

Any ideas?

I expect that your _WAK function does not work properly. Does S3 invoke the _WAK function after wake up?

I remember some things like that concerning suspend to disk (no buttons, wrong AC/battery states), that vanished when using platform mode. The main differnce to shutdown mode is (correct me if I am wrong), that the BIOS _WAK function is called and the devices get initialised again.

Thomas

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click

A message that is not in the archive (sent off-list or not yet received): [email protected]

#4 lore raw
Quoted 6 lines · Thomas Renninger
Quoted 4 lines

I am having problems with battery monitoring and sleep mode: if I plug in or unplug the battery while the machine is asleep, when it wakes up the change has not been registered and no further changes are logged. [..]
Any ideas?

I expect that your _WAK function does not work properly. Does S3 invoke the _WAK function after wake up?

I don't know, how do I find out? Do I have to (attempt to) read the decompiled dsdt or can I just use the acpi debugging options?

Cheers,
Lorenzo

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click

A message that is not in the archive (sent off-list or not yet received): [email protected]

#6 lore raw
Quoted 6 lines · Lorenzo Colitti
Quoted 4 lines · Thomas Renninger
Quoted 4 lines

I am having problems with battery monitoring and sleep mode: if I plug in or unplug the battery while the machine is asleep, when it wakes up the change has not been registered and no further changes are logged. [..]
Any ideas?

Quoted 6 lines
Quoted 2 lines

I expect that your _WAK function does not work properly. Does S3 invoke the _WAK function after wake up?

I don't know, how do I find out? Do I have to (attempt to) read the decompiled dsdt or can I just use the acpi debugging options?

Hmm, don't know.
Putting a:
Store ("_WAK invoked", Debug)
into the _WAK function of your DSDT.

But maybe it won't be printed because the kernel logger won't run at this moment?

Hoped that some of the suspend guys comments on this, sorry.

You should disassemble and recompile your dsdt:
cp /proc/acpi/dsdt /tmp
iasl -d /tmp/dsdt
iasl -sa /tmp/dsdt.dsl

maybe you even find an error inside this function.
Send me your DSDT if iasl -sa /tmp/dsdt.dsl throws errors, maybe just adjusting some lines help.

Thomas

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click