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 v6 23/48] power/reset: gpio-poweroff: Register with kernel power-off handler
Date: Sun, 9 Nov 2014 17:42:40 -0800 [thread overview]
Message-ID: <1415583785-6980-24-git-send-email-linux@roeck-us.net> (raw)
In-Reply-To: <1415583785-6980-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>
---
v6:
- This patch: No change.
Global: Replaced priority defines with enum.
v5:
- Rebase to v3.18-rc3
v4:
- Do not use notifiers but internal functions and data structures to manage
the list of power-off handlers. Drop unused parameters from callbacks, and
make the power-off function type void
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 | 36 +++++++++++++-----------------------
1 file changed, 13 insertions(+), 23 deletions(-)
diff --git a/drivers/power/reset/gpio-poweroff.c b/drivers/power/reset/gpio-poweroff.c
index ce849bc..4d480d2 100644
--- a/drivers/power/reset/gpio-poweroff.c
+++ b/drivers/power/reset/gpio-poweroff.c
@@ -14,18 +14,16 @@
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/delay.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 void gpio_poweroff_do_poweroff(struct power_off_handler_block *this)
+
{
BUG_ON(!reset_gpio);
@@ -45,17 +43,15 @@ static void gpio_poweroff_do_poweroff(void)
WARN_ON(1);
}
+static struct power_off_handler_block gpio_power_off_hb = {
+ .handler = 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 +73,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_hb);
+ 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 +87,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-11-10 1:44 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-10 1:42 [PATCH v6 00/48] kernel: Add support for power-off handler call chain Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 01/48] " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 02/48] memory: emif: Use API function to determine power-off capability Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 03/48] hibernate: Call have_kernel_power_off instead of checking pm_power_off Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 04/48] m68k: Replace mach_power_off with pm_power_off Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 05/48] mfd: as3722: Drop reference to pm_power_off from devicetree bindings Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 06/48] gpio-poweroff: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 07/48] qnap-poweroff: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 08/48] kernel: Move pm_power_off to common code Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 09/48] mfd: palmas: Register with kernel power-off handler Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 10/48] mfd: axp20x: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 11/48] mfd: retu: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 12/48] mfd: ab8500-sysctrl: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 13/48] mfd: max8907: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 14/48] mfd: tps80031: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 15/48] mfd: dm355evm_msp: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 16/48] mfd: tps6586x: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 17/48] mfd: tps65910: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 18/48] mfd: twl4030-power: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 19/48] mfd: rk808: Register power-off handler " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 20/48] mfd: rn5t618: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 21/48] ipmi: Register " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 22/48] power/reset: restart-poweroff: " Guenter Roeck
2014-11-10 1:42 ` Guenter Roeck [this message]
2014-11-10 1:42 ` [PATCH v6 24/48] power/reset: as3722-poweroff: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 25/48] power/reset: qnap-poweroff: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 26/48] power/reset: msm-poweroff: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 27/48] power/reset: vexpress-poweroff: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 28/48] power/reset: at91-poweroff: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 29/48] power/reset: ltc2952-poweroff: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 30/48] x86: iris: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 31/48] x86: apm: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 32/48] x86: olpc: Register xo1 power-off handler " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 33/48] staging: nvec: Register " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 34/48] acpi: Register power-off handler " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 35/48] arm: Register " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 36/48] arm64: psci: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 37/48] avr32: atngw100: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 38/48] ia64: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 39/48] m68k: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 40/48] mips: " Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 41/48] powerpc: " Guenter Roeck
2014-11-11 7:42 ` Michael Ellerman
2014-11-11 10:42 ` Guenter Roeck
2014-11-10 1:42 ` [PATCH v6 42/48] sh: " Guenter Roeck
2014-11-10 1:43 ` [PATCH v6 43/48] x86: lguest: " Guenter Roeck
2014-11-10 1:43 ` [PATCH v6 44/48] x86: ce4100: " Guenter Roeck
2014-11-10 1:43 ` [PATCH v6 45/48] x86: intel-mid: Drop registration of dummy power-off handlers Guenter Roeck
2014-11-10 1:43 ` [PATCH v6 46/48] x86: pmc_atom: Register power-off handler with kernel power-off handler Guenter Roeck
2014-11-10 1:43 ` [PATCH v6 47/48] efi: " Guenter Roeck
2014-11-10 1:43 ` [PATCH v6 48/48] kernel: Remove pm_power_off Guenter Roeck
2014-11-10 8:33 ` [PATCH v6 00/48] kernel: Add support for power-off handler call chain Pavel Machek
2014-11-10 14:12 ` Guenter Roeck
2014-11-11 18:20 ` Guenter Roeck
2014-11-11 18:50 ` Pavel Machek
2014-11-11 19:17 ` 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=1415583785-6980-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).