瑞芯微RK3588驱动配置之DVP并口摄像头1

20 篇文章 3 订阅
9 篇文章 1 订阅

        发现很多人不会RK3588DVP摄像头的驱动配置,这里简单分享一下,各位老铁点个赞,一键三连,给点动力。 这篇主要讲一下DTS设备树的配置,下篇写具体的驱动设计。

        因为瑞芯微的大部分芯片都支持DVP摄像头,配置都大同小异,这里以当下最流行的RK3588为例,从文档资料中我们可以看到对DVP的支持能力。

        重点看看dts中如何实现的。

        先看下rk3588_sdk/kernel/arch/arm64/boot/dts/rockchip/rk3588s-pinctrl.dtsi。这是管脚信息描述。其中有cif。在瑞芯微的早期芯片都是用的cif接口来描述,实际就是连接的dvp接口。

        这里可以看到cif_dvp_bus8和cif_dvp_bus16,即8位数据线和16位数据线。如果是8位线宽,一般就是YUYV、UYVY来传输数据,如果是16位线宽,一般就是8位Y数据,8位UV数据传输。

	cif {
		/omit-if-no-ref/
		cif_clk: cif-clk {
			rockchip,pins =
				/* cif_clkout */
				<4 RK_PB4 1 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		cif_dvp_clk: cif-dvp-clk {
			rockchip,pins =
				/* cif_clkin */
				<4 RK_PB0 1 &pcfg_pull_none>,
				/* cif_href */
				<4 RK_PB2 1 &pcfg_pull_none>,
				/* cif_vsync */
				<4 RK_PB3 1 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		cif_dvp_bus16: cif-dvp-bus16 {
			rockchip,pins =
				/* cif_d8 */
				<3 RK_PC4 1 &pcfg_pull_none>,
				/* cif_d9 */
				<3 RK_PC5 1 &pcfg_pull_none>,
				/* cif_d10 */
				<3 RK_PC6 1 &pcfg_pull_none>,
				/* cif_d11 */
				<3 RK_PC7 1 &pcfg_pull_none>,
				/* cif_d12 */
				<3 RK_PD0 1 &pcfg_pull_none>,
				/* cif_d13 */
				<3 RK_PD1 1 &pcfg_pull_none>,
				/* cif_d14 */
				<3 RK_PD2 1 &pcfg_pull_none>,
				/* cif_d15 */
				<3 RK_PD3 1 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		cif_dvp_bus8: cif-dvp-bus8 {
			rockchip,pins =
				/* cif_d0 */
				<4 RK_PA0 1 &pcfg_pull_none>,
				/* cif_d1 */
				<4 RK_PA1 1 &pcfg_pull_none>,
				/* cif_d2 */
				<4 RK_PA2 1 &pcfg_pull_none>,
				/* cif_d3 */
				<4 RK_PA3 1 &pcfg_pull_none>,
				/* cif_d4 */
				<4 RK_PA4 1 &pcfg_pull_none>,
				/* cif_d5 */
				<4 RK_PA5 1 &pcfg_pull_none>,
				/* cif_d6 */
				<4 RK_PA6 1 &pcfg_pull_none>,
				/* cif_d7 */
				<4 RK_PA7 1 &pcfg_pull_none>;
		};
	};

        在实际的传输中,还有内同步外同步的区别,这根据使用的摄像头来。

        下面就是核心的配置了。挂载在i2c下,不管摄像头有没有用到i2c,必须挂载在i2c下,因为驱动的设计就是这样的,走这个总线最方便。

&i2c1 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&i2c1m2_xfer>;

	gc2145: gc2145@30 {
		status = "okay";
		compatible = "galaxycore,gc2145";
		reg = <0x30>;
		clocks = <&cru CLK_CIFOUT_OUT>;
		clock-names = "xvclk";
		power-domains = <&power RK3588_PD_VI>;
		pinctrl-names = "default";
		pinctrl-0 = <&cif_dvp_clk &cif_dvp_bus8>;

		rockchip,camera-module-index = <1>;
		rockchip,camera-module-facing = "front";
		rockchip,camera-module-name = "CameraKing";
		rockchip,camera-module-lens-name = "Largan";
		port {
			gc2145_out: endpoint {
				remote-endpoint = <&dvp_in_bcam1>;
			};
		};
	};
};

&rkcif {
	status = "okay";
};

&rkcif_dvp {
	status = "okay";
	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			#address-cells = <1>;
			#size-cells = <0>;
			/* Parallel bus endpoint */
			dvp_in_bcam1: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&gc2145_out>;
				bus-width = <8>;/*16*/
				vsync-active = <0>;
				hsync-active = <1>;
			};
		};
	};
};

&rkcif_mmu {
	status = "okay";
};

        DVP摄像头的dts不用配置data-lanes。

vsync-active = <0>;
hsync-active = <1>;

        指定 vsync, hsync 行场同步信号的有效状态,其中 0 表示低电平有效, 1 表示高电平有效。

        这里使用的8位线宽配置。

        这样DVP摄像头的dts就配置好了。

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值