Commit 76ee875c authored by Heiko Stuebner's avatar Heiko Stuebner Committed by Sebastian Reichel

power: reset: gpio-poweroff: add ability to specific active and inactive delays

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: default avatarHeiko Stuebner <heiko.stuebner@bq.com>
Reviewed-by: default avatarRob Herring <robh@kernel.org>
Reviewed-by: default avatarMoritz Fischer <mdf@kernel.org>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent a53a68ce
...@@ -27,6 +27,8 @@ Optional properties: ...@@ -27,6 +27,8 @@ Optional properties:
it to an output when the power-off handler is called. If this optional 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 property is not specified, the GPIO is initialized as an output in its
inactive state. 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 - timeout-ms: Time to wait before asserting a WARN_ON(1). If nothing is
specified, 3000 ms is used. specified, 3000 ms is used.
......
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
*/ */
static struct gpio_desc *reset_gpio; static struct gpio_desc *reset_gpio;
static u32 timeout = DEFAULT_TIMEOUT_MS; static u32 timeout = DEFAULT_TIMEOUT_MS;
static u32 active_delay = 100;
static u32 inactive_delay = 100;
static void gpio_poweroff_do_poweroff(void) static void gpio_poweroff_do_poweroff(void)
{ {
...@@ -33,10 +35,11 @@ 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 */ /* drive it active, also inactive->active edge */
gpiod_direction_output(reset_gpio, 1); gpiod_direction_output(reset_gpio, 1);
mdelay(100); mdelay(active_delay);
/* drive inactive, also active->inactive edge */ /* drive inactive, also active->inactive edge */
gpiod_set_value_cansleep(reset_gpio, 0); gpiod_set_value_cansleep(reset_gpio, 0);
mdelay(100); mdelay(inactive_delay);
/* drive it active, also inactive->active edge */ /* drive it active, also inactive->active edge */
gpiod_set_value_cansleep(reset_gpio, 1); gpiod_set_value_cansleep(reset_gpio, 1);
...@@ -66,6 +69,9 @@ static int gpio_poweroff_probe(struct platform_device *pdev) ...@@ -66,6 +69,9 @@ static int gpio_poweroff_probe(struct platform_device *pdev)
else else
flags = GPIOD_OUT_LOW; 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); device_property_read_u32(&pdev->dev, "timeout-ms", &timeout);
reset_gpio = devm_gpiod_get(&pdev->dev, NULL, flags); reset_gpio = devm_gpiod_get(&pdev->dev, NULL, flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment