Camera | 9.camera闪光灯驱动移植笔记-基于rk3568
0赞瑞芯微摄像头系列文件链接如下:
Camera | 5.Linux v4l2架构(基于rk3568)
一、闪光灯基本原理
工作模式
Camera flash led分flash和torch两种模式。
flash:
拍照时上光灯瞬间亮一下,电流比较大,目前是1000mA,最大电流不能超过led最大承受能力
torch:
只用于录video或者拿led当手电筒的情况,电流不能太大,
flash开启需要先从torch过渡,这样电流可以慢慢增大,减少冲击。
二、驱动移植
1. 硬件电路
dgm3141总体来说比较简单,只有两个引脚用于控制:FLASH_EN、FLASH/TORCH。
FLASH_EN
闪光灯使能引脚。
FLASH/TORCH
此处led flash和TORCH功能共用了同一个gpio。
“
注意: 有的摄像头是通过pwm来控制闪光灯,具体问题具体分析,不要教条
”
2. 设备树
瑞芯微sdk中没有专门针对sgm3141的驱动,网上搜了一大圈也没有搜到,很多闪光灯都是基于I2C接口,通过I2C来设置上光灯的工作模式,好在sdk中有类似的芯片rgb13h驱动,该驱动只有一个引脚用于闪光灯,和我们的功能很类似。
参考驱动文件:leds-rgb13h.c
sgm3141设备树节点
pinctrl设置:
驱动模块直接写死,不罗嗦
三、xml
要app支持闪光灯,还需要修改xml文件,打开该功能
这样,打开app就可以看到上光灯的按钮。
四、拓扑结构
拓扑结构中entity
摄像头:
m00_b_ov13850、m01_f_ov5648
闪光灯:
m00_b_gpio-flash,v4l2子设备/dev/v4l-subdev5
第4个字母b表示后置摄像头。
五、调试
操作对应函数调用关系
闪灯
六、app 测试驱动 log分析
3. 拍照
拍照功能,app调用ioctl命令如下:
V4L2_CID_FLASH_LED_MODE :设置led mod为 V4L2_FLASH_LED_MODE_TORCH(2),并点灯
V4L2_CID_FLASH_LED_MODE:到达指定超时时间(2.7秒),设置led mod为 V4L2_FLASH_LED_MODE_NONE 0
V4L2_CID_FLASH_LED_MODE:在此设置led mod为V4L2_FLASH_LED_MODE_FLASH(1)
V4L2_CID_FLASH_STROBE_STOP:停止闪光
从log可以看出,app拍照的时候,闪光灯操作是通过v4l2下发的命令,
而我们直接操作宏dev_attr_store创建的文件节点则是通过在sysfs文件节点(brightness flash_strobe)直接调用到操作函数。
4. 退出摄像头
七、驱动获取
一口君修改过的驱动已经上传到gitee,获取地址:
交流嵌入式底层开发技术,加一口君好友:yikoupeng。
原文链接:https://mp.weixin.qq.com/s/lt6JxxR_lHXiQRlxWkfpsw
电子技术应用专栏作家 一口Linux