Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm64/boot/dts/rockchip/px30-ringneck-haikou-video-demo.dtso
26498 views
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2025 Cherry Embedded Solutions GmbH
 *
 * DEVKIT ADDON CAM-TS-A01
 * https://embedded.cherry.de/product/development-kit/
 *
 * DT-overlay for the camera / DSI demo appliance for Haikou boards.
 * In the flavour for use with a Ringneck system-on-module.
 */

/dts-v1/;
/plugin/;

#include <dt-bindings/clock/px30-cru.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>
#include <dt-bindings/pinctrl/rockchip.h>

&{/} {
	backlight: backlight {
		compatible = "pwm-backlight";
		power-supply = <&dc_12v>;
		pwms = <&pwm0 0 25000 0>;
	};

	cam_afvdd_2v8: regulator-cam-afvdd-2v8 {
		compatible = "regulator-fixed";
		gpio = <&pca9670 2 GPIO_ACTIVE_LOW>;
		regulator-max-microvolt = <2800000>;
		regulator-min-microvolt = <2800000>;
		regulator-name = "cam-afvdd-2v8";
		vin-supply = <&vcc2v8_video>;
	};

	cam_avdd_2v8: regulator-cam-avdd-2v8 {
		compatible = "regulator-fixed";
		gpio = <&pca9670 4 GPIO_ACTIVE_LOW>;
		regulator-max-microvolt = <2800000>;
		regulator-min-microvolt = <2800000>;
		regulator-name = "cam-avdd-2v8";
		vin-supply = <&vcc2v8_video>;
	};

	cam_dovdd_1v8: regulator-cam-dovdd-1v8 {
		compatible = "regulator-fixed";
	        gpio = <&pca9670 3 GPIO_ACTIVE_LOW>;
	        regulator-max-microvolt = <1800000>;
	        regulator-min-microvolt = <1800000>;
	        regulator-name = "cam-dovdd-1v8";
	        vin-supply = <&vcc1v8_video>;
	};

	cam_dvdd_1v2: regulator-cam-dvdd-1v2 {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&pca9670 5 GPIO_ACTIVE_HIGH>;
		regulator-max-microvolt = <1200000>;
		regulator-min-microvolt = <1200000>;
		regulator-name = "cam-dvdd-1v2";
		vin-supply = <&vcc3v3_baseboard>;
	};

	vcc1v8_video: regulator-vcc1v8-video {
		compatible = "regulator-fixed";
		regulator-always-on;
		regulator-boot-on;
		regulator-max-microvolt = <1800000>;
		regulator-min-microvolt = <1800000>;
		regulator-name = "vcc1v8-video";
		vin-supply = <&vcc3v3_baseboard>;
	};

	vcc2v8_video: regulator-vcc2v8-video {
		compatible = "regulator-fixed";
		regulator-always-on;
		regulator-boot-on;
		regulator-max-microvolt = <2800000>;
		regulator-min-microvolt = <2800000>;
		regulator-name = "vcc2v8-video";
		vin-supply = <&vcc3v3_baseboard>;
	};

	video-adapter-leds {
		compatible = "gpio-leds";

		video-adapter-led {
			color = <LED_COLOR_ID_BLUE>;
			gpios = <&pca9670 7 GPIO_ACTIVE_HIGH>;
			label = "video-adapter-led";
			linux,default-trigger = "none";
		};
	};
};

&cif_clkout_m0 {
	rockchip,pins =
		<2 RK_PB3 1 &pcfg_pull_none_12ma>;
};

&csi_dphy {
	status = "okay";
};

&display_subsystem {
	status = "okay";
};

&dsi {
	#address-cells = <1>;
	#size-cells = <0>;
	status = "okay";

	panel@0 {
		compatible = "leadtek,ltk050h3148w";
		reg = <0>;
		backlight = <&backlight>;
		iovcc-supply = <&vcc1v8_video>;
		reset-gpios = <&pca9670 0 GPIO_ACTIVE_LOW>;
		vci-supply = <&vcc2v8_video>;

		port {
			mipi_in_panel: endpoint {
				remote-endpoint = <&mipi_out_panel>;
			};
		};
	};
};

&dsi_dphy {
	status = "okay";
};

&dsi_out {
	mipi_out_panel: endpoint {
		remote-endpoint = <&mipi_in_panel>;
	};
};

&i2c1 {
	#address-cells = <1>;
	#size-cells = <0>;
	/* OV5675, GT911, DW9714 are limited to 400KHz */
	clock-frequency = <400000>;

	focus: focus@c {
		compatible = "dongwoon,dw9714";
		reg = <0xc>;
		vcc-supply = <&cam_afvdd_2v8>;
	};

	touchscreen@14 {
		compatible = "goodix,gt911";
		reg = <0x14>;
		interrupt-parent = <&gpio0>;
		interrupts = <RK_PA0 IRQ_TYPE_LEVEL_LOW>;
		irq-gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
		pinctrl-0 = <&touch_int>;
		pinctrl-names = "default";
		reset-gpios = <&pca9670 1 GPIO_ACTIVE_HIGH>;
		AVDD28-supply = <&vcc2v8_video>;
		VDDIO-supply = <&vcc3v3_baseboard>;
	};

	pca9670: gpio@27 {
		compatible = "nxp,pca9670";
		reg = <0x27>;
		gpio-controller;
		#gpio-cells = <2>;
		pinctrl-0 = <&pca9670_resetn>;
		pinctrl-names = "default";
		reset-gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_LOW>;
	};

	camera@36 {
		compatible = "ovti,ov5675";
		reg = <0x36>;
		clocks = <&cru SCLK_CIF_OUT>;
		assigned-clocks = <&cru SCLK_CIF_OUT>;
		/* Only parent to get exactly 19.2MHz */
		assigned-clock-parents = <&cru USB480M>;
		assigned-clock-rates = <19200000>;
		avdd-supply = <&cam_avdd_2v8>;
		dvdd-supply = <&cam_dvdd_1v2>;
		dovdd-supply = <&cam_dovdd_1v8>;
		lens-focus = <&focus>;
		orientation = <0>;
		pinctrl-names = "default";
		pinctrl-0 = <&cif_clkout_m0>;
		reset-gpios = <&pca9670 6 GPIO_ACTIVE_LOW>;
		rotation = <180>;

		port {
			cam_out: endpoint {
				data-lanes = <1 2>;
				link-frequencies = /bits/ 64 <450000000>;
				remote-endpoint = <&mipi_in_cam>;
			};
		};
	};
};

&isp {
	status = "okay";
};

&isp_in {
	mipi_in_cam: endpoint {
		data-lanes = <1 2>;
		remote-endpoint = <&cam_out>;
	};
};

&pinctrl {
	pca9670 {
		pca9670_resetn: pca9670-resetn {
			rockchip,pins = <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	touch {
		touch_int: touch-int {
			rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};
};

&vopb {
	status = "okay";
};

&vopb_mmu {
	status = "okay";
};

&vopl {
	status = "okay";
};

&vopl_mmu {
	status = "okay";
};