4. camera调试日志

来源:互联网 发布:巨人网络借壳过程 编辑:程序博客网 时间:2024/06/07 02:18
零、点亮新tp1. 修改kernel-3.18\arch\arm\configs\len6737m_35_m0_debug_defconfig、len6737m_35_m0_defconfigCONFIG_INPUT_TOUCHSCREEN=yCONFIG_TOUCHSCREEN_MTK=y#CONFIG_TOUCHSCREEN_MTK_FT6X36=yCONFIG_TOUCHSCREEN_MTK_GT1X=y//打开指定的tp,关闭其他的#CONFIG_TOUCHSCREEN_MTK_GSLX680=y2. 修改device\alibaba\b905_lezhou\ProjectConfig.mkCUSTOM_KERNEL_TOUCHPANEL = GT1XX//修改为指定tp3. 添加驱动代码,放到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_GT1Xbool "GT1X for Mediatek package"default nhelp  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 -igetevent -t /dev/input/event5(event?,用[getevent -i] 查看)-- 查看到的是原始数据,看不出坐标点,只能看出有无上报2.3 查看hal层收到的数据-- 尚未找到hal层代码路径3. 在tp还不通的时候/frameworks/base/include/ui/KeycodeLabels.h中定义了很多keyeventinut keyevent 3//homeinut keyevent 4//backinut keyevent 26//power4 检查硬件用万用表测量6个引脚的电压:正常工作电压休眠电压INT1.8V0VRST1.8V1.8VVDD2.8V2.8VSDA1.8V1.8VSCL1.8V1.8VGND0V0V通过[万用表]查看中断脚有无中断 - 实测可以通过[万用表]查看TP的GND是否与主板的GND导通通过[示波器]查看sda有无数据波形二、如何使能tp的log1 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 -igetevent -t /dev/input/event5// 获取tp在内核中通过input上报的数据-----虚拟按键跟tp供用一个input设备四、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;}#endifstatic 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);}五、相同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_MONITOR2. 汇顶的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. 2. 查看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]<<GTP-DBG>>[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.cstatic int tpd_event_handler(void *unused){-#if (GTP_PROXIMITY || HOTKNOT_BLOCK_RW)u8 end_cmd = 0;-#endifsched_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.cstatic 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.javapublic 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,};private static final int[] COLLECTOR_SENSORS = new int[] {Sensor.TYPE_ACCELEROMETER,Sensor.TYPE_GYROSCOPE,+   //android.hardware.Sensor.TYPE_PROXIMITY,Sensor.TYPE_LIGHT,Sensor.TYPE_ROTATION_VECTOR,};  案例十一: tp(gt5668) 手势唤醒后,tp无功能现象: tp手势唤醒后未能退出手势模式,触摸无报点,但有上报手势键值平台: androidM,MTK6580修改: 1. 抓取log - 显示手势唤醒之后打开了tp灭屏功能 - 不该打开的[  359.892565]  (0)[143:mtk-tpd]<<GTP-DBG>>[gesture_event_handler:204]0x814c = 0xCC,0x01,0x92,0x20[  359.894424]  (0)[143:mtk-tpd]<<GTP-DBG>>[gesture_event_handler:318]Gesture: 0xCC, points: 1[  359.894442]  (0)[143:mtk-tpd]<<GTP-INF>>[gesture_event_handler:325] Double click to light up the screen!// 双击手势[  359.987675]  (0)[1003:Binder:718_4]<<GTP-INF>>[gt1x_ps_enable:1538] psensoroperator cmd:2[  359.987682]  (0)[1003:Binder:718_4]<<GTP-INF>>[gt1x_ps_enable:1489] Proximity function to be on.[  360.051551]  (0)[1003:Binder:718_4]<<GTP-INF>>[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]<<GTP-INF>>[gt1x_resume:2277] Resume start...[  360.239922]  (1)[99:kworker/u8:1]<<GTP-INF>>[gt1x_resume:2281] Proximity is on![  360.251645]  (0)[2480:kworker/0:3]<<GTP-INF>>[gt1x_ps_operate:1538] psensor operator cmd:4  2. 正常按电源键唤醒log[1501:kworker/u8:4]GTP touch_resume_workqueue_callback[1501:kworker/u8:4]<<GTP-INF>>[gt1x_resume:2277] Resume start...[1501:kworker/u8:4]<<GTP-DBG>>[gt1x_wakeup_sleep:982]Wake up begin.// 应该会跑这句log[1501:kworker/u8:4]<<GTP-INF>>[gt1x_reset_guitar:810] GTP RESET![143:mtk-tpd]<<GTP-DBG>>[gt1x_touch_event_handler:1348]Additional Int Pulse.<196 -> 2733>  3. 电话tp灭屏,移开后唤醒log[  847.904369]  (0)[143:mtk-tpd]<<GTP-INF>>[gt1x_ps_operate:1538] psensor operator cmd:4[  847.904418]  (0)[143:mtk-tpd]<<GTP-INF>>[gt1x_ps_report:1481] Report proximity state: FARAWAY[  847.904436]  (0)[143:mtk-tpd]<<GTP-DBG>>[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]<<GTP-INF>>[gt1x_resume:2277] Resume start...[  848.499635]  (3)[4027:kworker/u8:0]<<GTP-INF>>[gt1x_resume:2281] Proximity is on!// 对比发现手势唤醒的log与此相同  4. 对比上面3个log发现问题出在: 手势唤醒时跑了gt1x_ps_enable()函数[怀疑是上层调用,只在80 5.1出现]在gt1x_ps_enable()做区分,如果是手势唤醒直接returnstatic s32 gt1x_ps_enable(s32 enable){u8 state;s32 ret = -1;#if GTP_GESTURE_WAKEUPif (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_ENtpd->reg = regulator_get(tpd->tpd_dev, "vtouch");retval = regulator_set_voltage(tpd->reg, 2800000, 2800000);DVDD上电受宏控制,而宏没开==> 打开宏: FTS_POWER_SOURCE_CUST_EN案例十三: 平台: androidM,MTK6580修改: 1. 案例检索:案例一: 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