mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-13 00:29:50 +00:00
MIPS: Alchemy: devboard PM needs to save CPLD registers.
Save/restore CPLD registers when doing suspend-to-ram; this fixes issues with harddisk and ethernet not working correctly when resuming on DB1200. Signed-off-by: Manuel Lauss <manuel.lauss@gmail.com> To: Linux-MIPS <linux-mips@linux-mips.org> Patchwork: http://patchwork.linux-mips.org/patch/986/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
81fc017954
commit
e275ed5ee9
@ -10,6 +10,7 @@
|
|||||||
#include <linux/sysfs.h>
|
#include <linux/sysfs.h>
|
||||||
#include <asm/mach-au1x00/au1000.h>
|
#include <asm/mach-au1x00/au1000.h>
|
||||||
#include <asm/mach-au1x00/gpio.h>
|
#include <asm/mach-au1x00/gpio.h>
|
||||||
|
#include <asm/mach-db1x00/bcsr.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generic suspend userspace interface for Alchemy development boards.
|
* Generic suspend userspace interface for Alchemy development boards.
|
||||||
@ -26,6 +27,20 @@ static unsigned long db1x_pm_last_wakesrc;
|
|||||||
|
|
||||||
static int db1x_pm_enter(suspend_state_t state)
|
static int db1x_pm_enter(suspend_state_t state)
|
||||||
{
|
{
|
||||||
|
unsigned short bcsrs[16];
|
||||||
|
int i, j, hasint;
|
||||||
|
|
||||||
|
/* save CPLD regs */
|
||||||
|
hasint = bcsr_read(BCSR_WHOAMI);
|
||||||
|
hasint = BCSR_WHOAMI_BOARD(hasint) >= BCSR_WHOAMI_DB1200;
|
||||||
|
j = (hasint) ? BCSR_MASKSET : BCSR_SYSTEM;
|
||||||
|
|
||||||
|
for (i = BCSR_STATUS; i <= j; i++)
|
||||||
|
bcsrs[i] = bcsr_read(i);
|
||||||
|
|
||||||
|
/* shut off hexleds */
|
||||||
|
bcsr_write(BCSR_HEXCLEAR, 3);
|
||||||
|
|
||||||
/* enable GPIO based wakeup */
|
/* enable GPIO based wakeup */
|
||||||
alchemy_gpio1_input_enable();
|
alchemy_gpio1_input_enable();
|
||||||
|
|
||||||
@ -52,6 +67,23 @@ static int db1x_pm_enter(suspend_state_t state)
|
|||||||
/* ...and now the sandman can come! */
|
/* ...and now the sandman can come! */
|
||||||
au_sleep();
|
au_sleep();
|
||||||
|
|
||||||
|
|
||||||
|
/* restore CPLD regs */
|
||||||
|
for (i = BCSR_STATUS; i <= BCSR_SYSTEM; i++)
|
||||||
|
bcsr_write(i, bcsrs[i]);
|
||||||
|
|
||||||
|
/* restore CPLD int registers */
|
||||||
|
if (hasint) {
|
||||||
|
bcsr_write(BCSR_INTCLR, 0xffff);
|
||||||
|
bcsr_write(BCSR_MASKCLR, 0xffff);
|
||||||
|
bcsr_write(BCSR_INTSTAT, 0xffff);
|
||||||
|
bcsr_write(BCSR_INTSET, bcsrs[BCSR_INTSET]);
|
||||||
|
bcsr_write(BCSR_MASKSET, bcsrs[BCSR_MASKSET]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* light up hexleds */
|
||||||
|
bcsr_write(BCSR_HEXCLEAR, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user