3. tp调试日志

零、点亮新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:
				 (1)[164:mtk-tpd]<>[gt1x_touch_event_handler:1344]Additional Int Pulse.// 额外的中断信号 -> 不明
			  
			  5. 老大徐工拿去处理之后,发现修改gt1x_generic.h就ok了
				-	#define GTP_PROXIMITY         0	// proximity module (function as the p-sensor)
				+	#define GTP_PROXIMITY         1 //0	// proximity module (function as the p-sensor)
				
			  6. alps\kernel-3.18\drivers\input\touchscreen\mediatek\GT5668\gt1x_tpd.c
					static int tpd_event_handler(void *unused)
					{
				-	#if (GTP_PROXIMITY || HOTKNOT_BLOCK_RW)
						u8 end_cmd = 0;
				-	#endif
						sched_setscheduler(current, SCHED_RR, ¶m);
						do {
							set_current_state(TASK_INTERRUPTIBLE);
							wait_event_interruptible(waiter, tpd_flag != 0);
							tpd_flag = 0;
							set_current_state(TASK_RUNNING);

					#if (GTP_PROXIMITY || HOTKNOT_BLOCK_RW)
					exit_work_func:
				+	#endif					// 使下面5行代码,无论宏开没开都有跑
							if (!gt1x_rawdiff_mode && (ret >= 0 || ret == ERROR_VALUE)) {
								ret = gt1x_i2c_write(GTP_READ_COOR_ADDR, &end_cmd, 1);
								if (ret < 0) {
									GTP_INFO("I2C write end_cmd  error!");
								}
							}
				-	#endif		
						} while (!kthread_should_stop());
						return 0;
					}
				
				==> ok
	
案例二	: tp(gsl915)打开静电处理 - 导致camera无连拍

	现象	: camera连拍失效,按住拍照键理应连拍40张,结果只拍到1张
	平台	: androidN,MTK6737
	排查过程: 1. 用版本回退的方法,发现有个commit在tp驱动中打开了宏:
				 #define GSL_MONITOR,导致camera无连拍
	
			  2. 查看tp 报点(getevent -t /dev/input/event*),发现camera拍照按住一会就不报点了
			  
			  3. 思立微gsl915,打开#define GSL_MONITOR - 静电处理
			  
	处理方案: 暂时关闭宏#define GSL_MONITOR, 安排FAE过来优化tp之后再打开
	总结	: camera连拍问题,比较难怀疑到tp,可以用版本回退方法排查。

案例三	: tp(hx8527)i2c地址 - 八位地址与七位地址
	现象	: tp不通
	平台	: androidN,MTK6737
	排查过程: 1.tp不通,询问FAE得知tp的i2c地址为0x90,由于dws最大只能写0x80,故在驱动中写死0x90 
				查看串口log, 以下报错信息:
				 [name:i2c&]ERROR,510: id=1,addr: 90, transfer error
				 [name:i2c&]ERROR,516: I2C_ACKERR
				 
			  2.觉得i2c地址还是不大对劲,尝试将0x90右移一位,变为0x48,尝试,不在报上面的错误
			  
	处理方案: 将八位地址改为七位地址 
	总结	: 由于是模组厂的FAE,提供的信息可能生硬,并不准确,比如这边FAE提供i2c地址为0x90,而我们需要的是七位地址
	
案例四	: tp(hx8527)无功能 - 驱动版本太老旧
	现象	: tp不通
	平台	: androidN,MTK6737
	排查过程: 1.接着案例三(i2c八位地址改为七位地址后)
	
			  2.查看mtklog(kernel_log),找到tp报错信息,由i2c.c打印: 
				[165:mtk-tpd][name:i2c&]: _i2c_get_transfer_len fail,return_value=-22
				[165:mtk-tpd][name:i2c&]: non-WRRD transfer length is not right. trans_len=80,
			  
			  3.问题未解决,等待FAE支持
				FAE提供了一份新的驱动就ok了(驱动中要打开宏: #define MTK_I2C_DMA)
				
	处理方案: FAE更换一份驱动
	总结	: 驱动工程师自己搞不定的可以找FAE,蛮好的
	
案例五	: 概率性tp(GSL915)无功能 - 静电导致
	现象	: 整机在使用过程中,概率性出现TP卡死(即除虚拟按键外,点击界面上任何图标均无作用)
	平台	: androidL,MTK6580
	排查过程: 1. 客户组装厂发现问题,研发内部进行测试未发现,但通过对TP打静电复现了此问题
				(正常情况下,用一只手触摸到TP上,同时在另外点击其他位置时也是没有触摸功能,现象相同)
	
	处理方案: 1.TP 增加ESD 软件功能和升级固件增强ESD及死点处理:
				代码修改参考:
				#define GSL_MONITOR  (打开ESD 功能并优化固件参数)
			  2.TP 处增加环境处理(贴导电胶布),提高GSL915 抗静电能力

	总结	: 由静电等原因引起的TP 一直报点(俗称“死点”),导致的视频中的现象(即主界面上有一直报点,导致无法点击任何功能,
			  但虚拟按键是上报按键值而非TP 坐标点,固虚拟按键有作用的但主界面上TP点无功能)

案例六	: GT5668 与 GT9XX 兼容(两个tp共用一份驱动:GT9XX)
	现象	: 
	平台	: androidL,MTK6580
	排查过程: 1. alps\kernel-3.10\drivers\input\touchscreen\mediatek\GT9XX\gt9xx_driver.c
					static s8 gtp_i2c_test(struct i2c_client *client)
					-	if ((!ret) && (hw_info == 0x00900600 ))      						// GT970 读出来是0x00900600
					+	if ((!ret) && ((hw_info == 0x00900600) || (hw_info == 0x00901003))) // GT5668读出来是0x00901003

			  2. alps\kernel-3.10\drivers\misc\mediatek\mach\mt6580\hct6580_weg_a_l\touchpanel\GT9XX\tpd_custom_gt9xx.h
				-	#define GTP_DRIVER_SEND_CFG   1       //driver send config to TP on intilization (for no config built in TP flash)
				+	#define GTP_DRIVER_SEND_CFG   0       //driver send config to TP on intilization (for no config built in TP flash)

				-	#define GTP_COMPATIBLE_MODE   1  //  ningshuigen       // compatible with GT9XXF
				+	#define GTP_COMPATIBLE_MODE   0  //  ningshuigen       // compatible with GT9XXF
								  
				-	#define GTP_GESTURE_WAKEUP    1
				+	#define GTP_GESTURE_WAKEUP    0

				-	#define GTP_DEBUG_ARRAY_ON    1
				-	#define GTP_DEBUG_FUNC_ON     1
				+	#define GTP_DEBUG_ARRAY_ON    0
				+	#define GTP_DEBUG_FUNC_ON     0

	总结	: GT5668 与 GT9XX flash大小不一致故无法使用下发参数与固件升级,只能由tp模组厂烧录固件,且手势唤醒、tp灭屏功能都要关闭
	
案例七	: tp双点触摸偏差(mstar - MSG2256)需要 DTS文件里面tpd--filter--enable的参数设置为0
	现象	: 单点触摸正常,双点触摸有一点偏查大
	平台	: androidN,MTK6737
	排查过程: 1. 无排查过程,fae提供修改方法:
				 alps\kernel-3.18\arch\arm64\boot\dts\magc6737m_65_n.dts
				 &touch {
					...
				-	tpd-filter-enable = <1>;
				+	tpd-filter-enable = <0>;
			  ==>ok
			  
	
案例八	: tp功耗过大 - 0.8mA - 关闭tp手势唤醒
	现象	: 整机功耗过大,飞行模式待机电流:5.7mA,拔掉tp后4.9mA
	平台	: androidN,MTK6737
	排查过程: 1. 硬件测试发现整机功耗过大,飞行模式待机电流:5.7mA
	
			  2. 测单板电流 - 正常
			  
			  3. 逐一去掉外围(lcm、tp、camera、fingerprint、sensor),发现由tp引起
			  
			  4. 检查配置,发现没有tp手势唤醒,而软件默认开启手势唤醒
				 修改alps\kernel-3.18\drivers\input\touchscreen\mediatek\ft6xx6_ges\focaltech_core.h
				 -	#define FTS_GESTRUE_EN 							1
				 +	#define FTS_GESTRUE_EN 							0
				 ==>功耗正常
				 
	
案例九	: tp(gsl915) i2c不通 - TP地线没接
	现象	: tp无功能
	平台	: androidN,MTK6737
	排查过程: 1. 查看dmesg(adb shell dmesg > e:5.log),发现i2c报错
				[   14.021471] .(2)[102:kworker/u8:1][name:i2c&]ERROR,510: id=1,addr: 40, transfer error
				[   14.022486] .(2)[102:kworker/u8:1][name:i2c&]ERROR,516: I2C_ACKERR
				[   14.039876] .(2)[102:kworker/u8:1]------gslX680 test_i2c error------
				[   14.040699] .(2)[102:kworker/u8:1]gslx680 init error,exit!!
				 
			  2. 兼容其他tp - JD100的tp(icn85xx) - 发现是ok的
			  
			  3. fae现场调试 - 发现tp的地线与主板不通(此tp的座子在屏的fpc上),而用别的tp时接在主板的tp座子是ok的
				 -> 跳线把地线接上 - tp i2c通讯成功
				 
			  4. tp报点错乱 -> fae升级固件 -> ok
			  
	处理方案: 暂时把地线接上调试,通知模组厂修改fpc
	总结	: tp的fpc转接线经常出问题,i2c不通时可以用万用表测一下tp六个脚是否与主板导通
	
	
案例十	: tp 断点,解锁的时候概率性断点,导致无法解锁
	平台: androidN,MTK6737
	修改: 1. alps\frameworks\base\packages\SystemUI\src\com\android\systemui\classifier\FalsingManager.java
			public class FalsingManager implements SensorEventListener {
				private static final String ENFORCE_BOUNCER = "falsing_manager_enforce_bouncer";

				private static final int[] CLASSIFIER_SENSORS = new int[] {
						android.hardware.Sensor.TYPE_GYROSCOPE,
					+	//android.hardware.Sensor.TYPE_PROXIMITY,	// 修改这里只会影响真ps,不会影响tp_ps
				};

				private static final int[] COLLECTOR_SENSORS = new int[] {
						Sensor.TYPE_ACCELEROMETER,
						Sensor.TYPE_GYROSCOPE,
					+   //android.hardware.Sensor.TYPE_PROXIMITY,	// 修改这里只会影响真ps,不会影响tp_ps
						Sensor.TYPE_LIGHT,
						Sensor.TYPE_ROTATION_VECTOR,
				};
		  
	
案例十一: tp(gt5668) 手势唤醒后,tp无功能
	现象: tp手势唤醒后未能退出手势模式,触摸无报点,但有上报手势键值
	平台: androidL,MTK6580
	修改: 1. 抓取log - 显示手势唤醒之后打开了tp灭屏功能 - 不该打开的
			[  359.892565]  (0)[143:mtk-tpd]<>[gesture_event_handler:204]0x814c = 0xCC,0x01,0x92,0x20
			[  359.894424]  (0)[143:mtk-tpd]<>[gesture_event_handler:318]Gesture: 0xCC, points: 1
			[  359.894442]  (0)[143:mtk-tpd]<>[gesture_event_handler:325] Double click to light up the screen!		// 双击手势
			[  359.987675]  (0)[1003:Binder:718_4]<>[gt1x_ps_enable:1538] psensoroperator cmd:2
			[  359.987682]  (0)[1003:Binder:718_4]<>[gt1x_ps_enable:1489] Proximity function to be on.
			[  360.051551]  (0)[1003:Binder:718_4]<>[gt1x_ps_enable:1505] Proximity function enable success.		// 进入tp灭屏
			[  360.239886]  (1)[99:kworker/u8:1]GTP touch_resume_workqueue_callback
			[  360.239907]  (1)[99:kworker/u8:1]<>[gt1x_resume:2277] Resume start...
			[  360.239922]  (1)[99:kworker/u8:1]<>[gt1x_resume:2281] Proximity is on!
			[  360.251645]  (0)[2480:kworker/0:3]<>[gt1x_ps_operate:1538] psensor operator cmd:4
		
		  2. 正常按电源键唤醒log
			[1501:kworker/u8:4]GTP touch_resume_workqueue_callback
			[1501:kworker/u8:4]<>[gt1x_resume:2277] Resume start...
			[1501:kworker/u8:4]<>[gt1x_wakeup_sleep:982]Wake up begin.			// 应该会跑这句log
			[1501:kworker/u8:4]<>[gt1x_reset_guitar:810] GTP RESET!
			[143:mtk-tpd]<>[gt1x_touch_event_handler:1348]Additional Int Pulse.<196 -> 2733>

		  3. 电话tp灭屏,移开后唤醒log
			[  847.904369]  (0)[143:mtk-tpd]<>[gt1x_ps_operate:1538] psensor operator cmd:4
			[  847.904418]  (0)[143:mtk-tpd]<>[gt1x_ps_report:1481] Report proximity state: FARAWAY
			[  847.904436]  (0)[143:mtk-tpd]<>[gt1x_prox_event_handler:1518]REG INDEX[0x814E]:0x80
			[  848.499616]  (3)[4027:kworker/u8:0]GTP touch_resume_workqueue_callback
			[  848.499629]  (3)[4027:kworker/u8:0]<>[gt1x_resume:2277] Resume start...
			[  848.499635]  (3)[4027:kworker/u8:0]<>[gt1x_resume:2281] Proximity is on!			// 对比发现手势唤醒的log与此相同

	
		  4. 对比上面3个log发现问题出在: 
			手势唤醒时跑了gt1x_ps_enable()函数[怀疑是上层调用,只在80 5.1出现]
			在gt1x_ps_enable()做区分,如果是手势唤醒直接return
			static s32 gt1x_ps_enable(s32 enable)
			{
				u8 state;
				s32 ret = -1;

			#if GTP_GESTURE_WAKEUP
				if (gesture_doze_status != DOZE_DISABLED) {	// 如果现在是手势模式
					GTP_INFO("PS ignore");
					return ret;
				}
			#endif

	
案例十二: tp(FT8006M) i2c不通 - DVDD2.8v没有供电
	现象	: tp无功能
	平台	: androidN,MTK6580
	排查过程: 1. 查看dmesg(adb shell dmesg > e:5.log),发现i2c报错
				[   14.021471] .(2)[102:kworker/u8:1][name:i2c&]ERROR,510: id=1,addr: 40, transfer error
				[   14.022486] .(2)[102:kworker/u8:1][name:i2c&]ERROR,516: I2C_ACKERR
				 
			  2. 万用表查看中断脚有无中断 - 无中断
			  
			  3. 万用表测量DVDD电压: 0v
				 
			  4. 检查代码:alps\kernel-3.18\drivers\input\touchscreen\mediatek\focaltech_ts\focaltech_core.c
				  #if FTS_POWER_SOURCE_CUST_EN
					tpd->reg = regulator_get(tpd->tpd_dev, "vtouch");
					retval = regulator_set_voltage(tpd->reg, 2800000, 2800000);
					
				DVDD上电受宏控制,而宏没开
				
				==> 打开宏: FTS_POWER_SOURCE_CUST_EN
	
	
案例十三: tp(hxchipset) - 中断不触发 - 暂时改为轮询 - 中断模式修改固件中触发方式(有边缘触发改为电平触发)
	平台: androidO,MTK6737
	修改: 1. tp中断函数不触发 - tp注册流程都跑过了,中断也成功注册(cat /proc/interrupts)
	
		  2. 查看gpio口引脚状态也是对的,(cat /sys/class/misc/mtgpio/pin)
		  
			用示波器测量中断脚,无触摸中断脚高低电平也在变化,时大约10ms来一次中断
			
		  3. ==> 改为轮询模式,tp可以滑动
			 修改alps\kernel-3.18\drivers\input\touchscreen\mediatek\hxchipset\himax_platform.c
				+	#define HX_POLL_MODE   1 
				
					static void himax_ts_work_func(struct work_struct *work)
					{
						struct himax_ts_data *ts = container_of(work, struct himax_ts_data, work);
				+	#if defined(HX_POLL_MODE)		
				+		if (ts->client->irq == 0 && ts->suspended == false)
				+	#endif	
						himax_ts_work(ts);
					}
					
					int himax_ts_register_interrupt(struct i2c_client *client)
					{
						ts->irq_enabled = 0;
						ts->use_irq = 0;

				+	#if defined(HX_POLL_MODE)
				+		client->irq = 0; //use polling mode, add by chenjp 
				+	#endif
				
		  4. 最后fae更新了固件之后中断模式ok - 仅修改固件中触发方式(有边缘触发改为电平触发)
				具体是固件中有一个位0-电平触发 1-边缘触发
				0x05 -> 0x04


	
案例十四: tp(FT8006M)i2c不通 -- 实际是nt36xxx而非FT8006M
	平台: androidO,MTK6737
	修改: 1. kernel log(dmesg)显示:
			[   15.047317] <1>.(1)[141:kworker/u8:2][name:i2c&]ERROR,510: id=1,addr: 38, transfer error
			[   15.048377] <1>.(1)[141:kworker/u8:2][name:i2c&]ERROR,516: I2C_ACKERR
			
		  2. 后来发现是驱动合入错误,更换供应商提供的驱动nt36xxx -->ok
		  
	
案例十五: tp虚拟按键无功能 - dts中配置有误
	现象: 同一台机器在androidN中ok,在androidO中tp虚拟按键无功能
	平台: androidO,MTK6737
	修改: 1. 查看getevent上报(getevent -l /dev/input/event2)
			触摸tp下方的虚拟按键时候,有坐标上报
			k37mv1_64_bsp:/ # getevent -l /dev/input/event2
				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    000001c2	// 换成十进制为(450,2100)
				EV_ABS       ABS_MT_POSITION_Y    00000640	// 换成十进制为(450,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

				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    0000010e	// 换成十进制为(270,2100)
				EV_ABS       ABS_MT_POSITION_Y    00000640	// 换成十进制为(270,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
				
				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
					
			 --> 与dts中配置一致
				&touch {
					tpd-resolution = <720 1280>;
					use-tpd-button = <1>;
					tpd-key-num = <3>;
					tpd-key-local= <580 172 158 0>;
					tpd-key-dim-local = <60 2100 100 100 240 2100 100 100 450 2100 100 100 0 0 0 0>;
		
		  2. 查看tp数据上报log - 正常
			kernel-3.18\drivers\input\touchscreen\mediatek\GT9XX\gt9xx_driver.c
			
			tpd_i2c_probe()
				tpd_irq_registration();
					request_irq(touch_irq, (irq_handler_t) tpd_eint_interrupt_handler, IRQF_TRIGGER_FALLING, "TOUCH_PANEL-eint", NULL);
					
			static void tpd_eint_interrupt_handler(void)
			{
				tpd_flag = 1;
			+	printk("liuzhigou tpd_eint_interrupt_handler() start\n");		// 在中断处理函数中添加log
				
				wake_up_interruptible(&waiter);
			}
						
			static int touch_event_handler(void *unused)
			do
			{
				set_current_state(TASK_INTERRUPTIBLE);
				wait_event_interruptible(waiter, tpd_flag != 0);
				
	
			+	printk("liuzhigou i2c read tp point data start\n");			// tp读坐标数据
				gtp_i2c_read(i2c_client_point, point_data, 12);

			#ifdef TPD_HAVE_BUTTON 
				key_value = point_data[3 + 8 * touch_num];
				if (key_value || pre_key)
				{
					for(i=0;iOK
		  
	
案例十七: 
	平台: androidO,MTK6737
	修改: 1. 
		  2. 
		  3.
		  
		  

案例检索:
案例一	: tp(gt5668)无功能 - 5行代码应该要跑 却被宏关掉 - 挪到宏外
案例二	: tp(gsl915)打开静电处理 - 导致camera无连拍 
案例三	: tp(hx8527)i2c地址 - 八位地址与七位地址 - dws写7位地址
案例四	: tp(hx8527)无功能 - 驱动版本太老旧 - 更新驱动
案例五	: 概率性tp(GSL915)无功能 - 静电导致 - 打开防静电的宏
案例六	: GT5668 与 GT9XX 兼容(两个tp共用一份驱动:GT9XX)
案例七	: tp(mstar - MSG2256)双点触摸偏差需要 DTS文件里面tpd--filter--enable的参数设置为0
案例八	: tp(ft6xx6_ges)功耗过大 - 0.8mA - 关闭tp手势唤醒
案例九	: tp(gsl915) i2c不通 - TP地线没接
案例十	: tp 断点,解锁的时候概率性断点,导致无法解锁 - 修改FalsingManager.java










			


你可能感兴趣的:(mtk驱动)