From 44289ee9efff2cbfa8c82badc01a0d1c895cf565 Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Thu, 11 Sep 2025 00:01:39 +0200 Subject: [PATCH 01/14] usb: typec: tipd: Track data_status changes for CD321x HDP status for DisplayPort alt-mode is signaled data_status. Track changes to have a debounced HPD to forward to the DRM KMS driver. Signed-off-by: Janne Grunau --- drivers/usb/typec/tipd/core.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/usb/typec/tipd/core.c b/drivers/usb/typec/tipd/core.c index 923477105483b1..6890ae988782e4 100644 --- a/drivers/usb/typec/tipd/core.c +++ b/drivers/usb/typec/tipd/core.c @@ -202,6 +202,7 @@ struct cd321x_status { u32 pwr_status; u32 data_status; u32 status_changed; + u32 data_status_changed; struct usb_pd_identity partner_identity; struct tps6598x_dp_sid_status_reg dp_sid_status; struct tps6598x_intel_vid_status_reg intel_vid_status; @@ -753,6 +754,7 @@ static void cd321x_update_work(struct work_struct *work) st = cd321x->update_status; cd321x->update_status.status_changed = 0; + cd321x->update_status.data_status_changed = 0; bool old_connected = !!tps->partner; bool new_connected = st.status & TPS_STATUS_PLUG_PRESENT; @@ -849,6 +851,7 @@ static void cd321x_update_work(struct work_struct *work) static void cd321x_queue_status(struct cd321x *cd321x) { cd321x->update_status.status_changed |= cd321x->update_status.status ^ cd321x->tps.status; + cd321x->update_status.data_status_changed |= cd321x->update_status.data_status ^ cd321x->tps.data_status; cd321x->update_status.status = cd321x->tps.status; cd321x->update_status.pwr_status = cd321x->tps.pwr_status; From 02113c7d7a666885d5351a58e54108647615396d Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Mon, 22 Dec 2025 22:08:35 +0100 Subject: [PATCH 02/14] usb: typec: tipd: HACK: Use drm oob hotplug event This is not how dp-altmode support should be implemented but it works for new. Requires a "displayport" property in the connector node with a phandle of the connector. Signed-off-by: Janne Grunau --- drivers/usb/typec/tipd/core.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/usb/typec/tipd/core.c b/drivers/usb/typec/tipd/core.c index 6890ae988782e4..26a89a1436e9c4 100644 --- a/drivers/usb/typec/tipd/core.c +++ b/drivers/usb/typec/tipd/core.c @@ -6,6 +6,8 @@ * Author: Heikki Krogerus */ +#include + #include #include #include @@ -225,6 +227,8 @@ struct cd321x { struct cd321x_status update_status; struct delayed_work update_work; struct usb_pd_identity cur_partner_identity; + + struct fwnode_handle *connector_fwnode; }; static enum power_supply_property tps6598x_psy_props[] = { @@ -763,6 +767,9 @@ static void cd321x_update_work(struct work_struct *work) bool usb_connection = st.data_status & (TPS_DATA_STATUS_USB2_CONNECTION | TPS_DATA_STATUS_USB3_CONNECTION); + bool dp_hpd = st.data_status & CD321X_DATA_STATUS_HPD_LEVEL; + bool dp_hpd_changed = st.data_status_changed & CD321X_DATA_STATUS_HPD_LEVEL; + enum usb_role old_role = usb_role_switch_get_role(tps->role_sw); enum usb_role new_role = USB_ROLE_NONE; enum typec_pwr_opmode pwr_opmode = TYPEC_PWR_MODE_USB; @@ -791,6 +798,10 @@ static void cd321x_update_work(struct work_struct *work) if (old_role != USB_ROLE_NONE && (new_role != old_role || was_disconnected)) usb_role_switch_set_role(tps->role_sw, USB_ROLE_NONE); + if (cd321x->connector_fwnode && (!dp_hpd || dp_hpd_changed)) { + drm_connector_oob_hotplug_event(cd321x->connector_fwnode, connector_status_disconnected); + } + /* Process partner disconnection or change */ if (!new_connected || partner_changed) { if (!IS_ERR(tps->partner)) @@ -845,6 +856,9 @@ static void cd321x_update_work(struct work_struct *work) /* Launch the USB role switch */ usb_role_switch_set_role(tps->role_sw, new_role); + if (cd321x->connector_fwnode && dp_hpd) + drm_connector_oob_hotplug_event(cd321x->connector_fwnode, connector_status_connected); + power_supply_changed(tps->psy); } @@ -1281,6 +1295,7 @@ static int cd321x_register_port(struct tps6598x *tps, struct fwnode_handle *fwnode) { struct cd321x *cd321x = container_of(tps, struct cd321x, tps); + struct fwnode_handle *connector_fwnode = NULL; int ret; INIT_DELAYED_WORK(&cd321x->update_work, cd321x_update_work); @@ -1299,6 +1314,11 @@ cd321x_register_port(struct tps6598x *tps, struct fwnode_handle *fwnode) goto err_unregister_altmodes; } + if (fwnode_property_present(fwnode, "displayport")) + connector_fwnode = fwnode_find_reference(fwnode, "displayport", 0); + if (!IS_ERR_OR_NULL(connector_fwnode)) + cd321x->connector_fwnode = connector_fwnode; + cd321x->state.alt = NULL; cd321x->state.mode = TYPEC_STATE_SAFE; cd321x->state.data = NULL; From 6fc52d7d70bca070a321863e86f46207eeae6f2d Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Sat, 3 Dec 2022 21:26:42 +0100 Subject: [PATCH 03/14] arm64: dts: apple: t8103: Add dp-altmode dts hacks Enable DP alt mode for all M1 devices: - Mac Mini (M1): USB-C port next to the HDMI port - Macbook Pro (M1, 13-inch): front left USB-C port - Macbook Air (M1, 13-inch): front left USB-C port - iMac (M1, 2 USB-C ports): back left USB-C port - iMac (M1, 4 USB-C ports): back right middle USB-C port Signed-off-by: Janne Grunau --- arch/arm64/boot/dts/apple/t8103-jxxx.dtsi | 45 +++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi b/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi index 67a57fc507df92..0d4ff6fd093387 100644 --- a/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi +++ b/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi @@ -9,10 +9,15 @@ * Copyright The Asahi Linux Contributors */ +#define ENABLE_DCPEXT_TYPEC + / { aliases { bluetooth0 = &bluetooth0; dcp = &dcp; +#ifdef ENABLE_DCPEXT_TYPEC + dcpext = &dcpext; +#endif disp0 = &display; disp0_piodma = &disp0_piodma; serial0 = &serial0; @@ -103,6 +108,11 @@ power-role = "dual"; data-role = "dual"; +#ifdef ENABLE_DCPEXT_TYPEC + /* hacks */ + displayport = <&dcpext>; +#endif + ports { #address-cells = <1>; #size-cells = <0>; @@ -123,6 +133,41 @@ }; }; +#ifdef ENABLE_DCPEXT_TYPEC +&display { + iommus = <&disp0_dart 0>, <&dispext0_dart 0>; +}; + +&dispext0_dart { + status = "okay"; +}; + +&dcpext_dart { + status = "okay"; +}; + +&dcpext_mbox { + status = "okay"; +}; + +&dcpext { + status = "okay"; + apple,connector-type = "DP"; + + /* hacks */ + apple,dptx-phy = <1>; + phys = <&atcphy1 PHY_TYPE_DP>; + phy-names = "dp-phy"; + mux-controls = <&atcphy1_xbar 0>; + mux-control-names = "dp-xbar"; + mux-index = <0>; +}; + +&dpaudio1 { + status = "okay"; +}; +#endif + /* USB controllers */ &dwc3_0 { ports { From 383d3b670a533e239244b288ffe6f696ba4c29c4 Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Thu, 25 Dec 2025 18:49:55 +0100 Subject: [PATCH 04/14] HACK: arm64: dts: apple: t8103: Mark ps_atc1_common as always on Works around missing suspend/resume handling in ATC phy for DP-altmode. Signed-off-by: Janne Grunau --- arch/arm64/boot/dts/apple/t8103-jxxx.dtsi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi b/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi index 0d4ff6fd093387..bf92d3e2c7753e 100644 --- a/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi +++ b/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi @@ -166,6 +166,10 @@ &dpaudio1 { status = "okay"; }; + +&ps_atc1_common { + apple,always-on; /* Needs to stay on for DP-alt suspend/resume */ +}; #endif /* USB controllers */ From 497fbae5364a3f9a79cc2acc7dad113c5c10adb7 Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Sat, 3 Dec 2022 22:19:44 +0100 Subject: [PATCH 05/14] arm64: dts: apple: t8112: Add dp-altmode dts hacks Enable DP alt mode for the front left USB-C port of Macbook Air 13 (M2, 13/15-inch) and Macbook Pro (M2, 13-inch). Can't easily enabled on on the M2 Mac Mini since dcpext is used for the HDMI port and dcp bringup is troublesome. Signed-off-by: Janne Grunau --- arch/arm64/boot/dts/apple/t8112-j413.dts | 2 + arch/arm64/boot/dts/apple/t8112-j415.dts | 2 + arch/arm64/boot/dts/apple/t8112-j493.dts | 2 + arch/arm64/boot/dts/apple/t8112-jxxx.dtsi | 46 +++++++++++++++++++++++ 4 files changed, 52 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8112-j413.dts b/arch/arm64/boot/dts/apple/t8112-j413.dts index 20285be747d965..b4c6a3c6540819 100644 --- a/arch/arm64/boot/dts/apple/t8112-j413.dts +++ b/arch/arm64/boot/dts/apple/t8112-j413.dts @@ -9,6 +9,8 @@ /dts-v1/; +#define ENABLE_DCPEXT_TYPEC + #include "t8112.dtsi" #include "t8112-jxxx.dtsi" #include diff --git a/arch/arm64/boot/dts/apple/t8112-j415.dts b/arch/arm64/boot/dts/apple/t8112-j415.dts index c2c32ca5577eff..26d774e9921435 100644 --- a/arch/arm64/boot/dts/apple/t8112-j415.dts +++ b/arch/arm64/boot/dts/apple/t8112-j415.dts @@ -9,6 +9,8 @@ /dts-v1/; +#define ENABLE_DCPEXT_TYPEC + #include "t8112.dtsi" #include "t8112-jxxx.dtsi" #include diff --git a/arch/arm64/boot/dts/apple/t8112-j493.dts b/arch/arm64/boot/dts/apple/t8112-j493.dts index 368c4a9cc01758..7cfbd3c039f4da 100644 --- a/arch/arm64/boot/dts/apple/t8112-j493.dts +++ b/arch/arm64/boot/dts/apple/t8112-j493.dts @@ -9,6 +9,8 @@ /dts-v1/; +#define ENABLE_DCPEXT_TYPEC + #include "t8112.dtsi" #include "t8112-jxxx.dtsi" #include diff --git a/arch/arm64/boot/dts/apple/t8112-jxxx.dtsi b/arch/arm64/boot/dts/apple/t8112-jxxx.dtsi index fb957f785d82c5..344042877adb22 100644 --- a/arch/arm64/boot/dts/apple/t8112-jxxx.dtsi +++ b/arch/arm64/boot/dts/apple/t8112-jxxx.dtsi @@ -96,6 +96,11 @@ power-role = "dual"; data-role = "dual"; +#ifdef ENABLE_DCPEXT_TYPEC + /* hacks */ + displayport = <&dcpext>; +#endif + ports { #address-cells = <1>; #size-cells = <0>; @@ -116,6 +121,47 @@ }; }; +#ifdef ENABLE_DCPEXT_TYPEC +/ { + aliases { + dcpext = &dcpext; + }; +}; + +&display { + iommus = <&disp0_dart 0>, <&dispext0_dart 0>; +}; + +&dispext0_dart { + status = "okay"; +}; + +&dcpext_dart { + status = "okay"; +}; + +&dcpext_mbox { + status = "okay"; +}; + +&dcpext { + status = "okay"; + apple,connector-type = "DP"; + + /* hacks */ + apple,dptx-phy = <1>; + phys = <&atcphy1 PHY_TYPE_DP>; + phy-names = "dp-phy"; + mux-controls = <&atcphy1_xbar 0>; + mux-control-names = "dp-xbar"; + mux-index = <2>; +}; + +&dpaudio1 { + status = "okay"; +}; +#endif + /* USB controllers */ &dwc3_0 { ports { From e84d797c7c32c28692300fbc660c4375fe61b2d2 Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Thu, 25 Dec 2025 18:49:55 +0100 Subject: [PATCH 06/14] HACK: arm64: dts: apple: t8112: Mark ps_atc1_common as always on Works around missing suspend/resume handling in ATC phy for DP-altmode. Signed-off-by: Janne Grunau --- arch/arm64/boot/dts/apple/t8112-jxxx.dtsi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8112-jxxx.dtsi b/arch/arm64/boot/dts/apple/t8112-jxxx.dtsi index 344042877adb22..62fa3bc8f99ff0 100644 --- a/arch/arm64/boot/dts/apple/t8112-jxxx.dtsi +++ b/arch/arm64/boot/dts/apple/t8112-jxxx.dtsi @@ -160,6 +160,10 @@ &dpaudio1 { status = "okay"; }; + +&ps_atc1_common { + apple,always-on; /* Needs to stay on for DP-alt suspend/resume */ +}; #endif /* USB controllers */ From 9a5c74c8486aea7c870c14f9a53555f49779046d Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Sun, 4 Aug 2024 18:42:36 +0200 Subject: [PATCH 07/14] arm64: apple: t8112-j473: Add DP-altmode on typec1 Needs more testing, maybe a little unstable and somehow limits the HDMI out to 1280x720 (to be verified). Using dcp as display coproc since dcpext is used for the HDMI port. Signed-off-by: Janne Grunau --- arch/arm64/boot/dts/apple/t8112-j473.dts | 43 ++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8112-j473.dts b/arch/arm64/boot/dts/apple/t8112-j473.dts index 4fc96779806ea3..53f4ab554b1845 100644 --- a/arch/arm64/boot/dts/apple/t8112-j473.dts +++ b/arch/arm64/boot/dts/apple/t8112-j473.dts @@ -9,6 +9,8 @@ /dts-v1/; +#define ENABLE_DCPEXT_TYPEC + #include "t8112.dtsi" #include "t8112-jxxx.dtsi" @@ -66,6 +68,47 @@ apple,dptx-phy = <5>; }; +#ifdef ENABLE_DCPEXT_TYPEC +/ { + aliases { + dcp = &dcp; + }; +}; + +&display { + /* dispext0_dart needs to be first for m1n1's */ + iommus = <&dispext0_dart 0>, <&disp0_dart 0>; +}; + +&disp0_dart { + status = "okay"; +}; + +&dcp { + status = "okay"; + apple,connector-type = "DP"; + + /* hacks */ + apple,dptx-phy = <1>; + phys = <&atcphy1 PHY_TYPE_DP>; + phy-names = "dp-phy"; + mux-controls = <&atcphy1_xbar 0>; + mux-control-names = "dp-xbar"; + mux-index = <0>; +}; + +&dcpext { + /delete-property/ mux-controls; + /delete-property/ mux-control-names; + /delete-property/ mux-index; +}; + +&typec1 { + /* hacks */ + displayport = <&dcp>; +}; +#endif + /* remove once m1n1 enables sio nodes after setup */ &sio { status = "okay"; From 2cffbac0fb480053c04450080d68a19de2ce8eff Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Thu, 25 Dec 2025 18:49:55 +0100 Subject: [PATCH 08/14] HACK: arm64: apple: t8112-j473: Mark ps_atc1_common as always on Works around missing suspend/resume handling in ATC phy for DP-altmode. Signed-off-by: Janne Grunau --- arch/arm64/boot/dts/apple/t8112-j473.dts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t8112-j473.dts b/arch/arm64/boot/dts/apple/t8112-j473.dts index 53f4ab554b1845..dea9ef1eb7340a 100644 --- a/arch/arm64/boot/dts/apple/t8112-j473.dts +++ b/arch/arm64/boot/dts/apple/t8112-j473.dts @@ -107,6 +107,10 @@ /* hacks */ displayport = <&dcp>; }; + +&ps_atc1_common { + apple,always-on; /* Needs to stay on for DP-alt suspend/resume */ +}; #endif /* remove once m1n1 enables sio nodes after setup */ From 8fd2eba4897462783dacff749ad644ee44c2bf9f Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Sat, 5 Nov 2022 21:22:50 +0100 Subject: [PATCH 09/14] arm64: dts: apple: t60xx: j[34]1[46]: Add dp-altmode hacks Blessed dp-altmode port is front left port on j314/j316/j414/j416. Signed-off-by: Janne Grunau --- .../arm64/boot/dts/apple/t600x-j314-j316.dtsi | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi b/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi index 8d030df13bf5f8..e6253d1e8bdc48 100644 --- a/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi @@ -9,6 +9,8 @@ * Copyright The Asahi Linux Contributors */ +#define ENABLE_DCPEXT_TYPEC + #include / { @@ -22,6 +24,9 @@ bluetooth0 = &bluetooth0; dcp = &dcp; dcpext0 = &dcpext0; +#ifdef ENABLE_DCPEXT_TYPEC + dcpext1 = &dcpext1; +#endif disp0 = &display; disp0_piodma = &disp0_piodma; serial0 = &serial0; @@ -186,6 +191,11 @@ power-role = "dual"; data-role = "dual"; +#ifdef ENABLE_DCPEXT_TYPEC + /* hacks */ + displayport = <&dcpext1>; +#endif + ports { #address-cells = <1>; #size-cells = <0>; @@ -247,6 +257,46 @@ }; }; +#ifdef ENABLE_DCPEXT_TYPEC + +&display { + iommus = <&disp0_dart 0>, <&dispext0_dart 0>, <&dispext1_dart 0>; +}; + +&dispext1_dart { + status = "okay"; +}; + +&dcpext1_dart { + status = "okay"; +}; + +&dcpext1_mbox { + status = "okay"; +}; + +&dcpext1 { + status = "okay"; + apple,connector-type = "DP"; + + /* hacks */ + apple,dptx-phy = <1>; + phys = <&atcphy1 PHY_TYPE_DP>; + phy-names = "dp-phy"; + mux-controls = <&atcphy1_xbar 0>; + mux-control-names = "dp-xbar"; + mux-index = <2>; +}; + +&dpaudio2 { + status = "okay"; +}; + +&atcphy1_xbar { + status = "okay"; +}; +#endif + /* Virtual regulator representing the shared shutdown GPIO */ / { speaker_sdz: fixed-regulator-sn012776-sdz { From a8848a7cbd4a14a2be4fd3def517eed4908833f7 Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Thu, 25 Dec 2025 18:50:32 +0100 Subject: [PATCH 10/14] HACK: arm64: dts: apple: t60xx: j[34]1[46]: Mark ps_atc1_common as always on Works around missing suspend/resume handling in ATC phy for DP-altmode. Signed-off-by: Janne Grunau --- arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi b/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi index e6253d1e8bdc48..e8b58b8e8005d2 100644 --- a/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-j314-j316.dtsi @@ -295,6 +295,10 @@ &atcphy1_xbar { status = "okay"; }; + +&ps_atc1_common { + apple,always-on; /* Needs to stay on for DP-alt suspend/resume */ +}; #endif /* Virtual regulator representing the shared shutdown GPIO */ From 68feab3893dcbc940b3535753297618c27ffe2d8 Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Sun, 9 Jun 2024 23:35:29 +0200 Subject: [PATCH 11/14] arm64: dts: apple: t60xx: j[34]75: Add dp-altmode hacks DP alt mode for Mac Studio, the blessed port is the back left middle port (second closest USB-C port to the power connector). Signed-off-by: Janne Grunau --- arch/arm64/boot/dts/apple/t6001-j375c.dts | 2 + arch/arm64/boot/dts/apple/t6002-j375d.dts | 2 + arch/arm64/boot/dts/apple/t600x-j375.dtsi | 47 ++++++++++++++++++++++ arch/arm64/boot/dts/apple/t6021-j475c.dts | 6 +++ arch/arm64/boot/dts/apple/t6022-j475d.dts | 2 + arch/arm64/boot/dts/apple/t6022-jxxxd.dtsi | 4 ++ 6 files changed, 63 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t6001-j375c.dts b/arch/arm64/boot/dts/apple/t6001-j375c.dts index f3f98f03800908..844bee0c4fdf39 100644 --- a/arch/arm64/boot/dts/apple/t6001-j375c.dts +++ b/arch/arm64/boot/dts/apple/t6001-j375c.dts @@ -9,6 +9,8 @@ /dts-v1/; +#define ENABLE_DCPEXT_TYPEC + #include "t6001.dtsi" #include "t600x-j375.dtsi" diff --git a/arch/arm64/boot/dts/apple/t6002-j375d.dts b/arch/arm64/boot/dts/apple/t6002-j375d.dts index 5cf30cd162b679..1eedbfecfc38fe 100644 --- a/arch/arm64/boot/dts/apple/t6002-j375d.dts +++ b/arch/arm64/boot/dts/apple/t6002-j375d.dts @@ -9,6 +9,8 @@ /dts-v1/; +#define ENABLE_DCPEXT_TYPEC + #include "t6002.dtsi" #include "t600x-j375.dtsi" diff --git a/arch/arm64/boot/dts/apple/t600x-j375.dtsi b/arch/arm64/boot/dts/apple/t600x-j375.dtsi index a5ee97241214d6..93b359fb6e925d 100644 --- a/arch/arm64/boot/dts/apple/t600x-j375.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-j375.dtsi @@ -23,6 +23,9 @@ disp0 = &display; disp0_piodma = &disp0_piodma; #endif +#ifdef ENABLE_DCPEXT_TYPEC + dcpext1 = &dcpext1; +#endif ethernet0 = ðernet0; serial0 = &serial0; sio = &sio; @@ -111,6 +114,11 @@ power-role = "dual"; data-role = "dual"; +#ifdef ENABLE_DCPEXT_TYPEC + /* hacks */ + displayport = <&dcpext1>; +#endif + ports { #address-cells = <1>; #size-cells = <0>; @@ -195,6 +203,45 @@ }; }; +#ifdef ENABLE_DCPEXT_TYPEC +&display { + iommus = <&disp0_dart 0>, <&dispext1_dart 0>; +}; + +&dispext1_dart { + status = "okay"; +}; + +&dcpext1_dart { + status = "okay"; +}; + +&dcpext1_mbox { + status = "okay"; +}; + +&dcpext1 { + status = "okay"; + apple,connector-type = "DP"; + + /* hacks */ + apple,dptx-phy = <1>; + phys = <&atcphy1 PHY_TYPE_DP>; + phy-names = "dp-phy"; + mux-controls = <&atcphy1_xbar 0>; + mux-control-names = "dp-xbar"; + mux-index = <2>; +}; + +&dpaudio2 { + status = "okay"; +}; + +&atcphy1_xbar { + status = "okay"; +}; +#endif + /* USB controllers */ &dwc3_0 { ports { diff --git a/arch/arm64/boot/dts/apple/t6021-j475c.dts b/arch/arm64/boot/dts/apple/t6021-j475c.dts index e4321cfc556838..ce08d5a42761b9 100644 --- a/arch/arm64/boot/dts/apple/t6021-j475c.dts +++ b/arch/arm64/boot/dts/apple/t6021-j475c.dts @@ -9,6 +9,8 @@ /dts-v1/; +#define ENABLE_DCPEXT_TYPEC + #include "t6021.dtsi" #include "t602x-j474-j475.dtsi" @@ -81,7 +83,11 @@ status = "disabled"; }; &display { +#ifdef ENABLE_DCPEXT_TYPEC + iommus = <&dispext0_dart 0>, <&dispext1_dart 0>; +#else iommus = <&dispext0_dart 0>; +#endif }; &dispext0_dart { status = "okay"; diff --git a/arch/arm64/boot/dts/apple/t6022-j475d.dts b/arch/arm64/boot/dts/apple/t6022-j475d.dts index cdfc78a1703c7a..1ab639556cb0b2 100644 --- a/arch/arm64/boot/dts/apple/t6022-j475d.dts +++ b/arch/arm64/boot/dts/apple/t6022-j475d.dts @@ -9,6 +9,8 @@ /dts-v1/; +#define ENABLE_DCPEXT_TYPEC + #define NO_DCP #include "t6022.dtsi" diff --git a/arch/arm64/boot/dts/apple/t6022-jxxxd.dtsi b/arch/arm64/boot/dts/apple/t6022-jxxxd.dtsi index f11b017dc0496f..a186faa8738a8f 100644 --- a/arch/arm64/boot/dts/apple/t6022-jxxxd.dtsi +++ b/arch/arm64/boot/dts/apple/t6022-jxxxd.dtsi @@ -22,7 +22,11 @@ }; &display { +#ifdef ENABLE_DCPEXT_TYPEC + iommus = <&dispext0_dart_die1 0>, <&dispext1_dart 0>; +#else iommus = <&dispext0_dart_die1 0>; +#endif }; &dispext0_dart_die1 { From ecc5cfa3f558c5f5812f8dec67eaa881425aa490 Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Thu, 25 Dec 2025 18:49:55 +0100 Subject: [PATCH 12/14] HACK: arm64: dts: apple: t60xx: j[34]75: Mark ps_atc1_common as always on Works around missing suspend/resume handling in ATC phy for DP-altmode. Signed-off-by: Janne Grunau --- arch/arm64/boot/dts/apple/t600x-j375.dtsi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t600x-j375.dtsi b/arch/arm64/boot/dts/apple/t600x-j375.dtsi index 93b359fb6e925d..dda5f68b97822f 100644 --- a/arch/arm64/boot/dts/apple/t600x-j375.dtsi +++ b/arch/arm64/boot/dts/apple/t600x-j375.dtsi @@ -240,6 +240,10 @@ &atcphy1_xbar { status = "okay"; }; + +&ps_atc1_common { + apple,always-on; /* Needs to stay on for DP-alt suspend/resume */ +}; #endif /* USB controllers */ From b0b5bbf9f67e9063af591e7a1187d37d0f2b8e29 Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Sat, 5 Nov 2022 21:22:50 +0100 Subject: [PATCH 13/14] arm64: dts: apple: t6020-j474s: Add dp-altmode hacks DP alt mode for Mac Mini M2 Pro, the blessed port is the back right middle port (second closest USB-C port to the power connector). Signed-off-by: Janne Grunau --- arch/arm64/boot/dts/apple/t6020-j474s.dts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t6020-j474s.dts b/arch/arm64/boot/dts/apple/t6020-j474s.dts index 12dfe9693502ad..cfe7f8ac730641 100644 --- a/arch/arm64/boot/dts/apple/t6020-j474s.dts +++ b/arch/arm64/boot/dts/apple/t6020-j474s.dts @@ -9,6 +9,8 @@ /dts-v1/; +#define ENABLE_DCPEXT_TYPEC + #include "t6020.dtsi" /* @@ -85,7 +87,11 @@ status = "disabled"; }; &display { +#ifdef ENABLE_DCPEXT_TYPEC + iommus = <&dispext0_dart 0>, <&dispext1_dart 0>; +#else iommus = <&dispext0_dart 0>; +#endif }; &dispext0_dart { status = "okay"; From 8b69f33ade83f3aa3e565ecdf492f970b860d98d Mon Sep 17 00:00:00 2001 From: Vasiliy Doylov Date: Mon, 26 Jan 2026 22:41:46 +0300 Subject: [PATCH 14/14] arm64: dts: apple: t8103: add &sio alias so m1n1 can handle it correctly This enables setting up sio node. &sio required by apple dcp audio Signed-off-by: Vasiliy Doylov --- arch/arm64/boot/dts/apple/t8103-jxxx.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi b/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi index bf92d3e2c7753e..3570c2679de1a2 100644 --- a/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi +++ b/arch/arm64/boot/dts/apple/t8103-jxxx.dtsi @@ -25,6 +25,7 @@ wifi0 = &wifi0; atcphy0 = &atcphy0; atcphy1 = &atcphy1; + sio = &sio; }; chosen {