From 7f57abe673f179f3c298aac2116856d491c8f40a Mon Sep 17 00:00:00 2001 From: Joshua Warren <816217+joshuaswarren@users.noreply.github.com> Date: Mon, 9 Nov 2026 21:02:14 -0600 Subject: [PATCH 1/2] arm64: dts: apple: t6050-j714c: Describe the six speaker amplifiers Enable i2c1 and i2c3 on the J714c and describe the six SN012776 speaker amplifiers from the J714cAP ADT: left woofer 1, left woofer 2 and left tweeter on i2c1 at 0x38, 0x39 and 0x3a, right woofer 1, right woofer 2 and right tweeter on i2c3 at 0x3b, 0x3c and 0x3d. The amplifiers share one shutdown line, AP pin 107 (function-reset of the first), described as the speaker_sdz fixed regulator with apple,sdz-group-fail-closed, and one fault interrupt, pin 106. Each amplifier's sense slots come from the ADT speaker-config, where the transmit slot N belongs to speakerN: voltage sense in slot 4N, current sense in slot 4N+2. ps_i2c3 has no described parent (SIO), as for i2c1 and i2c2. Pins 106 and 107 join pin 80 in the exposed range of pinctrl_ap. There is no sound card, no jack codec and no AOP audio change. The other ten T6050 board DTBs are byte-identical. --- arch/arm64/boot/dts/apple/t6050-j714c.dts | 109 +++++++++++++++++++++- 1 file changed, 106 insertions(+), 3 deletions(-) diff --git a/arch/arm64/boot/dts/apple/t6050-j714c.dts b/arch/arm64/boot/dts/apple/t6050-j714c.dts index 2afe054d92c03..e5e8f9f08512c 100644 --- a/arch/arm64/boot/dts/apple/t6050-j714c.dts +++ b/arch/arm64/boot/dts/apple/t6050-j714c.dts @@ -134,8 +134,64 @@ status = "disabled"; }; +/* + * The six speaker amplifiers (ADT /arm-io/i2c1/audio-speaker* and /arm-io/i2c3/audio-speaker*, + * SN012776) share one shutdown line, AP pin 107 (function-reset of the first), and one fault + * interrupt, pin 106. The ADT's speaker-config gives each amp a transmit slot N with its + * voltage sense in slot 4N and current sense in 4N+2, and names the amps by speakerN: + * 0 left woofer 1, 1 right woofer 1, 2 left woofer 2, 3 right woofer 2, 4 left tweeter, + * 5 right tweeter. + * + * There is no sound card yet: the AOP audio driver is not on this branch, and the jack codec + * (i2c2) is not described. The amps stay in shutdown until a stream asks for them. + */ +/ { + speaker_sdz: regulator-sn012776-sdz { + compatible = "regulator-fixed"; + regulator-name = "sn012776-sdz"; + gpios = <&pinctrl_ap 107 GPIO_ACTIVE_HIGH>; + enable-active-high; + }; +}; + &i2c1 { - status = "disabled"; + status = "okay"; + + speaker_left_woof1: codec@38 { + compatible = "ti,sn012776", "ti,tas2764"; + reg = <0x38>; + SDZ-supply = <&speaker_sdz>; + apple,sdz-group-fail-closed; + #sound-dai-cells = <0>; + sound-name-prefix = "Left Woofer 1"; + interrupts-extended = <&pinctrl_ap 106 IRQ_TYPE_LEVEL_LOW>; + ti,imon-slot-no = <2>; + ti,vmon-slot-no = <0>; + }; + + speaker_left_woof2: codec@39 { + compatible = "ti,sn012776", "ti,tas2764"; + reg = <0x39>; + SDZ-supply = <&speaker_sdz>; + apple,sdz-group-fail-closed; + #sound-dai-cells = <0>; + sound-name-prefix = "Left Woofer 2"; + interrupts-extended = <&pinctrl_ap 106 IRQ_TYPE_LEVEL_LOW>; + ti,imon-slot-no = <10>; + ti,vmon-slot-no = <8>; + }; + + speaker_left_tweet: codec@3a { + compatible = "ti,sn012776", "ti,tas2764"; + reg = <0x3a>; + SDZ-supply = <&speaker_sdz>; + apple,sdz-group-fail-closed; + #sound-dai-cells = <0>; + sound-name-prefix = "Left Tweeter"; + interrupts-extended = <&pinctrl_ap 106 IRQ_TYPE_LEVEL_LOW>; + ti,imon-slot-no = <18>; + ti,vmon-slot-no = <16>; + }; }; &i2c2 { @@ -144,10 +200,11 @@ /* * Only the pins a node here names are exposed, as on the J716c: pin 112's register - * takes an SError when read. 80 is PCIe port 0's PERST#. + * takes an SError when read. 80 is PCIe port 0's PERST#, 106 the amps' fault interrupt and + * 107 their shutdown line. */ &pinctrl_ap { - gpio-reserved-ranges = <0 80>, <81 140>; + gpio-reserved-ranges = <0 80>, <81 25>, <108 113>; }; /* This board's SMC fan and power keys are not yet checked */ @@ -254,6 +311,52 @@ #include "t6050-max-atc2.dtsi" +/* The I2C power states have no described parent (SIO), as for i2c1 and i2c2 */ +&ps_i2c3 { + /delete-property/ power-domains; + status = "okay"; +}; + +&i2c3 { + status = "okay"; + + speaker_right_woof1: codec@3b { + compatible = "ti,sn012776", "ti,tas2764"; + reg = <0x3b>; + SDZ-supply = <&speaker_sdz>; + apple,sdz-group-fail-closed; + #sound-dai-cells = <0>; + sound-name-prefix = "Right Woofer 1"; + interrupts-extended = <&pinctrl_ap 106 IRQ_TYPE_LEVEL_LOW>; + ti,imon-slot-no = <6>; + ti,vmon-slot-no = <4>; + }; + + speaker_right_woof2: codec@3c { + compatible = "ti,sn012776", "ti,tas2764"; + reg = <0x3c>; + SDZ-supply = <&speaker_sdz>; + apple,sdz-group-fail-closed; + #sound-dai-cells = <0>; + sound-name-prefix = "Right Woofer 2"; + interrupts-extended = <&pinctrl_ap 106 IRQ_TYPE_LEVEL_LOW>; + ti,imon-slot-no = <14>; + ti,vmon-slot-no = <12>; + }; + + speaker_right_tweet: codec@3d { + compatible = "ti,sn012776", "ti,tas2764"; + reg = <0x3d>; + SDZ-supply = <&speaker_sdz>; + apple,sdz-group-fail-closed; + #sound-dai-cells = <0>; + sound-name-prefix = "Right Tweeter"; + interrupts-extended = <&pinctrl_ap 106 IRQ_TYPE_LEVEL_LOW>; + ti,imon-slot-no = <22>; + ti,vmon-slot-no = <20>; + }; +}; + /* * ==== The left-front USB-C port (ATC1) ==== * From 5fb654ecaac9ce4b545d8bf2db2f966e1fc1ae53 Mon Sep 17 00:00:00 2001 From: Joshua Warren <816217+joshuaswarren@users.noreply.github.com> Date: Mon, 9 Nov 2026 21:15:58 -0600 Subject: [PATCH 2/2] arm64: dts: apple: t6050-j714c: Clock i2c3 from the reference clock The i2c3 stub of t6050-peripherals.dtsi takes <&peripheral_clocks 4>. No driver in the tree provides apple,pmgr-clocks, so i2c3 and the three amplifiers on it would never probe. The ADT gives i2c1, i2c2 and i2c3 the same clock-ids (4), and i2c1 and i2c2 take <&clkref>, so the J714c does the same for i2c3. The other ten T6050 board DTBs are byte-identical. --- arch/arm64/boot/dts/apple/t6050-j714c.dts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm64/boot/dts/apple/t6050-j714c.dts b/arch/arm64/boot/dts/apple/t6050-j714c.dts index e5e8f9f08512c..89b4c00d310a2 100644 --- a/arch/arm64/boot/dts/apple/t6050-j714c.dts +++ b/arch/arm64/boot/dts/apple/t6050-j714c.dts @@ -318,6 +318,11 @@ }; &i2c3 { + /* + * The stub's pmgr clock controller has no driver. The ADT gives i2c1, i2c2 and i2c3 the same + * clock-ids (4), so i2c3 takes the reference clock as i2c1 and i2c2 do. + */ + clocks = <&clkref>; status = "okay"; speaker_right_woof1: codec@3b {