aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/boards/mach-sdk7786/setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sh/boards/mach-sdk7786/setup.c')
-rw-r--r--arch/sh/boards/mach-sdk7786/setup.c14
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)
165 fpga_write_reg(0xa5a5, SRSTR); 165 fpga_write_reg(0xa5a5, SRSTR);
166} 166}
167 167
168static void sdk7786_power_off(void)
169{
170 fpga_write_reg(fpga_read_reg(PWRCR) | PWRCR_PDWNREQ, PWRCR);
171
172 /*
173 * It can take up to 20us for the R8C to do its job, back off and
174 * wait a bit until we've been shut off. Even though newer FPGA
175 * versions don't set the ACK bit, the latency issue remains.
176 */
177 while ((fpga_read_reg(PWRCR) & PWRCR_PDWNACK) == 0)
178 cpu_sleep();
179}
180
168/* Initialize the board */ 181/* Initialize the board */
169static void __init sdk7786_setup(char **cmdline_p) 182static void __init sdk7786_setup(char **cmdline_p)
170{ 183{
@@ -175,6 +188,7 @@ static void __init sdk7786_setup(char **cmdline_p)
175 pr_info("\tPCB revision:\t%d\n", fpga_read_reg(PCBRR) & 0xf); 188 pr_info("\tPCB revision:\t%d\n", fpga_read_reg(PCBRR) & 0xf);
176 189
177 machine_ops.restart = sdk7786_restart; 190 machine_ops.restart = sdk7786_restart;
191 pm_power_off = sdk7786_power_off;
178} 192}
179 193
180/* 194/*