需求:有些特殊的行业应用,需要上电自动开机。我司就接到一客户的订单,需要一台不需要按PowerKey键上电自动开机的工业平板。
实现步骤:实现插上电池自动开机需要从两个方面入手,第一,在硬件上将PowerKey键直接接地;第二,在软件上掉长按关机或者重启的功能;这里主要讲述如何在软件中去掉长按关机或重启的功能。
【1】在文件kernel-3.10/drivers/misc/mediatek/mach/$(platform)/$(project)//keypad/mtk_kpd.h中删除如下定义:
//#define ONEKEY_REBOOT_NORMAL_MODE
【2】在文件kernel-3.10/drivers/misc/mediatek/power/$(platform)/pmic.c的pmic_mt_probe函数中增加如下函数
- #if defined(CONFIG_ARCH_MT6753)
- PMICLOG("[PMIC_INIT_SETTING_V1] delay to MT6311 init\n");
- #else
- PMIC_INIT_SETTING_V1();
- pmic_config_interface(RG_PWRKEY_RST, val, MASK, SHIFT); // 增加的函数
- PMICLOG("[PMIC_INIT_SETTING_V1] Done\n");
- #endif
- PMIC_CUSTOM_SETTING_V1();
- pmic_config_interface(RG_PWRKEY_RST, val, MASK, SHIFT); // 增加的函数
- PMICLOG("[PMIC_CUSTOM_SETTING_V1] Done\n");
【3】 对于 pmic_config_interface(RG_PWRKEY_RST, val, MASK, SHIFT); // 增加的函数 中RG_PWRKEY_RST, val, MASK, SHIFT的值,可下表常用平台对应的实际参数:
PLATFORM | PMIC | RG_PWRKEY_RST | val | MASK | SHIFT |
6582/72/92/2601 | MT6323 | 0x011A | 0x0 | 0x1 | 6 |
6580 | MT6350 | 0x011A | 0x2 | 0x3 | 5 |
6753/35/35M/8735 | MT6328 | 0x02A0 | 0x0 | 0x1 | 9 |
6752 | MT6325 | 0x028A | 0x0 | 0x1 | 9 |
6755 | MT6351 | 0x02B6 | 0x0 | 0x1 | 9 |
mt8735平台 pmic_config_interface(0x02A0,0x0,0x1,9);
【4】修改之后对系统重新编译,将新系统更新到相应的mt8735设备(如我司的工业平板),更新完之后,拔掉USB,重新插上电池,即可实现自动开机。
【5】不足及解决方法:
不足--> PowerKey键直接接地之后,PowerKey键将失去作用,关机只能拔掉电池,息屏系统休眠将不能唤醒,不能更新下载系统。
解决方法--> 能够解决上述问题的方法之一是,将自弹式按键更换为自锁式按键。关机状态下,自锁式按键按下时PowerKey键直接接地,接上电池即可开机;自锁式按键弹起时,可使用USB更新系统;开机状态下,关机可将自锁式按键按下,系统将出现关机对话框,即可点击关机按钮关机;息屏系统休眠可按下自锁式按键,再按弹起即可唤醒。
【6】效果展示