3. tp调试日志

本文详细介绍了MTK平台触摸屏(TP)的调试步骤,包括配置驱动、查看日志、处理硬件问题以及解决兼容性问题。通过修改配置文件、跟踪日志、检查硬件状态和修改代码,对TP无功能、静电干扰、翻转等问题进行了实例分析和解决方案展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

零、点亮新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:
	
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值