问题描述:
前提进入是深睡眠模式,按唤醒键1秒钟左右正常唤醒,如果快速按 不能点亮屏(也就是LCD驱动的resume没有执行)。
看打印信息:
/*********************************************正确信息************************************/
Freezing user space processes ... (elapsed 0.00 seconds) done.
Freezing remaining freezable tasks ... (elapsed 0.00 seconds) done.
Suspending console(s) (use no_console_suspend to debug)
Mali<1>: mali_pm_suspend
cs42l51_suspend(): in...
drivers/gps/gpio.c(151) tcc_gps_suspend gps_trigger_flag(0)
read time 2011/03/06 03:14:00
tcc_rtc_setalarm
set alarm 2011/03/13 02:16:27 
RTC[C2] INT[9007] ALM[EF] IM[F] PEND[0] STR[00]read time 2011/03/06 03:14:00
read time 2011/03/06 03:14:00
drivers/char/tcc_bluetooth_sender.c(287) bf10_suspend suspend_flag 0
Vibrator: you want to sleep here !
tcc_adc_suspend in
tcc_adc_suspend out
dwc_otg_driver_suspend in
dwc_otg_driver_suspend out
tccfb_suspend:  
[#### CONFIG_PM ####] tcc_serial_suspend Port[1]
[#### CONFIG_PM ####] tcc_serial_suspend Port[0]
[MTD TCC] [PORT CONFIG - CS[0, 1] [NAND Data Port: GPIO_B Hw4 ~ Hw11]
ID change ISR : Device
[#### CONFIG_PM ####] tcc_serial_resume Port[0]
[#### CONFIG_PM ####] tcc_serial_resume Port[1]
tcc92fb tccfb_resume:  
wakeup wake lock: event2-992           //注意这个地方
dwc_otg_driver_resume in
dwc_otg_driver_resume out
tcc_adc_resume in
tcc_adc_resume out
usb usb1: root hub lost power or was reset
Vibrator: you want to wake up here !
drivers/char/tcc_bluetooth_sender.c(299) bf10_resume suspend_flag 0
read time 2011/03/06 03:14:55
drivers/gps/gpio.c(162) tcc_gps_resume gps_trigger_flag(0)
cs42l51_resume(): out..
usb 1-1: reset full speed USB device using tcc-ohci and address 2
Mali<1>: mali_pm_resume
tcc_pm_end
Restarting tasks ... done.
suspend: exit suspend, ret = 0 (2011-03-06 03:14:56.057571489 UTC)
tcc92fb tcc92xx_fb_late_resume: tccfb_pan_display  power down state 0
LQ032J3UX_PL_initialize.
LQ032J3UX_GPSB_SETConfig : GCLK 2000000
tccfb_pan_display  power down state 0              //打开屏幕灯
tccfb_pan_display  power down state 0
LCD ctrl:0xc114a ch_2:0x400020c :0x0: 0x0 
~ clock end 
 tcc92xx_fb_early_suspend: fb_lcdc_num:1  clock offtcc92xx_fb_early_suspend end lcdc_num:1 
 <6>PM: Syncing filesystems ... done.
Freezing user space processes ... (elapsed 0.00 seconds) done.
Freezing remaining freezable tasks ... (elapsed 0.00 seconds) done.
Suspending console(s) (use no_console_suspend to debug)
/***********************************************end of*****************************************//************************************************不能正常唤醒**********************************/
Suspending console(s) (use no_console_suspend to debug)
Mali<1>: mali_pm_suspend
cs42l51_suspend(): in...
drivers/gps/gpio.c(151) tcc_gps_suspend gps_trigger_flag(0)
read time 2011/03/06 02:20:58
tcc_rtc_setalarm
set alarm 2011/03/13 02:16:27 
RTC[C2] INT[9007] ALM[EF] IM[F] PEND[0] STR[00]read time 2011/03/06 02:20:58
read time 2011/03/06 02:20:58
drivers/char/tcc_bluetooth_sender.c(287) bf10_suspend suspend_flag 0
Vibrator: you want to sleep here !
tcc_adc_suspend in
tcc_adc_suspend out
dwc_otg_driver_suspend in
dwc_otg_driver_suspend out
tccfb_suspend:  
[#### CONFIG_PM ####] tcc_serial_suspend Port[1]
[#### CONFIG_PM ####] tcc_serial_suspend Port[0]
[MTD TCC] [PORT CONFIG - CS[0, 1] [NAND Data Port: GPIO_B Hw4 ~ Hw11]
ID change ISR : Device
[#### CONFIG_PM ####] tcc_serial_resume Port[0]
[#### CONFIG_PM ####] tcc_serial_resume Port[1]
tcc92fb tccfb_resume:  
wakeup wake lock: mmc_delayed_work       //和上注意到地方对比
dwc_otg_driver_resume in
dwc_otg_driver_resume out
tcc_adc_resume in
tcc_adc_resume out
usb usb1: root hub lost power or was reset
Vibrator: you want to wake up here !
drivers/char/tcc_bluetooth_sender.c(299) bf10_resume suspend_flag 0
read time 2011/03/06 02:21:18
drivers/gps/gpio.c(162) tcc_gps_resume gps_trigger_flag(0)
cs42l51_resume(): out..
usb 1-1: reset full speed USB device using tcc-ohci and address 2
Mali<1>: mali_pm_resume
tcc_pm_end
Restarting tasks ... done.
suspend: exit suspend, ret = 0 (2011-03-06 02:21:19.080519491 UTC)
/****************************************end  of*********************************/
上面打印信息,经过很多次的抓取都是wakeup wake lock不一样的。从上面可以看出,唤醒键按长按1秒钟左右(正常唤醒),和不正常按键(快速按唤醒键), 不同地方上面有一个唤醒锁
wakeup wake lock: mmc_delayed_work  和wakeup wake lock: event2-992不一样。为什么会这样呢。
找不方向,请指点方向。

解决方案 »

  1.   

    跟踪代码发现:
    kernel/power/main.c
       static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr,const char *buf, size_t n)
    函数没有调用(快速按键的时候)。
    先看打印信息/
    /*****************************************正确的*************************************/
    Freezing user space processes ... (elapsed 0.00 seconds) done.
    Freezing remaining freezable tasks ... (elapsed 0.00 seconds) done.
    kernel/power/main.c(440) enter_state()  error=0
    PM: Entering mem sleep
    kernel/power/main.c(324) suspend_devices_and_enter  in
    Suspending console(s) (use no_console_suspend to debug)
    Mali<1>: mali_pm_suspend
    cs42l51_suspend(): in...
    drivers/gps/gpio.c(151) tcc_gps_suspend gps_trigger_flag(0)
    read time 2011/06/17 00:19:42
    tcc_rtc_setalarm
    set alarm 2011/06/17 00:59:59 
    RTC[C2] INT[9003] ALM[EF] IM[F] PEND[0] STR[00]read time 2011/06/17 00:19:42
    read time 2011/06/17 00:19:42
    drivers/char/tcc_bluetooth_sender.c(287) bf10_suspend suspend_flag 0
    Vibrator: you want to sleep here !
    tcc_adc_suspend in
    tcc_adc_suspend out
    dwc_otg_driver_suspend in
    dwc_otg_driver_suspend out
    tccfb_suspend:  
    [#### CONFIG_PM ####] tcc_serial_suspend Port[1]
    [#### CONFIG_PM ####] tcc_serial_suspend Port[0]
    [MTD TCC] [PORT CONFIG - CS[0, 1] [NAND Data Port: GPIO_B Hw4 ~ Hw11]
    ID change ISR : Device
    drivers/base/power/main.c(552) device_resume  in
    [#### CONFIG_PM ####] tcc_serial_resume Port[0]
    [#### CONFIG_PM ####] tcc_serial_resume Port[1]
    tcc92fb tccfb_resume:  
    wakeup wake lock: event2-1045
    dwc_otg_driver_resume in
    dwc_otg_driver_resume out
    tcc_adc_resume in
    tcc_adc_resume out
    usb usb1: root hub lost power or was reset
    Vibrator: you want to wake up here !
    drivers/char/tcc_bluetooth_sender.c(299) bf10_resume suspend_flag 0
    usb connected
    read time 2011/06/17 00:19:49
    drivers/gps/gpio.c(162) tcc_gps_resume gps_trigger_flag(0)
    cs42l51_resume(): out..
    usb 1-1: reset full speed USB device using tcc-ohci and address 2
    android_usb gadget: high speed config #1: android
    adb_function_set_alt intf: 1 alt: 0
    Mali<1>: mali_pm_resume
    tcc_pm_end
    PM: Finishing wakeup.
    Restarting tasks ... <6>adb_release
    kernel/power/main.c(521) state_store()  in   //这里已经进入了
    kernel/power/main.c(522) state_store()  bur=on,n=2
    kernel/power/main.c(551) state_store()  state= 0  valid_state(state)=0
    kernel/power/earlysuspend.c(149) request_suspend_state()  in
    request_suspend_state() new_state=0
    in late_resume_work
    request_suspend_state() new_state=0
    kernel/power/earlysuspend.c(178) request_suspend_state()  out
    kernel/power/main.c(561) state_store()  out  return error=0
    adb_open
    done.
    kernel/power/main.c(457) enter_state()  out
    kernel/power/wakelock.c(290) suspend()  ret
    suspend: exit suspend, ret = 0 (2011-06-17 00:19:50.228862514 UTC)
    current_event_num == 200,entry_event_num==189
    kernel/power/wakelock.c(307) suspend()  out
    kernel/power/earlysuspend.c(118) late_resume   in
    tcc92fb tcc92xx_fb_late_resume: tccfb_pan_display  power down state 0
    tccfb_pan_display  power down state 0
    LQ032J3UX_PL_initialize.
    LQ032J3UX_GPSB_SETConfig : GCLK 2000000
    LCD ctrl:0xc114a ch_2:0x400020c :0x0: 0x0 
    ~ clock end 
     kernel/power/earlysuspend.c(139) late_resume   out
    init: untracked pid 1382 exited
    kernel/power/main.c(521) state_store()  in
    kernel/power/main.c(522) state_store()  bur=mem,n=3
    kernel/power/main.c(551) state_store()  state= 3  valid_state(state)=1
    kernel/power/earlysuspend.c(149) request_suspend_state()  in
    request_suspend_state() new_state=3
    in early_suspend_work
    request_suspend_state() new_state=3
    kernel/power/earlysuspend.c(178) request_suspend_state()  out
    kernel/power/main.c(561) state_store()  out  return error=0
    tcc92xx_fb_early_suspend: fb_lcdc_num:1  clock offtcc92xx_fb_early_suspend end lcdc_num:1 
     kernel/power/wakelock.c(278) suspend()  in
    kernel/power/main.c(472) pm_suspend() in; state=3
    kernel/power/main.c(426) enter_state()  in
    enter_state() valid_state(state)=1
    PM: Syncing filesystems ... done.
    PM: Preparing system for mem sleep
    Freezing user space processes ... (elapsed 0.00 seconds) done.
    Freezing remaining freezable tasks ... (elapsed 0.00 seconds) done.
    kernel/power/main.c(440) enter_state()  error=0
    PM: Entering mem sleep
    kernel/power/main.c(324) suspend_devices_and_enter  in
    Suspending console(s) (use no_console_suspend to debug)
    /*******************************end  of ************************/
    /*******************************错误信息*********************************/
    Mali<1>: mali_pm_suspend
    cs42l51_suspend(): in...
    drivers/gps/gpio.c(151) tcc_gps_suspend gps_trigger_flag(0)
    read time 2011/06/17 00:19:58
    tcc_rtc_setalarm
    set alarm 2011/06/17 00:59:58 
    RTC[C2] INT[9003] ALM[EF] IM[F] PEND[0] STR[00]read time 2011/06/17 00:19:58
    read time 2011/06/17 00:19:58
    drivers/char/tcc_bluetooth_sender.c(287) bf10_suspend suspend_flag 0
    Vibrator: you want to sleep here !
    tcc_adc_suspend in
    tcc_adc_suspend out
    dwc_otg_driver_suspend in
    dwc_otg_driver_suspend out
    tccfb_suspend:  
    [#### CONFIG_PM ####] tcc_serial_suspend Port[1]
    [#### CONFIG_PM ####] tcc_serial_suspend Port[0]
    [MTD TCC] [PORT CONFIG - CS[0, 1] [NAND Data Port: GPIO_B Hw4 ~ Hw11]
    ID change ISR : Device
    drivers/base/power/main.c(552) device_resume  in
    [#### CONFIG_PM ####] tcc_serial_resume Port[0]
    [#### CONFIG_PM ####] tcc_serial_resume Port[1]
    tcc92fb tccfb_resume:  
    wakeup wake lock: mmc_delayed_work
    dwc_otg_driver_resume in
    dwc_otg_driver_resume out
    tcc_adc_resume in
    tcc_adc_resume out
    usb usb1: root hub lost power or was reset
    Vibrator: you want to wake up here !
    drivers/char/tcc_bluetooth_sender.c(299) bf10_resume suspend_flag 0
    usb connected
    read time 2011/06/17 00:22:54
    drivers/gps/gpio.c(162) tcc_gps_resume gps_trigger_flag(0)
    cs42l51_resume(): out..
    usb 1-1: reset full speed USB device using tcc-ohci and address 2
    android_usb gadget: high speed config #1: android
    adb_function_set_alt intf: 1 alt: 0
    Mali<1>: mali_pm_resume
    tcc_pm_end
    PM: Finishing wakeup.
    Restarting tasks ... <6>adb_release
    adb_open
    done.
    kernel/power/main.c(457) enter_state()  out
    kernel/power/wakelock.c(290) suspend()  ret
    suspend: exit suspend, ret = 0 (2011-06-17 00:22:55.167308332 UTC)
    current_event_num == 206,entry_event_num==202
    kernel/power/wakelock.c(307) suspend()  out
    kernel/power/wakelock.c(278) suspend()  in
    kernel/power/main.c(472) pm_suspend() in; state=3
    kernel/power/main.c(426) enter_state()  in
    /****************************end  of********************************************/
    我不明白 没有进入tate_store()函数。但是为什么suspend能进入呢。state_store(),是上层传下来参数(buf).没有传下来,我怎么执行呢。