7. keypad调试日志

一、配置
	key主要指:
	power
	volumeup
	volumedown
	
	查看原理图:
			KROW0		KROW1
	KCOL0	volumeup	camera
	KCOL1	volumedown
	
	在dws中配置:
			Column0		Column1		Column2
	Row0	volumeup	volumedown
	Row1	camera
	Row2
	
	在dws中配置gpio(L - IN ; R - OUT)
			EintMode|Def.Mode	M0|M1|M2|M3|M4|M5|M6|M7|InPull En|InPull SelHigh|Def.Dir|In|Out|OutHigh|VarName1
	GPIO64			0:KPCOL0	1  1  					1		  1				 IN	 	 1	1	0		GPIO_KPD_KCOL0_PIN
	GPIO65			0:KPROW1	1  1  											 OUT	 0	1	0		GPIO_KPD_KROW1_PIN
	GPIO67			0:KPCOL1	1  1  					1		  1				 IN	 	 1	1	0		GPIO_KPD_KCOL1_PIN
	GPIO69			0:KPROW0	1  1  											 OUT	 0	1	0		GPIO_KPD_KROW0_PIN
	
	dws配置EINT : NC 即可
	
	
二、在休眠的状态,同时按下音量+/-键,framework层只收到一个键值

	1.1 kernel查看驱动上报事件 - 驱动打印:
		cat /proc/kmsg | grep "key"
		
		--	此处,休眠时两个键值都有打印,说明驱动都有通过input子系统上报(input_report_key)
			但是,input子系统有没有成功上报还得看,设备节点有没有数据流
		
	1.2 kernel查看event上报事件 - kernel打印:
		getevent –t /dev/input/event1
		
		--	查看到休眠时两个键值都有上报,说明kernel没有问题,上层去处理
		
		getevent -i 	-- 查看所有输入子设备的信息
		event0			-- ACCDET(耳机线控)			-- 未验证
		event1			-- key	 (音量+/-、电源键、hall)
		event2			-- hwdata(tp模拟ps)			-- 未验证
		event3			-- alsps
		event4			-- Gsensor
		event5			-- mtk-tpd(触摸、虚拟按键、tp手势)
		event6			-- mtk-tpd-kpd				-- 无用
		
	1.3 可以通过向/dev/input/event1写数据,模拟上报 -- 尝试不成功
		sendevent /dev/input/event0 1 116 1
		
	1.4 与上层约定的键值要添加到这里
		alps/device/magcomm/magc6580_we_c_m/mtk-kpd.kl(按键布局文件) , 映射给上层
		key 114	0x72   VOLUME_DOWN	// 侧键
		key 115	0x73   VOLUME_UP
		key 116	0x74   POWER
		key 212	0xD4   camera	
		
		注:修改此文件,可以用push的方式先试验
		find /system  -name mtk-kpd.kl
			/system/usr/keylayout/mtk-kpd.kl
		adb push ...  /system/usr/keylayout/
		
	1.5 代码路径:alps\kernel-3.18\drivers\input\keyboard\mediatek\kpd.c	

三、长按POWER键 10秒 -> 关机
	1. 在驱动中打开宏: 
	alps/kernel-3.18/arch/arm64/configs/magc6737m_65_c_m0_defconfig
		CONFIG_ONEKEY_REBOOT_NORMAL_MODE=y
		
	如关机后仍一直按住不放,变成重启
	
四、将侧键camera 改为F9(不需要改dws)
	alps/device/magcomm/magc6580_we_c_m/mtk-kpd.kl(按键布局文件) , 映射给上层
	-	key 212	0xD4   camera	
	+	key 212	0xD4   F9	
		

案例分析:
案例一:	android7.0上做了一个camera拍照实体按键,移植到android8.0,无功能
	现象: 同一台机器,烧android7.0的软件ok,烧8.0的软件无功能
	平台: androidO,,MTK6737M
	步骤: 1. 测试反馈拍照实体按键无功能,拿到机器,烧对应软件确实无功能,同一台机器烧7.0的软件有功能
	
		  2. 查看input设备上报
			2.1 查看input设备注册了哪些键值 - 有注册
				getevent -i /dev/input/event1
				
			k37mv1_64_bsp:/ $ getevent -i /dev/input/event1
				add device 1: /dev/input/event1
				  bus:      0019
				  vendor    2454
				  product   6500
				  version   0010
				  name:     "mtk-kpd"
				  location: ""
				  id:       ""
				  version:  1.0.1
				  events:
					KEY (0001): 0072  0073  0074  00d4	// 可以看到input设备注册了4个键值(power、volume up、volume down、camera)
				  input props:
					
							
			
			2.2 查看input设备上报的数据 - 没有上报
				getevent -l /dev/input/event1
			
			k37mv1_64_bsp:/ $ getevent -l /dev/input/event1
				EV_KEY       KEY_POWER            DOWN		// 按下power键
				EV_SYN       SYN_REPORT           00000000
				EV_KEY       KEY_POWER            UP		// 松开power键
				EV_SYN       SYN_REPORT           00000000

				EV_KEY       KEY_VOLUMEDOWN       DOWN		// 按下volume down键
				EV_SYN       SYN_REPORT           00000000
				EV_KEY       KEY_VOLUMEDOWN       UP		// 松开volume down键
				EV_SYN       SYN_REPORT           00000000
				
				// 但是按下camera键,无反应
				烧7.0的软件有键值上报:
				EV_KEY       KEY_CAMERA           DOWN
				EV_SYN       SYN_REPORT           00000000
				EV_KEY       KEY_CAMERA           UP
				EV_SYN       SYN_REPORT           00000000
				
		  3. 怀疑是dws没有配置:
			对比7.0 发现GPIO65的模式配置不正确(原理图中camera键接在“KPROW1”与“KPCOL0”中)
			
				在dws中配置gpio(L - IN ; R - OUT)
					EintMode|Def.Mode		M0|M1|M2|M3|M4|M5|M6|M7|InPull En|InPull SelHigh|Def.Dir|In|Out|OutHigh|VarName1
			GPIO64			0:KPCOL0		1  1  					1		  1				 IN	 	 1	1	0		GPIO_KPD_KCOL0_PIN
		-	GPIO65			0:CORESONIC_SWD	1  1  											 OUT	 0	1	0		GPIO_KPD_KROW1_PIN
		+	GPIO65			0:KPROW1		1  1  											 OUT	 0	1	0		GPIO_KPD_KROW1_PIN
			GPIO67			0:KPCOL1		1  1  					1		  1				 IN	 	 1	1	0		GPIO_KPD_KCOL1_PIN
			GPIO69			0:KPROW0		1  1  											 OUT	 0	1	0		GPIO_KPD_KROW0_PIN
	
			单独编译odmdtbo.img与boot.img,烧录不生效
			
			
		  4. 怀疑中断没有触发
			 4.1查看中断计数 
				k37mv1_64_bsp:/ $ cat /proc/interrupts | grep "mtk-kpd"
					196:          8       GIC 196  mtk-kpd
				
				按power 或volume down键中断计数有增加(按下+1, 松开+1)
				按camera键中断计数无变化
				
			 4.2添加log:
				kernel-3.18\drivers\input\keyboard\mediatek\kpd.c中
					static int kpd_pdrv_probe(struct platform_device *pdev)
						request_irq(kp_irqnr, kpd_irq_handler, IRQF_TRIGGER_NONE, KPD_NAME, NULL);
					
					static irqreturn_t kpd_irq_handler(int irq, void *dev_id)
						// 在中断函数中添加log
						printk(" kpd_irq_handler() start\n");
						disable_irq_nosync(kp_irqnr);
						tasklet_schedule(&kpd_keymap_tasklet);
						return IRQ_HANDLED;
				
				按camera键没有触发中断函数,其他按键正常触发
			
		  5. 咨询同事后,修改dws中的gpio口,需要编译烧录pl、lk、bootimage
				==> camera按键ok
				
	总结: 	经交叉对换,发现修改dws中gpio口只需要编译烧录lk即可
			
	
	
		
	
		





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