需求:
一些行业需求,用MTK平台需要上电即立马开机功能!
解决方案:
平台本身开机是通过长按PowerKey 3S才能正常开机,有些平台可以通过配置PMIC的寄存器来实现,却有些平台实现不了,因此用如下硬件方案实现是靠谱的。
GPIO120_PWK开机默认是之前是低电平,Q601截止,Q602导通,PWRKEY接地,类似于按下PowerKey按键,实现开机,开机之后,屏背光亮后,在显示驱动出控制GPIO120_PWK输出高电平,Q601导通,Q602截止,类似于松开PowerKey,从而实现上电开机。
VBUS网络二极管接到GPIO120_PWK是为了在使用USB下载的时候,释放PowerKey按键。
软件上面处理方式(以6765为例):
+++ b/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6765/disp_lcm.c
@@ -996,12 +996,24 @@ extern int ddp_dsi_dump(DISP_MODULE_ENUM module, int level);
extern int DSI_BIST_Pattern_Test(DISP_MODULE_ENUM module, void* cmdq, bool enable, unsigned int color);
extern int ddp_dsi_start(DISP_MODULE_ENUM module, cmdqRecHandle cmdq);
+#define NM_PWRKEY_BOOTUP_SUPPORT
+#if defined(NM_PWRKEY_BOOTUP_SUPPORT)
+#define GPIO_POWERKEY_PIN (GPIO7 | 0x80000000)
+#endif
+
+
int disp_lcm_init(disp_lcm_handle *plcm)
{
DISPFUNC();
LCM_DRIVER *lcm_drv = NULL;
bool isLCMConnected = false;
+#if defined(NM_PWRKEY_BOOTUP_SUPPORT)
+ mt_set_gpio_mode(GPIO_POWERKEY_PIN, GPIO_MODE_00);
+ mt_set_gpio_dir(GPIO_POWERKEY_PIN, GPIO_DIR_OUT);
+ mt_set_gpio_out(GPIO_POWERKEY_PIN, GPIO_OUT_ONE);
+#endif
+
if (_is_lcm_inited(plcm)) {
lcm_drv = plcm->drv;
软件上面处理方式(以6737为例):
+++ b/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6735/disp_lcm.c
@@ -1079,13 +1079,21 @@ FAIL:
return NULL;
}
-
+//#define NM_PWRKEY_BOOTUP_SUPPORT
+#if defined(NM_PWRKEY_BOOTUP_SUPPORT)
+#define GPIO_POWERKEY_PIN (GPIO127 | 0x80000000)
+#endif
int disp_lcm_init(disp_lcm_handle *plcm)
{
DISPFUNC();
LCM_DRIVER *lcm_drv = NULL;
bool isLCMConnected = false;
+ #if defined(NM_PWRKEY_BOOTUP_SUPPORT)
+ mt_set_gpio_mode(GPIO_POWERKEY_PIN, GPIO_MODE_00);
+ mt_set_gpio_dir(GPIO_POWERKEY_PIN, GPIO_DIR_OUT);
+ mt_set_gpio_out(GPIO_POWERKEY_PIN, GPIO_OUT_ONE);
+ #endif