2008-02-21 11:33:38

by Kristoffer Ericson

[permalink] [raw]
Subject: Apm_emulation and proper suspend

Greetings,

I'm reworking a couple of apm drivers and for whatever reason it doesn't seem to update my /proc/apm_bios. I was under the impression that it should do that when apm_bios was catted? Currently I have a value that never change. I export my get_power_status.. function properly but doesn't seem to touch it. I noticed that Richard had the extern int (void..apm_get_power) (...) declare an extra time (once in apm-emulation.h and another inside sharpsl.c), is that needed?

Also, is apm the "brains" behind the suspend/resume interactions? By that I mean, should suspend be initiated through apm functions
in order to be proper? I've tried to find examples but the best source of suspend related code is Richards code on sharp machines.

I've understod the proper way to suspend going from apm_request_suspend -> all devices suspend -> ready -> arch specific code -> off.

Best wishes
Kristoffer


2008-02-21 11:59:58

by Richard Purdie

[permalink] [raw]
Subject: Re: Apm_emulation and proper suspend

On Thu, 2008-02-21 at 12:33 +0100, Kristoffer Ericson wrote:
> I'm reworking a couple of apm drivers and for whatever reason it
> doesn't seem to update my /proc/apm_bios. I was under the impression
> that it should do that when apm_bios was catted? Currently I have a
> value that never change. I export my get_power_status.. function
> properly but doesn't seem to touch it. I noticed that Richard had the
> extern int (void..apm_get_power) (...) declare an extra time (once in
> apm-emulation.h and another inside sharpsl.c), is that needed?

It should be removed from sharpsl.c in that case. The code was written
when the apm emulation code was arm specific and looked rather
different.

> Also, is apm the "brains" behind the suspend/resume interactions? By
> that I mean, should suspend be initiated through apm functions
> in order to be proper? I've tried to find examples but the best source
> of suspend related code is Richards code on sharp machines.

APM means you can can notify userspace of the suspend/resume events and
have some kind of interaction there through apmd. It gives a mechanism
where both userspace and kernel space can queue suspend requests and
where userspace can veto a voluntary suspend.

You can also suspend the system through "echo mem > /sys/power/state" in
userspace or calling pm_suspend() in kernel space but this doesn't give
anything else the opportunity to know about the event which is why we
still have apm.

Cheers,

Richard