From: Guenter Roeck <linux@roeck-us.net>
To: linux-kernel@vger.kernel.org
Cc: linux-pm@vger.kernel.org, Guenter Roeck <linux@roeck-us.net>,
Sebastian Reichel <sre@kernel.org>,
Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>,
David Woodhouse <dwmw2@infradead.org>
Subject: [PATCH v3 23/47] power/reset: gpio-poweroff: Register with kernel power-off handler
Date: Mon, 27 Oct 2014 08:55:30 -0700 [thread overview]
Message-ID: <1414425354-10359-24-git-send-email-linux@roeck-us.net> (raw)
In-Reply-To: <1414425354-10359-1-git-send-email-linux@roeck-us.net>
Register with kernel power-off handler instead of setting pm_power_off
directly. Register with low priority to reflect that the original code
only sets pm_power_off if it was not already set.
Other changes:
Drop note that there can not be an additional instance of this driver.
The original reason no longer applies, it should be obvious that there
can only be one instance of the driver if static variables are used to
reflect its state, and support for multiple instances can now be added
easily if needed by avoiding static variables.
Do not create an error message if another power-off handler has already
been registered. This is perfectly normal and acceptable.
Drop remove function since it is no longer needed.
Cc: Sebastian Reichel <sre@kernel.org>
Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Acked-by: Andrew Lunn <andrew@lunn.ch>
Acked-by: Sebastian Reichel <sre@kernel.org>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
v3:
- Replace poweroff in all newly introduced variables and in text
with power_off or power-off as appropriate
- Replace POWEROFF_PRIORITY_xxx with POWER_OFF_PRIORITY_xxx
v2;
- Use define to specify poweroff handler priority
- Use devm_register_power_off_handler
- Drop remove function as it is no longer needed
drivers/power/reset/gpio-poweroff.c | 40 ++++++++++++++++---------------------
1 file changed, 17 insertions(+), 23 deletions(-)
diff --git a/drivers/power/reset/gpio-poweroff.c b/drivers/power/reset/gpio-poweroff.c
index ce849bc..814c37b 100644
--- a/drivers/power/reset/gpio-poweroff.c
+++ b/drivers/power/reset/gpio-poweroff.c
@@ -14,18 +14,18 @@
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/delay.h>
+#include <linux/notifier.h>
+#include <linux/pm.h>
#include <linux/platform_device.h>
#include <linux/gpio/consumer.h>
#include <linux/of_platform.h>
#include <linux/module.h>
-/*
- * Hold configuration here, cannot be more than one instance of the driver
- * since pm_power_off itself is global.
- */
static struct gpio_desc *reset_gpio;
-static void gpio_poweroff_do_poweroff(void)
+static int gpio_poweroff_do_poweroff(struct notifier_block *this,
+ unsigned long unused1, void *unused2)
+
{
BUG_ON(!reset_gpio);
@@ -43,19 +43,19 @@ static void gpio_poweroff_do_poweroff(void)
mdelay(3000);
WARN_ON(1);
+
+ return NOTIFY_DONE;
}
+static struct notifier_block gpio_power_off_nb = {
+ .notifier_call = gpio_poweroff_do_poweroff,
+ .priority = POWER_OFF_PRIORITY_LOW,
+};
+
static int gpio_poweroff_probe(struct platform_device *pdev)
{
bool input = false;
-
- /* If a pm_power_off function has already been added, leave it alone */
- if (pm_power_off != NULL) {
- dev_err(&pdev->dev,
- "%s: pm_power_off function already registered",
- __func__);
- return -EBUSY;
- }
+ int err;
reset_gpio = devm_gpiod_get(&pdev->dev, NULL);
if (IS_ERR(reset_gpio))
@@ -77,16 +77,11 @@ static int gpio_poweroff_probe(struct platform_device *pdev)
}
}
- pm_power_off = &gpio_poweroff_do_poweroff;
- return 0;
-}
-
-static int gpio_poweroff_remove(struct platform_device *pdev)
-{
- if (pm_power_off == &gpio_poweroff_do_poweroff)
- pm_power_off = NULL;
+ err = devm_register_power_off_handler(&pdev->dev, &gpio_power_off_nb);
+ if (err)
+ dev_err(&pdev->dev, "Failed to register power-off handler\n");
- return 0;
+ return err;
}
static const struct of_device_id of_gpio_poweroff_match[] = {
@@ -96,7 +91,6 @@ static const struct of_device_id of_gpio_poweroff_match[] = {
static struct platform_driver gpio_poweroff_driver = {
.probe = gpio_poweroff_probe,
- .remove = gpio_poweroff_remove,
.driver = {
.name = "poweroff-gpio",
.owner = THIS_MODULE,
--
1.9.1
next prev parent reply other threads:[~2014-10-27 15:57 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-27 15:55 [PATCH v3 00/47] kernel: Add support for power-off handler call chain Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 01/47] " Guenter Roeck
2014-10-28 17:49 ` Pavel Machek
2014-10-27 15:55 ` [PATCH v3 02/47] memory: emif: Use API function to determine power-off capability Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 03/47] hibernate: Call have_kernel_power_off instead of checking pm_power_off Guenter Roeck
2014-10-28 17:50 ` Pavel Machek
2014-10-27 15:55 ` [PATCH v3 04/47] m68k: Replace mach_power_off with pm_power_off Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 06/47] gpio-poweroff: Drop reference to pm_power_off from devicetree bindings Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 08/47] kernel: Move pm_power_off to common code Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 09/47] mfd: palmas: Register with kernel power-off handler Guenter Roeck
2014-11-03 17:56 ` Lee Jones
2014-11-03 17:59 ` Felipe Balbi
2014-11-03 18:36 ` Guenter Roeck
2014-11-03 18:43 ` Felipe Balbi
2014-11-03 18:58 ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 10/47] mfd: axp20x: " Guenter Roeck
2014-11-03 17:56 ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 11/47] mfd: retu: " Guenter Roeck
2014-11-03 17:56 ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 12/47] mfd: ab8500-sysctrl: " Guenter Roeck
2014-11-03 17:55 ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 13/47] mfd: max8907: " Guenter Roeck
2014-11-03 17:56 ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 14/47] mfd: tps80031: " Guenter Roeck
2014-11-03 17:55 ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 15/47] mfd: dm355evm_msp: " Guenter Roeck
2014-11-03 17:55 ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 16/47] mfd: tps6586x: " Guenter Roeck
2014-11-03 17:54 ` Lee Jones
2014-11-03 17:57 ` Felipe Balbi
2014-10-27 15:55 ` [PATCH v3 17/47] mfd: tps65910: " Guenter Roeck
2014-11-03 17:54 ` Lee Jones
2014-11-03 17:57 ` Felipe Balbi
2014-10-27 15:55 ` [PATCH v3 18/47] mfd: twl4030-power: " Guenter Roeck
2014-11-03 17:54 ` Lee Jones
2014-11-03 17:56 ` Felipe Balbi
2014-10-27 15:55 ` [PATCH v3 19/47] mfd: rk808: Register power-off handler " Guenter Roeck
2014-11-03 17:53 ` Lee Jones
2014-11-03 19:06 ` Guenter Roeck
2014-11-03 22:42 ` Lee Jones
2014-11-03 22:52 ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 20/47] mfd: rn5t618: " Guenter Roeck
2014-11-03 17:54 ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 21/47] ipmi: Register " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 22/47] power/reset: restart-poweroff: " Guenter Roeck
2014-10-27 15:55 ` Guenter Roeck [this message]
2014-10-27 15:55 ` [PATCH v3 24/47] power/reset: as3722-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 25/47] power/reset: qnap-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 26/47] power/reset: msm-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 27/47] power/reset: vexpress-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 28/47] power/reset: at91-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 29/47] power/reset: ltc2952-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 30/47] x86: iris: " Guenter Roeck
2014-11-01 19:41 ` Thomas Gleixner
2014-11-01 21:15 ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 31/47] x86: apm: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 32/47] x86: olpc: Register xo1 power-off handler " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 33/47] staging: nvec: Register " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 34/47] acpi: Register power-off handler " Guenter Roeck
2014-10-28 0:26 ` Rafael J. Wysocki
2014-10-28 2:10 ` Guenter Roeck
2014-10-28 23:10 ` Rafael J. Wysocki
2014-10-29 2:05 ` Guenter Roeck
2014-10-29 15:13 ` Rafael J. Wysocki
2014-10-27 15:55 ` [PATCH v3 35/47] arm: Register " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 36/47] arm64: psci: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 37/47] avr32: atngw100: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 38/47] ia64: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 39/47] m68k: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 40/47] mips: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 41/47] sh: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 42/47] x86: lguest: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 43/47] x86: ce4100: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 44/47] x86: intel-mid: Drop registration of dummy power-off handlers Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 45/47] x86: pmc_atom: Register power-off handler with kernel power-off handler Guenter Roeck
[not found] ` <1414425354-10359-1-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2014-10-27 15:55 ` [PATCH v3 05/47] mfd: as3722: Drop reference to pm_power_off from devicetree bindings Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 07/47] qnap-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 46/47] efi: Register power-off handler with kernel power-off handler Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 47/47] kernel: Remove pm_power_off Guenter Roeck
2014-10-28 17:50 ` Pavel Machek
2014-10-27 16:03 ` [PATCH v3 00/47] kernel: Add support for power-off handler call chain Felipe Balbi
2014-10-27 17:16 ` Guenter Roeck
2014-10-27 17:33 ` Felipe Balbi
2014-10-27 17:43 ` Johan Hovold
2014-11-03 17:59 ` Felipe Balbi
2014-11-03 18:22 ` Guenter Roeck
2014-11-03 18:28 ` Felipe Balbi
2014-11-03 18:49 ` 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=1414425354-10359-24-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=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 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).