6. sensor调试日志

来源:互联网 发布:巨人网络借壳过程 编辑:程序博客网 时间:2024/06/15 15:02
注epl259x的驱动可以用于epl2590MN66213MN26233TKDN- id = 0x91MN25713EKDN- id = 0x818975// 4个手势方向 - 4颗sensor排列2219// 4个手势方向als 室内光照下应该为700左右ps底噪值应该为700左右 - *#*#3646633#*#*  *#*#889988#*#* -> Hardware Testing ->Sensor ->Light/Proximity Sensor ->Ps Calibration ->Ps Calibration -> Calibration阈值如果是(500,800),底噪700靠近1500远离1200epl_sensor.ps.integration_time = EPL_PS_INTT_144;// 272 - qk    dynk_low_offset = 500;// 100 - qk    dynk_high_offset = 800;// 300 - qk一、新增驱动(示例: msensor st480)1.添加kernel-3.18\drivers\misc\mediatek\magnetometer\st480文件夹(包含st480.c、st480.h、Kconfig、Makefile四个文件)st480.cst480.hKconfig建宏--MTK_ST480Makefile2.kernel-3.18\drivers\misc\mediatek\magnetometer\Kconfig 添加:+ source "drivers/misc/mediatek/magnetometer/st480/Kconfig"3.kernel-3.18\drivers\misc\mediatek\magnetometer\Makefile 添加:+ obj-$(CONFIG_MTK_ST480)+=  st480/4.kernel-3.18\arch\arm\boot\dts\len6737m_35_m0.dts 添加:  注:这一段没有的话(或名字不对应),会导致开机重启cust_mag@0 {compatible= "mediatek,st480";i2c_num= <2>;// i2c控制器2(即i2c总线2),sensor都接在控制器2上--即i2c总线2i2c_addr= <0x0C 0 0 0>;// dws也写了一个i2c地址,到底用哪个看驱动,通常写在dwsdirection= <1>;// 方向 –> 唯一用到的power_id= <0xffff>;power_vol= <0>;is_batch_supported= <0>;};4.1 修改dws: i2c总线数与i2c地址,驱动中会用到I2C:MSENSORI2C_CHANNEL_20x305.kernel-3.18\arch\arm\configs\len6737m_35_m0_debug_defconfig、len6737m_35_m0_defconfig 修改- #CONFIG_CUSTOM_KERNEL_MAGNETOMETER=y+ CONFIG_CUSTOM_KERNEL_MAGNETOMETER=y+ CONFIG_MTK_ST480=y6.添加vendor\lentek\libs\mt6737m\st480文件夹(包含st480、Android.mk、README、NOTICE)st480是一个可执行文件---init.xxx.rc中运行的daemon进程Android.mk是干嘛的?README解释信息NOTICE解释信息7.device\lentek\len6737m_35_m0\ProjectConfig.mk 修改:- CUSTOM_KERNEL_MAGNETOMETER = no+ CUSTOM_KERNEL_MAGNETOMETER = yes8.device\mediatek\mt6735\init.mt6735.rc 添加:service st480 /system/bin/st480// 这是一个服务,服务的路径disableduser systemgroup systemclass main// 归属于main这个service,main启动时启动st4809.device\lentek\len6737m_35_m0\factory_init.project.rc 添加:service st480 /system/bin/st480// 这是一个服务,服务的路径--应该是工厂模式用到的disableduser systemgroup system10.device\mediatek\common\sepolicy\file_contexts 添加:+ /system/bin/st480 u:object_r:st480_exec:s0// 当我们添加跑一个服务的时候就需要对其添加(开放)权限?哪些进程可以访问它11.添加device\mediatek\common\sepolicy\st480.te文件12.device\mediatek\mt6735\device.mk 添加:+ PRODUCT_PACKAGES += st480// 复制st480,从…到/system/bin/二、查看log:1.查看上报数据cat /proc/kmsg | grep "***"2.查看开机串口log从串口测试点(TXD)接线出来,用usb转串口线,配合xshell抓串口log(波特率:912600)3.查看sensor型号:eng 版可以通过 命令查看: cat /sys/bus/platform/drivers/gsensor/chipinfouser版可以通过 命令查看: dmesg | grep "gsensor" -i// 按power键灭屏or亮屏时,会打开or关闭sensor,会有内核缓冲器会有log打出[ 1099.329303]  (0)[934:android.ui]qma6981_enable_nodata 1964 : Gsensor not in suspend gsensor_SetPowerMode!, enable_status = 1[ 1102.168146]  (0)[946:PowerManagerSer]qma6981_enable_nodata 1964 : Gsensor not in suspend gsensor_SetPowerMode!, enable_status = 0user版可以通过 命令查看: dmesg | grep "als" -iuser版可以通过 命令查看: dmesg | grep "msensor" -iuser版可以通过 命令查看: dmesg | grep "gyro" -i三、根据input子系统的调试方法:getevent -i 查看所有的input设备getevent -t /dev/input/event4获取gsensor往上层上报的包(封装过,加入time等信息,以16进制方式打印)1. ps靠近:[    2208.288534] 0002 0002 00000001[    2208.288534] 0002 0001 00000003[    2208.288534] 0000 0000 00000000远离:[    2212.838044] 0002 0002 00000002[    2212.838044] 0002 0001 00000003[    2212.838044] 0000 0000 000000002. cat /proc/kmsg | grep "liuzhigou"<4>[  564.973691]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa<4>[  564.973725]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low =  0x8<4>[  565.168562]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa<4>[  565.168588]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low =  0x8<4>[  565.368485]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa<4>[  565.368527]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low =  0x8<4>[  565.568808]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xa<4>[  565.568851]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low =  0x8<4>[  565.599273]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0x17<4>[  565.599314]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low =  0x0<4>[  565.599982]<0> (0)[2935:kworker/0:3]liuzhigou [epl_sensor_report_ps_status]: epl_sensor.ps.data.data=18642, ps_status=0// 靠近<4>[  565.630511]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xf<4>[  565.630547]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low =  0x8<4>[  565.631129]<0> (0)[2935:kworker/0:3]liuzhigou [epl_sensor_report_ps_status]: epl_sensor.ps.data.data=17031, ps_status=1// 远离<4>[  565.735292]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0x17<4>[  565.735316]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low =  0x0<4>[  565.735765]<0> (0)[2935:kworker/0:3]liuzhigou [epl_sensor_report_ps_status]: epl_sensor.ps.data.data=17468, ps_status=0// 靠近<4>[  565.757034]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status gRawData.raw_bytes[0] = 0xf<4>[  565.757054]<0> (0)[2935:kworker/0:3]liuzhigou epl_sensor_read_ps_status epl_sensor.ps.compare_low =  0x8<4>[  565.757495]<0> (0)[2935:kworker/0:3]liuzhigou [epl_sensor_report_ps_status]: epl_sensor.ps.data.data=16792, ps_status=1// 远离四、跟读代码可知:以gsensor(mc3xxx_auto)为例通过sys文件系统接口调试1.架构实现- 两个路径的节点是一样的,cat出来也是相同的,hal层走class/sys/class/misc/m_acc_misc/***有若干属性,可以读写操作cat /sys/.../accenablenodata-- 不支持echo 0/1> 无作用cat /sys/.../accactive-- 1(使能)echo 0> /sys/.../accactive -- disablecat /sys/.../accdelay(不常用)cat /sys/.../accbatch(不常用)cat /sys/.../accflush(不常用)cat /sys/.../accdevnum-- 4(/dev/input/event4)2.驱动实现/sys/bus/platform/drivers/gsensor/*** 有若干属性,可以读写操作*cat /sys/.../chipinfo-- MC3XXX Chip-- 直接打印MC3XXX Chip*cat /sys/.../sensordata -- 1758 0695 1b88-- 读地址0x00cat /sys/.../cali-- 三组校准数据 -- 第二组为校准系数,上层未下发就为0 cat /sys/.../selftest-- 空(未设置)cat /sys/.../firlen -- 0-- 滤波长度 - 从dts获得 - 全部为0cat /sys/.../trace-- 0x0000-- mc3xxx_i2c_probe()把它设置为0cat /sys/.../status -- CUST: 2 7 <-1 0> -- i2c_num direction <power_id power_vol> -  从dts获取cat /sys/.../power-- 亮屏0x0041,灭屏0x0043-- 读地址0x07cat /sys/.../version-- 2.1.6-- 打印驱动的宏*cat /sys/.../chipid -- 7C-5F-5E-46-- 读地址0x3Ccat /sys/.../virtualz-- 不支持*cat /sys/.../regmap -- 打印所有寄存器的值*cat /sys/.../orientation-- 7-- 从dts获取 echo 7 > /sys/.../orientationcat /sys/.../accuracy-- 2(精度 - 宏设置)cat /sys/.../selfcheck-- 乱码cat /sys/.../validate-- 0(验证成功)-- 从0x3b读出pcode - 匹配mc3***系列芯片 - 验证成功返回0cat /sys/.../pdoc-- 0(不支持 - 宏未开)五、sensor兼容:以gsensor为例:Mtk的架构已经做了兼容,最多只能兼容5个(gsensor_init_list[5])(tpd_driver_list[20])android5.1:六、ps的阈值如何设定1. androidL/M/N:kernel-3.10/drivers/misc/mediatek/alsps/epl259x/epl259x.cdynk_low_offset = 2000;//500;//100 - qkdynk_high_offset = 2300;//800;//300 - qk将(500,800)改为(2000,2300),距离约降低三分一,写死在驱动不用dts七、sensor数据上报有三种接口1. 轮询上报--最终使用2. sys文件系统-- 调试使用3. ioctl接口-- ATA (工厂模式: 同时按住音量减和电源键开机)mtk原生:关闭轮询 - 无功能关闭ioctl- 工厂模式无数据(音量减与电源键同时按住开机)关闭sysfs- 有功能bose修改hal层框架后: - 由一个进程主动读取关闭轮询 - 有功能关闭ioctl- 工厂模式无数据(音量减与电源键同时按住开机)关闭sysfs- 无功能八、调试查看loghal层enable与disable时候会打印:[logcat | grep "..."]vendor/mediatek/proprietary/hardware/sensor/nusensors.cppint sensors_poll_context_t::activate(int handle, int enabled){ALOGD( "activate handle =%d, enable = %d",handle, enabled );sensor编号:(kernel/.../hwmsensor.h中定义减1)accelerometer0magnetometer1orientation2gyroscope3ambient light sensor 4proximity sensor7九、*#0*#测试模式调用接口:codec_37_n_base\update\alps\kstpackages\apps\KSTFactoryTest\src\com\kingsentime\factorytest\TestSensor.javaaccelerometerSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);lightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);distanceSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);十、msensor异常调试步骤:1. 安装打开APK : zhinanzhen.apk。划八校准后查看是否正常: 不管手机如何转动指针始终指北==>指南针转动,但并不始终指北 -->修改DTS中msensor的方向==>指南针不动 -->安装sensorlist.apk 查看指南针msensor是否有数据变化==>无数据变化 -->查看开机log,查看是否有I2C通讯报错,  ==> 如i2c报错 -->用万用表检查: 芯片供电电压、连线(遇到过贴片没贴好,重贴就ok)和i2c地址2. 如果msensor方向调整对了,当指南针方向还是不对==>检查gsensor是否正常工作,因为指南针会用到gsensor的数据3. adb shellps 查看指南针的daemon是否正常运行,如未正常运行,可adb push ;cd 到所在目录; daemon名; 手动把daemon跑起来注:1.eng版才有运行权限2.cd /system/bin/; /daemon名; 运行, kill daemon; 停止3.alps/out/target/product/magc6737m_65_n/system/bin/4. 如指南针方向大致正确,但上下抖动(正负3度以外),检查msensor摆件位置,由于msensor检测磁场,旁边不能有:带磁元件(如马达、camera)【遇到过带磁螺丝导致方向不准,换螺丝】大电流(cpu/flash/wifi芯片/百毫安的供电电流、需距离5mm以上)【遇到过两次有大电流,改版】如果有,需要硬件改版,将msensor挪到旁边去十一、gsensor、msensor、gyroscope的方向调试1. 由于这些sensor都是三轴sensor,故均有0~7 八个方向。通常写在dts,少数不规范的写死在驱动2. 先找到小原点即芯片原点坐标(在芯片丝印上有)gsensor(3433/6981/bmc156)   y __|__| o||  |-->x|__ __|gyroscope(bmg160)   x __|__| o|y<--|  ||__ __|然后根据sensor的摆件位置,计算出sensor的方向,先把手机平方在桌面2.1 如sensor贴在top层y轴指向听筒位置(小圆点在右上角),方向为0y轴指向左侧位置(小圆点在左上角),方向为1y轴指向右侧位置(小圆点在左下角),方向为2y轴指向home位置(小圆点在右下角),方向为3(逆时针旋转90度,方向+1)2.2如sensor贴在bottom层,相应的方向:4/5/6/73. 由于芯片常常在屏蔽罩里面,不便查看,可以由原理图与layout 查看其小原点位置: pin脚1的位置4. 何种现象显示方向正确: gsensor  : 手机界面会翻转msensor  : 安装打开指南针apk,划八校准后,不管手机如何转动指针始终指北gyroscope: 安装需要陀螺仪的游戏apk(如打僵尸),运行游戏看是否打得准5. 何种现象显示方向正确: 用sensorlist查看5.1 gsensor手机平放,z轴应为9.8,xy为0手机竖立,y轴应为9.8,zx为0手机侧立,x轴应为9.8,yz为0 - 正面朝左5.2 msensor,先用正常手机如iphone找到北边x轴指北时,x轴数据达到最大;x轴反方向指北时,x轴数据达到负的最大y轴指北时,y轴数据达到最大;y轴反方向指北时,y轴数据达到负的最大z轴指北时,z轴数据达到最大;z轴反方向指北时,z轴数据达到负的最大5.3 gyroscope,假设手机有长宽高三轴沿着手机宽轴摆动手机,x轴数据变化比另两轴大沿着手机长轴摆动手机,y轴数据变化比另两轴大沿着手机高轴摆动手机,z轴数据变化比另两轴大6. 还可以通过sensorlist看到的xyz轴数据计算,说来话长sensor调试案例:案例一: 兼容gsensor(mxc400x与mxc6225)现象: 平台: androidL,MTK6580步骤: 1.   2.  !!!试验这样是不是i2c地址相同的就可以再次i2c_probeepl_sensor_i2c_probe()epl_sensor_i2c_client = client;exit:epl_sensor_i2c_client = NULL;alsps_init_flag = -1;    3. 总结: 案例二: gsensor(qma6981)由mtk老架构改mtk新架构现象: 平台: androidL,MTK6580步骤: 1. 思路:老的架构在模块入口platform_driver_register()注册一个平台设备,probe中注册i2c设备   新的架构在模块入口acc_driver_add()将结构题注册到list中,local_init中注册i2c设备     2.#include <accel.h> static int __init qma6981_init(void){-platform_driver_register(&qma6981_gsensor_driver)+acc_driver_add(&qma6981_init_info);return 0;    }    3. static struct sensor_init_info qma6981_init_info = {.name = QMA6981_ACC_DEV_NAME,.init = qma6981_local_init,.uninit = qma6981_local_uninit,};  4.static int qma6981_local_init(void){i2c_add_driver(&qma6981_i2c_driver)if(-1 == qma6981_init_flag)return -1;return 0;}  5.static int qma6981_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id){-if((err = qma6981_create_attr(&qma6981_gsensor_driver.driver)))+if((err = qma6981_create_attr(&(qma6981_init_info.platform_diver_addr->driver))))exit:+qma6981_init_flag = -1;    return err;}总结: 案例三: 计步器的实现 - gsensor硬件中断现象: 平台: androidL,MTK6737步骤: 1.   2.     3. 总结: 案例四: 调试新msensor(mmc3630x),bin文件没有拷贝到out目录 - 修改device.mk现象: msensor无功能平台: androidN,MTK6737排查过程: 1.在alps\vendor\magcomm\libs\mt6737m\目录创建文件夹: memsicd3630x ,内部有bin文件 : memsicd3630x修改alps\device\mediatek\mt6735\device.mk添加: PRODUCT_PACKAGES += memsicd3416x+PRODUCT_PACKAGES += memsicd3630x  2.out目录没有生成对应的bin文件:memsicd3630xandroid009@mht-09:~/liuzhigou/code2_37_m_base_v663_xiaoxing_k29d1_user$ find alps/out/ -name memsicd3*alps/out/target/product/magc6737m_65_c_m0/system/bin/memsicd3416x    3.修改alps\device\mediatek\mt6735\device.mk添加:(注意要精确到具体文件,而不是文件夹)+PRODUCT_COPY_FILES += vendor/magcomm/libs/mt6737m/memsicd3630x/memsicd3630x:system/bin/memsicd3630x  4.out目录成功生成对应的bin文件:memsicd3630xandroid009@mht-09:~/liuzhigou/code2_37_m_base_v663_xiaoxing_k29d1_user$ find alps/out/ -name memsicd3*alps/out/target/product/magc6737m_65_c_m0/system/bin/memsicd3416xalps/out/target/product/magc6737m_65_c_m0/system/bin/memsicd3630x// 我们要的bin文件  处理方案: 修改device.mk总结: 上层的问题,及时请教上层的同事案例三: gsensor(qma6981) I2C不通 - 贴片没有贴好现象: I2C不通平台: androidN,MTK6737步骤: 1. gsensor无功能,打log,在串口log中发现[   13.465281] .(3)[1:swapper/0][name:qma6981&][QMA-Gsensor] I2C_TxData 271 : I2C_TxData delay![   13.476575] .(3)[1:swapper/0][name:i2c&]ERROR,510: id=2,addr: 12, transfer error[   13.477594] .(3)[1:swapper/0][name:i2c&]ERROR,516: I2C_ACKERR  2. 分析:由于sensor电源为常供,无需上电,i2c不通的可能:(1)i2c地址不对(2)硬件有问题    3. 询问FAE,确认i2c地址正确,排查硬件问题:将芯片取下,外接小板(小板上有芯片) 结果芯片工作正常 处理方案: -->把芯片重新贴好总结: 只有camera在i2c通讯之前要上电,其他都可以直接通讯,i2c不通只有两种可能: (1)i2c地址不对 (2)硬件有问题案例四: 现象: 平台: androidN,MTK6737步骤: 1.   2.   案例五: gsensor兼容(3433 & 6981)导致功耗大(70ma)现象: 平台: androidN,MTK6737步骤: 1. 休眠时候打log: adb shell dmesg > e:gsensor_3433_6981.loglog显示由于设备(2-004c - mc3433)休眠失败,导致系统休眠失败,重新唤醒,系统一直处于: 休眠->休眠失败->唤醒 ->休眠的循环中[  207.629520]  (1)[1066:system_server]qma6981_suspend 2894 : liuzhigou 20171018 qma6981_suspend start [  207.635164]  (1)[1066:system_server]qma6981_suspend 2914 : liuzhigou 20171018 qma6981_suspend end [  207.635254]  (1)[1066:system_server]liuzhigou 20171018 mc3xxx_suspend start [  207.635291]  (1)[1066:system_server]dpm_run_callback(): i2c_device_pm_suspend+0x0/0x38 returns -22[  207.635324]  (1)[1066:system_server]PM: Device 2-004c failed to suspend: error -22[  207.635352]  (1)[1066:system_server][name:suspend&]PM: Some devices failed to suspend, or early wake event detected  2. 在mc3433的休眠函数中,添加打印log:static int mc3xxx_suspend(struct i2c_client *client, pm_message_t msg){struct mc3xxx_i2c_data *obj = i2c_get_clientdata(client);int err = 0;if(msg.event == PM_EVENT_SUSPEND){if(obj == NULL){+GSE_ERR("liuzhigou 20171025 %s obj == NULL\n",__FUNCTION__);return -EINVAL;}[  116.917907]  (0)[1150:system_server]liuzhigou 20171018 mc3xxx_suspend start [  116.917926]  (0)[1150:system_server]liuzhigou 20171018 mc3xxx_suspend msg.event == PM_EVENT_SUSPEND [  116.917943]  (0)[1150:system_server]liuzhigou 20171018 mc3xxx_suspend obj == NULL [  116.917974]  (0)[1150:system_server]dpm_run_callback(): i2c_device_pm_suspend+0x0/0x38 returns -22[  116.917996]  (0)[1150:system_server]PM: Device 2-004c failed to suspend: error -22[  116.918016]  (0)[1150:system_server]PM: Some devices failed to suspend, or early wake event detected根据log,obj为空指针,出错判断后返回错误值    3. 根据标志位添加出错判断,如果没加载3433就直接return 0(成功),终止3433的休眠函数static int mc3xxx_suspend(struct i2c_client *client, pm_message_t msg){struct mc3xxx_i2c_data *obj = i2c_get_clientdata(client);int err = 0;if(msg.event == PM_EVENT_SUSPEND){if(obj == NULL){+if (MC3XXX_INIT_FAIL == s_nInitFlag){+GSE_ERR("liuzhigou 20171025 %s obj == NULL MC3XXX_INIT_FAIL == s_nInitFlag \n",__FUNCTION__);+return 0;+}+else{+GSE_ERR("liuzhigou 20171025 %s obj == NULL MC3XXX_INIT_FAIL != s_nInitFlag \n",__FUNCTION__);return -EINVAL;}}总结: 此log为正常状态: 0x4000为pmu中断[  147.732936] -(0)[1066:system_server][name:mt_spm_internal&][SPM] wake up byEINT, timer_out = 18724959, r13 = 0x10001000, debug_flag = 0x9f[  147.732936] -(0)[1066:system_server][name:mt_spm_internal&][SPM] r12 = 0x20, raw_sta = 0x20, idle_sta = 0x9fa, event_reg = 0x90100000, isr = 0x0[  147.732936] -(0)[1066:system_server][name:mt_spm_sleep&][SPM] suspend dormant state = 0, md32_flag = 0x0, md32_flag2 = 0[  147.732936] -(0)[1066:system_server][name:mt_spm_sleep&][SPM] log_wakesta_index = 5[  147.732936] -(0)[1066:system_server][name:irq_mt_eic&]EINT_STA:[  147.732936] -(0)[1066:system_server][name:irq_mt_eic&]EINT Module - index:192,EINT_STA = 0x4000[  147.732936] -(0)[1066:system_server][name:irq_mt_eic&]EINT 206 is pending[  147.732936] -(0)[1066:system_server][name:irq_mt_eic&][  147.732988] -(0)[1066:system_server][name:ccci&][ccci1/mcd]Resume cldma pdn register ...11[  147.733070] -(0)[1066:system_server][name:irq_mt_eic&]EINT Module - expires:4294952066, jiffies:4294952065, deb_in_jiffies:1, [  147.733091] -(0)[1066:system_server][name:irq_mt_eic&]deb:1000, in mt_eint_set_timer_event[  147.733270]  (0)[1066:system_server][name:cpu&]Enabling non-boot CPUs ...[  147.733571] -(1)[0:swapper/1]CPU1: Booted secondary processor案例六: ATA测试中gsensor(qma6981)无数据 - 添加init() - 原因:i2c_probe的时候没有跑init(),而正常开机在别处有init()现象: 正常开机有数据,ATA无数据平台: androidM,MTK6580步骤: 1. 由于ATA 是通过ioctl接口获取数据,在ioctl函数中添加log,显示读到的数据为0  2. 在qma6981_unlocked_ioctl()中获取数据之前进行初始化switch (cmd) {case GSENSOR_IOCTL_READ_SENSORDATA:+qma6981_initialize(client);==> ok案例七: CTS测试报错- 磁力传感器 - 板子上内贴 - 从配置中移除此法不通!!!案例八: 打开自动背光,通话贴脸灭屏后,移开无法亮屏 - 没找到死锁的地方,直接更换一份版本较新的驱动平台: androidN,MTK6737步骤: 1. 对比其他项目667,无此现象,查BOM663   MN26233TKDN(问题项目)667   MN25713EKDN  2. 进入"*#0*#"测试模式,交替打开als与ps,出现概率性的als无功能(数值不动)  分析怀疑是als与ps enable或disable的时候出问题  3. FAE现场支持,提供了一份最新的驱动,问题不再出现 FAE说旧驱动中有死锁,但是找不到    4. 尝试注释掉alps\kernel-3.18\drivers\misc\mediatek\alsps\epl259x\epl259x.cstatic int als_enable_nodata(int en){if(enable_als != en){+//epl_sensor_update_mode(obj->client);}}==>功能正常案例九: als概率性无功能 - 有死锁 - 没找到死锁的地方,直接更换一份版本较新的驱动案例十: 强光下,自动背光的亮度变化不明显,弱光下,自动背光的亮度是正常的平台: androidN,MTK6737步骤: 1. 修改als积分时间: alps/kernel-3.18/drivers/misc/mediatek/alsps/epl259x/epl259x.c-epl_sensor.als.integration_time = EPL_ALS_INTT_1024;+epl_sensor.als.integration_time = EPL_ALS_INTT_64;案例十一: 打开自动背光,遮挡光感,屏幕亮度无变化平台: androidN,MTK6737步骤: 1. 打开"*#0*#"测试模式,查看光感上报值,值偏小对比亮度能够自动调节的其他项目v618_p300 : 1969 luxv663_k38  : 328 lux(问题机)怀疑是结构遮挡,导致进光量偏少  2. 结构同事分析:是tp开孔处油墨有问题,刮开tp油墨亮度2900 lux  案例十二: 现象: 平台: 步骤: 1.   2.     3. 总结: 案例十三: 现象: 平台: 步骤: 1.   2.     3. 总结: 案例十四: 现象: 平台: 步骤: 1.   2.     3. 总结: 


原创粉丝点击