MTK6577+Android之快速开机
今天测试了关机电流,就是长按power按键,弹出下图:
图1
选择Power off(关机)后发现电流还有25mA,和短按进入挂起时电流一样。但为什么关机是电流还有这么高了,而且在关机时电源指示灯还是亮的,那说明就没有真正关机。此时我按下power按键,设备重新启动,但很快就进入系统(大概9s),比正常的拔掉电池后开机的29s短了不少。
难道这就是快速开机(ipo: instant power on)吗?MTK工程文件下
\mediatek\config\hsimobile77_ics2\projectconfig.mk
MTK_IPO_SUPPORT=yes
通过MTK_IPO_SUPPORT的设置来决定是否打开快速启动,如果为yes表示打开,否则为no。
关机的时候最后会调用pm_power_off()来关机的,见
\mediatek\platform\mt6577\kernel\core\core.c文件相关代码:
void __initmt6577_init(void)
{
unsigned int tmp;
pm_power_off = mt6577_power_off;
#ifdefined(CONFIG_CACHE_L2X0)
writel(L2X0_DYNAMIC_CLK_GATING_EN,PL310_BASE + L2X0_POWER_CTRL);
writel(readl(PL310_BASE +L2X0_PREFETCH_CTRL) | 0x40000000, PL310_BASE + L2X0_PREFETCH_CTRL);
/*L2C data ram access latency*/
tmp = readl(PL310_BASE +L2X0_DATA_LATENCY_CTRL);
tmp &= ~((0x7 << 4) | 0x7); //clear bit[6:4] and bit[2:0]
tmp |= ((0x2 << 4) | 0x1); //3T readaccess latency & 2T setup latency
writel(tmp, PL310_BASE +L2X0_DATA_LATENCY_CTRL);
l2x0_init((void __iomem *)PL310_BASE,0x70400000, 0x8FBFFFFF);
#endif /* CONFIG_CACHE_L2X0 */
#ifdefined(CONFIG_HAVE_ARM_SCU)
scu_enable((void *)SCU_BASE);
/* set INFRA_ACP to 0x00003333 forreceiving transactions to ACP */
writel(0x00003333, INFRA_SYS_CFG_BASE +0x0F04);
#endif /* CONFIG_HAVE_ARM_SCU */
}
可以看出实际是回调mt6577_power_off()来实现关机的,它的定义在
\mediatek\custom\hsimobile77_ics2\kernel\core\src\board.c下面:
voidmt6577_power_off(void)
{
printk("core--->mt6577_power_off()\n");
/* pull PWRBB low */
rtc_bbpu_power_down();
while (1) {
printk("mt6577_power_off :check charger\n");
if (pmic_chrdet_status() ==KAL_TRUE)
arch_reset(0,"charger");
}
}
通过拉低RTC的PWRBB引脚来关机,如果判断有接入USB或是充电器,会进入关机充电流程。
关机充电时,拔出USB调用uboot的mt6577_power_off来实现关机的。
参考链接:
MTK 快速开机 技术详解
深入解析Android关机
Android 长按电源键关机整个流程小学习