diff options
Diffstat (limited to 'drivers/power/reset/gpio-poweroff.c')
| -rw-r--r-- | drivers/power/reset/gpio-poweroff.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/power/reset/gpio-poweroff.c b/drivers/power/reset/gpio-poweroff.c index 3eaae352ffb9..8df622d4d681 100644 --- a/drivers/power/reset/gpio-poweroff.c +++ b/drivers/power/reset/gpio-poweroff.c @@ -61,6 +61,7 @@ static int gpio_poweroff_probe(struct platform_device *pdev) bool input = false; enum gpiod_flags flags; int priority = SYS_OFF_PRIO_DEFAULT; + bool export = false; int ret; gpio_poweroff = devm_kzalloc(&pdev->dev, sizeof(*gpio_poweroff), GFP_KERNEL); @@ -92,10 +93,18 @@ static int gpio_poweroff_probe(struct platform_device *pdev) if (IS_ERR(gpio_poweroff->reset_gpio)) return PTR_ERR(gpio_poweroff->reset_gpio); + export = device_property_read_bool(&pdev->dev, "export"); + if (export) { + gpiod_export(gpio_poweroff->reset_gpio, true); + gpiod_export_link(&pdev->dev, "poweroff-gpio", gpio_poweroff->reset_gpio); + } + ret = devm_register_sys_off_handler(&pdev->dev, SYS_OFF_MODE_POWER_OFF, priority, gpio_poweroff_do_poweroff, gpio_poweroff); - if (ret) + if (ret) { + gpiod_unexport(gpio_poweroff->reset_gpio); return dev_err_probe(&pdev->dev, ret, "Cannot register poweroff handler\n"); + } return 0; } |
