public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
From: David Brownell <david-b@pacbell.net>
To: Linux-pm mailing list <linux-pm@lists.osdl.org>
Cc: Linus Torvalds <torvalds@osdl.org>
Subject: [patch 2.6.18-rc2-mm 2/2] PM: /sys/devices/.../power/state updates
Date: Wed, 19 Jul 2006 13:40:13 -0700	[thread overview]
Message-ID: <200607191340.14371.david-b@pacbell.net> (raw)

[-- Attachment #1: Type: text/plain, Size: 518 bytes --]

Two changes here:  (a) make writes to these files fail on devices that
may need the new operations in Linus' patch; (b) update in-source docs
to match current behavior, including that change.

I hope nobody has issues with (a), but I can't see a good reason to
do more than reject such writes since the notions behind that file
are so broken.

- Dave

p.s. Greg, these two should IMO merge into your tree along with
    Linus' patches, in addition to

   http://lists.osdl.org/pipermail/linux-pm/2006-July/002968.html

[-- Attachment #2: linus-tweak2.patch --]
[-- Type: text/x-diff, Size: 2862 bytes --]

Two updates to the /sys/devices/.../power/state code:

(a) Changes write path code so that it returns errors for devices using the
    new not-callable-here suspend_prepare(), suspend_late(), or resume_early()
    methods.

(a) Corrects some of the documentation about what's legal for writing to
    /sys/devices/.../power/state files to match the current code (including
    the minor changes for those new methods) below that documentation.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>

Index: linux/drivers/base/power/sysfs.c
===================================================================
--- linux.orig/drivers/base/power/sysfs.c	2006-07-18 11:00:35.000000000 -0700
+++ linux/drivers/base/power/sysfs.c	2006-07-18 11:13:56.000000000 -0700
@@ -11,18 +11,23 @@
  *	state - Control current power state of device
  *
  *	show() returns the current power state of the device. '0' indicates
- *	the device is on. Other values (1-3) indicate the device is in a low
+ *	the device is on. Other values (2) indicate the device is in some low
  *	power state.
  *
- *	store() sets the current power state, which is an integer value
- *	between 0-3. If the device is on ('0'), and the value written is
- *	greater than 0, then the device is placed directly into the low-power
- *	state (via its driver's ->suspend() method).
- *	If the device is currently in a low-power state, and the value is 0,
- *	the device is powered back on (via the ->resume() method).
- *	If the device is in a low-power state, and a different low-power state
- *	is requested, the device is first resumed, then suspended into the new
- *	low-power state.
+ *	store() sets the current power state, which is an integer valued
+ *	0, 2, or 3.  Devices with bus.suspend_prepare(), bus.suspend_late(),
+ *	or bus.resume_early() methods fail this operation; those methods
+ *	won't be called.  Otherwise,
+ *
+ *	- If the recorded dev->power.power_state.event matches the
+ *	  target value (PM_EVENT_ON or PM_EVENT_SUSPEND), nothing is done.
+ *	- If the recorded event code is nonzero, the device is reactivated
+ *	  by calling bus.resume() and/or class.resume().
+ *	- If the target value is nonzero, the device is suspended by
+ *	  calling class.suspend() and/or bus.suspend() with event code
+ *	  PM_EVENT_SUSPEND.
+ *
+ *	This mechanism is DEPRECATED and should only be used for testing.
  */
 
 static ssize_t state_show(struct device * dev, struct device_attribute *attr, char * buf)
@@ -38,6 +43,12 @@
 	pm_message_t state;
 	int error = -EINVAL;
 
+	/* disallow incomplete suspend sequences */
+	if (dev->bus && (dev->bus->suspend_prepare
+			|| dev->bus->suspend_late
+			|| dev->bus->resume_early))
+		return error;
+
 	state.event = PM_EVENT_SUSPEND;
 	/* Older apps expected to write "3" here - confused with PCI D3 */
 	if ((n == 1) && !strcmp(buf, "3"))

[-- Attachment #3: Type: text/plain, Size: 0 bytes --]



             reply	other threads:[~2006-07-19 20:40 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-07-19 20:40 David Brownell [this message]
2006-08-16 11:58 ` [patch 2.6.18-rc2-mm 2/2] PM: /sys/devices/.../power/state updates Pavel Machek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200607191340.14371.david-b@pacbell.net \
    --to=david-b@pacbell.net \
    --cc=linux-pm@lists.osdl.org \
    --cc=torvalds@osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox