今天上午看了一下我们的手机的关机流程,参考了这个IBM网站上的资料:
想起来看关机流程的一个原因是,手机在接着充电器的时候,从Prizm关机会变成重启,而直接使用poweroff命令,则会正常关机。
Prizm走正常关机流程,调用sys.c中的sys_reboot函数,cmd传入LINUX_REBOOT_CMD_POWER_OFF,进入switch后,系统会走machine_power_off这个函数,真正的完成关机操作。
machine_power_off中会调用pm_power_off 这个函数,而这个函数已经在我们的其他模块中设置为了m_power_off = (void *)as3604_poweroff;
所以,关机的时候,最后一步会走到我们的as3604_poweroff函数。
而对于Prizm带充电器关机时重启的问题,就是在as3604_poweroff中做了设置,如果关机时充电器插着,或者PowerKey被按下,则在这里调用machine_restart()进行重启,否则关闭AS3604的各个输出,最后调用as3604_write(AS3604_RESET_CONTROL,POWER_OFF);进行完全的关机。