// SPDX-License-Identifier: GPL-2.0-only
// Definitions for IMX258 camera module on VC I2C bus
/dts-v1/;
/plugin/;

#include <dt-bindings/gpio/gpio.h>

/{
	compatible = "brcm,bcm2835";

	fragment@0 {
		target = <&i2c0if>;
		__overlay__ {
			status = "okay";
		};
	};

	clk_frag: fragment@1 {
		target = <&cam1_clk>;
		cam_clk: __overlay__ {
			clock-frequency = <24000000>;
			status = "okay";
		};
	};

	fragment@2 {
		target = <&i2c0mux>;
		__overlay__ {
			status = "okay";
		};
	};

	fragment@11 {
		target = <&cam_endpoint>;
		__overlay__ {
			data-lanes = <1 2>;
			link-frequencies = /bits/ 64 <633600000
						      320000000>;
		};
	};

	fragment@12 {
		target = <&cam_endpoint>;
		__dormant__ {
			data-lanes = <1 2 3 4>;
			link-frequencies =
				/bits/ 64 <633600000 320000000>;
		};
	};

	fragment@13 {
		target = <&csi_ep>;
		__overlay__ {
			data-lanes = <1 2>;
		};
	};

	fragment@14 {
		target = <&csi_ep>;
		__dormant__ {
			data-lanes = <1 2 3 4>;
		};
	};

	csi_frag: fragment@101 {
		target = <&csi1>;
		csi: __overlay__ {
			status = "okay";

			port {
				csi_ep: endpoint {
					remote-endpoint = <&cam_endpoint>;
					clock-lanes = <0>;
					clock-noncontinuous;
				};
			};
		};
	};

	reg_frag: fragment@5 {
		target = <&cam1_reg>;
		cam_reg: __overlay__ {
			regulator-name = "imx258_vana";
			startup-delay-us = <300000>;
			regulator-min-microvolt = <2700000>;
			regulator-max-microvolt = <2700000>;
		};
	};

	i2c_frag: fragment@100 {
		target = <&i2c_csi_dsi>;
		__overlay__ {
			#address-cells = <1>;
			#size-cells = <0>;
			status = "okay";

			#include "imx258.dtsi"

			vcm: ad5398@c {
				compatible = "adi,ad5398";
				reg = <0x0c>;
				status = "disabled";
				VANA-supply = <&cam1_reg>;
			};
		};
	};

	fragment@102 {
		target = <&csi1>;
		__dormant__ {
			compatible = "brcm,bcm2835-unicam-legacy";
		};
	};

	__overrides__ {
		rotation = <&cam_node>,"rotation:0";
		orientation = <&cam_node>,"orientation:0";
		media-controller = <0>,"!102";
		cam0 = <&i2c_frag>, "target:0=",<&i2c_csi_dsi0>,
		       <&csi_frag>, "target:0=",<&csi0>,
		       <&clk_frag>, "target:0=",<&cam0_clk>,
		       <&reg_frag>, "target:0=",<&cam0_reg>,
		       <&cam_node>, "clocks:0=",<&cam0_clk>,
		       <&cam_node>, "vana-supply:0=",<&cam0_reg>;
		vcm = <&vcm>, "status=okay",
		      <&cam_node>,"lens-focus:0=", <&vcm>;
		4lane = <0>, "-11+12-13+14";
	};
};

&cam_node {
	status = "okay";
};

&cam_endpoint {
	remote-endpoint = <&csi_ep>;
};
