Многие друзья раньше спрашивали, как адаптировать mipi камеру на платформе rk, или как модифицировать ее в дереве устройств. Сегодня хотел бы поделиться с вами хорошей статьей!
Введение в ресурс MIPI-CSI RK3588s:
Примечание. D/C-PHY доступен только в версии DPHY-V2.0.
RK3588/RK3588S VICAP поддерживает характеристики ввода и вывода:
Интернет-провайдер RK3588/RK3588s относится к версии RK ISP v3.0 и имеет 2 интернет-провайдера:
Примечание. CIS означает датчик изображения CMOS.
Здесь мы используем конфигурацию камеры платы разработки RK3588-EVB для иллюстрации канала камеры RK3588, на следующем рисунке представлена принципиальная схема канала подключения камеры RK3588, который может поддерживать 7 камер.
Описание блок-схемы:
dphy0_hw:
dphy1_hw:
Чтобы использовать указанный выше узел mipi phy, вам необходимо настроить соответствующий физический узел.
(csi2_dcphy0_hw/csi2_dcphy1_hw/csi2_dphy0_hw/csi2_dphy1_hw) Каждому mipi phy требуется модуль csi2 для анализа протокола mipi, а имена узлов — mipi0_csi2~mipi5_csi2.
Все данные камеры rk3588 должны пройти vicap, а затем подключиться к интернет-провайдеру. rk3588 поддерживает только одно оборудование vicap. Этот vicap поддерживает одновременный ввод 6 данных mipi phy и 1 dvp, поэтому мы разделяем vicap на 7 узлов, включая rkcif_mipi_lvds~rkcif_mipi_lvds5, rkcif_dvp. Отношения привязки каждого узла должны строго соответствовать узлам блока. Схема конфигурации серийного номера.
Связь между каждым узлом vicap и интернет-провайдером указывается соответствующим виртуальным XXX_sditf.
rk3588 поддерживает 2 оборудования ISP. Каждое устройство ISP может виртуализировать несколько виртуальных узлов. Программное обеспечение использует обратное чтение для считывания данных изображения каждого канала из DDR для обработки ISP. Для многокамерных решений рекомендуется равномерно распределять поток данных между двумя интернет-провайдерами.
Режимы прохождения и обратного чтения:
При настройке dts, если оборудование интернет-провайдера настроено только с одним виртуальным узлом, по умолчанию будет использоваться режим сквозной передачи. Если настроено несколько виртуальных узлов, по умолчанию будет использоваться режим обратного чтения.
Плата разработки RK3588 EVB по умолчанию имеет только 1 камеру, а метод ее подключения такой, как показано на mipi camera0 выше. Конфигурация DTS находится в файле kernel-5.10\arch\arm64\boot\dts\rockchip\rk3588-evb1-imx415.dtsi. Вы можете понять конфигурацию этого dts в сочетании с приведенным выше рисунком следующим образом:
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2021 Rockchip Electronics Co., Ltd.
*
*/
/ {
Инфракрасный фильтр (IRCUT) управляется двумя проводами. К этим двум проводам подается питание напряжением 3,5–6 В путем замены положительного и отрицательного полюсов источника питания IRCUT и соблюдения времени включения 100 мс±10. %, IRCUT может быть реализован. Драйвер управляет направлением выходного тока драйвера двигателя с помощью двух команд gpio: открытие (красная линия) и закрытие (черная линия). Ток течет от открытого к закрытому, что представляет собой инфракрасный фильтр, работающий в течение дня; ток течет от закрытого к открытому, которое представляет собой кусок белого стекла и работает ночью. Его Конфигурация следующая:
cam_ircut0: cam_ircut {
status = "okay";
compatible = "rockchip,ircut";
ircut-open-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;
ircut-close-gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_HIGH>;
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
};
};
//Здесь используется csi2_dcphy0
&csi2_dcphy0 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_in_ucam0: endpoint@1 {
reg = <1>;
//Имя порта на стороне датчика
remote-endpoint = <&imx415_out0>;
//mipi laneчисло,1laneдля<1>,4laneдля<1 2 3 4>,Здесь Конфигурация 4-полосная.,Это обязательно Конфигурация Иначе его не признаютmipiтип
data-lanes = <1 2 3 4>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
csidcphy0_out: endpoint@0 {
reg = <0>;
//mipi0_csi2_input — имя порта соответствующей стороны интернет-провайдера
remote-endpoint = <&mipi0_csi2_input>;
};
};
};
};
&i2c5 {
status = "okay";
imx415: imx415@1a {
compatible = "sony,imx415" //Должно соответствовать строке, определенной драйвером
reg = <0x1a>;//sensorизI2CАдрес устройства,7 бит
clocks = <&cru CLK_MIPI_CAMARAOUT_M1>;//sensor clockinКонфигурация
clock-names = "xvclk";
pinctrl-names = "default";
pinctrl-0 = <&mipim0_camera1_clk>;
//источник питания Конфигурация power-domains = <&power RK3588_PD_VI>;
//Конфигурация питания
pwdn-gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>;
avdd-supply = <&vcc_mipidcphy0>;
//Номер модуля, не повторяйте этот номер
rockchip,camera-module-index = <0>;
//Ориентация модуля, в том числе «спереди» и «сзади»
rockchip,camera-module-facing = "back";
//Имя модуля
rockchip,camera-module-name = "CMK-OT2022-PX1";
//IR Устройство резки
rockchip,camera-module-lens-name = "IR0147-50IRC-8M-F20";
lens-focus = <&cam_ircut0>;
port {
imx415_out0: endpoint {
//mipi Имя порта на стороне dphy
remote-endpoint = <&mipi_in_ucam0>;
//mipi laneчисло,1laneдля<1>,4laneдля<1 2 3 4>,Здесь Конфигурация 4-полосная.,Это обязательно Конфигурация Иначе его не признаютmipiтип
data-lanes = <1 2 3 4>;
};
};
};
};
&mipi_dcphy0 {
status = "okay";
};
&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>;
//csi2 Имя порта на стороне dphy
remote-endpoint = <&csidcphy0_out>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
mipi0_csi2_output: endpoint@0 {
reg = <0>;
//имя порта на стороне vicap
remote-endpoint = <&cif_mipi_in0>;
};
};
};
};
//Конфигурация vicap, здесь узел rkcif используется для представления vicap
&rkcif {
status = "okay";
};
&rkcif_mipi_lvds {
status = "okay";
port {
cif_mipi_in0: endpoint {
//csi2 Имя порта на стороне хоста
remote-endpoint = <&mipi0_csi2_output>;
};
};
};
&rkcif_mipi_lvds_sditf {
status = "okay";
port {
mipi_lvds_sditf: endpoint {
//имя порта виртуального устройства ISP
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>;
//vicap mipi имя конечной точки sditf
remote-endpoint = <&mipi_lvds_sditf>;
};
};
};
На основе платы разработки RK3588-EVB и платы адаптера 6-канальной камеры можно реализовать 6-канальную камеру. Конфигурация DTS находится в файле kernel-5.10\arch\arm64\boot\dts\rockchip\rk3588-evb1-cam-. 6х.дци. Для подключения 6-канальной камеры вы можете обратиться к приведенной выше схеме и понять конфигурацию dts на основе схемы следующим образом:
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2021 Rockchip Electronics Co., Ltd.
*
*/
//Далее представлена конфигурация физ, всего 6 физ.
&csi2_dcphy0 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_in_ucam0: endpoint@1 {
reg = <1>;
remote-endpoint = <&imx464_out0>;
data-lanes = <1 2>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
csidcphy0_out: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi0_csi2_input>;
};
};
};
};
&csi2_dcphy1 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_in_ucam1: endpoint@1 {
reg = <1>;
remote-endpoint = <&imx464_out1>;
data-lanes = <1 2>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
csidcphy1_out: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi1_csi2_input>;
};
};
};
};
&csi2_dphy0_hw {
status = "okay";
};
&csi2_dphy1_hw {
status = "okay";
};
&csi2_dphy1 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_in_ucam2: endpoint@1 {
reg = <1>;
remote-endpoint = <&imx464_out2>;
data-lanes = <1 2>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
csidphy1_out: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi2_csi2_input>;
};
};
};
};
&csi2_dphy2 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_in_ucam3: endpoint@1 {
reg = <1>;
remote-endpoint = <&imx464_out3>;
data-lanes = <1 2>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
csidphy2_out: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi3_csi2_input>;
};
};
};
};
&csi2_dphy4 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_in_ucam4: endpoint@1 {
reg = <1>;
remote-endpoint = <&imx464_out4>;
data-lanes = <1 2>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
csidphy4_out: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi4_csi2_input>;
};
};
};
};
&csi2_dphy5 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi_in_ucam5: endpoint@1 {
reg = <1>;
remote-endpoint = <&imx464_out5>;
data-lanes = <1 2>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
csidphy5_out: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi5_csi2_input>;
};
};
};
};
//Ниже приведена общая конфигурация датчика. Конфигурация imx464_0 до imx464_5. Шесть датчиков
&i2c3 {
status = "okay";
/* module 77/79 0x1a 78/80 0x36 */
imx464_2: imx464-2@1a {
compatible = "sony,imx464";
status = "okay";
reg = <0x1a>;
clocks = <&cru CLK_MIPI_CAMARAOUT_M3>;
clock-names = "xvclk";
power-domains = <&power RK3588_PD_VI>;
pinctrl-names = "default";
pinctrl-0 = <&mipim0_camera3_clk>;
avdd-supply = <&vcc_mipicsi0>;
pwdn-gpios = <&gpio1 RK_PB3 GPIO_ACTIVE_HIGH>;
rockchip,camera-module-index = <2>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "CMK-OT1980-PX1";
rockchip,camera-module-lens-name = "SHG102";
port {
imx464_out2: endpoint {
remote-endpoint = <&mipi_in_ucam2>;
data-lanes = <1 2>;
};
};
};
imx464_3: imx464-3@36 {
compatible = "sony,imx464";
status = "okay";
reg = <0x36>;
clocks = <&cru CLK_MIPI_CAMARAOUT_M3>;
clock-names = "xvclk";
power-domains = <&power RK3588_PD_VI>;
avdd-supply = <&vcc_mipicsi0>;
pwdn-gpios = <&gpio1 RK_PA7 GPIO_ACTIVE_HIGH>;
rockchip,camera-module-index = <3>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "CMK-OT1980-PX1";
rockchip,camera-module-lens-name = "SHG102";
port {
imx464_out3: endpoint {
remote-endpoint = <&mipi_in_ucam3>;
data-lanes = <1 2>;
};
};
};
};
&i2c4 {
status = "okay";
pinctrl-0 = <&i2c4m3_xfer>;
/* 77/79 0x1a 78/80 0x36 */
imx464_4: imx464-4@1a {
compatible = "sony,imx464";
status = "okay";
reg = <0x1a>;
clocks = <&cru CLK_MIPI_CAMARAOUT_M4>;
clock-names = "xvclk";
power-domains = <&power RK3588_PD_VI>;
pinctrl-names = "default";
pinctrl-0 = <&mipim0_camera4_clk>;
avdd-supply = <&vcc_mipicsi1>;
pwdn-gpios = <&gpio1 RK_PB4 GPIO_ACTIVE_HIGH>;
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "CMK-OT1980-PX1";
rockchip,camera-module-lens-name = "SHG102";
port {
imx464_out4: endpoint {
remote-endpoint = <&mipi_in_ucam4>;
data-lanes = <1 2>;
};
};
};
imx464_5: imx464-5@36 {
compatible = "sony,imx464";
status = "okay";
reg = <0x36>;
clocks = <&cru CLK_MIPI_CAMARAOUT_M4>;
clock-names = "xvclk";
power-domains = <&power RK3588_PD_VI>;
avdd-supply = <&vcc_mipicsi1>;
pwdn-gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>;
rockchip,camera-module-index = <1>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "CMK-OT1980-PX1";
rockchip,camera-module-lens-name = "SHG102";
port {
imx464_out5: endpoint {
remote-endpoint = <&mipi_in_ucam5>;
data-lanes = <1 2>;
};
};
};
};
&i2c5 {
status = "okay";
/* 77/79 0x1a 78/80 0x36 */
imx464_0: imx464-0@1a {
compatible = "sony,imx464";
status = "okay";
reg = <0x1a>;
clocks = <&cru CLK_MIPI_CAMARAOUT_M1>;
clock-names = "xvclk";
power-domains = <&power RK3588_PD_VI>;
pwdn-gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&mipim0_camera1_clk>;
avdd-supply = <&vcc_mipidcphy0>;
rockchip,camera-module-index = <4>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "CMK-OT1980-PX1";
rockchip,camera-module-lens-name = "SHG102";
port {
imx464_out0: endpoint {
remote-endpoint = <&mipi_in_ucam0>;
data-lanes = <1 2>;
};
};
};
imx464_1: imx464-1@36 {
compatible = "sony,imx464";
status = "okay";
reg = <0x36>;
clocks = <&cru CLK_MIPI_CAMARAOUT_M2>;
clock-names = "xvclk";
power-domains = <&power RK3588_PD_VI>;
pinctrl-names = "default";
pinctrl-0 = <&mipim0_camera2_clk>;
pwdn-gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>;
avdd-supply = <&vcc_mipidcphy0>;
rockchip,camera-module-index = <5>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "CMK-OT1980-PX1";
rockchip,camera-module-lens-name = "SHG102";
port {
imx464_out1: endpoint {
remote-endpoint = <&mipi_in_ucam1>;
data-lanes = <1 2>;
};
};
};
};
&mipi_dcphy0 {
status = "okay";
};
&mipi_dcphy1 {
status = "okay";
};
//Далее — mipi Конфигурация для контроллеров, всего 6 контроллеров
&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>;
};
};
};
};
&mipi1_csi2 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi1_csi2_input: endpoint@1 {
reg = <1>;
remote-endpoint = <&csidcphy1_out>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
mipi1_csi2_output: endpoint@0 {
reg = <0>;
remote-endpoint = <&cif_mipi_in1>;
};
};
};
};
&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 = <&csidphy1_out>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
mipi2_csi2_output: endpoint@0 {
reg = <0>;
remote-endpoint = <&cif_mipi_in2>;
};
};
};
};
&mipi3_csi2 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi3_csi2_input: endpoint@1 {
reg = <1>;
remote-endpoint = <&csidphy2_out>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
mipi3_csi2_output: endpoint@0 {
reg = <0>;
remote-endpoint = <&cif_mipi_in3>;
};
};
};
};
&mipi4_csi2 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi4_csi2_input: endpoint@1 {
reg = <1>;
remote-endpoint = <&csidphy4_out>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
mipi4_csi2_output: endpoint@0 {
reg = <0>;
remote-endpoint = <&cif_mipi_in4>;
};
};
};
};
&mipi5_csi2 {
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
mipi5_csi2_input: endpoint@1 {
reg = <1>;
remote-endpoint = <&csidphy5_out>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
mipi5_csi2_output: endpoint@0 {
reg = <0>;
remote-endpoint = <&cif_mipi_in5>;
};
};
};
};
//Ниже приведена конфигурация vicap, которая разделена на 6 узлов vicap и соответствующие 6 узлов виртуального канала sditf.
&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_mipi_lvds1 {
status = "okay";
port {
cif_mipi_in1: endpoint {
remote-endpoint = <&mipi1_csi2_output>;
};
};
};
&rkcif_mipi_lvds1_sditf {
status = "okay";
port {
mipi1_lvds_sditf: endpoint {
remote-endpoint = <&isp1_vir0>;
};
};
};
&rkcif_mipi_lvds2 {
status = "okay";
port {
cif_mipi_in2: endpoint {
remote-endpoint = <&mipi2_csi2_output>;
};
};
};
&rkcif_mipi_lvds2_sditf {
status = "okay";
port {
mipi2_lvds_sditf: endpoint {
remote-endpoint = <&isp0_vir1>;
};
};
};
&rkcif_mipi_lvds3 {
status = "okay";
port {
cif_mipi_in3: endpoint {
remote-endpoint = <&mipi3_csi2_output>;
};
};
};
&rkcif_mipi_lvds3_sditf {
status = "okay";
port {
mipi3_lvds_sditf: endpoint {
remote-endpoint = <&isp1_vir1>;
};
};
};
&rkcif_mipi_lvds4 {
status = "okay";
port {
cif_mipi_in4: endpoint {
remote-endpoint = <&mipi4_csi2_output>;
};
};
};
&rkcif_mipi_lvds4_sditf {
status = "okay";
port {
mipi4_lvds_sditf: endpoint {
remote-endpoint = <&isp0_vir2>;
};
};
};
&rkcif_mipi_lvds5 {
status = "okay";
port {
cif_mipi_in5: endpoint {
remote-endpoint = <&mipi5_csi2_output>;
};
};
};
&rkcif_mipi_lvds5_sditf {
status = "okay";
port {
mipi5_lvds_sditf: endpoint {
remote-endpoint = <&isp1_vir2>;
};
};
};
&rkcif_mmu {
status = "okay";
};
// Ниже приводится конфигурация провайдера. Два провайдера разделены на 6 виртуальных узлов, и каждый провайдер виртуализирует 3 узла.
&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>;
};
};
};
&rkisp0_vir1 {
status = "okay";
port {
#address-cells = <1>;
#size-cells = <0>;
isp0_vir1: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi2_lvds_sditf>;
};
};
};
&rkisp0_vir2 {
status = "okay";
port {
#address-cells = <1>;
#size-cells = <0>;
isp0_vir2: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi4_lvds_sditf>;
};
};
};
&rkisp1 {
status = "okay";
};
&isp1_mmu {
status = "okay";
};
&rkisp1_vir0 {
status = "okay";
port {
#address-cells = <1>;
#size-cells = <0>;
isp1_vir0: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi1_lvds_sditf>;
};
};
};
&rkisp1_vir1 {
status = "okay";
port {
#address-cells = <1>;
#size-cells = <0>;
isp1_vir1: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi3_lvds_sditf>;
};
};
};
&rkisp1_vir2 {
status = "okay";
port {
#address-cells = <1>;
#size-cells = <0>;
isp1_vir2: endpoint@0 {
reg = <0>;
remote-endpoint = <&mipi5_lvds_sditf>;
};
};
};
Надеюсь, сегодняшний рассказ будет полезен всем!
Ссылка на статью: http://t.csdnimg.cn/6IZPE.