linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Greg KH <gregkh@suse.de>, Kay Sievers <kay.sievers@suse.de>,
	Linux PM mailing list <linux-pm@lists.linux-foundation.org>,
	Russell King <linux@arm.linux.org.uk>,
	Magnus Damm <magnus.damm@gmail.com>,
	linux-sh@vger.kernel.org, Paul Mundt <lethal@linux-sh.org>
Subject: [PATCH 10/10] ARM: Use struct syscore_ops instead of sysdevs for PM in timer and leds
Date: Sun, 13 Mar 2011 14:04:33 +0100	[thread overview]
Message-ID: <201103131404.33311.rjw@sisk.pl> (raw)
In-Reply-To: <201103131402.48129.rjw@sisk.pl>

From: Rafael J. Wysocki <rjw@sisk.pl>

Convert arch/arm/kernel/time.c and arch/arm/kernel/leds.c to using
struct syscore_ops for power management instead of sysdev classes
and sysdevs.

This simplifies the code in arch/arm/kernel/time.c quite a bit and is
necessary for removing sysdevs from the kernel entirely in future.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
---
 arch/arm/include/asm/mach/time.h |    1 -
 arch/arm/kernel/leds.c           |   28 ++++++++++++++++------------
 arch/arm/kernel/time.c           |   33 +++++++++++----------------------
 3 files changed, 27 insertions(+), 35 deletions(-)

Index: linux-2.6/arch/arm/kernel/time.c
===================================================================
--- linux-2.6.orig/arch/arm/kernel/time.c
+++ linux-2.6/arch/arm/kernel/time.c
@@ -21,7 +21,7 @@
 #include <linux/timex.h>
 #include <linux/errno.h>
 #include <linux/profile.h>
-#include <linux/sysdev.h>
+#include <linux/syscore_ops.h>
 #include <linux/timer.h>
 #include <linux/irq.h>
 
@@ -117,48 +117,37 @@ void timer_tick(void)
 #endif
 
 #if defined(CONFIG_PM) && !defined(CONFIG_GENERIC_CLOCKEVENTS)
-static int timer_suspend(struct sys_device *dev, pm_message_t state)
+static int timer_suspend(void)
 {
-	struct sys_timer *timer = container_of(dev, struct sys_timer, dev);
-
-	if (timer->suspend != NULL)
+	if (system_timer->suspend)
 		timer->suspend();
 
 	return 0;
 }
 
-static int timer_resume(struct sys_device *dev)
+static void timer_resume(void)
 {
-	struct sys_timer *timer = container_of(dev, struct sys_timer, dev);
-
-	if (timer->resume != NULL)
-		timer->resume();
-
-	return 0;
+	if (system_timer->resume)
+		system_timer->resume();
 }
 #else
 #define timer_suspend NULL
 #define timer_resume NULL
 #endif
 
-static struct sysdev_class timer_sysclass = {
-	.name		= "timer",
+static struct syscore_ops timer_syscore_ops = {
 	.suspend	= timer_suspend,
 	.resume		= timer_resume,
 };
 
-static int __init timer_init_sysfs(void)
+static int __init timer_init_syscore_ops(void)
 {
-	int ret = sysdev_class_register(&timer_sysclass);
-	if (ret == 0) {
-		system_timer->dev.cls = &timer_sysclass;
-		ret = sysdev_register(&system_timer->dev);
-	}
+	register_syscore_ops(&timer_syscore_ops);
 
-	return ret;
+	return 0;
 }
 
-device_initcall(timer_init_sysfs);
+device_initcall(timer_init_syscore_ops);
 
 void __init time_init(void)
 {
Index: linux-2.6/arch/arm/include/asm/mach/time.h
===================================================================
--- linux-2.6.orig/arch/arm/include/asm/mach/time.h
+++ linux-2.6/arch/arm/include/asm/mach/time.h
@@ -34,7 +34,6 @@
  *   timer interrupt which may be pending.
  */
 struct sys_timer {
-	struct sys_device	dev;
 	void			(*init)(void);
 	void			(*suspend)(void);
 	void			(*resume)(void);
Index: linux-2.6/arch/arm/kernel/leds.c
===================================================================
--- linux-2.6.orig/arch/arm/kernel/leds.c
+++ linux-2.6/arch/arm/kernel/leds.c
@@ -10,6 +10,7 @@
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/sysdev.h>
+#include <linux/syscore_ops.h>
 
 #include <asm/leds.h>
 
@@ -69,36 +70,37 @@ static ssize_t leds_store(struct sys_dev
 
 static SYSDEV_ATTR(event, 0200, NULL, leds_store);
 
-static int leds_suspend(struct sys_device *dev, pm_message_t state)
+static struct sysdev_class leds_sysclass = {
+	.name		= "leds",
+};
+
+static struct sys_device leds_device = {
+	.id		= 0,
+	.cls		= &leds_sysclass,
+};
+
+static int leds_suspend(void)
 {
 	leds_event(led_stop);
 	return 0;
 }
 
-static int leds_resume(struct sys_device *dev)
+static void leds_resume(void)
 {
 	leds_event(led_start);
-	return 0;
 }
 
-static int leds_shutdown(struct sys_device *dev)
+static void leds_shutdown(void)
 {
 	leds_event(led_halted);
-	return 0;
 }
 
-static struct sysdev_class leds_sysclass = {
-	.name		= "leds",
+static struct syscore_ops leds_syscore_ops = {
 	.shutdown	= leds_shutdown,
 	.suspend	= leds_suspend,
 	.resume		= leds_resume,
 };
 
-static struct sys_device leds_device = {
-	.id		= 0,
-	.cls		= &leds_sysclass,
-};
-
 static int __init leds_init(void)
 {
 	int ret;
@@ -107,6 +109,8 @@ static int __init leds_init(void)
 		ret = sysdev_register(&leds_device);
 	if (ret == 0)
 		ret = sysdev_create_file(&leds_device, &attr_event);
+	if (ret == 0)
+		register_syscore_ops(&leds_syscore_ops);
 	return ret;
 }
 


  parent reply	other threads:[~2011-03-13 13:04 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-10  0:31 [RFC][PATCH 0/2] Allow subsystems to avoid using sysdevs for defining "core" PM callbacks Rafael J. Wysocki
2011-03-10  0:33 ` [RFC][PATCH 1/2] Introduce struct syscore_ops and related functionality Rafael J. Wysocki
2011-03-10  3:33   ` [linux-pm] " Alan Stern
2011-03-10 10:42     ` Rafael J. Wysocki
2011-03-10 11:30     ` [RFC][Update][PATCH " Rafael J. Wysocki
2011-03-11 17:11       ` Greg KH
2011-03-11 20:13         ` Rafael J. Wysocki
2011-03-11 20:16           ` Greg KH
2011-03-11 20:33             ` Rafael J. Wysocki
2011-03-10  0:34 ` [RFC][PATCH 2/2] Convert several sysdev users to using struct syscore_ops Rafael J. Wysocki
2011-03-11 17:12   ` Greg KH
2011-03-11 20:29     ` Rafael J. Wysocki
2011-03-11 20:33       ` Greg KH
2011-03-11 20:45         ` Rafael J. Wysocki
2011-03-10 13:05 ` [RFC][PATCH 0/2] Allow subsystems to avoid using sysdevs for defining "core" PM callbacks Kay Sievers
2011-03-10 19:04   ` Rafael J. Wysocki
2011-03-12 21:12 ` [PATCH 0/8] " Rafael J. Wysocki
2011-03-12 21:13   ` [PATCH 1/8] PM / Core: Introcude struct syscore_ops Rafael J. Wysocki
2011-03-12 21:15   ` [PATCH 2/8] x86: Use syscore_ops instead of sysdev classes and sysdevs Rafael J. Wysocki
2011-03-13 14:23     ` Thomas Gleixner
2011-03-13 15:07       ` Rafael J. Wysocki
2011-03-12 21:16   ` [PATCH 3/8] ACPI: Use syscore_ops instead of sysdev class and sysdev Rafael J. Wysocki
2011-03-18 21:38     ` Len Brown
2011-03-12 21:17   ` [PATCH 4/8] timekeeping: " Rafael J. Wysocki
2011-03-13 13:56     ` Thomas Gleixner
2011-03-13 15:08       ` Rafael J. Wysocki
2011-03-12 21:18   ` [PATCH 5/8] PCI / Intel IOMMU: " Rafael J. Wysocki
2011-06-02 17:30     ` Tony Luck
2011-06-06 17:57       ` Rafael J. Wysocki
2011-06-06 17:58         ` Luck, Tony
2011-03-12 21:18   ` [PATCH 6/8] KVM: " Rafael J. Wysocki
2011-03-12 21:20   ` [PATCH 7/8] cpufreq: Use syscore_ops for boot CPU suspend/resume Rafael J. Wysocki
2011-03-15 21:43     ` [Update, v2] " Rafael J. Wysocki
2011-03-12 21:21   ` [PATCH 8/8] Introduce ARCH_NO_SYSDEV_OPS config option Rafael J. Wysocki
2011-03-13 13:55     ` Thomas Gleixner
2011-03-13 15:30       ` [Update] " Rafael J. Wysocki
2011-03-13 13:02   ` [PATCH 9-10/10] Allow subsystems to avoid using sysdevs for defining "core" PM callbacks Rafael J. Wysocki
2011-03-13 13:03     ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev class and sysdev R. J. Wysocki
2011-03-17  8:20       ` Paul Mundt
2011-03-19  0:47         ` Rafael J. Wysocki
2011-03-22 14:04           ` Paul Mundt
2011-03-22 14:19             ` Kay Sievers
2011-03-22 20:30               ` Rafael J. Wysocki
2011-03-22 20:39                 ` Kay Sievers
2011-03-22 21:00                   ` Rafael J. Wysocki
2011-03-22 21:12                     ` Kay Sievers
2011-03-22 21:49                       ` Paul Mundt
2011-03-22 22:00                         ` Kay Sievers
2011-03-22 22:23                           ` Rafael J. Wysocki
2011-03-22 22:44                             ` Kay Sievers
2011-03-22 23:32                               ` Rafael J. Wysocki
2011-03-22 23:46                                 ` Kay Sievers
2011-03-22 23:50                                   ` Rafael J. Wysocki
2011-03-23  9:45                               ` Russell King - ARM Linux
2011-03-22 22:23                           ` Paul Mundt
2011-03-23 11:12                             ` Mark Brown
2011-03-23 11:28                               ` Paul Mundt
2011-03-22 22:05                       ` Rafael J. Wysocki
2011-03-22 22:20                         ` Kay Sievers
2011-03-22 22:42                           ` Rafael J. Wysocki
2011-03-22 22:56                             ` Kay Sievers
2011-03-22 23:05                         ` Kay Sievers
2011-03-22 23:47                           ` Rafael J. Wysocki
2011-03-22 20:19             ` Rafael J. Wysocki
2011-03-23  9:59               ` Paul Mundt
2011-03-23 20:39                 ` Rafael J. Wysocki
2011-03-13 13:04     ` Rafael J. Wysocki [this message]
2011-03-14  9:06       ` [PATCH 10/10] ARM: Use struct syscore_ops instead of sysdevs for PM in timer and leds Stephen Boyd
2011-03-14 19:54         ` [Update] " Rafael J. Wysocki
2011-03-21 23:31   ` [PATCH 0/6] Do not use sysdevs for implementing "core" PM operations on x86 Rafael J. Wysocki
2011-03-21 23:34     ` [PATCH 1/6] x86: Use syscore_ops instead of sysdev classes and sysdevs Rafael J. Wysocki
2011-03-21 23:35     ` [PATCH 2/6] timekeeping: Use syscore_ops instead of sysdev class and sysdev Rafael J. Wysocki
2011-03-21 23:36     ` [PATCH 3/6] PCI / Intel IOMMU: " Rafael J. Wysocki
2011-03-22 10:57       ` Joerg Roedel
2011-03-22 22:07         ` Rafael J. Wysocki
2011-03-23  7:48           ` Roedel, Joerg
2011-03-21 23:37     ` [PATCH 4/6] KVM: " Rafael J. Wysocki
2011-03-22  9:18       ` Avi Kivity
2011-03-21 23:38     ` [PATCH 5/6] cpufreq: Use syscore_ops for boot CPU suspend/resume (v2) Rafael J. Wysocki
2011-03-21 23:38     ` [PATCH 6/6] Introduce ARCH_NO_SYSDEV_OPS config option (v2) Rafael J. Wysocki
2011-03-22 10:32     ` [PATCH 0/6] Do not use sysdevs for implementing "core" PM operations on x86 Ingo Molnar
2011-03-22 20:33       ` Rafael J. Wysocki
2011-03-25 22:51         ` [GIT PULL] More power management updates for 2.6.39 Rafael J. Wysocki

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=201103131404.33311.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=gregkh@suse.de \
    --cc=kay.sievers@suse.de \
    --cc=lethal@linux-sh.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=linux-sh@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=magnus.damm@gmail.com \
    /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;
as well as URLs for NNTP newsgroup(s).