Hi,
Does iMX53 support resume from sleep?
After I execute: echo mem > state , the system seems to suspend to RAM.
Shown as below:
root@cpc-105:/# uname -ra
Linux cpc-105 2.6.35.3 #19 PREEMPT Fri Mar 30 18:24:02 CST 2012 armv7l GNU/Linux
root@cpc-105:/# cd /sys/power/
root@cpc-105:/sys/power# cat state
standby mem
root@cpc-105:/sys/power# echo mem > state
[ 42.026575] PM: Syncing filesystems ... done.
[ 42.042099] Freezing user space processes ... (elapsed 0.01 seconds) done.
[ 42.058816] Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
[ 42.078833] Suspending console(s) (use no_console_suspend to debug)
But how can I wake up the system? Can I use GPIO to wake up the system?
If I execute: echo standby > state , the system should enter into standby mode.
But it seems no different from suspend to RAM as below:
root@cpc-105:/sys/power# cat state
standby mem
root@cpc-105:/sys/power# echo standby > state
[ 51.256673] PM: Syncing filesystems ... done.
[ 51.272181] Freezing user space processes ... (elapsed 0.01 seconds) done.
[ 51.288891] Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
[ 51.308906] Suspending console(s) (use no_console_suspend to debug)
Does it mean that standby and sleep are all the same for iMX53?
Thanks for your reply.
The code ran in ram is cpu_do_suspend_workaround, shown as follows:
#include <linux/linkage.h>
#include <mach/hardware.h>
#include <mach/mx5x.h>
#define ARM_CTRL_DCACHE 1 << 2
#define ARM_CTRL_ICACHE 1 << 12
#define ARM_AUXCR_L2EN 1 << 1
.macro PM_SET_BACKUP_REG, addr, num
ldr r2, =\addr
ldr r2, [r1, r2]
str r2, [r3, #(\num * 4)]
.endm
.macro PM_SET_HIGHZ_PAD, addr
ldr r2, =\addr
str r4, [r1, r2]
.endm
.macro PM_SET_RESTORE_REG, addr, num
ldr r4, [r3, #(\num * 4)]
ldr r2, =\addr
str r4, [r1, r2]
.endm
.macro PM_SET_ADDR_REG, addr, reg
mov \reg, #(\addr & 0x000000FF)
orr \reg, \reg, #(\addr & 0x0000FF00)
orr \reg, \reg, #(\addr & 0x00FF0000)
orr \reg, \reg, #(\addr & 0xFF000000)
.endm
#define SUSPEND_ID_MX51 1
#define SUSPEND_ID_MX53 3
#define SUSPEND_ID_NONE 4
#define MX51_DRAM_SDCLK_PAD_CTRL_ADDR AIPS1_IO_ADDRESS(0x73FA84B8)
#define MX51_CCM_BASE AIPS1_IO_ADDRESS(0x73fd4000)
#define MX51_PLL1_BASE AIPS2_IO_ADDRESS(0x83f80000)
#define M4IF_MCR0_OFFSET (0x008C)
#define M4IF_MCR0_FDVFS (0x1 << 11)
#define M4IF_MCR0_FDVACK (0x1 << 27)
#define IOMUXC_BASE_ADDR_VIRT AIPS1_IO_ADDRESS(IOMUXC_BASE_ADDR)
#define M4IF_BASE_ADDR_VIRT AIPS2_IO_ADDRESS(M4IF_BASE_ADDR)
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3 0x554
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3 0x558
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2 0x560
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1 0x564
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2 0x568
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_1 0x570
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS 0x574
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 0x578
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0 0x57c
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0 0x580
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 0x584
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS 0x588
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1 0x590
#define IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 0x594
#define IOMUXC_SW_PAD_CTL_GRP_ADDDS 0x6f0
#define IOMUXC_SW_PAD_CTL_GRP_B0DS 0x718
#define IOMUXC_SW_PAD_CTL_GRP_B1DS 0x71c
#define IOMUXC_SW_PAD_CTL_GRP_CTLDS 0x720
#define IOMUXC_SW_PAD_CTL_GRP_B2DS 0x728
#define IOMUXC_SW_PAD_CTL_GRP_B3DS 0x72c
/*
* cpu_do_suspend_workaround()
*
* Suspend the processor (eg, wait for interrupt).
*
* IRQs are already disabled.
*/
ENTRY(cpu_do_suspend_workaround)
stmfd sp!, {r4,r5,r6,r7,r9,r10,r11} @ Save registers
mov r6, r0 @save iomux address
cmp r6, #SUSPEND_ID_MX51
bne mx53_start @ don't disable cache on imx53
/* Disable L1 caches */
mrc p15, 0, r0, c1, c0, 0 @ R0 = system control reg
bic r0, r0, #ARM_CTRL_ICACHE @ Disable ICache
bic r0, r0, #ARM_CTRL_DCACHE @ Disable DCache
mcr p15, 0, r0, c1, c0, 0 @ Update system control reg
mrc p15, 1, r0, c0, c0, 1 @ Read CLIDR
ands r3, r0, #0x7000000 @ Isolate level of coherency
mov r3, r3, lsr #23 @ Cache level value (naturally aligned)
beq FinishedClean
mov r10, #0
Loop1Clean:
add r2, r10, r10, lsr #1 @ Work out cache level
mov r1, r0, lsr r2 @ R0 bottom 3 bits = Cache Type for this level
and r1, r1, #7 @ Get those 3 bits alone
cmp r1, #2
blt SkipClean @ No cache or only instruction cache at this level
mcr p15, 2, r10, c0, c0, 0 @ Write the Cache Size selection register
mov r1, #0
.long 0xF57FF06F @ ISB
mrc p15, 1, r1, c0, c0, 0 @ Reads current Cache Size ID register
and r2, r1, #7 @ Extract the line length field
add r2, r2, #4 @ Add 4 for the line length offset (log2 16 bytes)
ldr r4, =0x3FF
ands r4, r4, r1, lsr #3 @ R4 is the max number on the way size (right aligned)
clz r5, r4 @ R5 is the bit position of the way size increment
ldr r7, =0x00007FFF
ands r7, r7, r1, lsr #13 @ R7 is the max number of the index size (right aligned)
Loop2Clean:
mov r9, r4 @ R9 working copy of the max way size (right aligned)
Loop3Clean:
orr r11, r10, r9, lsl r5 @ Factor in the way number and cache number into R11
orr r11, r11, r7, lsl r2 @ Factor in the index number
mcr p15, 0, r11, c7, c14, 2 @ Clean and invalidate by set/way
subs r9, r9, #1 @ Decrement the way number
bge Loop3Clean
subs r7, r7, #1 @ Decrement the index
bge Loop2Clean
SkipClean:
add r10, r10, #2 @ Increment the cache number
cmp r3, r10
bgt Loop1Clean
FinishedClean:
/* Disable L2 cache */
mrc p15, 0, r0, c1, c0, 1 @ R0 = auxiliary control reg
bic r0, r0, #ARM_AUXCR_L2EN @ Disable L2 cache
mcr p15, 0, r0, c1, c0, 1 @ Update aux control reg
mx53_start:
/* Do nothing for DDR */
cmp r6, #SUSPEND_ID_NONE
beq mx5x_wfi
/*Set the DDR drive strength to low */
cmp r6, #SUSPEND_ID_MX51
bne mx53_reduce_ddr_drive_strength
ldr r0, =MX51_DRAM_SDCLK_PAD_CTRL_ADDR
ldr r1, [r0]
str r1, __mx5x_temp_stack
bic r1, r1, #0x6
str r1, [r0]
mx53_reduce_ddr_drive_strength:
cmp r6, #SUSPEND_ID_MX53
bne mx5x_wfi
mx53_force_ddr_selfrefresh:
/* Point R0 at M4IF register set */
ldr r0, =M4IF_BASE_ADDR_VIRT
/* Point R1 at IOMUX register set */
ldr r1, =IOMUXC_BASE_ADDR_VIRT
/* Point R3 at temporary IRAM storage for DDR pad config */
adr r3, __mx5x_temp_stack
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3, 0
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3, 1
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2, 2
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1, 3
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2, 4
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_1, 5
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS, 6
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0, 7
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0, 8
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0, 9
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0, 10
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS, 11
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1, 12
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1, 13
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_GRP_ADDDS, 14
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_GRP_B0DS, 15
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_GRP_B1DS, 16
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_GRP_CTLDS, 17
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_GRP_B2DS, 18
PM_SET_BACKUP_REG IOMUXC_SW_PAD_CTL_GRP_B3DS, 19
/* Set FDVFS bit of M4IF_MCR0 to request DDR to enter self-refresh */
ldr r2,[r0, #M4IF_MCR0_OFFSET]
orr r2, r2, #M4IF_MCR0_FDVFS
str r2,[r0, #M4IF_MCR0_OFFSET]
/* Poll FDVACK bit of M4IF_MCR to wait for DDR to enter self-refresh */
WAIT_SR_ACK:
ldr r2,[r0, #M4IF_MCR0_OFFSET]
ands r2, r2, #M4IF_MCR0_FDVACK
beq WAIT_SR_ACK
/*
* Set DSE of all DDR I/O pads to 0 => HighZ
* except CKE which must drive during self-refresh
* according to JEDEC
*/
ldr r4, =0
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_1
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_GRP_ADDDS
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_GRP_B0DS
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_GRP_B1DS
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_GRP_B2DS
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_GRP_B3DS
/* use DSE=1 for CKE pin,when DDR is in self-refresh */
ldr r4, =1
PM_SET_HIGHZ_PAD IOMUXC_SW_PAD_CTL_GRP_CTLDS
mx5x_wfi:
/*
* PLL1 workaround as the following: For mx51 only.
* Before enter WFI
* (1) switch DDR and ARM to PLL2
* (2) Disable AREN bit to avoid PLL1 restart during MFN change)
* (3) set PLL1 to ~864Mhz with MFI = 8, MFN = 180, MFD = 179
* thus the equation |MFN/(MFD+1)| < 1
* (4) Manual restart PLL1
* (5) Wait PLL1 lock
* After CPU out of WFI
* (6) Set PLL1 to 800Mhz with only change MFN to 60, others keep
* (7) Wait MFN change complete by delay 4.6us,
* (8) Switch DDR and ARM back to PLL1
*/
cmp r6, #SUSPEND_ID_MX51
bne WFI
PM_SET_ADDR_REG MX51_PLL1_BASE, r3
PM_SET_ADDR_REG MX51_CCM_BASE, r4
/* step 1 */
ldr r0, [r4, #0x14]
bic r0, r0, #(0x1 << 30)
str r0, [r4, #0x14]
1:
ldr r0, [r4, #0x48]
ands r0, r0, #(1 << 8)
bne 1b
ldr r0, [r4, #0x0c]
bic r0, r0, #(0xf << 5)
orr r0, r0, #(0x1 << 8)
str r0, [r4, #0x0c]
orr r0, r0, #(1 << 2)
str r0, [r4, #0x0c]
/* step 2 */
ldr r0, [r3, #0x4]
bic r0, r0, #0x2
str r0, [r3, #0x4] /* disable auto-restart AREN bit */
/* step 3 */
mov r0, #0x80
mov r1, #179
mov r2, #180
str r0, [r3, #0x08]
str r0, [r3, #0x1c]
str r1, [r3, #0x0c]
str r1, [r3, #0x20]
str r2, [r3, #0x10]
str r2, [r3, #0x24]
/* step 4 */
ldr r0, =0x00001236 /* Set PLM =1, manual restart and enable PLL*/
str r0, [r3, #0x0]
1: ldr r0, [r3, #0x0]
ands r0, r0, #0x1
beq 1b
WFI:
mov r0,#0x0
.long 0xe320f003 @ Opcode for WFI
cmp r6, #SUSPEND_ID_MX51
bne wfi_done
/* step 5 */
ldr r0, =60
str r0, [r3, #0x10]
/* step 6 */
/* Load MFN by setting LDREQ */
ldr r0, [r3, #0x04]
orr r0, r0, #0x1
str r0, [r3, #0x04]
/* Wait for LDREQ bit to clear. */
2: ldr r0, [r3, #0x4]
tst r0, #1
bne 2b
mov r0, #100 /* delay more than 4.6 us */
3: subs r0, r0, #1
bge 3b
/* step 8 */
ldr r0, [r4, #0x0c]
bic r0, r0, #(1 << 2)
str r0, [r4, #0x0c]
/* Source step_clk from LPAPM. */
ldr r0, [r4, #0x0c]
bic r0, r0, #(3 << 7)
str r0, [r4, #0x0c]
ldr r0, [r4, #0x14]
orr r0, r0, #(0x1 << 30)
str r0, [r4, #0x14]
3:
ldr r0, [r4, #0x48]
ands r0, r0, #(1 << 8)
bne 3b
wfi_done:
cmp r6, #SUSPEND_ID_NONE
beq mx5x_post_wfi
/*Set the DDR drive strength to max */
cmp r6, #SUSPEND_ID_MX51
bne mx53_restore_ddr_drive_strength
ldr r0, =MX51_DRAM_SDCLK_PAD_CTRL_ADDR
ldr r1, __mx5x_temp_stack
str r1, [r0]
mx53_restore_ddr_drive_strength:
cmp r6, #SUSPEND_ID_MX53
bne mx5x_post_wfi
ldr r0, =M4IF_BASE_ADDR_VIRT
ldr r1, =IOMUXC_BASE_ADDR_VIRT
adr r3, __mx5x_temp_stack
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM3, 0
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS3, 1
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM2, 2
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1, 3
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS2, 4
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_1, 5
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS, 6
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0, 7
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0, 8
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0, 9
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0, 10
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS, 11
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1, 12
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1, 13
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_GRP_ADDDS, 14
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_GRP_B0DS, 15
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_GRP_B1DS, 16
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_GRP_CTLDS, 17
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_GRP_B2DS, 18
PM_SET_RESTORE_REG IOMUXC_SW_PAD_CTL_GRP_B3DS, 19
/* Clear FDVFS bit of M4IF_MCR0 to request DDR to exit self-refresh */
ldr r2,[r0, #M4IF_MCR0_OFFSET]
bic r2, r2, #M4IF_MCR0_FDVFS
str r2,[r0, #M4IF_MCR0_OFFSET]
/* Poll FDVACK bit of M4IF_MCR to wait for DDR to exit self-refresh */
WAIT_AR_ACK:
ldr r2,[r0, #M4IF_MCR0_OFFSET]
ands r2, r2, #M4IF_MCR0_FDVACK
bne WAIT_AR_ACK
cmp r6, #SUSPEND_ID_MX51
bne mx53_end
mx5x_post_wfi:
mov r0, #0
mcr p15, 0, r0, c7, c5, 0 @ Invalidate inst cache
/* Invalidate data caches */
mrc p15, 1, r0, c0, c0, 1 @ Read CLIDR
ands r3, r0, #0x7000000 @ Isolate level of coherency
mov r3, r3, lsr #23 @ Cache level value (naturally aligned)
beq FinishedInvalidate
mov r10, #0
Loop1Invalidate:
add r2, r10, r10, lsr #1 @ Work out cache level
mov r1, r0, lsr r2 @ R0 bottom 3 bits = Cache Type for this level
and r1, r1, #7 @ Get those 3 bits alone
cmp r1, #2
blt SkipInvalidate @ No cache or only instruction cache at this level
mcr p15, 2, r10, c0, c0, 0 @ Write the Cache Size selection register
mov r1, #0
.long 0xF57FF06F @ ISB
mrc p15, 1, r1, c0, c0, 0 @ Reads current Cache Size ID register
and r2, r1, #7 @ Extract the line length field
add r2, r2, #4 @ Add 4 for the line length offset (log2 16 bytes)
ldr r4, =0x3FF
ands r4, r4, r1, lsr #3 @ R4 is the max number on the way size (right aligned)
clz r5, r4 @ R5 is the bit position of the way size increment
ldr r7, =0x00007FFF
ands r7, r7, r1, lsr #13 @ R7 is the max number of the index size (right aligned)
Loop2Invalidate:
mov r9, r4 @ R9 working copy of the max way size (right aligned)
Loop3Invalidate:
orr r11, r10, r9, lsl r5 @ Factor in the way number and cache number into R11
orr r11, r11, r7, lsl r2 @ Factor in the index number
mcr p15, 0, r11, c7, c6, 2 @ Invalidate by set/way
subs r9, r9, #1 @ Decrement the way number
bge Loop3Invalidate
subs r7, r7, #1 @ Decrement the index
bge Loop2Invalidate
SkipInvalidate:
add r10, r10, #2 @ Increment the cache number
cmp r3, r10
bgt Loop1Invalidate
FinishedInvalidate:
/* Enable L2 cache */
mrc p15, 0, r0, c1, c0, 1 @ R0 = auxiliary control reg
orr r0, r0, #ARM_AUXCR_L2EN @ Enable L2 cache
mcr p15, 0, r0, c1, c0, 1 @ Update aux control reg
/* Enable L1 caches */
mrc p15, 0, r0, c1, c0, 0 @ R0 = system control reg
orr r0, r0, #ARM_CTRL_ICACHE @ Enable ICache
orr r0, r0, #ARM_CTRL_DCACHE @ Enable DCache
mcr p15, 0, r0, c1, c0, 0 @ Update system control reg
mx53_end:
/* Restore registers */
ldmfd sp!, {r4,r5,r6,r7,r9,r10,r11}
mov pc, lr
__mx5x_temp_stack:
.space 128
.type cpu_do_suspend, #object
ENTRY(cpu_do_suspend)
.word cpu_do_suspend_workaround
.size cpu_do_suspend_workaround, . - cpu_do_suspend_workaround
Look like I was stuck in suspend_in_iram(suspend_param1, NULL, NULL) and waited for power button interrupt.
if (cpu_is_mx51() || cpu_is_mx53()) {
/* Run the suspend code from iRAM. */
printk("mx5_suspend_enter 12\n");//vin added 2012/4/10
suspend_in_iram(suspend_param1, NULL, NULL);
printk("mx5_suspend_enter 13\n");//vin added 2012/4/10
if (!cpu_is_mx53()) {
printk("mx5_suspend_enter 14\n");//vin added 2012/4/10
/*clear the EMPGC0/1 bits */
__raw_writel(0, MXC_SRPG_EMPGC0_SRPGCR);
__raw_writel(0, MXC_SRPG_EMPGC1_SRPGCR);
}
I don't known what's the meaning of GPIO7_0_11_IRQ_BIT.
Is there any document about how to set the GPIO7_0_11_IRQ_BIT ?
#define MX53_OFFSET (0x20000000)
#define TZIC_WAKEUP0_OFFSET (0x0E00)
#define TZIC_WAKEUP1_OFFSET (0x0E04)
#define TZIC_WAKEUP2_OFFSET (0x0E08)
#define TZIC_WAKEUP3_OFFSET (0x0E0C)
#define GPIO7_0_11_IRQ_BIT (0x100000000000)
static void loco_da9053_irq_wakeup_only_fixup(void)
{
void __iomem *tzic_base;
tzic_base = ioremap(MX53_TZIC_BASE_ADDR, SZ_4K);
if (NULL == tzic_base) {
pr_err("fail to map MX53_TZIC_BASE_ADDR\n");
return;
}
__raw_writel(0, tzic_base + TZIC_WAKEUP0_OFFSET);
__raw_writel(0, tzic_base + TZIC_WAKEUP1_OFFSET);
__raw_writel(0, tzic_base + TZIC_WAKEUP2_OFFSET);
/* only enable irq wakeup for da9053 */
__raw_writel(GPIO7_0_11_IRQ_BIT, tzic_base + TZIC_WAKEUP3_OFFSET);
// __raw_writel(0x1F0F, tzic_base + TZIC_WAKEUP3_OFFSET);//vin added 2012/4/11
iounmap(tzic_base);
pr_info("only da9053 irq is wakeup-enabled 1\n");
}
Because we do have DA9053 chip on board, so I think I should use da9053_suspend_cmd_hw instead of da9053_suspend_cmd_sw.
static void loco_suspend_enter(void)
{
printk("xxxxxxxxxxx loco_suspend_enter hw");//vin added 2012/4/6
if (!board_is_mx53_loco_mc34708()) {
loco_da9053_irq_wakeup_only_fixup();
//vin da9053_suspend_cmd_sw();
da9053_suspend_cmd_hw(); //vin added 2012/4/11
}
int da9053_suspend_cmd_sw(void)
{
unsigned char buf[2] = {0, 0};
struct clk *i2c_clk;
u8 data;
buf[0] = 29;
printk("xxxxxxxxxxx da9053_suspend_cmd_sw 1");//vin added 2012/4/6
i2c_clk = clk_get(NULL, "i2c_clk");
if (IS_ERR(i2c_clk)) {
pr_err("unable to get i2c clk\n");
printk("xxxxxxxxxxx da9053_suspend_cmd_sw 2");//vin added 2012/4/6
return PTR_ERR(i2c_clk);
}
clk_enable(i2c_clk);
pm_da9053_preset_voltage();
pm_da9053_read_reg(DA9052_ID01_REG, &data);
data &= ~(DA9052_ID01_DEFSUPPLY | DA9052_ID01_nRESMODE);
pm_da9053_write_reg(DA9052_ID01_REG, data);
pm_da9053_write_reg(DA9052_SEQB_REG, DA9053_SLEEP_DELAY);
pm_da9053_read_reg(DA9052_CONTROLB_REG, &data);
data |= DA9052_CONTROLB_DEEPSLEEP;
pm_da9053_write_reg(DA9052_CONTROLB_REG, data);
clk_disable(i2c_clk);
clk_put(i2c_clk);
printk("xxxxxxxxxxx da9053_suspend_cmd_sw 3");//vin added 2012/4/6
return 0;
}
int da9053_suspend_cmd_hw(void)
{
unsigned char buf[2] = {0, 0};
struct clk *i2c_clk;
u8 data;
buf[0] = 29;
i2c_clk = clk_get(NULL, "i2c_clk");
if (IS_ERR(i2c_clk)) {
pr_err("unable to get i2c clk\n");
return PTR_ERR(i2c_clk);
}
clk_enable(i2c_clk);
pm_da9053_read_reg(DA9052_IRQMASKB_REG, &data);
data |= DA9052_IRQ_MASKB_ONKEY;
pm_da9053_write_reg(DA9052_IRQMASKB_REG, data);
pm_da9053_preset_voltage();
pm_da9053_write_reg(DA9052_CONTROLC_REG,
DA9052_CONTROLC_SMD_SET);
pm_da9053_read_reg(DA9052_ID01_REG, &data);
data &= ~(DA9052_ID01_DEFSUPPLY | DA9052_ID01_nRESMODE);
pm_da9053_write_reg(DA9052_ID01_REG, data);
pm_da9053_write_reg(DA9052_GPIO0809_REG,
DA9052_GPIO0809_SMD_SET);
pm_da9053_read_reg(DA9052_IRQMASKD_REG, &data);
data |= DA9052_GPI9_IRQ_MASK;
pm_da9053_write_reg(DA9052_IRQMASKD_REG, data);
pm_da9053_read_reg(DA9052_ID1415_REG, &data);
data &= 0xf0;
data |= DA9052_ID1415_SMD_SET;
pm_da9053_write_reg(DA9052_ID1415_REG, data);
pm_da9053_write_reg(DA9052_SEQTIMER_REG, 0);
/* pm_da9053_write_reg(DA9052_SEQB_REG, 0x1f); */
pm_da9053_read_reg(DA9052_IRQMASKB_REG, &data);
data &= ~DA9052_IRQ_MASKB_ONKEY;
pm_da9053_write_reg(DA9052_IRQMASKB_REG, data);
clk_disable(i2c_clk);
clk_put(i2c_clk);
return 0;
}
I also added some printk messages in the following code snippet.
#define MX53_OFFSET (0x20000000)
#define TZIC_WAKEUP0_OFFSET (0x0E00)
#define TZIC_WAKEUP1_OFFSET (0x0E04)
#define TZIC_WAKEUP2_OFFSET (0x0E08)
#define TZIC_WAKEUP3_OFFSET (0x0E0C)
#define GPIO7_0_11_IRQ_BIT (0x100000000000)
static void loco_da9053_irq_wakeup_only_fixup(void)
{
void __iomem *tzic_base;
tzic_base = ioremap(MX53_TZIC_BASE_ADDR, SZ_4K);
if (NULL == tzic_base) {
pr_err("fail to map MX53_TZIC_BASE_ADDR\n");
return;
}
__raw_writel(0, tzic_base + TZIC_WAKEUP0_OFFSET);
__raw_writel(0, tzic_base + TZIC_WAKEUP1_OFFSET);
__raw_writel(0, tzic_base + TZIC_WAKEUP2_OFFSET);
/* only enable irq wakeup for da9053 */
__raw_writel(GPIO7_0_11_IRQ_BIT, tzic_base + TZIC_WAKEUP3_OFFSET);
// __raw_writel(0x1F0F, tzic_base + TZIC_WAKEUP3_OFFSET);//vin added 2012/4/11
iounmap(tzic_base);
pr_info("only da9053 irq is wakeup-enabled 1\n");
}
static void loco_suspend_enter(void)
{
printk("xxxxxxxxxxx loco_suspend_enter hw");//vin added 2012/4/6
if (!board_is_mx53_loco_mc34708()) {
loco_da9053_irq_wakeup_only_fixup();
//vin da9053_suspend_cmd_sw();
da9053_suspend_cmd_hw(); //vin added 2012/4/11
}
I added some printk messages, so I can make sure where I stuck in sleep and failed in wakeup, shown as below:
static int mx5_suspend_enter(suspend_state_t state)
{
if (gpc_dvfs_clk == NULL)
gpc_dvfs_clk = clk_get(NULL, "gpc_dvfs_clk");
/* gpc clock is needed for SRPG */
printk("mx5_suspend_enter 1\n");//vin added 2012/4/10
clk_enable(gpc_dvfs_clk);
switch (state) {
case PM_SUSPEND_MEM:
printk("mx5_suspend_enter 2\n");//vin added 2012/4/10
mxc_cpu_lp_set(STOP_POWER_OFF);
break;
case PM_SUSPEND_STANDBY:
printk("mx5_suspend_enter 3\n");//vin added 2012/4/10
mxc_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF);
break;
default:
return -EINVAL;
}
printk("mx5_suspend_enter 5\n");//vin added 2012/4/10
if (tzic_enable_wake(0) != 0)
return -EAGAIN;
printk("mx5_suspend_enter 6\n");//vin added 2012/4/10
if (state == PM_SUSPEND_MEM) {
printk("mx5_suspend_enter 7\n");//vin added 2012/4/10
if (!cpu_is_mx53()) {
printk("mx5_suspend_enter 8\n");//vin added 2012/4/10
local_flush_tlb_all();
flush_cache_all();
}
printk("mx5_suspend_enter 9\n");//vin added 2012/4/10
if (pm_data && pm_data->suspend_enter)
{
printk("mx5_suspend_enter 10\n");//vin added 2012/4/10
pm_data->suspend_enter();
}
printk("mx5_suspend_enter 11\n");//vin added 2012/4/10
if (cpu_is_mx51() || cpu_is_mx53()) {
/* Run the suspend code from iRAM. */
printk("mx5_suspend_enter 12\n");//vin added 2012/4/10
suspend_in_iram(suspend_param1, NULL, NULL);
printk("mx5_suspend_enter 13\n");//vin added 2012/4/10
if (!cpu_is_mx53()) {
printk("mx5_suspend_enter 14\n");//vin added 2012/4/10
/*clear the EMPGC0/1 bits */
__raw_writel(0, MXC_SRPG_EMPGC0_SRPGCR);
__raw_writel(0, MXC_SRPG_EMPGC1_SRPGCR);
}
} else {
printk("mx5_suspend_enter 15\n");//vin added 2012/4/10
if (cpu_is_mx50()) {
printk("mx5_suspend_enter 16\n");//vin added 2012/4/10
/* Store the LPM mode of databanhn */
databahn_mode = __raw_readl(
databahn_base + DATABAHN_CTL_REG20);
/* Suspend now. */
printk("mx5_suspend_enter 17\n");//vin added 2012/4/10
suspend_in_iram(databahn_base,
ccm_base, pll1_base);
printk("mx5_suspend_enter 18\n");//vin added 2012/4/10
/* Restore the LPM databahn_mode. */
__raw_writel(databahn_mode,
databahn_base + DATABAHN_CTL_REG20);
printk("mx5_suspend_enter 19\n");//vin added 2012/4/10
}
}
if (pm_data && pm_data->suspend_exit)
{
printk("mx5_suspend_enter 20\n");//vin added 2012/4/10
pm_data->suspend_exit();
printk("mx5_suspend_enter 21\n");//vin added 2012/4/10
}
} else {
printk("mx5_suspend_enter 22\n");//vin added 2012/4/10
cpu_do_idle();
printk("mx5_suspend_enter 23\n");//vin added 2012/4/10
}
printk("mx5_suspend_enter 24\n");//vin added 2012/4/10
clk_disable(gpc_dvfs_clk);
printk("mx5_suspend_enter 25\n");//vin added 2012/4/10
return 0;
}
I tried resume from sleep, but can't wake up from sleep by pressing the power button, shown as below:
root@cpc-105:/# echo 8 > /proc/sys/kernel/printk
root@cpc-105:/# cat /proc/sys/kernel/printk
8 4 1 7
root@cpc-105:/# echo mem > /sys/power/state
[ 66.368029] xxxxxxxxxx 0. state_store
[ 66.371707] xxxxxxxxxx 3. state_store
[ 66.375371] PM: Syncing filesystems ... done.
[ 66.379835] PM: Preparing system for mem sleep
[ 66.384818] PM: Adding info for No Bus:vcs63
[ 66.387023] PM: Adding info for No Bus:vcsa63
[ 66.404368] Freezing user space processes ... (elapsed 0.01 seconds) done.
[ 66.420284] Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
[ 66.440288] PM: Entering mem sleep
[ 66.443706] mxc_sdma mxc_sdma: preparing suspend
[ 66.448344] mxc_wdt mxc_wdt.0: preparing suspend
[ 66.452965] imx-i2c imx-i2c.0: preparing suspend
[ 66.457583] imx-i2c imx-i2c.1: preparing suspend
[ 66.462214] imx-i2c imx-i2c.2: preparing suspend
[ 66.466835] mxc_rtc mxc_rtc.0: preparing suspend, may wakeup
[ 66.472510] mxc_ipu mxc_ipu: preparing suspend
[ 66.476956] platform mxc_ldb: preparing suspend
[ 66.481499] tve tve.0: preparing suspend
[ 66.485425] mxc_vpu mxc_vpu.0: preparing suspend
[ 66.490057] mxc_gpu mxc_gpu.0: preparing suspend
[ 66.494677] platform mxc_scc.0: preparing suspend
[ 66.499396] mx5_pm mx5_pm.0: preparing suspend
[ 66.503842] mxc_dvfs_core mxc_dvfs_core.0: preparing suspend
[ 66.509514] busfreq busfreq.0: preparing suspend
[ 66.514135] mxc_iim mxc_iim.0: preparing suspend
[ 66.518765] mxc_pwm mxc_pwm.1: preparing suspend
[ 66.523385] pwm-backlight pwm-backlight.0: preparing suspend
[ 66.529057] mxsdhci mxsdhci.0: preparing suspend
[ 66.533678] mxsdhci mxsdhci.1: preparing suspend
[ 66.538307] mxsdhci mxsdhci.2: preparing suspend
[ 66.542927] platform mxc_ssi.0: preparing suspend
[ 66.547644] platform mxc_ssi.1: preparing suspend
[ 66.552351] platform mxc_spdif.0: preparing suspend
[ 66.557231] ahci ahci.0: preparing suspend
[ 66.561359] platform imx-ahci-hwmon: preparing suspend
[ 66.566515] fec fec.0: preparing suspend
[ 66.570462] platform ptp.0: preparing suspend
[ 66.574833] mxc_asrc mxc_asrc.0: preparing suspend
[ 66.579656] platform imx-3stack-sgtl5000.0: preparing suspend
[ 66.585405] platform imx-3stack-tlv320aic3x.0: preparing suspend
[ 66.591428] platform imx-spdif-audio-device.0: preparing suspend
[ 66.597440] fsl-ehci fsl-ehci.0: preparing suspend
[ 66.602244] usb_wakeup usb_wakeup.0: preparing suspend
[ 66.607387] fsl-ehci fsl-ehci.1: preparing suspend
[ 66.612207] usb_wakeup usb_wakeup.1: preparing suspend
[ 66.617348] platform mxc_v4l2_capture.0: preparing suspend
[ 66.622849] platform mxc_v4l2_output.0: preparing suspend
[ 66.628263] gpio-keys gpio-keys: preparing suspend
[ 66.633057] mxcintuart mxcintuart.0: preparing suspend
[ 66.638210] mxcintuart mxcintuart.1: preparing suspend
[ 66.643351] mxcintuart mxcintuart.2: preparing suspend
[ 66.648503] mxcintuart mxcintuart.3: preparing suspend
[ 66.653644] mxcintuart mxcintuart.4: preparing suspend
[ 66.658799] platform da9052-rtc: preparing suspend
[ 66.663593] da9052-onkey da9052-onkey: preparing suspend
[ 66.668918] platform WLED-1: preparing suspend
[ 66.673364] platform WLED-2: preparing suspend
[ 66.677820] platform WLED-3: preparing suspend
[ 66.682266] da9052-adc da9052-adc: preparing suspend
[ 66.687233] platform da9052-wdt: preparing suspend
[ 66.692037] platform da9052-leds: preparing suspend
[ 66.696918] da9052-regulator da9052-regulator: preparing suspend
[ 66.702955] da9052-tsi da9052-tsi: preparing suspend
[ 66.707935] platform da9052-bat: preparing suspend
[ 66.712751] mxc_sdc_fb mxc_sdc_fb.1: preparing suspend
[ 66.717904] mxc_sdc_fb mxc_sdc_fb.0: preparing suspend
[ 66.723045] mxc_sdc_fb mxc_sdc_fb.2: preparing suspend
[ 66.728200] platform mxc_ddc.0: preparing suspend
[ 66.733582] usb usb1: preparing type suspend, may wakeup
[ 66.738931] usb usb2: preparing type suspend, may wakeup
[ 66.744320] mmcblk mmc2:0001: legacy suspend
[ 66.748620] mmc mmc1:0001: legacy suspend
[ 66.752636] mmcblk mmc0:c502: legacy suspend
[ 66.756921] rtc rtc0: legacy class suspend
[ 66.761048] input input2: type suspend
[ 66.764806] input input1: type suspend
[ 66.768575] input input0: type suspend
[ 66.772460] Generic PHY 0:00: suspend
[ 66.776204] hub 2-0:1.0: suspend
[ 66.780262] platform mxc_ddc.0: suspend
[ 66.784109] backlight pwm-backlight.0: legacy class suspend
[ 66.789741] usb usb2: type suspend, may wakeup
[ 66.794193] usb usb2: suspend, may wakeup
[ 66.798228] hub 1-0:1.0: suspend
[ 66.801462] usb usb1: type suspend, may wakeup
[ 66.805909] usb usb1: suspend, may wakeup
[ 66.810051] scsi host0: legacy suspend
[ 66.813839] mxc_sdc_fb mxc_sdc_fb.2: suspend
[ 66.818157] mxc_sdc_fb mxc_sdc_fb.0: suspend
[ 66.822436] mxc_sdc_fb mxc_sdc_fb.1: suspend
[ 66.867723] i2c 2-0004: suspend
[ 66.870870] i2c 2-0041: suspend
[ 66.874015] i2c i2c-2: suspend
[ 66.877073] kxtf9 1-000f: suspend
[ 66.880413] i2c i2c-1: suspend
[ 66.883470] i2c 0-0018: suspend
[ 66.886614] i2c 0-0030: suspend
[ 66.889770] i2c 0-001c: suspend
[ 66.892914] platform da9052-bat: suspend
[ 66.896840] da9052-tsi da9052-tsi: suspend
[ 66.900950] da9052_tsi_suspend: called
[ 66.904725] da9052-regulator da9052-regulator: suspend
[ 66.909878] platform da9052-leds: suspend
[ 66.913891] platform da9052-wdt: suspend
[ 66.917829] da9052-adc da9052-adc: suspend
[ 66.921930] platform WLED-3: suspend
[ 66.925507] platform WLED-2: suspend
[ 66.929096] platform WLED-1: suspend
[ 66.932675] da9052-onkey da9052-onkey: suspend
[ 66.937122] platform da9052-rtc: suspend
[ 66.941060] da9052_ssc_i2c 0-0048: suspend
[ 66.945165] i2c i2c-0: suspend
[ 66.948235] mxcintuart mxcintuart.4: suspend
[ 66.952510] mxcintuart mxcintuart.3: suspend
[ 66.956785] mxcintuart mxcintuart.2: suspend
[ 66.961071] mxcintuart mxcintuart.1: suspend
[ 66.965345] mxcintuart mxcintuart.0: suspend
[ 66.969631] gpio-keys gpio-keys: suspend
[ 66.973558] platform mxc_v4l2_output.0: suspend
[ 66.978103] platform mxc_v4l2_capture.0: suspend
[ 66.982724] usb_wakeup usb_wakeup.1: suspend
[ 66.986999] fsl-ehci fsl-ehci.1: suspend
[ 66.990935] USB Host suspend begins
[ 66.994424] ehci_fsl_drv_suspend, pm event
[ 66.998738] usb_wakeup usb_wakeup.0: suspend
[ 67.003016] fsl-ehci fsl-ehci.0: suspend
[ 67.006939] USB Host suspend begins
[ 67.010456] ehci_fsl_drv_suspend, pm event
[ 67.014859] platform imx-spdif-audio-device.0: suspend
[ 67.020015] platform imx-3stack-tlv320aic3x.0: suspend
[ 67.025157] platform imx-3stack-sgtl5000.0: suspend
[ 67.030049] mxc_asrc mxc_asrc.0: suspend
[ 67.033978] platform ptp.0: suspend
[ 67.037472] fec fec.0: suspend
[ 67.041484] platform imx-ahci-hwmon: suspend
[ 67.045767] ahci ahci.0: suspend
[ 67.049043] platform mxc_spdif.0: suspend
[ 67.053057] platform mxc_ssi.1: suspend
[ 67.056897] platform mxc_ssi.0: suspend
[ 67.060754] mxsdhci mxsdhci.2: suspend
[ 67.064603] mxsdhci mxsdhci.1: suspend
[ 67.068395] mxsdhci mxsdhci.0: suspend
[ 67.072195] pwm-backlight pwm-backlight.0: suspend
[ 67.076999] mxc_pwm mxc_pwm.1: suspend
[ 67.080768] mxc_iim mxc_iim.0: suspend
[ 67.084521] busfreq busfreq.0: suspend
[ 67.088285] mxc_dvfs_core mxc_dvfs_core.0: suspend
[ 67.093081] mx5_pm mx5_pm.0: suspend
[ 67.096659] platform mxc_scc.0: suspend
[ 67.100507] mxc_gpu mxc_gpu.0: suspend
[ 67.104264] mxc_vpu mxc_vpu.0: suspend
[ 67.108028] tve tve.0: suspend
[ 67.111086] platform mxc_ldb: suspend
[ 67.114750] mxc_ipu mxc_ipu: suspend
[ 67.118343] mxc_rtc mxc_rtc.0: suspend, may wakeup
[ 67.123143] imx-i2c imx-i2c.2: suspend
[ 67.126896] imx-i2c imx-i2c.1: suspend
[ 67.130658] imx-i2c imx-i2c.0: suspend
[ 67.134412] mxc_wdt mxc_wdt.0: suspend
[ 67.138175] mxc_sdma mxc_sdma: suspend
[ 67.141955] PM: suspend of devices complete after 397.646 msecs
[ 67.147892] suspend wp cpu=400000000
[ 67.154416] input input2: LATE type suspend
[ 67.158658] input input1: LATE type suspend
[ 67.162856] input input0: LATE type suspend
[ 67.167056] hub 2-0:1.0: LATE suspend
[ 67.170753] usb usb2: LATE type suspend, may wakeup
[ 67.175645] usb usb2: LATE suspend, may wakeup
[ 67.180123] hub 1-0:1.0: LATE suspend
[ 67.183798] usb usb1: LATE type suspend, may wakeup
[ 67.188706] usb usb1: LATE suspend, may wakeup
[ 67.193166] Generic PHY 0:00: LATE suspend
[ 67.197675] platform mxc_ddc.0: LATE suspend
[ 67.201965] mxc_sdc_fb mxc_sdc_fb.2: LATE suspend
[ 67.206685] mxc_sdc_fb mxc_sdc_fb.0: LATE suspend
[ 67.211495] mxc_sdc_fb mxc_sdc_fb.1: LATE suspend
[ 67.216222] i2c 2-0004: LATE suspend
[ 67.219838] i2c 2-0041: LATE suspend
[ 67.223428] i2c i2c-2: LATE suspend
[ 67.226928] kxtf9 1-000f: LATE suspend
[ 67.230707] i2c i2c-1: LATE suspend
[ 67.234209] i2c 0-0018: LATE suspend
[ 67.237813] i2c 0-0030: LATE suspend
[ 67.241401] i2c 0-001c: LATE suspend
[ 67.244987] platform da9052-bat: LATE suspend
[ 67.249376] da9052-tsi da9052-tsi: LATE suspend
[ 67.253928] da9052-regulator da9052-regulator: LATE suspend
[ 67.259535] platform da9052-leds: LATE suspend
[ 67.263993] platform da9052-wdt: LATE suspend
[ 67.268380] da9052-adc da9052-adc: LATE suspend
[ 67.272926] platform WLED-3: LATE suspend
[ 67.276947] platform WLED-2: LATE suspend
[ 67.280986] platform WLED-1: LATE suspend
[ 67.285010] da9052-onkey da9052-onkey: LATE suspend
[ 67.289920] platform da9052-rtc: LATE suspend
[ 67.294292] da9052_ssc_i2c 0-0048: LATE suspend
[ 67.298853] i2c i2c-0: LATE suspend
[ 67.302357] mxcintuart mxcintuart.4: LATE suspend
[ 67.307075] mxcintuart mxcintuart.3: LATE suspend
[ 67.311812] mxcintuart mxcintuart.2: LATE suspend
[ 67.316531] mxcintuart mxcintuart.1: LATE suspend
[ 67.321265] mxcintuart mxcintuart.0: LATE suspend
[ 67.325984] gpio-keys gpio-keys: LATE suspend
[ 67.330371] platform mxc_v4l2_output.0: LATE suspend
[ 67.335351] platform mxc_v4l2_capture.0: LATE suspend
[ 67.340434] usb_wakeup usb_wakeup.1: LATE suspend
[ 67.345153] fsl-ehci fsl-ehci.1: LATE suspend
[ 67.349540] usb_wakeup usb_wakeup.0: LATE suspend
[ 67.354259] fsl-ehci fsl-ehci.0: LATE suspend
[ 67.358646] platform imx-spdif-audio-device.0: LATE suspend
[ 67.364235] platform imx-3stack-tlv320aic3x.0: LATE suspend
[ 67.369840] platform imx-3stack-sgtl5000.0: LATE suspend
[ 67.375168] mxc_asrc mxc_asrc.0: LATE suspend
[ 67.379555] platform ptp.0: LATE suspend
[ 67.383491] fec fec.0: LATE suspend
[ 67.386992] platform imx-ahci-hwmon: LATE suspend
[ 67.391726] ahci ahci.0: LATE suspend
[ 67.395401] platform mxc_spdif.0: LATE suspend
[ 67.399876] platform mxc_ssi.1: LATE suspend
[ 67.404160] platform mxc_ssi.0: LATE suspend
[ 67.408489] mxsdhci mxsdhci.2: LATE suspend
[ 67.412687] mxsdhci mxsdhci.1: LATE suspend
[ 67.416883] mxsdhci mxsdhci.0: LATE suspend
[ 67.421103] pwm-backlight pwm-backlight.0: LATE suspend
[ 67.426343] mxc_pwm mxc_pwm.1: LATE suspend
[ 67.430558] mxc_iim mxc_iim.0: LATE suspend
[ 67.434756] busfreq busfreq.0: LATE suspend
[ 67.438969] mxc_dvfs_core mxc_dvfs_core.0: LATE suspend
[ 67.444209] mx5_pm mx5_pm.0: LATE suspend
[ 67.448249] platform mxc_scc.0: LATE suspend
[ 67.452533] mxc_gpu mxc_gpu.0: LATE suspend
[ 67.456729] mxc_vpu mxc_vpu.0: LATE suspend
[ 67.460943] tve tve.0: LATE suspend
[ 67.464445] platform mxc_ldb: LATE suspend
[ 67.468570] mxc_ipu mxc_ipu: LATE suspend
[ 67.472594] mxc_rtc mxc_rtc.0: LATE suspend, may wakeup
[ 67.477851] imx-i2c imx-i2c.2: LATE suspend
[ 67.482048] imx-i2c imx-i2c.1: LATE suspend
[ 67.486244] imx-i2c imx-i2c.0: LATE suspend
[ 67.490457] mxc_wdt mxc_wdt.0: LATE suspend
[ 67.494655] mxc_sdma mxc_sdma: LATE suspend
[ 67.498878] PM: late suspend of devices complete after 344.722 msecs
[ 67.505383] mx5_suspend_enter 1
[ 67.508539] mx5_suspend_enter 2
[ 67.511693] mx5_suspend_enter 5
[ 67.514841] mx5_suspend_enter 6
[ 67.517989] mx5_suspend_enter 7
[ 67.521137] mx5_suspend_enter 9
[ 67.524286] mx5_suspend_enter 10
[ 67.527521] xxxxxxxxxxx loco_suspend_enter hw
[ 67.531795] only da9053 irq is wakeup-enabled 1
[ 67.564606] mx5_suspend_enter 11
[ 67.567842] mx5_suspend_enter 12
If you encountered file system crash after resume from standby mode as I did, modify the kernel configuration as below:
Device Drivers --->
[*] MMC/SD/SDIO card support -->
[*] Assume MMC/SD cards are non-removable (DANGEROUS)
After went into standby mode, I pressed the power button, and then the system resumes from standby mode as below:
[ 45.357324] mxc_sdma mxc_sdma: EARLY resume
[ 45.361527] mxc_wdt mxc_wdt.0: EARLY resume
[ 45.365767] imx-i2c imx-i2c.0: EARLY resume
[ 45.369964] imx-i2c imx-i2c.1: EARLY resume
[ 45.374186] imx-i2c imx-i2c.2: EARLY resume
[ 45.378383] mxc_rtc mxc_rtc.0: EARLY resume
[ 45.382579] mxc_ipu mxc_ipu: EARLY resume
[ 45.386625] platform mxc_ldb: EARLY resume
[ 45.390735] tve tve.0: EARLY resume
[ 45.394257] mxc_vpu mxc_vpu.0: EARLY resume
[ 45.398456] mxc_gpu mxc_gpu.0: EARLY resume
[ 45.402652] platform mxc_scc.0: EARLY resume
[ 45.406956] mx5_pm mx5_pm.0: EARLY resume
[ 45.410979] mxc_dvfs_core mxc_dvfs_core.0: EARLY resume
[ 45.416241] busfreq busfreq.0: EARLY resume
[ 45.420438] mxc_iim mxc_iim.0: EARLY resume
[ 45.424655] mxc_pwm mxc_pwm.1: EARLY resume
[ 45.428854] pwm-backlight pwm-backlight.0: EARLY resume
[ 45.434115] mxsdhci mxsdhci.2: EARLY resume
[ 45.438312] mxsdhci mxsdhci.1: EARLY resume
[ 45.442508] mxsdhci mxsdhci.0: EARLY resume
[ 45.446725] platform mxc_ssi.0: EARLY resume
[ 45.451008] platform mxc_ssi.1: EARLY resume
[ 45.455313] platform mxc_spdif.0: EARLY resume
[ 45.459771] platform ahci.0: EARLY resume
[ 45.463793] platform imx-ahci-hwmon: EARLY resume
[ 45.468532] fec fec.0: EARLY resume
[ 45.472034] platform ptp.0: EARLY resume
[ 45.475990] mxc_asrc mxc_asrc.0: EARLY resume
[ 45.480361] platform imx-3stack-sgtl5000.0: EARLY resume
[ 45.485710] platform imx-3stack-tlv320aic3x.0: EARLY resume
[ 45.491299] platform imx-spdif-audio-device.0: EARLY resume
[ 45.496908] fsl-ehci fsl-ehci.0: EARLY resume
[ 45.501280] usb_wakeup usb_wakeup.0: EARLY resume
[ 45.506019] fsl-ehci fsl-ehci.1: EARLY resume
[ 45.510390] usb_wakeup usb_wakeup.1: EARLY resume
[ 45.515130] platform mxc_v4l2_capture.0: EARLY resume
[ 45.520196] platform mxc_v4l2_output.0: EARLY resume
[ 45.525196] platform gpio-keys: EARLY resume
[ 45.529480] mxcintuart mxcintuart.0: EARLY resume
[ 45.534219] mxcintuart mxcintuart.1: EARLY resume
[ 45.538938] mxcintuart mxcintuart.2: EARLY resume
[ 45.543656] mxcintuart mxcintuart.3: EARLY resume
[ 45.548397] mxcintuart mxcintuart.4: EARLY resume
[ 45.553116] i2c i2c-0: EARLY resume
[ 45.556669] da9052_ssc_i2c 0-0048: EARLY resume
[ 45.561215] platform da9052-rtc: EARLY resume
[ 45.565612] da9052-onkey da9052-onkey: EARLY resume
[ 45.570504] platform WLED-1: EARLY resume
[ 45.574549] platform WLED-2: EARLY resume
[ 45.578571] platform WLED-3: EARLY resume
[ 45.582593] da9052-adc da9052-adc: EARLY resume
[ 45.587160] platform da9052-wdt: EARLY resume
[ 45.591531] platform da9052-leds: EARLY resume
[ 45.596011] da9052-regulator da9052-regulator: EARLY resume
[ 45.601604] da9052-tsi da9052-tsi: EARLY resume
[ 45.606168] platform da9052-bat: EARLY resume
[ 45.610540] i2c 0-001c: EARLY resume
[ 45.614148] i2c 0-0030: EARLY resume
[ 45.617736] i2c 0-0018: EARLY resume
[ 45.621323] i2c i2c-1: EARLY resume
[ 45.624846] kxtf9 1-000f: EARLY resume
[ 45.628608] i2c i2c-2: EARLY resume
[ 45.632109] i2c 2-0041: EARLY resume
[ 45.635718] i2c 2-0004: EARLY resume
[ 45.639311] mxc_sdc_fb mxc_sdc_fb.1: EARLY resume
[ 45.644050] mxc_sdc_fb mxc_sdc_fb.0: EARLY resume
[ 45.648768] mxc_sdc_fb mxc_sdc_fb.2: EARLY resume
[ 45.653487] platform mxc_ddc.0: EARLY resume
[ 45.658252] Generic PHY 0:00: EARLY resume
[ 45.662372] usb usb1: EARLY resume
[ 45.665906] usb usb1: EARLY type resume
[ 45.669759] hub 1-0:1.0: EARLY resume
[ 45.673436] usb usb2: EARLY resume
[ 45.676915] usb usb2: EARLY type resume
[ 45.680765] hub 2-0:1.0: EARLY resume
[ 45.684470] input input0: EARLY type resume
[ 45.688669] input input1: EARLY type resume
[ 45.692894] PM: early resume of devices complete after 335.572 msecs
[ 45.702260] xxxxxxxxxxxxxxxxx KEY_POWER event
[ 45.709176] mxc_sdma mxc_sdma: resume
[ 45.712849] mxc_wdt mxc_wdt.0: resume
[ 45.716635] imx-i2c imx-i2c.0: resume
[ 45.720301] imx-i2c imx-i2c.1: resume
[ 45.723966] imx-i2c imx-i2c.2: resume
[ 45.727705] mxc_rtc mxc_rtc.0: resume
[ 45.731375] mxc_ipu mxc_ipu: resume
[ 45.734895] IPU DMFC DP HIGH RESOLUTION: 1(0,1), 5B(2~5), 5F(6,7)
[ 45.741025] platform mxc_ldb: resume
[ 45.744615] tve tve.0: resume
[ 45.747585] mxc_vpu mxc_vpu.0: resume
[ 45.751250] mxc_gpu mxc_gpu.0: resume
[ 45.754953] platform mxc_scc.0: resume
[ 45.758706] mx5_pm mx5_pm.0: resume
[ 45.762196] mxc_dvfs_core mxc_dvfs_core.0: resume
[ 45.766919] busfreq busfreq.0: resume
[ 45.770585] mxc_iim mxc_iim.0: resume
[ 45.774262] mxc_pwm mxc_pwm.1: resume
[ 45.777928] pwm-backlight pwm-backlight.0: resume
[ 45.782645] mxsdhci mxsdhci.2: resume
[ 45.926289] mxsdhci mxsdhci.1: resume
[ 45.985449] mmc1: error -110 during resume (card was removed?)
[ 45.991289] PM: Removing info for sdio:mmc1:0001:1
[ 45.996198] PM: Removing info for sdio:mmc1:0001:2
[ 46.001034] PM: Removing info for sdio:mmc1:0001:3
[ 46.005940] mmc1: card 0001 removed
[ 46.009431] PM: Removing info for mmc:mmc1:0001
[ 46.014040] mxsdhci mxsdhci.0: resume
[ 46.017725] platform mxc_ssi.0: resume
[ 46.021477] platform mxc_ssi.1: resume
[ 46.025262] platform mxc_spdif.0: resume
[ 46.029187] platform ahci.0: resume
[ 46.032676] platform imx-ahci-hwmon: resume
[ 46.036878] fec fec.0: resume
[ 46.039892] platform ptp.0: resume
[ 46.043297] mxc_asrc mxc_asrc.0: resume
[ 46.057183] platform imx-3stack-sgtl5000.0: resume
[ 46.061978] platform imx-3stack-tlv320aic3x.0: resume
[ 46.067049] platform imx-spdif-audio-device.0: resume
[ 46.072104] fsl-ehci fsl-ehci.0: resume
[ 46.075952] ehci fsl drv resume begins: DR
[ 46.080048] ehci_fsl_drv_resume,pm event, wait for wakeup irq if needed
[ 46.086712] usb usb1: resume
[ 46.089626] usb usb1: type resume
[ 46.102990] usb_wakeup usb_wakeup.0: resume
[ 46.107192] ehci_fsl_bus_resume, DR
[ 46.111058] fsl-ehci fsl-ehci.1: resume
[ 46.115914] ehci fsl drv resume begins: Host 1
[ 46.131407] ehci_fsl_drv_resume,pm event, wait for wakeup irq if needed
[ 46.138048] usb usb2: resume
[ 46.140931] usb usb2: type resume
[ 46.144317] hub 1-0:1.0: resume
[ 46.147467] usb_wakeup usb_wakeup.1: resume
[ 46.151653] platform mxc_v4l2_capture.0: resume
[ 46.157227] ehci_fsl_bus_resume, Host 1
[ 46.161203] platform mxc_v4l2_output.0: resume
[ 46.175717] platform gpio-keys: resume
[ 46.179469] mxcintuart mxcintuart.0: resume
[ 46.183656] mxcintuart mxcintuart.1: resume
[ 46.187864] mxcintuart mxcintuart.2: resume
[ 46.192080] mxcintuart mxcintuart.3: resume
[ 46.206347] hub 2-0:1.0: resume
[ 46.209501] mxcintuart mxcintuart.4: resume
[ 46.213689] i2c i2c-0: resume
[ 46.216683] da9052_ssc_i2c 0-0048: resume
[ 46.220723] platform da9052-rtc: resume
[ 46.224596] da9052-onkey da9052-onkey: resume
[ 46.228977] platform WLED-1: resume
[ 46.232488] platform WLED-2: resume
[ 46.236012] platform WLED-3: resume
[ 46.239525] da9052-adc da9052-adc: resume
[ 46.243556] platform da9052-wdt: resume
[ 46.247429] platform da9052-leds: resume
[ 46.251376] da9052-regulator da9052-regulator: resume
[ 46.256475] da9052-tsi da9052-tsi: resume
[ 46.260506] da9052_tsi_resume: called
[ 46.264204] platform da9052-bat: resume
[ 46.268062] i2c 0-001c: resume
[ 46.271139] i2c 0-0030: resume
[ 46.274230] i2c 0-0018: resume
[ 46.277307] i2c i2c-1: resume
[ 46.280297] kxtf9 1-000f: resume
[ 46.283550] i2c i2c-2: resume
[ 46.286552] i2c 2-0041: resume
[ 46.289630] i2c 2-0004: resume
[ 46.292718] mxc_sdc_fb mxc_sdc_fb.1: resume
[ 46.296944] mxc_ipu mxc_ipu: Channel already disabled 9
[ 46.296954] mxc_ipu mxc_ipu: Channel already uninitialized 9
[ 46.308384] mmc1: queuing unknown CIS tuple 0x80 (50 bytes)
[ 46.314079] DMFC high resolution has set, will not change
[ 46.316070] mmc1: queuing unknown CIS tuple 0x80 (7 bytes)
[ 46.318840] mmc1: queuing unknown CIS tuple 0x80 (7 bytes)
[ 46.354670] mxc_sdc_fb mxc_sdc_fb.0: resume
[ 46.358886] mxc_sdc_fb mxc_sdc_fb.2: resume
[ 46.363099] backlight pwm-backlight.0: legacy class resume
[ 46.368625] platform mxc_ddc.0: resume
[ 46.372971] Generic PHY 0:00: resume
[ 46.376714] input input0: type resume
[ 46.380414] input input1: type resume
[ 46.384124] rtc rtc0: legacy class resume
[ 46.388191] mmcblk mmc0:0001: legacy resume
[ 46.392454] PM: resume of devices complete after 683.495 msecs
[ 46.398356] usb usb2: completing type resume
[ 46.402660] usb usb1: completing type resume
[ 46.407489] platform mxc_ddc.0: completing resume
[ 46.412238] mxc_sdc_fb mxc_sdc_fb.2: completing resume
[ 46.417432] mxc_sdc_fb mxc_sdc_fb.0: completing resume
[ 46.422595] mxc_sdc_fb mxc_sdc_fb.1: completing resume
[ 46.427791] platform da9052-bat: completing resume
[ 46.432610] da9052-tsi da9052-tsi: completing resume
[ 46.437629] da9052-regulator da9052-regulator: completing resume
[ 46.443663] platform da9052-leds: completing resume
[ 46.448576] platform da9052-wdt: completing resume
[ 46.453390] da9052-adc da9052-adc: completing resume
[ 46.458388] platform WLED-3: completing resume
[ 46.462853] platform WLED-2: completing resume
[ 46.467331] platform WLED-1: completing resume
[ 46.471797] da9052-onkey da9052-onkey: completing resume
[ 46.477143] platform da9052-rtc: completing resume
[ 46.481960] mxcintuart mxcintuart.4: completing resume
[ 46.487132] mxcintuart mxcintuart.3: completing resume
[ 46.492293] mxcintuart mxcintuart.2: completing resume
[ 46.497466] mxcintuart mxcintuart.1: completing resume
[ 46.502627] mxcintuart mxcintuart.0: completing resume
[ 46.507799] platform gpio-keys: completing resume
[ 46.512525] platform mxc_v4l2_output.0: completing resume
[ 46.517957] platform mxc_v4l2_capture.0: completing resume
[ 46.523465] usb_wakeup usb_wakeup.1: completing resume
[ 46.528637] fsl-ehci fsl-ehci.1: completing resume
[ 46.533451] usb_wakeup usb_wakeup.0: completing resume
[ 46.538622] fsl-ehci fsl-ehci.0: completing resume
[ 46.543436] platform imx-spdif-audio-device.0: completing resume
[ 46.549476] platform imx-3stack-tlv320aic3x.0: completing resume
[ 46.555550] platform imx-3stack-sgtl5000.0: completing resume
[ 46.561322] mxc_asrc mxc_asrc.0: completing resume
[ 46.566153] platform ptp.0: completing resume
[ 46.570532] fec fec.0: completing resume
[ 46.574489] platform imx-ahci-hwmon: completing resume
[ 46.579649] platform ahci.0: completing resume
[ 46.584127] platform mxc_spdif.0: completing resume
[ 46.589027] platform mxc_ssi.1: completing resume
[ 46.593751] platform mxc_ssi.0: completing resume
[ 46.598489] mxsdhci mxsdhci.0: completing resume
[ 46.603129] mxsdhci mxsdhci.1: completing resume
[ 46.607779] mxsdhci mxsdhci.2: completing resume
[ 46.612418] pwm-backlight pwm-backlight.0: completing resume
[ 46.618111] mxc_pwm mxc_pwm.1: completing resume
[ 46.622751] mxc_iim mxc_iim.0: completing resume
[ 46.627401] busfreq busfreq.0: completing resume
[ 46.632040] mxc_dvfs_core mxc_dvfs_core.0: completing resume
[ 46.637733] mx5_pm mx5_pm.0: completing resume
[ 46.642199] platform mxc_scc.0: completing resume
[ 46.646938] mxc_gpu mxc_gpu.0: completing resume
[ 46.651578] mxc_vpu mxc_vpu.0: completing resume
[ 46.656230] tve tve.0: completing resume
[ 46.660175] platform mxc_ldb: completing resume
[ 46.664738] mxc_ipu mxc_ipu: completing resume
[ 46.669207] mxc_rtc mxc_rtc.0: completing resume
[ 46.673845] imx-i2c imx-i2c.2: completing resume
[ 46.678497] imx-i2c imx-i2c.1: completing resume
[ 46.683137] imx-i2c imx-i2c.0: completing resume
[ 46.687788] mxc_wdt mxc_wdt.0: completing resume
[ 46.692432] mxc_sdma mxc_sdma: completing resume
[ 46.697079] mmc1: queuing unknown CIS tuple 0x02 (1 bytes)
[ 46.702578] PM: Finishing wakeup.
[ 46.715947] Restarting tasks ...
[ 46.719175] hub 1-0:1.0: __pm_runtime_resume()!
[ 46.723892] usb usb1: __pm_runtime_resume()!
[ 46.728164] usb usb1: __pm_runtime_resume() returns 1!
[ 46.739038] done.
[ 46.789150] hub 1-0:1.0: __pm_runtime_resume() returns 0!
[ 46.797390] mmc1: new SDIO card at address 0001
[ 46.801997] PM: Adding info for mmc:mmc1:0001
[ 46.819165] hub 1-0:1.0: __pm_runtime_suspend()!
[ 46.825823] PM: Adding info for sdio:mmc1:0001:1
[ 46.845749] hub 1-0:1.0: __pm_runtime_suspend() returns 0!
[ 46.851261] hub 2-0:1.0: __pm_runtime_resume()!
[ 46.855795] usb usb2: __pm_runtime_resume()!
[ 46.860066] usb usb2: __pm_runtime_resume() returns 1!
[ 46.874266] PM: Adding info for sdio:mmc1:0001:2
[ 46.882962] PM: Adding info for sdio:mmc1:0001:3
[ 46.934192] hub 2-0:1.0: __pm_runtime_resume() returns 0!
[ 46.939615] hub 2-0:1.0: __pm_runtime_suspend()!
[ 46.976921] hub 2-0:1.0: __pm_runtime_suspend() returns 0!
[ 48.854051] usb usb1: __pm_runtime_suspend() from workqueue!
[ 48.859752] ehci_fsl_bus_suspend, DR
[ 48.864082] usb usb1: __pm_runtime_suspend() returns 0!
[ 49.864066] usb usb2: __pm_runtime_suspend() from workqueue!
[ 49.869768] ehci_fsl_bus_suspend, Host 1
[ 49.874382] usb usb2: __pm_runtime_suspend() returns 0!
[ 119.774049] mmc2: Card removed and resetting controller.
[ 119.779409] mmc2: Card removed and resetting controller.
[ 120.538346] mmc2: new SD card at address aaaa
[ 120.542816] PM: Adding info for mmc:mmc2:aaaa
[ 120.574253] mmcblk1: mmc2:aaaa SU02G 1.84 GiB
[ 120.578875] PM: Adding info for No Bus:mmcblk1
[ 120.583406] mmcblk1: p1
[ 120.595222] PM: Adding info for No Bus:mmcblk1p1
[ 120.624713] PM: Adding info for No Bus:179:16
[ 132.857513] EXT2-fs (mmcblk1p1): warning: mounting unchecked fs, running e2fsck is recommended
Now I can see the whole debug messages while entering into standby mode as below:
........................................................................................
........................................................................................
[ 41.668836] fec fec.0: LATE suspend
[ 41.672337] platform imx-ahci-hwmon: LATE suspend
[ 41.677055] platform ahci.0: LATE suspend
[ 41.681100] platform mxc_spdif.0: LATE suspend
[ 41.685558] platform mxc_ssi.1: LATE suspend
[ 41.689867] platform mxc_ssi.0: LATE suspend
[ 41.694150] mxsdhci mxsdhci.0: LATE suspend
[ 41.698368] mxsdhci mxsdhci.1: LATE suspend
[ 41.702565] mxsdhci mxsdhci.2: LATE suspend
[ 41.706762] pwm-backlight pwm-backlight.0: LATE suspend
[ 41.712024] mxc_pwm mxc_pwm.1: LATE suspend
[ 41.716222] mxc_iim mxc_iim.0: LATE suspend
[ 41.720439] busfreq busfreq.0: LATE suspend
[ 41.724637] mxc_dvfs_core mxc_dvfs_core.0: LATE suspend
[ 41.729899] mx5_pm mx5_pm.0: LATE suspend
[ 41.733923] platform mxc_scc.0: LATE suspend
[ 41.738228] mxc_gpu mxc_gpu.0: LATE suspend
[ 41.742424] mxc_vpu mxc_vpu.0: LATE suspend
[ 41.746620] tve tve.0: LATE suspend
[ 41.750142] platform mxc_ldb: LATE suspend
[ 41.754254] mxc_ipu mxc_ipu: LATE suspend
[ 41.758298] mxc_rtc mxc_rtc.0: LATE suspend, may wakeup
[ 41.763539] imx-i2c imx-i2c.2: LATE suspend
[ 41.767735] imx-i2c imx-i2c.1: LATE suspend
[ 41.771953] imx-i2c imx-i2c.0: LATE suspend
[ 41.776151] mxc_wdt mxc_wdt.0: LATE suspend
[ 41.780369] mxc_sdma mxc_sdma: LATE suspend
[ 41.784573] PM: late suspend of devices complete after 340.880 msecs
In order to see more debug messages while in standby or sleep mode,
I added " console_suspend_enabled = 0;" in suspend_console as below:
void suspend_console(void)
{
console_suspend_enabled = 0;//vin added 2012/4/9
if (!console_suspend_enabled)
return;
printk("Suspending console(s) (use no_console_suspend to debug)\n");
acquire_console_sem();
console_suspended = 1;
up(&console_sem);
}
You can create sysfs entries to keep the power management state.
Thanks for your response.yes you are right i have enable this drriver and i am getting the power button interrupt.
No entries are created in /proc or /sys for this.
how to check our GUI to put the system in to standby state.
Thanks,
From the Linux 2.6.35.3 kernel source: drivers/input/misc/Da9052_onkey.c, the function da9052_onkey_work_func
should be the entry for the power button event, I guess, but I haven't tried on hardware.
I will get hardware next week and then I will tell you in more detailed.
I think so but,theoritically are different.
Once it enter into standby state,by pressing the power button it is resuming to the normal state.
Please help me if you get where the entry is getting for the power button event.
And any user space commands are provided to check the power button press.Like acpi listen