[ISSUE][USB-C][Display Port] USB-C DP support on Custom carrier board

Greetings,

We have developed a Custom carrier board for Orin Nano SoM, in which there are multiple USB-C ports with their corresponding controller ICs.

the USB-C DP connector is TUSB1046-DCIRNQT and the controller IC used is TPS65988DHRSHR, I would like your help with the kernel dts configuration and Jetson Linux configuration.

/dts-v1/;

#include <dt-bindings/gpio/tegra234-gpio.h>
#include <dt-bindings/input/input.h>
#include <t234-common-cvm/tegra234-cpuidle.dtsi>
#include <t234-common-cvm/tegra234-thermal.dtsi>
#include <t234-common-cvm/tegra234-thermal-cooling.dtsi>
#include <t234-common-cvm/tegra234-thermal-userspace-alert.dtsi>
#include <t234-common-cvm/tegra234-cpufreq-pair-cooling.dtsi>
#include <t234-common-cvm/tegra234-cvm-p3767.dtsi>
#include <tegra234-soc/mods-simple-bus.dtsi>
#include "tegra234-dcb-p3767-0000-dp.dtsi"
#include "cvb/tegra234-p3509-a02-pwm-fan.dtsi"
#include "cvb/tegra234-p3509-a02-pcie.dtsi"

/ {
	nvidia,dtsfilename = __FILE__;
	nvidia,dtbbuildtime = __DATE__, __TIME__;
	compatible = "nvidia,p3768-0000+p3767-0003", "nvidia,p3768-0000+p3767-0005",
			"nvidia,p3767-0003", "nvidia,p3767-0005",
			"nvidia,tegra234", "nvidia,tegra23x";
	model = "Bloom Mobile Device Baseboard";

	bluedroid_pm {
		status = "disabled";
	};

	display@13800000 {
		status = "okay";
		//os_gpio_hotplug_a = <&tegra_main_gpio TEGRA234_MAIN_GPIO(M, 0) GPIO_ACTIVE_HIGH>;
	};

	fixed-regulators {
		vdd_5v_sys: regulator@100 {
			/* Enable is automatic with DC_IN */
			compatible = "regulator-fixed";
			reg = <100>;
			regulator-name = "vdd-5v-sys";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			regulator-always-on;
		};

		vdd_3v3_sys: regulator@101 {
			/* BUCK_3V3_EN enable is driven by button MCU */
			compatible = "regulator-fixed";
			reg = <101>;
			regulator-name = "vdd-3v3-sys";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			regulator-always-on;
		};

		vdd_1v8: regulator@102 {
			/*
			 * BUCK_3V3_PG enable is driven by vdd_3v3_sys
			 * which is power good from that regulator.
			 */
			compatible = "regulator-fixed";
			reg = <102>;
			regulator-name = "vdd-1v8";
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			vin-supply = <&vdd_3v3_sys>;
			regulator-always-on;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";
		gpio-keys,name = "gpio-keys";
		status = "okay";

		forcerecovery {
			label = "force-recovery";
			gpios = <&tegra_main_gpio TEGRA234_MAIN_GPIO(G, 0) GPIO_ACTIVE_LOW>;
			linux,code = <BTN_1>;
		};

		power_key {
			label = "power-key";
			gpios = <&tegra_aon_gpio TEGRA234_AON_GPIO(EE, 4) GPIO_ACTIVE_LOW>;
			linux,code = <KEY_POWER>;
			gpio-key,wakeup;
		};
	};

	mttcan@c310000 {
		status = "okay";
	};

	/* PWM3 - FAN */
	pwm@32a0000 {
		status = "okay";
	};

	/* UART0 - M2.E */
	serial@3140000 {
		/* UARTE, Goes to M2.E and also some of the pins to bootstrap */
		status = "okay";
	};

	serial@3110000 {
		status = "okay";
	};

	serial@31d0000 {/* UARTI - SBSA */
		status = "okay";
	};

	tachometer@39c0000 {
		status = "okay";
		upper-threshold = <0xfffff>;
		lower-threshold = <0x0>;
	};

	xusb_padctl: xusb_padctl@3520000 {
		status = "okay";
		pads {
			usb2 {
				lanes {
					usb2-0 {
						nvidia,function = "xusb";
						status = "okay";
					};
					usb2-1 {
						nvidia,function = "xusb";
						status = "okay";
					};
					usb2-2 {
						nvidia,function = "xusb";
						status = "okay";
					};
				};
			};
			usb3 {
				lanes {
					usb3-0 {
						nvidia,function = "xusb";
						status = "okay";
					};
					usb3-1 {
						nvidia,function = "xusb";
						status = "okay";
					};
					usb3-2 {
						nvidia,function = "xusb";
						status = "okay";
					};
				};
			};
		};

		ports {
			/* USB-C 0 */
			usb2-2 {
				mode = "host";
				/* Delegate switching to HW (consider VBUS always on) */
				vbus-supply = <&vdd_5v_sys>;
				status = "okay";
				connector {
					compatible = "usb-c-connector";
					label = "USB-C 0";
				};
			};

			usb3-0 {
				nvidia,usb2-companion = <2>;
				status = "okay";
			};

			/* USB-C 1 (also functions as a Jetson recovery port) */
			usb2-0 {
				mode = "peripheral";
				status = "okay";
				/* Delegate switching to HW (consider VBUS always on) */
				vbus-supply = <&vdd_5v_sys>;
				usb-role-switch;
				connector {
					compatible = "usb-b-connector", "gpio-usb-b-connector";
					label = "micro-USB";
					type = "micro";
					vbus-gpio = <&tegra_main_gpio TEGRA234_MAIN_GPIO(Z, 1) GPIO_ACTIVE_LOW>;
				};
			};

			usb3-2 {
				nvidia,usb2-companion = <0>;
				status = "okay";
			};

			/* USB on M.2 & extension connector */
			usb2-1 {
				mode = "host";
				/* VBUS is always on */
				vbus-supply = <&vdd_5v_sys>;
				status = "okay";
			};

			usb3-1 {
				nvidia,usb2-companion = <1>;
				status = "okay";
			};
		};
	};

	/* USB Device controller */
	tegra_xudc: xudc@3550000 {
		status = "okay";
		phys = <&{/xusb_padctl@3520000/pads/usb2/lanes/usb2-0}>,
			<&{/xusb_padctl@3520000/pads/usb3/lanes/usb3-2}>;
		phy-names = "usb2-0", "usb3-2";
		nvidia,xusb-padctl = <&xusb_padctl>;
	};

	/* USB Host controller */
	tegra_xhci: xhci@3610000 {
		status = "okay";
		phys = <&{/xusb_padctl@3520000/pads/usb2/lanes/usb2-1}>,
			<&{/xusb_padctl@3520000/pads/usb2/lanes/usb2-2}>,
			<&{/xusb_padctl@3520000/pads/usb3/lanes/usb3-0}>,
			<&{/xusb_padctl@3520000/pads/usb3/lanes/usb3-1}>;
		phy-names = "usb2-1", "usb2-2", "usb3-0", "usb3-1";
		nvidia,xusb-padctl = <&xusb_padctl>;
	};
};

/*
 * Placeholders for USB PD and DRP controllers on SYS I2C bus
 * (not implemented)
 */
&gen2_i2c {
	/*
	 * TPS65988 dual-port USB-C Power Delivery controller
	 * port1 is USBC3 (J3) @ i2c_addr=h23
	 * port2 is USBC0 (J4) @ i2c_addr=h27
	 */
	job_usbc3_pdc: tps65988@23 {
		compatible = "ti,tps6598x";
		status = "disabled";
		reg = <0x23>;
		#address-cells = <1>;
		#size-cells = <0>;
		// interrupt-parent = <&tegra_main_gpio>;
		// interrupts = <TEGRA234_MAIN_GPIO(A, 10) IRQ_TYPE_LEVEL_LOW>;
		// connector@0 {
		// 	port@0 {
		// 		fusb_p3: endpoint {
		// 			remote-endpoint = <&typec_p3>;
		// 		};
		// 	};
		// };
	};

	job_usbc0_pdc: tps65988@27 {
		compatible = "ti,tps6598x";
		status = "disabled";
		reg = <0x27>;
		#address-cells = <1>;
		#size-cells = <0>;
		// interrupt-parent = <&tegra_main_gpio>;
		// interrupts = <TEGRA234_MAIN_GPIO(A, 10) IRQ_TYPE_LEVEL_LOW>;
		// connector@0 {
		// 	port@0 {
		// 		fusb_p0: endpoint {
		// 			remote-endpoint = <&typec_p0>;
		// 		};
		// 	};
		// };
	};

	/*
	 * HD3SS3220 dual role port controller for USBC1 port
	 * NOTE: this is just a DRD/DRP without Power Delivery
	 */
	job_usbc1_drpc: hd3ss3220@47 {
		compatible = "ti,hd3ss3220";
		status = "disabled";
		reg = <0x47>;
	};
};

This is my kernel dts, without the usbc controllers configured

source "${LDK_DIR}/p3767.conf.common";
DEFAULT_EMC_FUSE="0";
# PINMUX_CONFIG="tegra234-mb1-bct-pinmux-p3767-hdmi-a03.dtsi";
# PMC_CONFIG="tegra234-mb1-bct-padvoltage-p3767-hdmi-a03.dtsi";
PINMUX_CONFIG="tegra234-mb1-bct-pinmux-p3767-dp-a03.dtsi";
PMC_CONFIG="tegra234-mb1-bct-padvoltage-p3767-dp-a03.dtsi";
BPFDTB_FILE="tegra234-bpmp-3767-0000-a02-3509-a02.dtb";
DTB_FILE="tegra234-p3767-0003-p3768-0000-bloom.dtb";
TBCDTB_FILE="${DTB_FILE}";
OVERLAY_DTB_FILE="${OVERLAY_DTB_FILE},tegra234-p3768-overlay.dtbo";
EMMC_CFG="flash_t234_qspi_nvme.xml";
MB2_BCT="tegra234-mb2-bct-misc-p3767-0000-bloom.dts"

This is my jetson linux device config

What more changes do I require for DP support on this baseboard ?


This is the schematics of the USB-C display port and PD controller

There is no support for type C-DP signal on Orin. Not able to provide you any device tree configuration.

Thanks for the reply. But, I do not get it, jetson orin nano has two DP blocks in soc if I am correct. (DP0/DP1)

Are you implying that orin does not support DP output (as in video output) or USBC DP?

  1. Orin DP block can only output by using DP MST. (I mean if you want dual monitor usecase). There is only one pinout for display functionality.

  2. I am talking about USBC DP does not support. Orin already has DP support on both Orin AGX devkit and Orin Nano devkit platforms.

So is it not possible to use the usbc dp on orin nano ? Even if the usbc controller is cable to sending ‘CC1/CC2’ events which can trigger the DP_HPD ?

Yes, not possible. We don’t have this validated and also no plan for this either.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.