全志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";
	};
};
TP2915 is a video D/A solution for converting HD digital video signal into the analog domain that is suitable for transmission over single coaxial or twist-pair cable over long reach. The major application is the Automotive interconnect between HD display and HD camera systems or any other applications require robust and low cost transmission of HD video. TP2915 generates the analog video signal complying with HD Transport Video Interface (HD-TVI) format. It is one form of the HD composite video format that is widely adopted in the industry. TP2915 can support a variety of video resolution digital video input standards in 422 or 444 formats over 8, 16 or 24-bit interface with the embedded synchronization (EAV/SAV) header or explicit sync signals. It also accepts 24-bit RGB input with external sync signals. It has the built-in sync extraction logic to obtain the sync information inside the video stream. The video resolutions supported range from SD (NT/PAL) to UHD. TP2915 contains a versatile video timing generator that is programmable for all standards supported and other non-standard video formats. It has programmable clip/shift/scale function to proper condition the input video signal for further processing. It also has an optional 2x over-sampling filters built-in to support higher output sample rate. Over-sampling can relax the external analog filter requirement. TP2915 supports selectable current mode and voltage mode output as well as internal programmable analog reconstruction filter. The built-in data slicer help minimize glue circuits. The signal amplitude of the DAC output can be set by external current setting resistor. It also has built-in color bar test pattern generator for easy testing and adjustment. TP2915 has built-in clock jitter reduction circuit based on local crystal clock to ensure the output signal performance.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值