全志T527_ISP在线和离线模式浅析及DTS配置

最近公司开发T527的项目,需要通过盈鹏飞嵌入式的核心模块接口双路TP2815,我们使用核心模块型号是CoM-X527,该核心模块引出了四路MIPI CSI接口,他们分别是MCSIA/B/C/D,以下是CoM-X527的简要介绍:

COM-X527产品特性 :

  • 采用Allwinner公司Cortex-A55八核A527/T527处理器,最高速度为2.0GHZ;
  • 支持2TOPS NPU,仅特定型号支持;
  • 支持Mali-G57 MC1 GPU,支持OpenGL ES 3.2/2.0/1.0, Valkan 1.1,OpenCL 2.0
  • 支持4K/25fps H.264视频编码,支持4K/15fps MJPEG编码;
  • 多格式4K/60fps视频解码 (H.265,H.264,VC-1, MPEG-1/2/4, VP8) ;
  • 支持1-4G Bytes LPDDR4X SDRAM支持EMMC 4G-64G大容量电子盘,可启动;
  • 支持双屏异显;支持双通道LVDS,分辨率最高1920x1080@60fps;支持 EDP 1.3,分辨率最高2.5K@60fps 和4K@30fps;支持HDMI 2.0B, 分辨率最高4K/60fps;
  • 支持PCIE2.1;支持 10路UART;支持双路CANBUS;支持双路千兆以太网;
  • 稳定的操作系统的支持,可预装Android13.0或者LINUX 5.15/Ubuntu 22.04
  • 邮票孔240POS设计, 尺寸为:56*45MM

COM-X527产品功能 : 

 

T527(ISP)离线模式补充说明: 

 

上图为离线模式下4线性sensor输入16路输出的典型pipeline场景,4路sensor同时输入(为什么是规划了4路呢?因为T527的MIPI CSI接口最多有CSIA/B/C/D四路),但ISP只有一个,此时需要开启ISP时分复用功能(离线模式),下面简单描述一下数据从sensor到video节点的过程(这种工作情况几乎没有,主要是为了把ISP离线模式说的更明白): 

  • sensor0/1/2/3的四路数据分别经过mipi0/1/2/3后到达parser0/1/2/3;
  • tdm为isp数据输入端,数据经过tdm_rx控制同一个isp实现时分复用处理数据,isp00和isp01/isp02/isp03为分时复用出来的4个ISP(实际仍为同一个ISP实体);
  • 和在线模式一样,某一路sensor数据经过ISP处理后,分为4路输入到相应的vipp、dma和video中,4路sensor数据所以共有16路,video0/4/8/12为sensor0数据,video1/5/9/13为sensor1数据;
  • vipp和dma在离线模式下也可时分复用成多个虚体,如在本例中,vipp(dma)00时分复用成vipp(dma)00和vipp(dma)01,vipp(dma)10时分复用成vipp(dma)10和vipp(dma)11,

    ……,故在本例的dts中,tdm0、isp00、scaler00/10/20/30、vinc00/10/20/30的work_mode均需配置成<1>,即离线模式。

为什么要如此说明呢?就是为了说明T527的linux_dts是如何构思的。以下是从《Linux_MIPI_CSI_开发指南.pdf》文档中截取的。

/* ISP时分复用功能(TDM),若需使用ISP时分复用功能,则需开启TDM离线模式 */
tdm0:tdm@0 {
work_mode = <0>; /* 0:在线模式,1:离线模式, 根据使用需求进行配置 */
};
/* 由于只有一个ISP实体,isp00(isp0)为普通在线模式下的唯一实体ISP,
* isp01/02/03为ISP时分复用(离线模式下)的ISP虚体,
* 而isp10(isp4)和isp(isp5)则为纯虚拟出来的ISP虚体,不具备ISP功能,通常用于不使用ISP功能时做路由,如YUV sensor
。
*/
isp00:isp@0 {
work_mode = <0>; /* 0:在线模式,1:离线模式, 根据使用需求进行配置 */
};
......
/* scaler00/10/20/30为真实scaler(vipp) ,其他均为虚拟出来的vipp,与所用isp相对应*/
scaler00:scaler@0 {
work_mode = <0>; /* 0:在线模式,1:离线模式, 根据使用需求进行配置 */
};
...... 

因为ISP功能只有一个实体(全志有些抠,给两个不就好了,没这么多事),有三种模式,一种是在线模式(就是只有1个sensor,独享ISP),一种是分时复用模式(所谓的离线模式,就是大家分时复用这一个ISP),isp01/02/03为ISP时分复用(离线模式下)的ISP虚体就是这个意思。一种是路由模式(就是不用的意思,只是经过,直接短路过去)。isp10(isp4)和isp(isp5)就是这个意思,这个路由方式是我加上去的,全志的文档稀里糊涂,小弟不才补说明,如果说的不对,欢迎指正。另外,同样认证了以下信息中的“vinc01/02/03/11/12/13/21/22/23/31/32/33只在ISP时分复用(离线模式)的场景下才会使用”的这句话。 

/* vinc节点说明:
* 1. vinc@X对应/dev/videoX节点
* 2. vinc00/10/20/30/40/50(video0/4/8/12/16/17)对应真实的bk0/1/2/3/4/5,故在线模式下最多可支持6路视频输出
* 3. vinc01/02/03/11/12/13/21/22/23/31/32/33只在ISP时分复用(离线模式)的场景下才会使用。*/
vinc00:vinc@0 {
vinc0_csi_sel = <0>; /* 该pipeline上parser的id,必须配置,且为有效id。 */
vinc0_mipi_sel = <0>; 
/* 该pipeline上mipi的id,使用并口sensor时不经过mipi,此项配置为0xff。*/
vinc0_isp_sel = <0>;
/* 该pipeline上isp的id,必须配置;
* 若isp只是表示路由而不做效果处理,则须配置为虚拟ISP(isp4/5)
*/
vinc0_isp_tx_ch = <0>; 
/* 该pipeline上isp tx的通道id,必须配置,默认为0。
* 当sensor配置为多通道输出时,该ch可以配置0~3的值。
*/
vinc0_tdm_rx_sel = <0>;
/* 该pipeline上tdm rx的通道id, 必须配置,默认为0;
* 当不使用tdm功能时,配置为0xff
*/
vinc0_rear_sensor_sel = <0>;
/* 该pipeline上使用的后置sensor的id;
* 通过该vincX节点(videoX)来抓取指定sensor的数据
*/
vinc0_front_sensor_sel = <0>; /* 该pipeline上使用的前置sensor的id;
* 而一般情况下,会配置成和上面rear_sensor_sel相同的id
* 即仅通过不同的vinc(video)节点来区分不同摄像头
*/
vinc0_sensor_list = <0>; /* 是否使用sensor_list功能来自适应不同的模组,1‑使用,0‑不使用 */
work_mode = <0x0>; /* 0‑在线模式,1‑离线模式, 根据实际情况进行配置
* 注:只有vinc0/4/8/12可配置。
*/
status = "okay"; /* vinc(video)节点使能开关,根据实际情况配置为okay/disable */
};
vinc01:vinc@1 {
vinc1_csi_sel = <2>;
vinc1_mipi_sel = <0xff>;
vinc1_isp_sel = <1>;
vinc1_isp_tx_ch = <1>;
vinc1_tdm_rx_sel = <1>;
vinc1_rear_sensor_sel = <0>;
vinc1_front_sensor_sel = <0>;
vinc1_sensor_list = <0>;
status = "disabled";
};
......
};

关于T527 video节点配置的总结: 

vinc00:vinc@5830000 {

vinc0_csi_sel = <0>; //parser通道sel

vinc0_mipi_sel = <0>;//mipi通道sel

vinc0_isp_sel = <0>;

//isp通道sel,在线模式只能配为0,离线模式可配置为0~3(离线模式下,分时复用为4路,即为ISP00/ISP01/ISP02/ISP03)

vinc0_isp_tx_ch = <0>;

vinc0_tdm_rx_sel = <0>;//离线模式需配置为0~3,需要与isp_sel属性相同;在线模式可不配置

vinc0_rear_sensor_sel = <0>;//后摄使用的sensor_sel

vinc0_front_sensor_sel = <0>;//前摄使用的senosr_sel

vinc0_sensor_list = <0>;//是否使用sensor_list功能 0:not_use 1:use

device_id = <0>;//video节点sel,官方给了参考,不要修改

work_mode = <0x0>;//在线、离线模式配置,0:在线模式、1:离线模式

status = “okay”;//节点状态,okay:打开 disabled:关闭

};

(一)需要多个sensor同时出图,则配置为离线模式;反之,配置为在线模式

(二)离线通路配置:

(1). tdm和isp0需要配置相同的工作模式,vipp0和dma0、vipp1和dma1、vipp2和dma2、vipp3和dma3需要配置相同的工作模式(online和offline),vipp和isp0也需要配置相同的工作模式(online和offline)

(2). 对应关系:tdm对应tdm0节点,isp对应isp00节点,vipp对应scaler00、scaler10、scaler20、scaler30节点,dma对应vinc00、vinc10、vinc20、vinc30节点,vipp节点与dma节点一一对应即:使用vinc00需要打开scaler00,使用vinc01需要打开scaler01

(3). 只有tdm0、isp00、scaler00、scaler10、scaler20、scaler30、vinc00、vinc10、vinc20、vinc30可以配置work_mode,其他节点配置会出错

(4). menuconfig配置:需要打开[*]use isp for time sharing multiples,其余按需选择

(三)在线模式:在线模式只可使用tdm0、isp00、scaler00、scaler10、scaler20、scaler30、vinc00、vinc10、vinc20、vinc30、vinc40、vinc50节点

(四)vinc40、vinc50节点只支持在线模式(因为没有work_mode的配置),出的图为sensor原分辨率的图或者经过裁剪过的图,无法对图片进行缩放

最后的一点疑问:TDM节点即使设置为work_mode=0,这个时候需要加载驱动才能工作。如果在内核中驱动未加载,那么tdm0的节点就失效。因此在在线模式下,work_mode配置成0或者1应该都可以正常工作才对!待验证。

tdm0:tdm@5908000 {
		work_mode = <0>;
	};
	isp00:isp@5900000 {
		work_mode = <0>;
	};
	isp01:isp@58ffffc {
		status = "disabled";
	};
	isp02:isp@58ffff8 {
		status = "disabled";
	};
	isp03:isp@58ffff4 {
		status = "disabled";
	};
	isp10:isp@4 {
		status = "okay";
	};
	isp20:isp@5 {
		status = "okay";
	};

 

盈鹏飞嵌入式主板的两个TP2815的dts配置: 

/**
*  整体链路 sensor -> (mipi -> parser/csi) -> tdm -> isp -> (vipp -> dma)
*  vipp对应scaler, vinc对应dma
*  csi_sel mipi_sel 应相同
*  work_mode 0:在线模式 1:离线模式,仅一个硬件isp多摄像头同时预览需离线模式
* */
/*2x mipi_4lane pinmux,embfly*/
&mipib_4lane_pins_a {
	pins = "PK6", "PK7", "PK8",
		"PK9";
};

&mipib_4lane_pins_b {
	pins = "PK6", "PK7", "PK8",
		"PK9";
};

&mipid_4lane_pins_a {
	pins = "PK18", "PK19", "PK20",
		"PK21";
};

&mipid_4lane_pins_b {
	pins = "PK18", "PK19", "PK20",
		"PK21";
};
/*add end*/

&vind0 {
	csi_top = <360000000>;
	csi_isp = <300000000>;
	vind_mclkpin-supply = <&reg_dcdc4>;  /*对应原理图中vcc‑pe所采用的LDO */
	vind_mclkpin_vol = <3300000>;
	vind_mcsipin-supply = <&reg_bldo3>; /* 对应原理图中vcc‑mcsi所采用的LDO */
	vind_mcsipin_vol = <1800000>;
	vind_mipipin-supply = <&reg_dcdc4>; /* 对应原理图中vcc‑pk所采用的LDO */
	vind_mipipin_vol = <3300000>;
	status = "okay";

	csi3:csi@5823000 {
		pinctrl-names = "default","sleep";
		pinctrl-0 = <&ncsi_bt656_pins_a>;
		pinctrl-1 = <&ncsi_bt656_pins_b>;
		status = "disabled";
	};

	tdm0:tdm@5908000 {
		work_mode = <0>;
	};

	isp00:isp@5900000 {
		work_mode = <0>;
	};

	isp01:isp@58ffffc {
		status = "disabled";
	};

	isp02:isp@58ffff8 {
		status = "disabled";
	};

	isp03:isp@58ffff4 {
		status = "disabled";
	};

	isp10:isp@4 {
		status = "okay";
	};

	isp20:isp@5 {
		status = "okay";
	};

	scaler00:scaler@5910000 {
		work_mode = <0>;
	};

	scaler01:scaler@590fffc {
		status = "disabled";
	};

	scaler02:scaler@590fff8 {
		status = "disabled";
	};

	scaler03:scaler@590fff4 {
		status = "disabled";
	};

	scaler10:scaler@5910400 {
		work_mode = <0>;
	};

	scaler11:scaler@59103fc {
		status = "disabled";
	};

	scaler12:scaler@59103f8 {
		status = "disabled";
	};

	scaler13:scaler@59103f4 {
		status = "disabled";
	};

	scaler20:scaler@5910800 {
		work_mode = <0>;
	};

	scaler21:scaler@59107fc {
		status = "disabled";
	};

	scaler22:scaler@59107f8 {
		status = "disabled";
	};

	scaler23:scaler@59107f4 {
		status = "disabled";
	};

	scaler30:scaler@5910c00 {
		work_mode = <0>;
	};

	scaler31:scaler@5910bfc {
		status = "disabled";
	};

	scaler32:scaler@5910bf8 {
		status = "disabled";
	};

	scaler33:scaler@5910bf4 {
		status = "disabled";
	};
	scaler40:scaler@16 {
		status = "okay";
	};
	scaler50:scaler@17 {
		status = "okay";
	};

	actuator0: actuator@2108180 {
		device_type = "actuator0";
		actuator0_name = "dw9714_act";
		actuator0_slave = <0x18>;
		actuator0_af_pwdn = <>;
		actuator0_afvdd = "afvcc-csi";
		actuator0_afvdd_vol = <2800000>;
		status = "disabled";
	};

	flash0: flash@2108190 {
		device_type = "flash0";
		flash0_type = <2>;
		flash0_en = <&r_pio PL 11 GPIO_ACTIVE_LOW>;
		flash0_mode = <>;
		flash0_flvdd = "";
		flash0_flvdd_vol = <>;
		device_id = <0>;
		status = "disabled";
	};

	sensor0:sensor@5812000 {
		device_type = "sensor0";
		sensor0_mname = "tp2815_mipi";
		sensor0_twi_cci_id = <2>;
		sensor0_twi_addr = <0x88>;
		sensor0_mclk_id = <0>;
		sensor0_pos = "rear";
		sensor0_isp_used = <0>;
		sensor0_fmt = <0>;
		sensor0_stby_mode = <0>;
		sensor0_vflip = <0>;
		sensor0_hflip = <0>;
		sensor0_cameravdd-supply = <>;
		sensor0_cameravdd_vol = <>;
		sensor0_iovdd-supply = <>;
		sensor0_iovdd_vol = <>;
		sensor0_avdd-supply = <>;
		sensor0_avdd_vol = <>;
		sensor0_dvdd-supply = <>;
		sensor0_dvdd_vol = <>;
		sensor0_power_en = <>;
		sensor0_reset = <&pio PK 11 GPIO_ACTIVE_LOW>;
		sensor0_pwdn  = <&r_pio PL 12 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};

	sensor1:sensor@5812010 {
		device_type = "sensor1";
		sensor1_mname = "tp2815_mipi_1";
		sensor1_twi_cci_id = <3>;
		sensor1_twi_addr = <0x88>;
		sensor1_mclk_id = <1>;
		sensor1_pos = "front";
		sensor1_isp_used = <0>;
		sensor1_fmt = <0>;
		sensor1_stby_mode = <0>;
		sensor1_vflip = <0>;
		sensor1_hflip = <0>;
		sensor1_iovdd-supply = <>;
		sensor1_iovdd_vol = <>;
		sensor1_avdd-supply = <>;
		sensor1_avdd_vol = <>;
		sensor1_dvdd-supply = <>;
		sensor1_dvdd_vol = <>;
		sensor1_power_en = <>;
		sensor1_reset = <&pio PK 23 GPIO_ACTIVE_LOW>;
		sensor1_pwdn = <&pio PK 22 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};

	vinc00:vinc@5830000 {
		vinc0_csi_sel = <0>;
		vinc0_mipi_sel = <0>;
		vinc0_isp_sel = <4>;
		vinc0_isp_tx_ch = <0>;
		vinc0_tdm_rx_sel = <0>;
		vinc0_rear_sensor_sel = <0>;
		vinc0_front_sensor_sel = <0>;
		vinc0_sensor_list = <0>;
		device_id = <0>;
		work_mode = <0x0>;
		status = "okay";
	};

	vinc01:vinc@582fffc {
		vinc1_csi_sel = <1>;
		vinc1_mipi_sel = <2>;
		vinc1_isp_sel = <1>;
		vinc1_isp_tx_ch = <0>;
		vinc1_tdm_rx_sel = <1>;
		vinc1_rear_sensor_sel = <1>;
		vinc1_front_sensor_sel = <1>;
		vinc1_sensor_list = <0>;
		device_id = <1>;
		status = "disabled";
	};

	vinc02:vinc@582fff8 {
		vinc2_csi_sel = <2>;
		vinc2_mipi_sel = <0xff>;
		vinc2_isp_sel = <2>;
		vinc2_isp_tx_ch = <2>;
		vinc2_tdm_rx_sel = <2>;
		vinc2_rear_sensor_sel = <0>;
		vinc2_front_sensor_sel = <0>;
		vinc2_sensor_list = <0>;
		device_id = <2>;
		status = "disabled";
	};

	vinc03:vinc@582fff4 {
		vinc3_csi_sel = <0>;
		vinc3_mipi_sel = <0xff>;
		vinc3_isp_sel = <0>;
		vinc3_isp_tx_ch = <0>;
		vinc3_tdm_rx_sel = <0>;
		vinc3_rear_sensor_sel = <1>;
		vinc3_front_sensor_sel = <1>;
		vinc3_sensor_list = <0>;
		device_id = <3>;
		status = "disabled";
	};

	vinc10:vinc@5831000 {
		vinc4_csi_sel = <0>;
		vinc4_mipi_sel = <0>;
		vinc4_isp_sel = <4>;
		vinc4_isp_tx_ch = <1>;
		vinc4_tdm_rx_sel = <0>;
		vinc4_rear_sensor_sel = <0>;
		vinc4_front_sensor_sel = <0>;
		vinc4_sensor_list = <0>;
		device_id = <4>;
		work_mode = <0x0>;
		status = "okay";
	};

	vinc11:vinc@5830ffc {
		vinc5_csi_sel = <2>;
		vinc5_mipi_sel = <0xff>;
		vinc5_isp_sel = <1>;
		vinc5_isp_tx_ch = <1>;
		vinc5_tdm_rx_sel = <1>;
		vinc5_rear_sensor_sel = <0>;
		vinc5_front_sensor_sel = <0>;
		vinc5_sensor_list = <0>;
		device_id = <5>;
		status = "disabled";
	};

	vinc12:vinc@5830ff8 {
		vinc6_csi_sel = <2>;
		vinc6_mipi_sel = <0xff>;
		vinc6_isp_sel = <0>;
		vinc6_isp_tx_ch = <0>;
		vinc6_tdm_rx_sel = <0>;
		vinc6_rear_sensor_sel = <0>;
		vinc6_front_sensor_sel = <0>;
		vinc6_sensor_list = <0>;
		device_id = <6>;
		status = "disabled";
	};

	vinc13:vinc@5830ff4 {
		vinc7_csi_sel = <2>;
		vinc7_mipi_sel = <0xff>;
		vinc7_isp_sel = <0>;
		vinc7_isp_tx_ch = <0>;
		vinc7_tdm_rx_sel = <0>;
		vinc7_rear_sensor_sel = <0>;
		vinc7_front_sensor_sel = <0>;
		vinc7_sensor_list = <0>;
		device_id = <7>;
		status = "disabled";
	};

	vinc20:vinc@5832000 {
		vinc8_csi_sel = <0>;
		vinc8_mipi_sel = <0>;
		vinc8_isp_sel = <4>;
		vinc8_isp_tx_ch = <2>;
		vinc8_tdm_rx_sel = <0>;
		vinc8_rear_sensor_sel = <0>;
		vinc8_front_sensor_sel = <0>;
		vinc8_sensor_list = <0>;
		device_id = <8>;
		work_mode = <0x0>;
		status = "okay";
	};

	vinc21:vinc@5831ffc {
		vinc9_csi_sel = <2>;
		vinc9_mipi_sel = <0xff>;
		vinc9_isp_sel = <0>;
		vinc9_isp_tx_ch = <0>;
		vinc9_tdm_rx_sel = <0>;
		vinc9_rear_sensor_sel = <0>;
		vinc9_front_sensor_sel = <0>;
		vinc9_sensor_list = <0>;
		device_id = <9>;
		status = "disabled";
	};

	vinc22:vinc@5831ff8 {
		vinc10_csi_sel = <2>;
		vinc10_mipi_sel = <0xff>;
		vinc10_isp_sel = <0>;
		vinc10_isp_tx_ch = <0>;
		vinc10_tdm_rx_sel = <0>;
		vinc10_rear_sensor_sel = <0>;
		vinc10_front_sensor_sel = <0>;
		vinc10_sensor_list = <0>;
		device_id = <10>;
		status = "disabled";
	};

	vinc23:vinc@5831ff4 {
		vinc11_csi_sel = <2>;
		vinc11_mipi_sel = <0xff>;
		vinc11_isp_sel = <0>;
		vinc11_isp_tx_ch = <0>;
		vinc11_tdm_rx_sel = <0>;
		vinc11_rear_sensor_sel = <0>;
		vinc11_front_sensor_sel = <0>;
		vinc11_sensor_list = <0>;
		device_id = <11>;
		status = "disabled";
	};

	vinc30:vinc@5833000 {
		vinc12_csi_sel = <0>;
		vinc12_mipi_sel = <0>;
		vinc12_isp_sel = <4>;
		vinc12_isp_tx_ch = <3>;
		vinc12_tdm_rx_sel = <0>;
		vinc12_rear_sensor_sel = <0>;
		vinc12_front_sensor_sel = <0>;
		vinc12_sensor_list = <0>;
		device_id = <12>;
		work_mode = <0x0>;
		status = "okay";
	};

	vinc31:vinc@5832ffc {
		vinc13_csi_sel = <2>;
		vinc13_mipi_sel = <0xff>;
		vinc13_isp_sel = <0>;
		vinc13_isp_tx_ch = <0>;
		vinc13_tdm_rx_sel = <0>;
		vinc13_rear_sensor_sel = <0>;
		vinc13_front_sensor_sel = <0>;
		vinc13_sensor_list = <0>;
		device_id = <13>;
		status = "disabled";
	};

	vinc32:vinc@5832ff8 {
		vinc14_csi_sel = <2>;
		vinc14_mipi_sel = <0xff>;
		vinc14_isp_sel = <0>;
		vinc14_isp_tx_ch = <0>;
		vinc14_tdm_rx_sel = <0>;
		vinc14_rear_sensor_sel = <0>;
		vinc14_front_sensor_sel = <0>;
		vinc14_sensor_list = <0>;
		device_id = <14>;
		status = "disabled";
	};

	vinc33:vinc@5832ff4 {
		vinc15_csi_sel = <2>;
		vinc15_mipi_sel = <0xff>;
		vinc15_isp_sel = <0>;
		vinc15_isp_tx_ch = <0>;
		vinc15_tdm_rx_sel = <0>;
		vinc15_rear_sensor_sel = <0>;
		vinc15_front_sensor_sel = <0>;
		vinc15_sensor_list = <0>;
		device_id = <15>;
		status = "disabled";
	};

	vinc40:vinc@5834000 {
		vinc16_csi_sel = <2>;
		vinc16_mipi_sel = <2>;
		vinc16_isp_sel = <5>;
		vinc16_isp_tx_ch = <0>;
		vinc16_tdm_rx_sel = <0>;
		vinc16_rear_sensor_sel = <1>;
		vinc16_front_sensor_sel = <1>;
		vinc16_sensor_list = <0>;
		device_id = <16>;
		status = "okay";
	};

	vinc50:vinc@5835000 {
		vinc17_csi_sel = <2>;
		vinc17_mipi_sel = <2>;
		vinc17_isp_sel = <5>;
		vinc17_isp_tx_ch = <1>;
		vinc17_tdm_rx_sel = <0>;
		vinc17_rear_sensor_sel = <1>;
		vinc17_front_sensor_sel = <1>;
		vinc17_sensor_list = <0>;
		device_id = <17>;
		status = "okay";
	};
};

T527接口两个OV13850dts配置: 

&mipib_4lane_pins_a {
	pins = "PK6", "PK7", "PK8",
		"PK9";
};

&mipib_4lane_pins_b {
	pins = "PK6", "PK7", "PK8",
		"PK9";
};

&mipid_4lane_pins_a {
	pins = "PK18", "PK19", "PK20",
		"PK21";
};

&mipid_4lane_pins_b {
	pins = "PK18", "PK19", "PK20",
		"PK21";
};

&vind0 {
	csi_top = <600000000>;
	csi_isp = <600000000>;
	vind_mclkpin-supply = <&reg_bldo3>;  /* vcc-pe */
	vind_mclkpin_vol = <1800000>;
	vind_mcsipin-supply = <&reg_bldo3>; /* vcc-pk */
	vind_mcsipin_vol = <1800000>;
	vind_mipipin-supply = <&reg_bldo3>; /* vcc-mcsi */
	vind_mipipin_vol = <1800000>;
	status = "okay";

	csi3:csi@5823000 {
		pinctrl-names = "default","sleep";
		pinctrl-0 = <&ncsi_bt656_pins_a>;
		pinctrl-1 = <&ncsi_bt656_pins_b>;
		status = "disabled";
	};

	tdm0:tdm@5908000 {
		work_mode = <0>;
	};

	isp00:isp@5900000 {
		work_mode = <0>;
		delay_init = <1>;
		status = "okay";
	};

	isp01:isp@58ffffc {
		status = "disabled";
	};

	isp02:isp@58ffff8 {
		status = "disabled";
	};

	isp03:isp@58ffff4 {
		status = "disabled";
	};

	isp10:isp@4 {
		status = "okay";
		delay_init = <1>;
	};

	isp20:isp@5 {
		status = "okay";
		delay_init = <1>;
	};

	scaler00:scaler@5910000 {
		work_mode = <0>;
		delay_init = <1>;
		status = "okay";
	};

	scaler01:scaler@590fffc {
		status = "disabled";
	};

	scaler02:scaler@590fff8 {
		status = "disabled";
	};

	scaler03:scaler@590fff4 {
		status = "disabled";
	};

	scaler10:scaler@5910400 {
		work_mode = <0>;
		delay_init = <1>;
	};

	scaler11:scaler@59103fc {
		status = "disabled";
	};

	scaler12:scaler@59103f8 {
		status = "disabled";
	};

	scaler13:scaler@59103f4 {
		status = "disabled";
	};

	scaler20:scaler@5910800 {
		work_mode = <0>;
		delay_init = <1>;
	};

	scaler21:scaler@59107fc {
		status = "disabled";
	};

	scaler22:scaler@59107f8 {
		status = "disabled";
	};

	scaler23:scaler@59107f4 {
		status = "disabled";
	};

	scaler30:scaler@5910c00 {
		work_mode = <0>;
		delay_init = <1>;
	};

	scaler31:scaler@5910bfc {
		status = "disabled";
	};

	scaler32:scaler@5910bf8 {
		status = "disabled";
	};

	scaler33:scaler@5910bf4 {
		status = "disabled";
	};
	scaler40:scaler@16 {
		status = "disabled";
	};
	scaler50:scaler@17 {
		status = "disabled";
	};

	actuator0: actuator@2108180 {
		device_type = "actuator0";
		actuator0_name = "dw9714_act";
		actuator0_slave = <0x18>;
		actuator0_af_pwdn = <>;
		actuator0_afvdd = "afvcc-csi";
		actuator0_afvdd_vol = <2800000>;
		status = "disabled";
	};

	flash0: flash@2108190 {
		device_type = "flash0";
		flash0_type = <2>;
		flash0_en = <&r_pio PL 11 GPIO_ACTIVE_LOW>;
		flash0_mode = <>;
		flash0_flvdd = "";
		flash0_flvdd_vol = <>;
		device_id = <0>;
		status = "disabled";
	};

	sensor0:sensor@5812000 {
		device_type = "sensor0";
		sensor0_mname = "ov13850_mipi1";
		sensor0_twi_cci_id = <2>;
		sensor0_twi_addr = <0x20>;
//		sensor0_mclk_id = <0>;  
		sensor0_pos = "rear";
		sensor0_isp_used = <0>;
		sensor0_fmt = <0>;
		sensor0_stby_mode = <0>;
		sensor0_vflip = <0>;
		sensor0_hflip = <0>;
		sensor0_cameravdd-supply = <>;
		sensor0_cameravdd_vol = <>;
		sensor0_iovdd-supply = <>;
		sensor0_iovdd_vol = <>;
		sensor0_avdd-supply = <>;
		sensor0_avdd_vol = <>;
		sensor0_dvdd-supply = <>;
		sensor0_dvdd_vol = <>;
		sensor0_power_en = <>;
		sensor0_reset = <&pio PK 11 GPIO_ACTIVE_HIGH>;
		sensor0_pwdn  = <&pio PK 23 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};

	sensor1:sensor@5812010 {
		device_type = "sensor1";
		sensor1_mname = "ov13850_mipi2";
		sensor1_twi_cci_id = <3>;
		sensor1_twi_addr = <0x20>;
//		sensor1_mclk_id = <2>;
		sensor1_pos = "front";
		sensor1_isp_used = <1>;
		sensor1_fmt = <1>;
		sensor1_stby_mode = <0>;
		sensor1_vflip = <0>;
		sensor1_hflip = <0>;
		sensor1_iovdd-supply = <>;
		sensor1_iovdd_vol = <>;
		sensor1_avdd-supply = <>;
		sensor1_avdd_vol = <>;
		sensor1_dvdd-supply = <>;
		sensor1_dvdd_vol = <>;
		sensor1_power_en = <>;
		sensor1_reset = <&pio PK 10 GPIO_ACTIVE_HIGH>;
		sensor1_pwdn = <&pio PK 22 GPIO_ACTIVE_HIGH>;
		status = "okay";
	};

	vinc00:vinc@5830000 {
		vinc0_csi_sel = <0>;
		vinc0_mipi_sel = <0>;
		vinc0_isp_sel = <0>;
		vinc0_isp_tx_ch = <0>;
		vinc0_tdm_rx_sel = <0>;
		vinc0_rear_sensor_sel = <0>;
		vinc0_front_sensor_sel = <0>;
		vinc0_sensor_list = <0>;
		device_id = <0>;
		work_mode = <0>;
		delay_init = <1>;
		status = "okay";
	};

	vinc01:vinc@582fffc {
		vinc1_csi_sel = <2>;
		vinc1_mipi_sel = <2>;
		vinc1_isp_sel = <4>;
		vinc1_isp_tx_ch = <3>;
		vinc1_tdm_rx_sel = <0>;
		vinc1_rear_sensor_sel = <1>;
		vinc1_front_sensor_sel = <1>;
		vinc1_sensor_list = <0>;
		device_id = <1>;
		status = "disabled";
	};

	vinc02:vinc@582fff8 {
		vinc2_csi_sel = <2>;
		vinc2_mipi_sel = <0xff>;
		vinc2_isp_sel = <2>;
		vinc2_isp_tx_ch = <2>;
		vinc2_tdm_rx_sel = <2>;
		vinc2_rear_sensor_sel = <0>;
		vinc2_front_sensor_sel = <0>;
		vinc2_sensor_list = <0>;
		device_id = <2>;
		status = "disabled";
	};

	vinc03:vinc@582fff4 {
		vinc3_csi_sel = <0>;
		vinc3_mipi_sel = <0xff>;
		vinc3_isp_sel = <0>;
		vinc3_isp_tx_ch = <0>;
		vinc3_tdm_rx_sel = <0>;
		vinc3_rear_sensor_sel = <1>;
		vinc3_front_sensor_sel = <1>;
		vinc3_sensor_list = <0>;
		device_id = <3>;
		status = "disabled";
	};

	vinc10:vinc@5831000 {
		vinc4_csi_sel = <0>;
		vinc4_mipi_sel = <0>;
		vinc4_isp_sel = <0>;
		vinc4_isp_tx_ch = <0>;
		vinc4_tdm_rx_sel = <0>;
		vinc4_rear_sensor_sel = <0>;
		vinc4_front_sensor_sel = <0>;
		vinc4_sensor_list = <0>;
		device_id = <4>;
		work_mode = <0>;
		delay_init = <1>;
		status = "okay";
	};

	vinc11:vinc@5830ffc {
		vinc5_csi_sel = <2>;
		vinc5_mipi_sel = <0xff>;
		vinc5_isp_sel = <1>;
		vinc5_isp_tx_ch = <1>;
		vinc5_tdm_rx_sel = <1>;
		vinc5_rear_sensor_sel = <0>;
		vinc5_front_sensor_sel = <0>;
		vinc5_sensor_list = <0>;
		device_id = <5>;
		status = "disabled";
	};

	vinc12:vinc@5830ff8 {
		vinc6_csi_sel = <2>;
		vinc6_mipi_sel = <0xff>;
		vinc6_isp_sel = <0>;
		vinc6_isp_tx_ch = <0>;
		vinc6_tdm_rx_sel = <0>;
		vinc6_rear_sensor_sel = <0>;
		vinc6_front_sensor_sel = <0>;
		vinc6_sensor_list = <0>;
		device_id = <6>;
		status = "disabled";
	};

	vinc13:vinc@5830ff4 {
		vinc7_csi_sel = <2>;
		vinc7_mipi_sel = <0xff>;
		vinc7_isp_sel = <0>;
		vinc7_isp_tx_ch = <0>;
		vinc7_tdm_rx_sel = <0>;
		vinc7_rear_sensor_sel = <0>;
		vinc7_front_sensor_sel = <0>;
		vinc7_sensor_list = <0>;
		device_id = <7>;
		status = "disabled";
	};

	vinc20:vinc@5832000 {
		vinc8_csi_sel = <2>;
		vinc8_mipi_sel = <2>;
		vinc8_isp_sel = <0>;
		vinc8_isp_tx_ch = <0>;
		vinc8_tdm_rx_sel = <0>;
		vinc8_rear_sensor_sel = <1>;
		vinc8_front_sensor_sel = <1>;
		vinc8_sensor_list = <0>;
		device_id = <8>;
		work_mode = <0>;
		delay_init = <1>;
		status = "okay";
	};

	vinc21:vinc@5831ffc {
		vinc9_csi_sel = <2>;
		vinc9_mipi_sel = <2>;
		vinc9_isp_sel = <0>;
		vinc9_isp_tx_ch = <0>;
		vinc9_tdm_rx_sel = <0>;
		vinc9_rear_sensor_sel = <1>;
		vinc9_front_sensor_sel = <>;
		vinc9_sensor_list = <0>;
		device_id = <9>;
		work_mode = <0>;
		delay_init = <1>;
		status = "disabled";
	};

	vinc22:vinc@5831ff8 {
		vinc10_csi_sel = <2>;
		vinc10_mipi_sel = <0xff>;
		vinc10_isp_sel = <0>;
		vinc10_isp_tx_ch = <0>;
		vinc10_tdm_rx_sel = <0>;
		vinc10_rear_sensor_sel = <0>;
		vinc10_front_sensor_sel = <0>;
		vinc10_sensor_list = <0>;
		device_id = <10>;
		status = "disabled";
	};

	vinc23:vinc@5831ff4 {
		vinc11_csi_sel = <2>;
		vinc11_mipi_sel = <0xff>;
		vinc11_isp_sel = <0>;
		vinc11_isp_tx_ch = <0>;
		vinc11_tdm_rx_sel = <0>;
		vinc11_rear_sensor_sel = <0>;
		vinc11_front_sensor_sel = <0>;
		vinc11_sensor_list = <0>;
		device_id = <11>;
		status = "disabled";
	};

	vinc30:vinc@5833000 {
		vinc12_csi_sel = <2>;
		vinc12_mipi_sel = <2>;
		vinc12_isp_sel = <0>;
		vinc12_isp_tx_ch = <0>;
		vinc12_tdm_rx_sel = <0>;
		vinc12_rear_sensor_sel = <1>;
		vinc12_front_sensor_sel = <1>;
		vinc12_sensor_list = <0>;
		device_id = <12>;
		work_mode = <0>;
		delay_init = <1>;
		status = "okay";
	};

	vinc31:vinc@5832ffc {
		vinc13_csi_sel = <2>;
		vinc13_mipi_sel = <0xff>;
		vinc13_isp_sel = <0>;
		vinc13_isp_tx_ch = <0>;
		vinc13_tdm_rx_sel = <0>;
		vinc13_rear_sensor_sel = <0>;
		vinc13_front_sensor_sel = <0>;
		vinc13_sensor_list = <0>;
		device_id = <13>;
		status = "disabled";
	};

	vinc32:vinc@5832ff8 {
		vinc14_csi_sel = <2>;
		vinc14_mipi_sel = <0xff>;
		vinc14_isp_sel = <0>;
		vinc14_isp_tx_ch = <0>;
		vinc14_tdm_rx_sel = <0>;
		vinc14_rear_sensor_sel = <0>;
		vinc14_front_sensor_sel = <0>;
		vinc14_sensor_list = <0>;
		device_id = <14>;
		status = "disabled";
	};

	vinc33:vinc@5832ff4 {
		vinc15_csi_sel = <2>;
		vinc15_mipi_sel = <0xff>;
		vinc15_isp_sel = <0>;
		vinc15_isp_tx_ch = <0>;
		vinc15_tdm_rx_sel = <0>;
		vinc15_rear_sensor_sel = <0>;
		vinc15_front_sensor_sel = <0>;
		vinc15_sensor_list = <0>;
		device_id = <15>;
		status = "disabled";
	};

	vinc40:vinc@5834000 {
		vinc16_csi_sel = <2>;
		vinc16_mipi_sel = <2>;
		vinc16_isp_sel = <4>;
		vinc16_isp_tx_ch = <0>;
		vinc16_tdm_rx_sel = <0>;
		vinc16_rear_sensor_sel = <1>;
		vinc16_front_sensor_sel = <1>;
		vinc16_sensor_list = <1>;
		device_id = <16>;
		delay_init = <1>;
		status = "disabled";
	};

	vinc50:vinc@5835000 {
		vinc17_csi_sel = <2>;
		vinc17_mipi_sel = <2>;
		vinc17_isp_sel = <4>;
		vinc17_isp_tx_ch = <1>;
		vinc17_tdm_rx_sel = <0>;
		vinc17_rear_sensor_sel = <1>;
		vinc17_front_sensor_sel = <1>;
		vinc17_sensor_list = <1>;
		device_id = <17>;
		delay_init = <1>;
		status = "disabled";
	};
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值