零、点亮新tp
1. 修改kernel-3.18\arch\arm\configs\len6737m_35_m0_debug_defconfig、len6737m_35_m0_defconfig
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_MTK=y
#CONFIG_TOUCHSCREEN_MTK_FT6X36=y
CONFIG_TOUCHSCREEN_MTK_GT1X=y //打开指定的tp,关闭其他的
#CONFIG_TOUCHSCREEN_MTK_GSLX680=y
2. 修改device\alibaba\b905_lezhou\ProjectConfig.mk
CUSTOM_KERNEL_TOUCHPANEL = GT1XX //修改为指定tp
3. 添加驱动代码,放到kernel-3.18\drivers\input\touchscreen\mediatek\
创建文件夹 GT1X,文件夹中包含gt1x_tpd.c、gt1x_generic.c、Makefile等近10个文件
4. Y:\code\code5\mtk6737_pb5_1_0_cmcc\kernel-3.18\drivers\input\touchscreen\mediatek\Kconfig 添加:
config TOUCHSCREEN_MTK_GT1X
bool "GT1X for Mediatek package"
default n
help
Say Y here if you have GT1X touch panel.
If unsure, say N.
To compile this dirver as a module, choose M here: the
module will be called.
5. 在kernel-3.18\drivers\input\touchscreen\mediatek\Makefile 添加:
obj-$(CONFIG_TOUCHSCREEN_MTK_GT1X) += GT1X/
一、tp常用调试方法:
1. adb查看tp型号: -- 从log中查看
2. 查看tp报点
2.1 驱动中有打印的话:
cat /proc/kmsg | grep "tpd"
cat /proc/kmsg | grep -i "key|power|backlight"
2.2 可以直接从input设备节点/dev/input/event?读取
getevent -i
getevent -t /dev/input/event5 (event?,用[getevent -i] 查看)
-- 查看到的是原始数据,看不出坐标点,只能看出有无上报
2.3 查看hal层收到的数据
-- 尚未找到hal层代码路径
3. 在tp还不通的时候/frameworks/base/include/ui/KeycodeLabels.h中定义了很多keyevent
inut keyevent 3 //home
inut keyevent 4 //back
inut keyevent 26 //power
4 检查硬件
用万用表测量6个引脚的电压:
正常工作电压 休眠电压
INT 1.8V 0V
RST 1.8V 1.8V
VDD 2.8V 2.8V
SDA 1.8V 1.8V
SCL 1.8V 1.8V
GND 0V 0V
通过[万用表]查看中断脚有无中断 - 实测可以
通过[万用表]查看TP的GND是否与主板的GND导通
通过[示波器]查看sda有无数据波形
二、如何使能tp的log
1 GT5668 默认打开 GTP_DEBUG() 由宏控制
#define GTP_DEBUG_ON 1 // enable log printed by GTP_DEBUG(...)
2 ft6xx6_ges 默认关闭 TPD_DEBUG()
-- 暂时没找到哪边开关
三、虚拟按键
1 虚拟按键坐标通常写在dts中,也可能写死在驱动,具体看驱动
&touch {
tpd-resolution = <720 1280>; // 分辨率 - 不用这里的,而是用defconfig中的lcm宽与高
use-tpd-button = <1>; // 虚拟按键使能
tpd-key-num = <3>; // 虚拟按键个数
tpd-key-local= <139 172 158 0>; // 虚拟按键坐标 - 兑换139 与158的位置可以按键对换
tpd-key-dim-local = <90 883 100 40 230 883 100 40 370 883 100 40 0 0 0 0>;
2 通过sys节点读取
cat /sys/board_properties/virtualkeys.mtk-tpd // 获取软件中虚拟按键坐标
2.1 读取底层TP虚拟安静键值
cat proc/kmsg | grep "tpd"
2.2 读取上层TP虚拟安静键值
logcat | grep "keyCode"
3 从input设备节点/dev/input/event?读取
getevent -i
getevent -t /dev/input/event5 // 获取tp在内核中通过input上报的数据
-----虚拟按键跟tp供用一个input设备
4 getevent -l /dev/input/event5 // 可以查看键值坐标,如:
// =========虚拟按键按下所报键值===========
EV_ABS ABS_MT_TOUCH_MAJOR 00000014
EV_ABS ABS_MT_TRACKING_ID 00000000
EV_KEY BTN_TOUCH DOWN
EV_ABS ABS_MT_POSITION_X 0000003c // 换成十进制为(60,2100)
EV_ABS ABS_MT_POSITION_Y 00000640 // 换成十进制为(60,2100)
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_REPORT 00000000
EV_KEY BTN_TOUCH UP
EV_SYN SYN_MT_REPORT 00000000
EV_SYN SYN_REPORT 00000000
四、tp翻转180度
kernel-3.18\drivers\input\touchscreen\mediatek\ft6x36\focaltech_core.c 打开宏:
#define CONFIG_TPD_ROTATE_180
驱动中有:(没有可以自己实现)
#if defined(CONFIG_TPD_ROTATE_90) || defined(CONFIG_TPD_ROTATE_270) || defined(CONFIG_TPD_ROTATE_180)
static void tpd_rotate_180(int *x, int *y)
{
*y = TPD_RES_Y + 1 - *y; // TPD_RES_Y -- mtk_tpd.c从defconfig的CONFIG_LCM_HEIGT获得
*x = TPD_RES_X + 1 - *x;
}
#endif
static void tpd_down(int x, int y, int p, int id)
{
#if defined(CONFIG_TPD_ROTATE_180)
tpd_rotate_180(&x, &y);
#endif
...
input_report_abs(tpd->dev, ABS_MT_POSITION_X, x);
}
或者再直接一点,在上报之前:
+ events[i].x = 720 + 1 - events[i].x;
+ events[i].y = 1440 + 1 - events[i].y;
input_report_abs(tpd->dev, ABS_MT_TOUCH_MAJOR, events[i].area);
input_report_abs(tpd->dev, ABS_MT_POSITION_X, events[i].x);
input_report_abs(tpd->dev, ABS_MT_POSITION_Y, events[i].y);
五、相同ic的tp模组做兼容 - 根据读寄存器OxB8,
1.
2.
3.
六、打开ESD - 打静电的时候出现tp无功能(按电源键休眠再唤醒才会恢复正常)
1. 思立微的tp: 修改kernel-3.18/drivers/input/touchscreen/mediatek/gsl915/mtk_gslX680_V2.c(固件也需要打开ESD)
- //#define GSL_MONITOR
+ #define GSL_MONITOR
2. 汇顶的tp: 修改kernel-3.18/drivers/input/touchscreen/mediatek/GT5668/gt1x_generic.h(固件也需要打开ESD)
- #define GTP_ESD_PROTECT 0 // esd-protection module (with a cycle of 2 seconds)
+ #define GTP_ESD_PROTECT 1 // esd-protection module (with a cycle of 2 seconds)
3.
tp调试案例
案例一 : tp(gt5668)无功能 - 5行代码应该要跑 却被宏关掉 - 挪到宏外
现象 : 触摸tp无反应,查看log(getevent)也不报点
平台 : androidN,MTK6737
排查过程: 1. 查看tp 报点(getevent -t /dev/input/event*),触摸时无报点
2. 修改下发参数,先关闭gt1x_generic.h中的宏 -> 无改善
- #define GTP_DRIVER_SEND_CFG 1
+ #define GTP_DRIVER_SEND_CFG 0 //1
3. 请项目经理找tp模组厂要下发的参数,何入gt1x_generic.h中的
#define GTP_CFG_GROUP0(宏数组)中,并打开上一步关闭的宏 -> 无改善
4. 查看mtklog:
3. tp调试日志
最新推荐文章于 2025-05-20 16:22:40 发布