power: reset: gpio-poweroff: add ability to specific active

A patch from »power: reset: gpio-poweroff: add ability to specific active« in state Mainline for linux-kernel

From: Heiko Stuebner <heiko.stuebner@...> Date: Sat, 10 Nov 2018 20:16:59 +0100

Commit-Message

Similar to gpio-reset allow to specify active and inactive delays while keeping the 100ms defaults that were used previously all the time. The dt-properties are named the same as in gpio-reset but get an "-ms" suffix as properties should contain such a suffix specifying its unit. Signed-off-by: Heiko Stuebner <heiko.stuebner@...>

Patch-Comment

.../devicetree/bindings/power/reset/gpio-poweroff.txt | 2 ++ drivers/power/reset/gpio-poweroff.c | 10 ++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-)

Statistics

  • 10 lines added
  • 2 lines removed

Changes

------- Documentation/devicetree/bindings/power/reset/gpio-poweroff.txt --------
index 6d8980c18c34..3e56c1b34a4c 100644
@@ -27,6 +27,8 @@ Optional properties:
it to an output when the power-off handler is called. If this optional
property is not specified, the GPIO is initialized as an output in its
inactive state.
+- active-delay-ms: Delay (default 100) to wait after driving gpio active
+- inactive-delay-ms: Delay (default 100) to wait after driving gpio inactive
- timeout-ms: Time to wait before asserting a WARN_ON(1). If nothing is
specified, 3000 ms is used.
--------------------- drivers/power/reset/gpio-poweroff.c ----------------------
index 38206c39b3bf..52525b6c18db 100644
@@ -26,6 +26,8 @@
*/
static struct gpio_desc *reset_gpio;
static u32 timeout = DEFAULT_TIMEOUT_MS;
+static u32 active_delay = 100;
+static u32 inactive_delay = 100;
static void gpio_poweroff_do_poweroff(void)
{
@@ -33,10 +35,11 @@ static void gpio_poweroff_do_poweroff(void)
/* drive it active, also inactive->active edge */
gpiod_direction_output(reset_gpio, 1);
- mdelay(100);
+ mdelay(active_delay);
+
/* drive inactive, also active->inactive edge */
gpiod_set_value_cansleep(reset_gpio, 0);
- mdelay(100);
+ mdelay(inactive_delay);
/* drive it active, also inactive->active edge */
gpiod_set_value_cansleep(reset_gpio, 1);
@@ -66,6 +69,9 @@ static int gpio_poweroff_probe(struct platform_device *pdev)
else
flags = GPIOD_OUT_LOW;
+ device_property_read_u32(&pdev->dev, "active-delay-ms", &active_delay);
+ device_property_read_u32(&pdev->dev, "inactive-delay-ms",
+ &inactive_delay);
device_property_read_u32(&pdev->dev, "timeout-ms", &timeout);
reset_gpio = devm_gpiod_get(&pdev->dev, NULL, flags);
 
 

Recent Patches

About Us

Sed lacus. Donec lectus. Nullam pretium nibh ut turpis. Nam bibendum. In nulla tortor, elementum vel, tempor at, varius non, purus. Mauris vitae nisl nec metus placerat consectetuer.

Read More...