linux-sh.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Stephen Boyd <sboyd@codeaurora.org>
Cc: LKML <linux-kernel@vger.kernel.org>, 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: [Update] Re: [PATCH 10/10] ARM: Use struct syscore_ops instead of sysdevs for PM in timer and leds
Date: Mon, 14 Mar 2011 19:54:57 +0000	[thread overview]
Message-ID: <201103142054.57999.rjw@sisk.pl> (raw)
In-Reply-To: <4D7DDA9C.9020700@codeaurora.org>

On Monday, March 14, 2011, Stephen Boyd wrote:
> On 3/13/2011 6:04 AM, Rafael J. Wysocki wrote:
> >   #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();
> >
> 
> Shouldn't this be system_timer->suspend() ?

Indeed, thanks a lot!

I must have forgotten to test it with CONFIG_GENERIC_CLOCKEVENTS unset.

Updated patch follows.

---
From: Rafael J. Wysocki <rjw@sisk.pl>
Subject: ARM: Use struct syscore_ops instead of sysdevs for PM in timer and leds

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           |   35 ++++++++++++-----------------------
 3 files changed, 28 insertions(+), 36 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)
-		timer->suspend();
+	if (system_timer->suspend)
+		system_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;
 }
 

      reply	other threads:[~2011-03-14 19:54 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <201103100131.58206.rjw@sisk.pl>
     [not found] ` <201103122212.40828.rjw@sisk.pl>
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             ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev Kay Sievers
2011-03-22 20:30               ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev class and sysdev Rafael J. Wysocki
2011-03-22 20:39                 ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev Kay Sievers
2011-03-22 21:00                   ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev class and sysdev Rafael J. Wysocki
2011-03-22 21:12                     ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev Kay Sievers
2011-03-22 21:49                       ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev class and sysdev Paul Mundt
2011-03-22 22:00                         ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev Kay Sievers
2011-03-22 22:23                           ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev class and sysdev Rafael J. Wysocki
2011-03-22 22:44                             ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev Kay Sievers
2011-03-22 23:32                               ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev class and sysdev Rafael J. Wysocki
2011-03-22 23:46                                 ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev Kay Sievers
2011-03-22 23:50                                   ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev class and sysdev Rafael J. Wysocki
2011-03-23  9:45                               ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev Russell King - ARM Linux
2011-03-22 22:23                           ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev class and sysdev Paul Mundt
2011-03-23 11:12                             ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev Mark Brown
2011-03-23 11:28                               ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev class and sysdev Paul Mundt
2011-03-22 22:05                       ` Rafael J. Wysocki
2011-03-22 22:20                         ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev Kay Sievers
2011-03-22 22:42                           ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev class and sysdev Rafael J. Wysocki
2011-03-22 22:56                             ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev Kay Sievers
2011-03-22 23:05                         ` Kay Sievers
2011-03-22 23:47                           ` [PATCH 9/10] sh: Use struct syscore_ops instead of sysdev class and sysdev 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     ` [PATCH 10/10] ARM: Use struct syscore_ops instead of sysdevs for PM in timer and leds Rafael J. Wysocki
2011-03-14  9:06       ` [PATCH 10/10] ARM: Use struct syscore_ops instead of sysdevs Stephen Boyd
2011-03-14 19:54         ` Rafael J. Wysocki [this message]

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=201103142054.57999.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 \
    --cc=sboyd@codeaurora.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;
as well as URLs for NNTP newsgroup(s).