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