0hmX/am3352-ddr-track-a-local-dfm-wip-20261007

Experimental RJ45-corrected board with isolated PG indication. 1005/1005 source joins pass; 15 expanded-guard physical errors, sourcing and qualification gates remain. Not fabrication-ready.

Version
0.0.14
License
unset
Stars
0

hdmi/firmware/am3352-ddr-hdmi.dtsi

// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
// Board-specific include; requires the normal AM335x SoC and board power DTS.
// The physical wiring contract is cpu-hdmi-pin-contract.tsx.
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pinctrl/am33xx.h>

/ {
	hdmi_3v3: regulator-hdmi-3v3 {
		compatible = "regulator-fixed";
		regulator-name = "HDMI_3V3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-boot-on;
		regulator-always-on;
	};

	hdmi_1v2: regulator-hdmi-1v2 {
		compatible = "regulator-fixed";
		regulator-name = "HDMI_1V2";
		regulator-min-microvolt = <1200000>;
		regulator-max-microvolt = <1200000>;
		vin-supply = <&hdmi_3v3>;
		regulator-boot-on;
		regulator-always-on;
	};

	hdmi_connector: connector-hdmi {
		compatible = "hdmi-connector";
		label = "HDMI";
		type = "a";
		port {
			hdmi_connector_in: endpoint {
				remote-endpoint = <&it66122_out>;
			};
		};
	};
};

&am33xx_pinmux {
	hdmi_rgb24_pins: hdmi-rgb24-pins {
		pinctrl-single,pins = <
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA0, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA1, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA2, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA3, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA4, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA5, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA6, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA7, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA8, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA9, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA10, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA11, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA12, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA13, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA14, PIN_OUTPUT, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_DATA15, PIN_OUTPUT, MUX_MODE0)
			/* AD15..AD8 supply LCD_DATA16..LCD_DATA23 in reverse order. */
			AM33XX_PADCONF(AM335X_PIN_GPMC_AD15, PIN_OUTPUT, MUX_MODE1)
			AM33XX_PADCONF(AM335X_PIN_GPMC_AD14, PIN_OUTPUT, MUX_MODE1)
			AM33XX_PADCONF(AM335X_PIN_GPMC_AD13, PIN_OUTPUT, MUX_MODE1)
			AM33XX_PADCONF(AM335X_PIN_GPMC_AD12, PIN_OUTPUT, MUX_MODE1)
			AM33XX_PADCONF(AM335X_PIN_GPMC_AD11, PIN_OUTPUT, MUX_MODE1)
			AM33XX_PADCONF(AM335X_PIN_GPMC_AD10, PIN_OUTPUT, MUX_MODE1)
			AM33XX_PADCONF(AM335X_PIN_GPMC_AD9, PIN_OUTPUT, MUX_MODE1)
			AM33XX_PADCONF(AM335X_PIN_GPMC_AD8, PIN_OUTPUT, MUX_MODE1)
			AM33XX_PADCONF(AM335X_PIN_LCD_HSYNC, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_VSYNC, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_PCLK, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_LCD_AC_BIAS_EN, PIN_OUTPUT_PULLDOWN, MUX_MODE0)
		>;
	};

	hdmi_control_pins: hdmi-control-pins {
		pinctrl-single,pins = <
			/* C18: command into the physical reset-qualification gate. */
			AM33XX_PADCONF(AM335X_PIN_ECAP0_IN_PWM0_OUT, PIN_OUTPUT_PULLUP, MUX_MODE7)
			/* V17: IT66122 open-drain interrupt, externally pulled to 3.3V. */
			AM33XX_PADCONF(AM335X_PIN_GPMC_A11, PIN_INPUT_PULLUP, MUX_MODE7)
		>;
	};

	hdmi_mmc0_pins: hdmi-mmc0-pins {
		pinctrl-single,pins = <
			AM33XX_PADCONF(AM335X_PIN_MMC0_DAT0, PIN_INPUT_PULLUP, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_MMC0_DAT1, PIN_INPUT_PULLUP, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_MMC0_DAT2, PIN_INPUT_PULLUP, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_MMC0_DAT3, PIN_INPUT_PULLUP, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_MMC0_CLK, PIN_INPUT_PULLUP, MUX_MODE0)
			AM33XX_PADCONF(AM335X_PIN_MMC0_CMD, PIN_INPUT_PULLUP, MUX_MODE0)
			/* U16 GPIO1_25 replaces U10, now needed for LCD_DATA23. */
			AM33XX_PADCONF(AM335X_PIN_GPMC_A9, PIN_INPUT_PULLUP, MUX_MODE7)
		>;
	};
};

&lcdc {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&hdmi_rgb24_pins>;
	/* TI SPRZ360I Fig2: correct RGB888/XRGB8888; 16-bit mode is BGR565. */
	blue-and-red-wiring = "crossed";
	max-pixelclock = <126000>;
	port {
		lcdc_hdmi_out: endpoint {
			remote-endpoint = <&it66122_in>;
		};
	};
};

&i2c0 {
	status = "okay";
	it66122: bridge-hdmi@4c {
		compatible = "ite,it66122";
		reg = <0x4c>;
		pinctrl-names = "default";
		pinctrl-0 = <&hdmi_control_pins>;
		vcn33-supply = <&hdmi_3v3>;
		/* Legacy driver name: IT66122 core is physically 1.2V, not 1.8V. */
		vcn18-supply = <&hdmi_1v2>;
		vrf12-supply = <&hdmi_1v2>;
		reset-gpios = <&gpio0 7 GPIO_ACTIVE_LOW>;
		interrupt-parent = <&gpio1>;
		interrupts = <27 IRQ_TYPE_LEVEL_LOW>;
		/* No #sound-dai-cells or audio card: this revision is video-only. */
		ports {
			#address-cells = <1>;
			#size-cells = <0>;
			port@0 {
				reg = <0>;
				it66122_in: endpoint {
					bus-width = <24>;
					remote-endpoint = <&lcdc_hdmi_out>;
				};
			};
			port@1 {
				reg = <1>;
				it66122_out: endpoint {
					remote-endpoint = <&hdmi_connector_in>;
				};
			};
		};
	};
};

/* Linux label mmc1 is the SoC's physical MMC0 controller. */
&mmc1 {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&hdmi_mmc0_pins>;
	bus-width = <4>;
	cd-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
};