PMIC:MT6323
1. 侧按键硬件设计
我们设备左边侧按键定义为F7,连接到PMIC MT6323的FCHR_ENB引脚,右边1个电源按键直接接到PMIC的PWRKEY,右边的另一个按键(我们定义为F6)连接到CPU的KCOL0和KROW0引脚
2. DrvGen配置codegen.dws文件
mediatek\dct\DrvGen.exe
mediatek\custom\itek82_wet_kk\kernel\dct\dct\codegen.dws
图1
实际上F7是连接到PMIC的FCHR_ENB,而这里的KEYPAD setting是属于CPU键盘矩阵的配置的,但如果这里不配置F7,那DownloadKey、Mode Key就不能选择F7,而且这里F7我们选择在Row7和Column2交叉处,对应的HW keycode=65,恰好就是KEY_F7对应的scan code值(linux驱动和内核用到)
上图配置好后选择“确定”,然后选择Gen Code,再选择Save,如下图:
图2
更新的文件有mediatek\custom\itek82_wet_kk\kernel\dct\dct\pmic_drv.h和cust_kpd.h。
然后编译
./mk r lk k
./mk bootimage
跟新lk.bin和boot.img即可。
3. 遇到的问题
3.1 无法进入recovery mode问题
更新后,开机同时按下power+F7无法进入recovery mode,而是normal mode,根据MTK_on_line_FAQ_SW_ALPS文档给出的方法,如下:
[FAQ11302][keypad]使用FCHR_ENB为VOLUMEDOWN
KEY,如何进工厂模式
[DESCRIPTION]
使用FCHR_ENB为VOLUMEDOWNKEY,如何进工厂模式
[SOLUTION]
(1) 在“mediatek\custom\$(Project_Name)\kernel\kpd\kpd\mtk_kpd.h” 內的下列定义
“#define KPD_PMIC_RSTKEY_MAPKEY_VOLUMEDOWN//客制化的按键” “#define MT65XX_PMIC_RST_KEYKEY_VOLUMEDOWN//客制化的按键”
(2) alps\mediatek\platform\mt65XX\lk\mtk_key.c
BOOL mtk_detect_key(unsigned short key) /*key: HW keycode */ { unsigned short idx, bit, din; // if (key >= KPD_NUM_KEYS) // return FALSE; if (key % 9 == 8) key = 8; …… }
(1) mtk_kpd.h
#define KPD_PMIC_RSTKEY_MAP KEY_F7 #define MT65XX_PMIC_RST_KEY KEY_F7
(2) 如上面
但还是无法进入,下面先来看坚持启动模式的流程
图3
图4
虽然在mediatek\custom\itek82_wet_kk\kernel\kpd\kpd\mtk_kpd.h
#define KPD_PMIC_RSTKEY_MAP KEY_F7 #define MT65XX_PMIC_RST_KEY KEY_F7
但是经过验证
mtk_detect_key()的第112行是不知道定义了MT65XX_PMIC_RST_KEY的,我们看到mtk_key.c下有#include<target/cust_key.h>此文件位于mediatek\custom\itek82_wet_kk\lk\include\target目录下,恰好看到这里有注释掉MT65XX_PMIC_RST_KEY的定义,重新打开并修改为KEY_F7就可以了。
3.2 进入recovery mode只看到图标,没有看到显示的recovery菜单
[Description]
目前在JB2版本上,关机状态的手机按(PowerOn + Volume Up)键进入Recovery Mode时
,出现的画面是机器人倒地,不会直接显示主菜单。对于一些客户来说,机器人倒地意味着什么他
们并不清楚,导致无从下手。所以,就有了『直接显示主菜单』的需求。
[Solution]
待修改文件路径:alps/bootable/recovery/recovery.cpp
修改处:
main(){ ....... 原来是: if (status != INSTALL_SUCCESS ||ui->IsTextVisible()) { prompt_and_wait(device, status); } 改为: if (status != INSTALL_SUCCESS &&!(ui->WasTextEverVisible()) || ui- >IsTextVisible()) { ui->ShowText(true); //Added prompt_and_wait(device, status); } ........ }编译命令
./mk recoveryimage
然后更新recovery.img即可。
3.3 recovery mode后F6和F7无效问题
(1) 根据帮忙文档,查找到到相关的解决办法
[FAQ07808][keypad]进入recover模式后音量按键
功能失效
[DESCRIPTION]
在正常开机或者Factory mode下开机音量键是正常的,在使用LK作为boot loader,且打开LK_HAVE_TEXT_MENU宏后(默
认打开)时,Power key+Vol up后进入recovery模式会出现的多模式选择菜单:recoveryfactory normal
normal+ftrace等,
提示
Select Boot Mode:
[Volume_Up to select,Volume Down is OK.]
此时音量按键失效的问题。
[SOLUTION]
客制化修改mediatek\custom\$(project)\lk\include\target\cust_key.h
1.如果音量键是用的矩阵键盘:
根据DCT tool在矩阵键盘里设置的Vol+是rowX1,colY1;Vol-是rowX2,colY2.设定对应的HW scan code
example:
#define MT65xx_PMIC_RST_KEY 1000 //invalidkey #define MT65XX_BOOT_MENU_KEY 0 //Vol+ (row0,col0时)//修改成您自己的row col #define MT65XX_MENU_OK_KEY 1 //Vol- (row0,col1时)//修改成您自己的row col
2.如果音量键中有使用到了PMIC的homekey
example:vol-用PMIC homekey,vol+还是矩阵键盘里的
#define MT65xx_PMIC_RST_KEYMT65XX_FACTORY_KEY//或者具体的HW scan code #define MT65XX_BOOT_MENU_KEY 0 //Vol+ (row0,col0)//修改成您自己的row col #define MT65XX_MENU_OK_KEY MT65xx_PMIC_RST_KEY//Vol 修改前: //#define MT65XX_PMIC_RST_KEY 11 #define MT65XX_MENU_OK_KEY 2 /* KEY_VOLUMEDOWN */ 修改后: #define MT65XX_PMIC_RST_KEY (KEY_F7) #define MT65XX_MENU_OK_KEY MT65XX_PMIC_RST_KEY /* KEY_VOLUMEDOWN*/ 修改验证还是无效
(2) mediatek\custom\itek82_wet_kk\recovery\inc\cust_keys.h
修改cust_keys.h文件
//修改之前 /* #define RECOVERY_KEY_DOWN KEY_VOLUMEDOWN #define RECOVERY_KEY_UP KEY_VOLUMEDOWN #define RECOVERY_KEY_ENTER KEY_VOLUMEUP */ //修改之后 #define RECOVERY_KEY_DOWN KEY_F6 #define RECOVERY_KEY_UP KEY_F7 #define RECOVERY_KEY_ENTER KEY_POWER #define RECOVERY_KEY_MENU KEY_POWER然后编译和更新
./mk r k
./mk recoveryimage
更新recovery.img就解决了此问题
3.4 进入recovery mode后power按键响应不正常问题
上面的问题解决了,但是按power按键要调用对应的功能时,本来是可以看到recovery菜单的,按一下power按键就隐藏起来,再按一下就重新显示,而不是执行对应的功能,
修改 mediatek\custom\itek82_wet_kk\recovery\inc\cust_keys.h解决了此问题
修改前 #define RECOVERY_KEY_MENU KEY_POWER 修改后 #define RECOVERY_KEY_MENU KEY_MENU//KEY_POWER
3.5 进入factory mode后F7按键问题
修改mediatek\custom\itek82_wet_kk\factory\inc\cust_keys.h
修改前: #define CUST_KEY_UP KEY_UP 修改后 #define CUST_KEY_UP KEY_F7//KEY_UP
./mk mm mediate/factory
./mk snod这会生成生成system.img
更新system.img即可