rk3588s-摄像头适配gc8034

项目场景:rk3588s-摄像头适配gc8034

DTS配置:

原理图查看

DTS的适配要根据硬件实际原理图的接线方式去进行配置,首先要根据硬件工程师提供的原理图来确定如下几个关键信息:

硬件适用是哪路MIPI信号以及对应的phy,RK3588有MIPI_DPHY和MIPI_D/CPHY;备注:其中MIPI_D/CPHY对时序要求比较严格,如果做4lane的话一般建议是接到MIPI_DPHY这路;

确定配置是几lane信号,一般是2lane或者4lane;

确定24M mlk的输出引脚,一般MIPI摄像头的24M的mlk是有soc的pin脚输出的;

确定DTS要配置引脚,主要包括Power en脚以及sensor的复位引脚。

---
DTSI配置

RK3588或者RK3588S有路MIPI-PHY,驱动开发工程师需要根据对应的硬件原图进行配置,以下会讲解分别使用MIPI-DPHY和MIPI-D/CPHY如何在DTS配置mipi摄像头的回环链路。

如硬件设计接到MIPI-DPH0 RX这里,4lane配置,

/********对应的phy要使能****/
&csi2_dphy0 {
   
	status = "okay";

	ports {
   
		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
   
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			dphy0_in: endpoint@1 {
   
				reg = <1>;
				remote-endpoint = <&gc8034_out>;
				data-lanes = <1 2 3 4>;
			};
		};
		port@1 {
   
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			csidphy0_out: endpoint@0 {
   
				reg = <0>;
				remote-endpoint = <&mipi2_csi2_input>;
			};
		};
	};
};

&csi2_dphy0_hw {
   
	status = "okay";
};
/*******配置mipi isp**********/

&mipi2_csi2 {
   
	status = "okay";

	ports {
   
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
   
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi2_csi2_input: endpoint@1 {
   
				reg = <1>;
				remote-endpoint = <&csidphy0_out>;
			};
		};

		port@1 {
   
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi2_csi2_output: endpoint@0 {
   
				reg = <0>;
				remote-endpoint = <&cif_mipi2_in0>;
			};
		};
	};
};


&rkcif {
   
	status = "okay";
};

&rkcif_mipi_lvds2 {
   
	status = "okay";

	port {
   
		cif_mipi2_in0: endpoint {
   
			remote-endpoint = <&mipi2_csi2_output>;
		};
	};
};

&rkcif_mipi_lvds2_sditf {
   
	status = "okay";

	port {
   
		mipi_lvds2_sditf: endpoint {
   
			remote-endpoint = <&isp0_vir0>;
		};
	};
};

&rkcif_mmu {
   
	status = "okay";
};

&rkisp0 {
   
	status = "okay";
};

&isp0_mmu {
   
	status = "okay";
};

&rkisp0_vir0 {
   
	status = "okay";

	port {
   
		#address-cells = <1>;
		#size-cells = <0>;

		isp0_vir0: endpoint@0 {
   
			reg = <0>;
			remote-endpoint = <&mipi_lvds2_sditf>;
		};
	};
};

如硬件设计接到MIPI-D/CPHY0 RX这里,4lane配置,需要按如下配置:

&csi2_dcphy0 {
   
	status = "okay";

	ports {
   
		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
   
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			dcphy0_in: endpoint@1 {
   
				reg = <1>;
				remote-endpoint = <&gc8034_out>;
				data-lanes = <1 2 3 4>;
			};
		};
		port@1 {
   
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			csidcphy0_out: endpoint@0 {
   
				reg = <0>;
				remote-endpoint = <&mipi0_csi2_input>;
			};
		};
	};
};

&mipi_dcphy0 {
   
	status = "okay";
};
/*******配置mipi isp**********/
&mipi0_csi2 {
   
	status = "okay";

	ports {
   
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
   
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi0_csi2_input: endpoint@1 {
   
				reg = <1>;
				remote-endpoint = <&csidcphy0_out>;
			};
		};

		port@1 {
   
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			mipi0_csi2_output: endpoint@0 {
   
				reg = <0>;
				remote-endpoint = <&cif_mipi_in0>;
			};
		};
	};
};

&rkcif {
   
	status = "okay";
};

&rkcif_mipi_lvds {
   
	status = "okay";

	port {
   
		cif_mipi_in0: endpoint {
   
			remote-endpoint = <&mipi0_csi2_output>;
		};
	};
};

&rkcif_mipi_lvds_sditf {
   
	status = "okay";

	port {
   
		mipi_lvds_sditf: endpoint {
   
			remote-endpoint = <&isp0_vir0>;
		};
	};
};

&rkcif_mmu {
   
	status = "okay";
};

&rkisp0 {
   
	status = "okay";
};

&isp0_mmu {
   
	status = "okay";
};

&rkisp0_vir0 {
   
	status = "okay";

	port {
   
		#address-cells = <1>;
		#size-cells = <0>;

		isp0_vir0: endpoint@0 {
   
			reg = <0>;
			remote-endpoint = <&mipi_lvds_sditf>;
		};
	};
};

DTS中对应的Sensor配置,需要按照硬件连接的对应I2C,以及对应的Power en脚和reset引脚进行配置:

具体参考配置如下,不同的sensor可能配置有差异,如马达控制等。

&i2c3 {
   
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&i2c3m0_xfer>;
    
	gc8034: gc8034@37 {
   
		compatible = "galaxycore,gc8034";
		status = "okay";
		reg = <0x37>;
		clocks = <&cru CLK_MIPI_CAMARAOUT_M2>;
		clock-names = "xvclk";
		pinctrl-names = "default";
		pinctrl-0 = <&mipim1_camera2_clk>;
		power-domains = <&power RK3588_PD_VI>;
		reset-gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_HIGH>;
		pwdn-gpios = <&gpio1 RK_PC2 GPIO_ACTIVE_HIGH>;
		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "RK-CMK-8M-2-v1";
		rockchip,camera-module-lens-name = "CK8401";
		port {
   
			gc8034_out: endpoint {
   
				remote-endpoint = <&dphy0_in>;
				data-lanes = <1 2 3 4>;
			};
		};
	};

};

以上配置要注意24M clk输出为SOC端pin脚输出,具体配置要根据硬件原理图(使用对应的pin脚)进行配置

如上:

clocks = <&cru CLK_MIPI_CAMARAOUT_M2>;
		clock-names = "xvclk";
		pinctrl-names = "default";
		pinctrl-0 = <&mipim1_camera2_clk>;

具体核对需要参考rk3588s-pinctrl.dtsi中引脚pin-ctrl定义:

mipi {
   
		/omit-if-no-ref/
		mipim0_camera0_clk: mipim0-camera0-clk {
   
			rockchip,pins =
				/* mipim0_camera0_clk */
				<4 RK_PB1 1 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		mipim0_camera1_clk: mipim0-camera1-clk {
   
			rockchip,pins =
				/* mipim0_camera1_clk */
				<1 RK_PB6 2 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		mipim0_camera2_clk: mipim0-camera2-clk {
   
			rockchip,pins =
				/* mipim0_camera2_clk */
				<1 RK_PB7 2 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		mipim0_camera3_clk: mipim0-camera3-clk {
   
			rockchip,pins =
				/* mipim0_camera3_clk */
				<1 RK_PD6 2 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		mipim0_camera4_clk: mipim0-camera4-clk {
   
			rockchip,pins =
				/* mipim0_camera4_clk */
				<1 RK_PD7 2 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		mipim1_camera0_clk: mipim1-camera0-clk {
   
			rockchip,pins =
				/* mipim1_camera0_clk */
				<3 RK_PA5 4 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		mipim1_camera1_clk: mipim1-camera1-clk {
   
			rockchip,pins =
				/* mipim1_camera1_clk */
				<3 RK_PA6 4 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		mipim1_camera2_clk: mipim1-camera2-clk {
   
			rockchip,pins =
				/* mipim1_camera2_clk */
				<3 RK_PA7 4 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		mipim1_camera3_clk: mipim1-camera3-clk {
   
			rockchip,pins =
				/* mipim1_camera3_clk */
				<3 RK_PB0 4 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		mipim1_camera4_clk: mipim1-camera4-clk {
   
			rockchip,pins =
				/* mipim1_camera4_clk */
				<3 RK_PB1 4 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		mipi_te0: mipi-te0 {
   
			rockchip,pins =
				/* mipi_te0 */
				<3 RK_PC2 2 &pcfg_pull_none>;
		};

		/omit-if-no-ref/
		mipi_te1: mipi-te1 {
   
			rockchip,pins =
				/* mipi_te1 */
				<3 RK_PC3 2 &pcfg_pull_none>;
		};
	};

注意:DTS配置中还需要核对使用的24M时钟pin、Power en pin以及reset pin是否有gpio复用情况。

24M时钟可以让硬件工程师使用示波器进行测试是否有波形输出,24M是否稳定输出。GPIO情况可以使用以下命令软件进行查看:

console:/ # cat /d/gpio                                                        
gpiochip0: GPIOs 0-31, parent: platform/fd8a0000.gpio, gpio0:
 gpio-3   (                    |vsel                ) out lo 
 gpio-17  (                    |vsel                ) out lo 
 gpio-21  (                    |bt_default_wake_host) in  hi 
 gpio-22  (                    |bt_default_wake     ) out hi 
 gpio-23  (                    |reset               ) out hi ACTIVE LOW
 gpio-27  (                    |ts_irq_gpio         ) in  hi 
 gpio-28  (                    |bt_default_reset    ) out hi 
 gpio-30  (                    |vsel                ) out lo 

gpiochip1: GPIOs 32-63, parent: platform/fec20000
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值