diff options
author | Paul Mundt <lethal@linux-sh.org> | 2010-04-19 09:27:47 +0200 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-04-19 09:27:47 +0200 |
commit | d9c944463d8f3f7cafaaba8f3e44df62ce817484 (patch) | |
tree | cb2cfbd038d305af790fe5ee3aa416418cc1b32c /arch/sh/boards/mach-sdk7786/setup.c | |
parent | sh: intc: IRQ auto-distribution support. (diff) | |
download | linux-d9c944463d8f3f7cafaaba8f3e44df62ce817484.tar.xz linux-d9c944463d8f3f7cafaaba8f3e44df62ce817484.zip |
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/mach-sdk7786/setup.c')
-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 f094ea2ee783..0c057a93fe29 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; } /* |