-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
power/reset: Add a new driver implementing 'power off by restarting'
Some devices, Buffalo Linkstation LS-XHL and LS-CHLv2 for example, power-off by restarting to letting u-boot hold the SoC until the user presses a key. Add a generic driver to implement this. It binds a function to pm_power_off, which calls arm_pm_restart. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Tested-by: Michael Walle <michael@walle.cc> Signed-off-by: Anton Vorontsov <anton@enomsg.org>
- Loading branch information
Andrew Lunn
authored and
Anton Vorontsov
committed
Jan 6, 2013
1 parent
e8fc721
commit ffd8f9a
Showing
4 changed files
with
82 additions
and
0 deletions.
There are no files selected for viewing
8 changes: 8 additions & 0 deletions
8
Documentation/devicetree/bindings/power_supply/restart-poweroff.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
* Restart Power Off | ||
|
||
Buffalo Linkstation LS-XHL and LS-CHLv2, and other devices power off | ||
by restarting and letting u-boot keep hold of the machine until the | ||
user presses a button. | ||
|
||
Required Properties: | ||
- compatible: Should be "restart-poweroff" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
obj-$(CONFIG_POWER_RESET_GPIO) += gpio-poweroff.o | ||
obj-$(CONFIG_POWER_RESET_QNAP) += qnap-poweroff.o | ||
obj-$(CONFIG_POWER_RESET_RESTART) += restart-poweroff.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
/* | ||
* Power off by restarting and let u-boot keep hold of the machine | ||
* until the user presses a button for example. | ||
* | ||
* Andrew Lunn <andrew@lunn.ch> | ||
* | ||
* Copyright (C) 2012 Andrew Lunn | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
#include <linux/kernel.h> | ||
#include <linux/init.h> | ||
#include <linux/platform_device.h> | ||
#include <linux/of_platform.h> | ||
#include <linux/module.h> | ||
#include <asm/system_misc.h> | ||
|
||
static void restart_poweroff_do_poweroff(void) | ||
{ | ||
arm_pm_restart('h', NULL); | ||
} | ||
|
||
static int __devinit restart_poweroff_probe(struct platform_device *pdev) | ||
{ | ||
/* If a pm_power_off function has already been added, leave it alone */ | ||
if (pm_power_off != NULL) { | ||
dev_err(&pdev->dev, | ||
"pm_power_off function already registered"); | ||
return -EBUSY; | ||
} | ||
|
||
pm_power_off = &restart_poweroff_do_poweroff; | ||
return 0; | ||
} | ||
|
||
static int __devexit restart_poweroff_remove(struct platform_device *pdev) | ||
{ | ||
if (pm_power_off == &restart_poweroff_do_poweroff) | ||
pm_power_off = NULL; | ||
|
||
return 0; | ||
} | ||
|
||
static const struct of_device_id of_restart_poweroff_match[] = { | ||
{ .compatible = "restart-poweroff", }, | ||
{}, | ||
}; | ||
|
||
static struct platform_driver restart_poweroff_driver = { | ||
.probe = restart_poweroff_probe, | ||
.remove = __devexit_p(restart_poweroff_remove), | ||
.driver = { | ||
.name = "poweroff-restart", | ||
.owner = THIS_MODULE, | ||
.of_match_table = of_restart_poweroff_match, | ||
}, | ||
}; | ||
module_platform_driver(restart_poweroff_driver); | ||
|
||
MODULE_AUTHOR("Andrew Lunn <andrew@lunn.ch"); | ||
MODULE_DESCRIPTION("restart poweroff driver"); | ||
MODULE_LICENSE("GPLv2"); | ||
MODULE_ALIAS("platform:poweroff-restart"); |