All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] power: poweroff: gpio: convert to use descriptors
@ 2014-07-07 10:34 Linus Walleij
  2014-07-08  2:29 ` Alexandre Courbot
  2014-07-16 18:43 ` Sebastian Reichel
  0 siblings, 2 replies; 3+ messages in thread
From: Linus Walleij @ 2014-07-07 10:34 UTC (permalink / raw)
  To: Dmitry Eremin-Solenikov, linux-kernel
  Cc: David Woodhouse, Linus Walleij, Alexandre Courbot

This switches the GPIO poweroff driver to use GPIO descriptors
rather than numeral GPIOs. We get rid of the specific inversion
handling as GPIO descriptors know if they are active low or
high and can assert the line properly, so we do not need to
check the flag OF_GPIO_ACTIVE_LOW returned from the old call
of_get_gpio_flags() anymore.

Also convert to use managed resources and use dev_* message
printing while we're at it.

Cc: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
ChangeLog v1->v2:
- Handled errors from devm_gpiod_get() properly with IS_ERR()
  and friends (Alexandre's review comment).
---
 drivers/power/reset/gpio-poweroff.c | 52 ++++++++++++++-----------------------
 1 file changed, 19 insertions(+), 33 deletions(-)

diff --git a/drivers/power/reset/gpio-poweroff.c b/drivers/power/reset/gpio-poweroff.c
index e290d48ddd99..ce849bc9b269 100644
--- a/drivers/power/reset/gpio-poweroff.c
+++ b/drivers/power/reset/gpio-poweroff.c
@@ -15,31 +15,29 @@
 #include <linux/init.h>
 #include <linux/delay.h>
 #include <linux/platform_device.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/of_platform.h>
-#include <linux/of_gpio.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 int gpio_num = -1;
-static int gpio_active_low;
+static struct gpio_desc *reset_gpio;
 
 static void gpio_poweroff_do_poweroff(void)
 {
-	BUG_ON(!gpio_is_valid(gpio_num));
+	BUG_ON(!reset_gpio);
 
 	/* drive it active, also inactive->active edge */
-	gpio_direction_output(gpio_num, !gpio_active_low);
+	gpiod_direction_output(reset_gpio, 1);
 	mdelay(100);
 	/* drive inactive, also active->inactive edge */
-	gpio_set_value(gpio_num, gpio_active_low);
+	gpiod_set_value(reset_gpio, 0);
 	mdelay(100);
 
 	/* drive it active, also inactive->active edge */
-	gpio_set_value(gpio_num, !gpio_active_low);
+	gpiod_set_value(reset_gpio, 1);
 
 	/* give it some time */
 	mdelay(3000);
@@ -49,54 +47,42 @@ static void gpio_poweroff_do_poweroff(void)
 
 static int gpio_poweroff_probe(struct platform_device *pdev)
 {
-	enum of_gpio_flags flags;
 	bool input = false;
-	int ret;
 
 	/* If a pm_power_off function has already been added, leave it alone */
 	if (pm_power_off != NULL) {
-		pr_err("%s: pm_power_off function already registered",
+		dev_err(&pdev->dev,
+			"%s: pm_power_off function already registered",
 		       __func__);
 		return -EBUSY;
 	}
 
-	gpio_num = of_get_gpio_flags(pdev->dev.of_node, 0, &flags);
-	if (!gpio_is_valid(gpio_num))
-		return gpio_num;
-
-	gpio_active_low = flags & OF_GPIO_ACTIVE_LOW;
+	reset_gpio = devm_gpiod_get(&pdev->dev, NULL);
+	if (IS_ERR(reset_gpio))
+		return PTR_ERR(reset_gpio);
 
 	input = of_property_read_bool(pdev->dev.of_node, "input");
 
-	ret = gpio_request(gpio_num, "poweroff-gpio");
-	if (ret) {
-		pr_err("%s: Could not get GPIO %d", __func__, gpio_num);
-		return ret;
-	}
 	if (input) {
-		if (gpio_direction_input(gpio_num)) {
-			pr_err("Could not set direction of GPIO %d to input",
-			       gpio_num);
-			goto err;
+		if (gpiod_direction_input(reset_gpio)) {
+			dev_err(&pdev->dev,
+				"Could not set direction of reset GPIO to input\n");
+			return -ENODEV;
 		}
 	} else {
-		if (gpio_direction_output(gpio_num, gpio_active_low)) {
-			pr_err("Could not set direction of GPIO %d", gpio_num);
-			goto err;
+		if (gpiod_direction_output(reset_gpio, 0)) {
+			dev_err(&pdev->dev,
+				"Could not set direction of reset GPIO\n");
+			return -ENODEV;
 		}
 	}
 
 	pm_power_off = &gpio_poweroff_do_poweroff;
 	return 0;
-
-err:
-	gpio_free(gpio_num);
-	return -ENODEV;
 }
 
 static int gpio_poweroff_remove(struct platform_device *pdev)
 {
-	gpio_free(gpio_num);
 	if (pm_power_off == &gpio_poweroff_do_poweroff)
 		pm_power_off = NULL;
 
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] power: poweroff: gpio: convert to use descriptors
  2014-07-07 10:34 [PATCH v2] power: poweroff: gpio: convert to use descriptors Linus Walleij
@ 2014-07-08  2:29 ` Alexandre Courbot
  2014-07-16 18:43 ` Sebastian Reichel
  1 sibling, 0 replies; 3+ messages in thread
From: Alexandre Courbot @ 2014-07-08  2:29 UTC (permalink / raw)
  To: Linus Walleij, Dmitry Eremin-Solenikov, linux-kernel; +Cc: David Woodhouse

On 07/07/2014 07:34 PM, Linus Walleij wrote:
> This switches the GPIO poweroff driver to use GPIO descriptors
> rather than numeral GPIOs. We get rid of the specific inversion
> handling as GPIO descriptors know if they are active low or
> high and can assert the line properly, so we do not need to
> check the flag OF_GPIO_ACTIVE_LOW returned from the old call
> of_get_gpio_flags() anymore.
>
> Also convert to use managed resources and use dev_* message
> printing while we're at it.

Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>

 > 1 file changed, 19 insertions(+), 33 deletions(-)

This is what I like with these gpiod conversion patches.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] power: poweroff: gpio: convert to use descriptors
  2014-07-07 10:34 [PATCH v2] power: poweroff: gpio: convert to use descriptors Linus Walleij
  2014-07-08  2:29 ` Alexandre Courbot
@ 2014-07-16 18:43 ` Sebastian Reichel
  1 sibling, 0 replies; 3+ messages in thread
From: Sebastian Reichel @ 2014-07-16 18:43 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Dmitry Eremin-Solenikov, linux-kernel, David Woodhouse,
	Alexandre Courbot

[-- Attachment #1: Type: text/plain, Size: 772 bytes --]

Hi,

On Mon, Jul 07, 2014 at 12:34:32PM +0200, Linus Walleij wrote:
> This switches the GPIO poweroff driver to use GPIO descriptors
> rather than numeral GPIOs. We get rid of the specific inversion
> handling as GPIO descriptors know if they are active low or
> high and can assert the line properly, so we do not need to
> check the flag OF_GPIO_ACTIVE_LOW returned from the old call
> of_get_gpio_flags() anymore.
> 
> Also convert to use managed resources and use dev_* message
> printing while we're at it.

I added this patch to [0], which I use to queue patches until I get
access to battery.git.

[0] https://git.kernel.org/cgit/linux/kernel/git/sre/linux-power-supply.git/commit/?h=dev&id=81324804b10c775fc328dbd417114791aa01d5e1

-- Sebastian

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-07-16 18:43 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-07 10:34 [PATCH v2] power: poweroff: gpio: convert to use descriptors Linus Walleij
2014-07-08  2:29 ` Alexandre Courbot
2014-07-16 18:43 ` Sebastian Reichel

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.