All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: Sebastian Reichel <sre@kernel.org>
Cc: linux-pm@vger.kernel.org,
	Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>,
	David Woodhouse <dwmw2@infradead.org>,
	Santosh Shilimkar <santosh.shilimkar@ti.com>,
	linux-kernel@vger.kernel.org, Guenter Roeck <linux@roeck-us.net>
Subject: [PATCH 01/10] power/reset: vexpress: Register with kernel restart handler
Date: Fri, 26 Sep 2014 17:57:09 -0700	[thread overview]
Message-ID: <1411779438-23127-2-git-send-email-linux@roeck-us.net> (raw)
In-Reply-To: <1411779438-23127-1-git-send-email-linux@roeck-us.net>

Use the kernel restart handler instead of setting arm_pm_restart directly.
This allows for more than one restart handler in the system.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
 drivers/power/reset/vexpress-poweroff.c | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/drivers/power/reset/vexpress-poweroff.c b/drivers/power/reset/vexpress-poweroff.c
index 4dc102e2..03959ba 100644
--- a/drivers/power/reset/vexpress-poweroff.c
+++ b/drivers/power/reset/vexpress-poweroff.c
@@ -12,14 +12,14 @@
  */
 
 #include <linux/delay.h>
+#include <linux/notifier.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/platform_device.h>
+#include <linux/reboot.h>
 #include <linux/stat.h>
 #include <linux/vexpress.h>
 
-#include <asm/system_misc.h>
-
 static void vexpress_reset_do(struct device *dev, const char *what)
 {
 	int err = -ENOENT;
@@ -43,11 +43,19 @@ static void vexpress_power_off(void)
 
 static struct device *vexpress_restart_device;
 
-static void vexpress_restart(enum reboot_mode reboot_mode, const char *cmd)
+static int vexpress_restart(struct notifier_block *this, unsigned long mode,
+			     void *cmd)
 {
 	vexpress_reset_do(vexpress_restart_device, "restart");
+
+	return NOTIFY_DONE;
 }
 
+static struct notifier_block vexpress_restart_nb = {
+	.notifier_call = vexpress_restart,
+	.priority = 128,
+};
+
 static ssize_t vexpress_reset_active_show(struct device *dev,
 		struct device_attribute *attr, char *buf)
 {
@@ -86,6 +94,17 @@ static struct of_device_id vexpress_reset_of_match[] = {
 	{}
 };
 
+static void _vexpress_register_restart_handler(struct device *dev)
+{
+	int err;
+
+	vexpress_restart_device = dev;
+	err = register_restart_handler(&vexpress_restart_nb);
+	if (err)
+		dev_err(dev, "cannot register restart handler (err=%d)\n", err);
+	device_create_file(dev, &dev_attr_active);
+}
+
 static int vexpress_reset_probe(struct platform_device *pdev)
 {
 	enum vexpress_reset_func func;
@@ -110,14 +129,10 @@ static int vexpress_reset_probe(struct platform_device *pdev)
 		break;
 	case FUNC_RESET:
 		if (!vexpress_restart_device)
-			vexpress_restart_device = &pdev->dev;
-		arm_pm_restart = vexpress_restart;
-		device_create_file(&pdev->dev, &dev_attr_active);
+			_vexpress_register_restart_handler(&pdev->dev);
 		break;
 	case FUNC_REBOOT:
-		vexpress_restart_device = &pdev->dev;
-		arm_pm_restart = vexpress_restart;
-		device_create_file(&pdev->dev, &dev_attr_active);
+		_vexpress_register_restart_handler(&pdev->dev);
 		break;
 	};
 
-- 
1.9.1


  reply	other threads:[~2014-09-27  0:57 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-27  0:57 [PATCH 00/10] power/reset: Register drivers with restart handler Guenter Roeck
2014-09-27  0:57 ` Guenter Roeck [this message]
2014-09-27  0:57 ` [PATCH 02/10] power/reset: xgene: Return -ENOMEM if out of memory Guenter Roeck
2014-09-27  0:57 ` [PATCH 03/10] power/reset: xgene: Drop devm_kfree Guenter Roeck
2014-09-27  0:57 ` [PATCH 04/10] power/reset: xgene: Use local variable dev instead of pdev->dev Guenter Roeck
2014-09-27  0:57 ` [PATCH 05/10] power/reset: xgene: Use mdelay instead of jiffies based timeout Guenter Roeck
2014-09-27  0:57 ` [PATCH 06/10] power/reset: xgene: Register with kernel restart handler Guenter Roeck
2014-09-27  0:57 ` [PATCH 07/10] power/reset: axxia: " Guenter Roeck
2014-09-29  8:40   ` Anders Berg
2014-09-27  0:57 ` [PATCH 08/10] power/reset: keystone: " Guenter Roeck
2014-09-28 22:57   ` Santosh Shilimkar
2014-09-29 13:53   ` Ivan Khoronzhuk
2014-09-29 13:53     ` Ivan Khoronzhuk
2014-09-29 15:11     ` Guenter Roeck
2014-09-27  0:57 ` [PATCH 09/10] power/reset: hisi: " Guenter Roeck
2014-09-27  0:57 ` [PATCH 10/10] power/reset: brcmstb: " Guenter Roeck

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=1411779438-23127-2-git-send-email-linux@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=dbaryshkov@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=santosh.shilimkar@ti.com \
    --cc=sre@kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.