RK3568 Camera 使用
RK3568 Sensor驱动开发移植(1)
RK3568 Sensor驱动开发移植(2)
RK3568 Sensor驱动开发移植(3)
说明
RK3568 Sensor 驱动位于 drivers/media/i2c 目录下。
可以把Sensor 驱动的开发移植概括为以下 5 个部分:
- 按照Sensor的datasheet 编写上下电时序,主要包括 vdd、reset、powerdown、clk 等
- 配置Sensor 的寄存器以输出所需的分辨率、格式
- 编写 struct v4l2_subdev_ops 所需要的回调函数,一般包括 set_fmt、get_fmt、s_stream、s_power
- 增加 v4l2 controller 用来设置如fps、exposure、gain、test pattern
- 编写 probe()函数,并添加 Media Control 及 Sub Device 初始化代码
dts
根据硬件的设计,主要是正确配置clk及 pinctl(iomux)、根据原理图设置上电时序所需要的 regulator 及 gpio、增加 port 子节点,与 cif 或者 isp 建立连接:
- pinctrl,初始化必要的pin iomux,包括了 reset pin 、pwdn pin、power pin初始化和 clk iomux
- clock,指定名称为xvclk(驱动会讯取名为 xvclk 的 clock),即 24M 时钟
- vdd supply,Sensor 需要的三路供电 avdd、dovdd、dvdd
- port 子节点,定义了一个 endpoint,声明需要与 mipi_in_wcam 建立连接。同样地 mipi dphy 会引用wcam_out
- data-lanes 指定了 Sensor使用几个 lane。wcam_out节点中,data-lanes需要与之相匹配
以gc8034为例:
&i2c4 {
status = "okay";
gc8034: gc8034@37 {
compatible = "galaxycore,gc8034";// 需要与驱动中的匹配字符串一致
status = "okay";
reg = <0x37>;// sensor I2C 设备地址
clocks = <&cru CLK_CIF_OUT>;// sensor clickin 配置
clock-names = "xvclk";
pinctrl-names = "default";// pinctl 设置
pinctrl-0 = <&cif_clk>;
reset-gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>;// reset 管脚分配及有效电平
pwdn-gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_LOW>;// power 管脚分配及有效电平
rockchip,grf = <&grf>;
rockchip,camera-module-index = <0>;// 模组编号,该编号不要重复
rockchip,camera-module-facing = "back";// 模组朝向,有"back"和"front"
// 模组名和 lens 名被用来和 IQ xml 文件做匹配
rockchip,camera-module-name = "RK-CMK-8M-2-v1";// 模组名
rockchip,camera-module-lens-name = "CK8401";// lens 名
/*lens-focus = <&vm149c>; // vcm 驱动设置,支持 AF 时需要有这个设置*/
avdd-supply = <&vcc2v8_dvp>; // sensor 电源配置
dovdd-supply = <&vcc1v8_dvp>;
dvdd-supply = <&vcc1v8_dvp>;
port {
gc8034_out: endpoint {
remote-endpoint = <&mipi_in_ucam1>;// mipi dphy 端的 port 名
data-lanes = <1 2 3 4>;// mipi lane 数, 1lane 为 <1>, 4lane 为 <1 2 3 4>
};
};
};
};
驱动
上下电时序
不同 Sensor 对上下电时序要求不同,在 Sensor 厂家提供的 DataSheet 中,一般会有上电时序图,只需要按顺序配置即可。其中_power_on() 即是用来给 Sensor 上电。
上电时序简要说明如下:
- 首先提供 xvclk(即 mclk)
- 紧接着 reset pin 、pwdn pin使能<