文件路径:/kernel/arch/arm/boot/dts/rv1108-camb-v12.dtsi
根据实际的硬件连接、 sensor 要求, 的各项信息,尤其注意 i2c 地址、 pinctrl、 DVDD 配置、 pd、 reset 引脚及其有效电平。
使用的硬件平台:rv1108.同一个mipi接口,dts文件中camera节点的区别和差异
dts节点的注释:
camera1: camera-module@36 {
status = "okay";//是否加载模块,默认开启
compatible = "omnivision,ov4689-v4l2-i2c-subdev";//omnivision sensor类型 ov4689-v4l2-i2c-subdev中ov4689是sensor型号,需要与驱动名字一致
reg = <0x36>;//sensor i2c设备的地址,有效位 7bit,8bit 需右移一位
device_type = "v4l2-i2c-subdev";//设备类型
clocks = <&clk_cif_out>;//sensor clickin的配置
clock-names = "clk_cif_out";
pinctrl-names = "rockchip,camera_default", "rockchip,camera_sleep";
pinctrl-0 = <&cif_dvp_clk_out>;//gpio 复用为 clk
pinctrl-1 = <&cif_dvp_clk_out_sleep>;//释放 gpio 复用功能
rockchip,pd-gpio = <&gpio3 GPIO_B0 GPIO_ACTIVE_LOW>;//sensor powerdown gpio配置,低有效,工作时拉高
rockchip,pwr-gpio = <&gpio3 GPIO_B5 GPIO_ACTIVE_HIGH>;//power的管脚分配及有效电平,高有效,工作时拉高
rockchip,rst-gpio = <&gpio3 GPIO_D1 GPIO_ACTIVE_LOW>;//reset的管脚分配及有效电平,低有效,工作时拉高
rockchip,camera-module-mclk-name = "clk_cif_out";//mclk时钟源配置,具体的解释如下:
//在dts文件rv1108_clock.dtsi中节点clk_cif_out: clk_cif_out_mux {
compatible = "rockchip,rk3188-mux-con";
rockchip,bits = <12 1>;
clocks = <&clk_cif_pll>, <&xin24m>;
clock-output-names = "clk_cif_out";
#clock-cells = <0>;
};
xin24m: xin24m {
compatible = "rockchip,rk-fixed-clock";
clock-output-names = "xin24m";
clock-frequency = <24000000>;//24Mhz
#clock-cells = <0>;
};
在 PLTFRM_CAM_ITF_MIPI_CFG(dphy_index, vc , nb_lanes, bit_rate),
bit_rate 进行设置 Mclk。
当信号为并口时,时钟源应该选择“clk_cif_out”
rv1108 mclk 有 2 个 io 口可选择,根据实际硬件设计来配置:
clk_mipicsi_out(gpio3_b5), 可输出 12M 或 24M。
clk_cif_out(gpio3_d2), 可输出 12M, 24M 或 37.125M。
其他 clk 频率请考虑外接晶振。
rockchip,camera-module-regulator-names = "vdd_cam";//camera vdd 的名称,rk805 BUCK2, see rk805 dts
rockchip,camera-module-regulator-voltages = <1200000>;//camera vdd电压:0x1.2V
rockchip,camera-module-facing = "back";//前后置配置
rockchip,camera-module-name = "LA6111PA";//camera 模组名称,用于匹配 IQ文件也就是xml文件,为了能够在系统启动后在目录/etc/cam_iq目录下有相应的xml文件,需要将设备需要用到的dts节点置于camb.dtsi的文件前方,经过在rv1108上实验得知,每次系统i启动后,/etc/cam_iq目录下只会copy前三个节点的xml文件,后面节点的xml文件不会被copy到这个目录下,就会造成启动时一直报错:03-25 15:47:28 video CAMHALWarn: transDrvMetaDataToHal:mCamIAEngine has been desroyed!,并且图传有问题。
rockchip,camera-module-len-name = "YM6011P";//camera模组镜头
rockchip,camera-module-fov-h = "116";//模组水平可视角度配置
rockchip,camera-module-fov-v = "61";//模组垂直可视角度配置
rockchip,camera-module-orientation = <0>;//模组角度设置
rockchip,camera-module-iq-flip = <0>;//IQ上下换转
rockchip,camera-module-iq-mirror = <0>;//IQ左右镜像
//以上 2 个属性控制摄像头的效果参数镜像配置,一般都是设置成 0,但 是发现以下现象:拍摄白墙,图片的上半部偏色与下半部偏色不一致,或者左右半部偏色不一致,即可以将这 2 个属性置成 1;
rockchip,camera-module-flip = <0>;
rockchip,camera-module-mirror = <1>;
//以上 2 个属性控制摄像头驱动中的镜像配置,如果图像旋转 180 度,可以将这 2 个属性修改成相反的值即可旋转 180;
rockchip,camera-module-defrect0 = <2688 1520 0 0 2688 1520>; /* resolution.w, resolution.h, defrect.left, defrect.top, defrect.w, defrect.h 具体可以参考如下图所示*/
// resolution.w: sensor 输出列数,
//resolution.h:sensor 输出行数,
// defrect.left:输出偏移列数,
// defrect.top:输出偏移行数,
// defrect.w:输出列数, defrect.left+defrect.w<=resolution.w,
//defrect.h:输出行数,defrect.h+defrect.top<=resolution.h,
rockchip,camera-module-flash-support = <0>;//flash 控制开关
rockchip,camera-module-mipi-dphy-index = <0>;//sensor 实际使用的 phy,要与硬件实际连接对应
};
resolution.w, resolution.h, defrect.left, defrect.top, defrect.w, defrect.h这几个参数的关系如下图所示:
kernel/arch/arm/boot/dts/rv1108-evb-v12.dts
// 配置需要使用的camera列表,连接到isp设备节点
&cif_isp0 {
rockchip,camera-modules-attached = < &camera1 >;
status = "okay";
};