diff options
author | Paul Mundt <lethal@linux-sh.org> | 2010-04-19 16:27:47 +0900 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-04-19 16:27:47 +0900 |
commit | d9c944463d8f3f7cafaaba8f3e44df62ce817484 (patch) | |
tree | cb2cfbd038d305af790fe5ee3aa416418cc1b32c /arch/sh/boards | |
parent | dc825b17904a06bbd2f79d720b23156e4c01a22f (diff) | |
download | op-kernel-dev-d9c944463d8f3f7cafaaba8f3e44df62ce817484.zip op-kernel-dev-d9c944463d8f3f7cafaaba8f3e44df62ce817484.tar.gz |
sh: mach-sdk7786: pm_power_off support.
This wires up power-off support for the SDK7786 board.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/boards')
-rw-r--r-- | arch/sh/boards/mach-sdk7786/setup.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/sh/boards/mach-sdk7786/setup.c b/arch/sh/boards/mach-sdk7786/setup.c index f094ea2..0c057a9 100644 --- a/arch/sh/boards/mach-sdk7786/setup.c +++ b/arch/sh/boards/mach-sdk7786/setup.c @@ -165,6 +165,19 @@ static void sdk7786_restart(char *cmd) fpga_write_reg(0xa5a5, SRSTR); } +static void sdk7786_power_off(void) +{ + fpga_write_reg(fpga_read_reg(PWRCR) | PWRCR_PDWNREQ, PWRCR); + + /* + * It can take up to 20us for the R8C to do its job, back off and + * wait a bit until we've been shut off. Even though newer FPGA + * versions don't set the ACK bit, the latency issue remains. + */ + while ((fpga_read_reg(PWRCR) & PWRCR_PDWNACK) == 0) + cpu_sleep(); +} + /* Initialize the board */ static void __init sdk7786_setup(char **cmdline_p) { @@ -175,6 +188,7 @@ static void __init sdk7786_setup(char **cmdline_p) pr_info("\tPCB revision:\t%d\n", fpga_read_reg(PCBRR) & 0xf); machine_ops.restart = sdk7786_restart; + pm_power_off = sdk7786_power_off; } /* |