技术专栏
瑞芯微摄像头自动焦距马达驱动移植
本为你主要讲解如何让摄像头ov13850支持自动对焦功能。
摄像头的对角主要通过VCM马达驱动芯片DW9714来实现的。
一、环境
soc : rk3568
board: EVB1-DDR4-V10
软 件:Android 11
Linux:4.19.232
Camera:ov13850
二、DW9714
1.DW9714简介
DW9714专为自动对焦和光学变焦照相手机、数码相机和摄像机应用而设计,
由韩国动运国际有限公司(Dongwoon )设计生产。
工作电压可达3.6V。
DAC通过I2C串行接口控制,该接口以高达400kHz的时钟速率操作DAC。
DW9714集成了上电复位电路、掉电功能和精确匹配的检测电阻。
上电复位电路确保当电源上电时,DAC输出为0V,直到发生有效的写位值。它具有断电功能,可将器件的电流消耗降至最大1uA。
2. 特征
- 用于自动对焦的VCM驱动程序
- 关机功能:XSD=低电平有效
- VCM的10位分辨率电流吸收为120mA
- I2C串行接口(可用于1.8V输入电平)
- 集成电流检测电阻
- 保证所有代码的单调性
- 低至0.5uA(典型值)
- 上电复位
- 掉电功能
- 2.3V至3.6V操作
3. 模块图
4. 引脚
5. 参考电路
6. i2c时序
由以下时序可以看到,vcm9714利用I2C接口通信时,每次读/写,直接传输2个字节的数据,通信之前,不需要发送内部寄存器地址。
7. 寄存器格式
三、驱动移植
vcm9714与rk3568连接图:
- 设备树:
@arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi
560 dw9714: dw9714@c {
561 compatible = "dongwoon,dw9714";
562 status = "okay";
563 reg = <0x0c>;
564 rockchip,camera-module-index = <0>;
565 rockchip,vcm-start-current = <10>;
566 rockchip,vcm-rated-current = <85>;
567 rockchip,vcm-step-mode = <5>;
568 rockchip,camera-module-facing = "back";
569 };
570
571 ov13850: ov13850@10 {
……
584 lens-focus = <&dw9714>;
……
591 };
其中,下面这两个属性,必须要和对应的的摄像头ov13850信息保持一致
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
摄像头支持的马达驱动信息通过以下属性关联
lens-focus = <&dw9714>;
- Makefile
@kernel\drivers\media\i2c\Makefile
obj-$(CONFIG_VIDEO_DW9714) += dw9714.o
- Kconfig
@kernel\drivers\media\i2c\Kconfig
config VIDEO_DW9714
tristate "DW9714 lens voice coil support"
depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER
depends on VIDEO_V4L2_SUBDEV_API
---help---
This is a driver for the DW9714 camera lens voice coil.
DW9714 is a 10 bit DAC with 120mA output current sink
capability. This is designed for linear control of
voice coil motors, controlled via I2C serial interface.
- 支持该驱动:
@ arch/arm64/configs/rockchip_defconfig
572 CONFIG_VIDEO_DW9714=y
- 驱动:
rk_android11.0_sdk_220718\kernel\drivers\media\i2c\dw9714.c
四、调试信息
1. 启动的驱动log
[ 0.800799] vm149c 4-000c: probing...
[ 0.800820] vm149c 4-000c: driver version: 00.01.00
[ 0.800834] vm149c 4-000c: could not get module rockchip,vcm-max-current from dts!
[ 0.800847] vm149c 4-000c: could not get module rockchip,vcm-start-current from dts!
[ 0.800860] vm149c 4-000c: could not get module rockchip,vcm-rated-current from dts!
[ 0.800872] vm149c 4-000c: could not get module rockchip,vcm-step-mode from dts!
[ 0.800907] vm149c 4-000c: probing successful
2. 查看拓扑结构
media-ctl -p
……………
- entity 74: m00_b_ov13850 4-0010 (1 pad, 1 link)
type V4L2 subdev subtype Sensor
device node name /dev/v4l-subdev4
pad0: Source
[fmt:SBGGR10/4224x3136]
-> "rockchip-csi2-dphy0":0 []
- entity 78: m00_b_gpio-flash (0 pad, 0 link)
type V4L2 subdev subtype Flash
device node name /dev/v4l-subdev5
- entity 79: m00_b_dw9714 4-000c (0 pad, 0 link)
type V4L2 subdev subtype Lens
device node name /dev/v4l-subdev6
五、驱动分析
vcm9714驱动比较简单,基于i2c总线,
核心就是要注册基于v4l2的subdev,
提供给用户层调用的核心回调函数如下:
- 获取并设置当前马达的pos
static const struct v4l2_ctrl_ops dw9714_vcm_ctrl_ops = {
.g_volatile_ctrl = dw9714_get_ctrl,
.s_ctrl = dw9714_set_ctrl,
};
static int dw9714_init_controls(struct dw9714_device *dev_vcm)
{
struct v4l2_ctrl_handler *hdl = &dev_vcm->ctrls_vcm;
const struct v4l2_ctrl_ops *ops = &dw9714_vcm_ctrl_ops;
v4l2_ctrl_handler_init(hdl, 1);
v4l2_ctrl_new_std(hdl, ops, V4L2_CID_FOCUS_ABSOLUTE,
0, VCMDRV_MAX_LOG, 1, VCMDRV_MAX_LOG);
……
}
static const struct v4l2_subdev_core_ops dw9714_core_ops = {
.ioctl = dw9714_ioctl,
};
static const struct v4l2_subdev_ops dw9714_ops = {
.core = &dw9714_core_ops,
};
static int dw9714_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
v4l2_i2c_subdev_init(&dw9714_dev->sd, client, &dw9714_ops);
}
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
1
1
评论
打赏
- 分享
- 举报
评论
0个
手气红包
暂无数据
相关专栏
-
浏览量:1427次2024-02-19 10:16:21
-
浏览量:1115次2023-11-20 17:36:15
-
浏览量:3621次2021-04-01 13:50:37
-
浏览量:3820次2021-04-01 13:54:47
-
浏览量:2089次2020-04-01 10:07:10
-
浏览量:767次2023-06-12 14:35:58
-
浏览量:3418次2020-10-29 17:26:12
-
浏览量:1305次2024-05-24 19:05:42
-
浏览量:1353次2023-04-17 16:03:03
-
浏览量:2248次2022-03-05 08:31:20
-
浏览量:2025次2017-12-22 21:28:55
-
浏览量:4952次2022-05-10 11:01:46
-
浏览量:3217次2022-05-17 09:01:02
-
浏览量:1782次2024-01-02 22:42:19
-
浏览量:4841次2021-07-22 18:16:29
-
浏览量:1692次2024-03-01 16:01:03
-
浏览量:6345次2022-05-31 11:14:16
-
浏览量:2523次2023-06-28 17:22:40
-
浏览量:1234次2023-08-24 13:51:18
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
刘+
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
打赏成功!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注