平台:msm8926
相关目录及文件:
- Kernel/drivers/media/platform/msm/camera_v2/sensor/flash:
msm_led_flash.c
注册flash为camera架构中的一个subdev,提供ioctl接口给上层camera server调用。
msm_led_torch.c
提供设置torch模式接口,我们没注册进去。(led_trigger_set_default()里比较的是default_trigger和name, default_trigger在dtsi中被定义,因此下面的leds-qpnp.c才能注册成功set_brightness回调函数)。
msm_led_i2c_trigger.c
如果是单独的flash ic的话通过此文件的i2c接口注册,我们用的pmic自带的flash
led功能,此文件也不需要。
msm_led_trigger.c
注册led驱动,另外还提供config的公共接口。
- Kernel/drivers/leds:
leds-qpnp.c:
PMIC led相关的功能都放在此文件里空间了,当然也包括了flash led. Flash电流的set核心函数是qpnp_flash_set()。
Led-triggers.c
led_trigger_set_default():name匹配就注册set_brightness回调函数。
- Kernel/arch/arm/boot/dts/:
msm_pm8226.dtsi
定义flash/torch led相关配置,包括电流大小,周期等。
高通在文档中还介绍了各个property的解释,在leds-qpnp.txt中:
- Vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/led_flash
led_flash.c
User space最终通过调用此文件中的ioctl来将设置传递给kernel。主要是led_flash_process()。
两种工作模式:
Camera flash led分flash和torch两种模式。
Flash: 拍照时闪光灯瞬间亮一下的情况,电流比较大,目前是1000mA,最大电流不能超过led的最大承受能力。
Torch: 只用于录video或者拿led当手电筒的情况,电流不能太大,例如现在用的是200mA。
Flash的开启需要先从torch过渡,也就是电流慢慢增大,减小冲击。
保护机制:
有flash timeout, video watchdog timer, short led fault detection等。
另外还有电池低电压的时候降流的功能。
调用流程:
硬件参数:
小结:
电流最终设置的值是多少,需要依据tuning之后的效果。
Flash mode最大只能是1000mA, 也要考虑led硬件是否能承受1000mA的电流。
参考文档:
80-NC833-1 page80
80-NC833-5 page98~110
80-NE399-11 第三章节