/*
 * Copyright 2018 NXP
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include "fsl-imx8qxp-mek.dts"
#include "fsl-imx8qxp-mek-lvds0-it6263.dtsi"

&iomuxc {
		imx8qxp-mek {
		pinctrl_parallel_csi: parallelcsigrp {
			fsl,pins = <
				SC_P_CSI_D00_CI_PI_D02		0xC0000041
				SC_P_CSI_D01_CI_PI_D03		0xC0000041
				SC_P_CSI_D02_CI_PI_D04		0xC0000041
				SC_P_CSI_D03_CI_PI_D05		0xC0000041
				SC_P_CSI_D04_CI_PI_D06		0xC0000041
				SC_P_CSI_D05_CI_PI_D07		0xC0000041
				SC_P_CSI_D06_CI_PI_D08		0xC0000041
				SC_P_CSI_D07_CI_PI_D09		0xC0000041

				SC_P_CSI_MCLK_CI_PI_MCLK		0xC0000041
				SC_P_CSI_PCLK_CI_PI_PCLK		0xC0000041
				SC_P_CSI_HSYNC_CI_PI_HSYNC		0xC0000041
				SC_P_CSI_VSYNC_CI_PI_VSYNC		0xC0000041
				SC_P_CSI_EN_LSIO_GPIO3_IO02		0xC0000041
				SC_P_CSI_RESET_LSIO_GPIO3_IO03	0xC0000041
			>;
};
	};
};

&jpegdec {
	status = "disabled";
};

&jpegenc {
	status = "disabled";
};

&i2c0_csi0 {
	status = "disabled";
};

&mipi_csi_0 {
	status = "disabled";
};

&i2c0_cm40 {
	ov5640: ov5640@3c {
		compatible = "ovti,ov5640_v3";
		reg = <0x3c>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_parallel_csi>;
		clocks = <&clk IMX8QXP_PARALLEL_CSI_MISC0_CLK>;
		clock-names = "csi_mclk";
		pwn-gpios = <&gpio3 2 GPIO_ACTIVE_LOW>;
		rst-gpios = <&gpio3 3 GPIO_ACTIVE_HIGH>;
		csi_id = <0>;
		mclk = <24000000>;
		mclk_source = <0>;
		status = "okay";
		port {
			ov5640_ep: endpoint {
				remote-endpoint = <&parallel_csi_ep>;
			};
		};
	};
};
&cameradev {
	parallel_csi;
	status = "okay";
};

&parallel_csi {
	#address-cells = <1>;
	#size-cells = <0>;
	status = "okay";
	port@0 {
		reg = <0>;
		parallel_csi_ep: endpoint {
			remote-endpoint = <&ov5640_ep>;
		};
	};
};

&isi_0 {
	interface = <6 0 2>;	/* INPUT: 6-PARALLEL CSI */
	parallel_csi;
	status = "okay";
};

&isi_1 {
	status = "disabled";
};

&isi_2 {
	status = "disabled";
};

&isi_3 {
	status = "disabled";
};

&isi_4 {
	status = "disabled";
};

&isi_5 {
	status = "disabled";
};

&isi_6 {
	status = "disabled";
};

&isi_7 {
	status = "disabled";
};
