充电指示灯的驱动文件是: leds-qti-tri-led.c
设备树中设备信息在: pmi632.dtsi 里, 可见 led 灯的硬件控制方式是 pwm 模式.
led_core.c 中 led_set_brightness 去设置 led 亮度, 这个函数会调用到具体的驱动 leds-qti-tri-led.c 中的 qpnp_tri_led_set_brightness 去设置亮度.
qpnp_tri_led_set_brightness 在驱动注册的时候被绑定到 brightness_set_blocking.
当 led_set_brightness 去设置 led 亮度的时候, 将其委派到一个工作队列任务当中. 队列任务去调用 rightness_set_blocking, 也就是 qpnp_tri_led_set_brightness, 去设置亮度.
lights.c 是 HAL 层访问底层的入口, ID 为 LIGHTS_HARDWARE_MODULE_ID.
文件将以 lights.msm8953.so 向上层提供接口.
- https://blog.csdn.net/wangjun7121/article/details/88140862
- [email protected]
- com_android_server_lights_LightsService.cpp
LightsService.java
SystemServiceManager.java
LightsService.java ----- 这里获得 mLights
上层在 BatteryService.java 中定义灯 private Led mLed; // 定义 Led
在 BatteryService 构造函数中获取 Led 灯 mLed = new Led(context, getLocalService(LightsManager.class)); // 获取 Led
充电状态更新 / 电量变化时, 更新灯的状态
update 方法里 processValuesLocked(false); // 处理新值
processValuesLocked 主要做两件事情:
- sendIntentLocked(); // 发送电量的信息
- mLed.updateLightsLocked(); // 刷新灯的状态
updateLightsLocked 是上层对 Led 的控制方式
这里是 mBatteryLight 也就是 LIGHT_ID_BATTERY 调用更新 light. 其实就是 Led 更新.
LIGHT_ID_BATTERY 和 底层的 LIGHT_ID_BATTERY 对应上.
来源: http://www.bubuko.com/infodetail-3274050.html