mtk als

本文详细解析了光感启动流程,从HAL层的AmbiLightSensor类方法enable开始,通过写入/sys/class/sensor/m_als_misc/alsactive触发内核调用als_store_active,启动定时器并周期性读取ALS传感器数据。

光感启动流程,做个记录

hal:AmbienteLight.cpp

 int AmbiLightSensor::enable(int32_t handle, int en) 中会去write /sys/class/sensor/m_als_misc/alsactive

kernel:write alsactive 会触发kernel调用 als_store_active

               从而启动定时器 mod_timer(&cxt->timer_als, jiffies + atomic_read(&cxt->delay_als)/(1000/HZ)); 

               进而调用 als_poll  --->als_work_func   ---> cxt->als_data.get_data(&value, &status);  // 不断去读取数据

 

MTK AAL(Automatic Ambient Light)即自动环境调节功能,包含三个子功能:QPPS(CABC)、DRE和Ultra Dimming,相关功能介绍可在公司的DCC上查看参考文档[^1]。 对于不同屏幕类型,使用AAL功能有不同要求。普通带背灯的LCD屏若要支持QPPS功能,背PWM需要连接到MTK DISP PWM上;AMOLED屏使用AAL可参考FAQ14984 [AAL]AMIOLED屏使用AAL注意事项 [^1]。 开启AAL功能的配置如下: 1. 默认打开AAL的QPPS和DRE两个功能,需进行如下修改: - 在`alps/device/mediatek/$Project/ProjectConfig.mk`中设置`MTK_AAL_SUPPORT=yes`。 - 在`alps/kernel - 3.10/arch/arm(64)/configs/<proj>_defconfig`中设置`CONFIG_MTK_AAL_SUPPORT=y`。 2. 若要打开Ultra Dimming功能,需结合步骤1,在`alps/device/mediatek/$Project/ProjectConfig.mk`中设置`MTK_ULTRA_DIMMING_SUPPORT = yes`。 3. 对整个工程进行编译操作,最好先执行`make clean`,然后依次执行: ```bash source build/envsetup.sh lunch $Project source mbldenv.sh make -j24 ``` 4. 重新下载后,查看Mobilelog里面的Mainlog,搜索关键字AALService,确认AALService是否启动。若未找到该关键字,需确认Project路径是否正确,若路径正确,需检查编译系统是否有改动导致未编译到 [^1]。 在Android L系统mtk平台下,AAL自动背调整服务亮度曲线调试涉及多个方面: 1. `cust_aal.cpp` 2. `DisplayPowerController.java` 3. `AutomaticBrightnessController.java` 4. `libaal.so`(MTK的AAL自动背调整服务用到的库) 5. 具体硬件driver的pwm led [^2]。 另外,除了`cust_aal.cpp`和als驱动的实现get als的方法,可通过als转换来影响亮度,即als raw data改为als value,采用16段折线拟合。新的驱动架构中,`.als_level[]`和`.als_value[]`在`.dts`文件中描述。同时,setting的亮度条的亮度设置也可以影响AAL service设置背的亮度,应用接口是`Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS)`和`Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, systemBrightness)` [^2]。 在使用过程中,可能会遇到在阳下关闭自动调节功能后,背很亮,打开自动调节亮度,背很暗,以及设定`MTK_AAL_SUPPORT = yes`后,选择自动背,环境变化后,背亮度调节比较慢的问题。解决方法有两个: 1. 调节AAL对背的调节速度(优先推荐): - For 82/92,在`mediatek/custom/mtxx或者项目名字/hal/aal/cust_aal.cpp`中,`aAALParam[]`的第2个参数表示由暗变亮的速度,范围0 - 11,越大速度越快;第3个参数表示由亮变暗的速度,范围0 - 11,越大速度越快。 - For 95/6752/6732,在`mediatek/custom/mtxx或者项目名字/hal/aal/cust_aal.cpp`中,`int BrighteningSpeedLevel`范围0 - 255,数值越大调节的速度越快;`int DarkeningSpeedLevel`范围0 - 255,数值越大调节的速度越快。 2. 调节Framework端控制AAL的时间间隔: - 在`frameworks/base/services/java/com/android/server/power/DisplayPowerController.java`中,`BRIGHRNING_LIGHT_DEBOUNCE`和`DARKENING_LIGHT_DEBOUNCE`这两个变量表示,Framework发现als亮度发生变化后需要多久才会启动AAL去做PWM调节,默认值为4000,建议修改到1000 - 2000,不能太低。在5.0系统中,位置在`frameworks/base/services/core/java/com/android/server/display/AutomaticBrightnessController.java`,可改为`private static final long BRIGHTENING_LIGHT_DEBOUNCE = 1000` [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值