简介:
描述调试光感IC stk3310的过程。
调试硬件平台:MT8163
调试软件平台:Android6.0
总修改文件:
project 为工程的名称
arch/arm64/boot/dts/project.dts
device/pskyed/project/ProjectConfig.mk
kernel-3.18/drivers/misc/mediatek/alsps/Kconfig
kernel-3.18/arch/arm64/configs/project_defconfig
device/pskyed/project/ProjectConfig.mk
device/pskyed/project/overlay/frameworks/base/core/res/res/values/config.xml
一驱动程序的调试和分析
增加驱动文件
在kernel-3.18\drivers\misc\mediatek\alsps\ 目录下
增加
stk3x1x 的驱动文件,这个驱动文件可以从其他调试好的BSP中获取,也可以从供应商获取。
增加编译项
kernel-3.18\drivers\misc\mediatek\alsps\Kconfig 增加:
source “drivers/misc/mediatek/alsps/stk3x1x/Kconfig”
kernel-3.18\drivers\misc\mediatek\alsps\Makefile 增加:
obj-$(CONFIG_MTK_STK3X1X) += stk3x1x/
arch/arm64/configs/project_defconfig 增加编译宏:
CONFIG_CUSTOM_KERNEL_ALSPS=y
CONFIG_MTK_STK3X1X=y
这样驱动就会被编译进内核。
Dts配置I2C device
目录:
arch/arm64/boot/dts/project.dts
在&i2c2 { 中增加:
alsps@48{
compatible = "mediatek,alsps";
reg = <0x48>;
interrupt-parent = <&pio>;
interrupts = <8 IRQ_TYPE_LEVEL_LOW>;
int-gpio = <&pio 30 0>;
status = "okay";
};
在现有的Dts的架构下,device “alsps”会被创建。Driver中必须对应是“alsps”。
I2c地址为:0x48;
可以在设备上看到以下设备:/sys/bus/i2c/devices/3-0048
增加:
cust_alsps@0 {
compatible = "mediatek,stk3x1x";
i2c_num = <2>;
i2c_addr = <0x48 0x48 0x78 0x00>;
polling_mode_ps = <1>;
polling_mode_als = <1>;
power_id = <0xffff>;
power_vol = <0>;
als_level = <5 10 25 50 100 150 200 400 1000 1500 2000 3000 5000 8000 10000>;
als_value = <10 50 100 150 200 250 280 280 1600 1600 1600 6000 6000 9000 10240 10240>;
ps_threshold_high = <120>;
ps_threshold_low = <100>;
is_batch_supported_ps = <0>;
is_batch_supported_als = <0>;
};
以上信息 stk3x1x的驱动会读取硬件配置信息。
二、HAL层的添加
2.1
修改目录:
device/pskyed/project/ProjectConfig.mk
CUSTOM_KERNEL_ALSPS = stk3x1x
此处的CUSTOM_KERNEL_ALSPS 只要有值即可。
可以查看
vendor/mediatek/proprietary/hardware/sensor/
下的代码,
if defined(CUSTOM_KERNEL_ALSPS) || defined(CUSTOM_KERNEL_ALS)
因此CUSTOM_KERNEL_ALSPS 只要不为空即加上了光感的中间层的函数。
三、应用层开关的添加
3.1 修改如下文件:
目录:
device/pskyed/project/overlay/frameworks/base/core/res/res/values/config.xml
修改如下:
true
改为 true之后在界面上就会有自动背光的选项。
此时点开自动背光,程序才会调用到驱动中的enable函数,从而开启背光的定时器线程。
调试小技巧:
遇到的问题是驱动probe成功了,节点也有了,但是不知道是否初始化OK了。
解决办法:1.adb连上机器,
切到目录:/sys/bus/platform/drivers/als_ps
查看 所以的寄存器:cat allreg
cat allreg
第一个寄存器是sensor的开关,默认自动感光是关闭的。
敲入命令: echo 00 03 > allreg
会打开感光sensor,
此时读取 als的值会发现变化,表示驱动已经正常工作。