From c120db0d98d95a9e43ed609beee3cef3b4e5b3df Mon Sep 17 00:00:00 2001 From: Ryan Murray Date: Sat, 24 Oct 2026 17:35:21 +1100 Subject: [PATCH 01/10] ASoC: dt-bindings: ti,tas27xx: Allow ti,tas2764 as the SN012776 fallback The Apple device trees describe their SN012776 speaker amps as "ti,sn012776", "ti,tas2764". The driver matches the more specific ti,sn012776 for the quirks of the Apple variant, and ti,tas2764 names the part it derives from. The binding allows a single compatible only, so dt-validate reports the compatible as too long on every amp of those machines. Allow ti,sn012776 followed by ti,tas2764. The single compatibles stay valid. Assisted-by: LLM Signed-off-by: Ryan Murray --- .../devicetree/bindings/sound/ti,tas27xx.yaml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Documentation/devicetree/bindings/sound/ti,tas27xx.yaml b/Documentation/devicetree/bindings/sound/ti,tas27xx.yaml index f48d3f37501ae..99eebcfabbcba 100644 --- a/Documentation/devicetree/bindings/sound/ti,tas27xx.yaml +++ b/Documentation/devicetree/bindings/sound/ti,tas27xx.yaml @@ -27,10 +27,14 @@ allOf: properties: compatible: - enum: - - ti,tas2764 - - ti,tas2780 - - ti,sn012776 # Apple variant of TAS2764 + oneOf: + - enum: + - ti,tas2764 + - ti,tas2780 + - ti,sn012776 # Apple variant of TAS2764 + - items: + - const: ti,sn012776 + - const: ti,tas2764 reg: maxItems: 1 From 7556a8ca8e09034a816cf5a70d7027f8f3c8f77c Mon Sep 17 00:00:00 2001 From: Ryan Murray Date: Sat, 24 Oct 2026 17:35:22 +1100 Subject: [PATCH 02/10] ASoC: dt-bindings: cirrus,cs42l84: Reference dai-common.yaml The Apple device trees give the CS42L84 headphone jack codec a sound-name-prefix, which ASoC puts in front of the codec's control and widget names. That property is described in dai-common.yaml, which this binding does not reference, and with additionalProperties set to false the binding rejects it on every CS42L84 machine. Reference dai-common.yaml and use unevaluatedProperties, as the CS42L42 and CS42L43 bindings do. Assisted-by: LLM Signed-off-by: Ryan Murray --- Documentation/devicetree/bindings/sound/cirrus,cs42l84.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/sound/cirrus,cs42l84.yaml b/Documentation/devicetree/bindings/sound/cirrus,cs42l84.yaml index 7f8338e8ae369..4c376062d6f2a 100644 --- a/Documentation/devicetree/bindings/sound/cirrus,cs42l84.yaml +++ b/Documentation/devicetree/bindings/sound/cirrus,cs42l84.yaml @@ -36,7 +36,10 @@ required: - compatible - reg -additionalProperties: false +allOf: + - $ref: dai-common.yaml# + +unevaluatedProperties: false examples: - | From eb4b28671ec7d360e426a440b4a04a805f1d770e Mon Sep 17 00:00:00 2001 From: Ryan Murray Date: Sat, 24 Oct 2026 17:35:22 +1100 Subject: [PATCH 03/10] ASoC: dt-bindings: apple,macaudio: Describe the TDM idle properties macaudio reads two properties for each speaker codec from the dai-link node, dai-tdm-idle-mode- ("zero" or "pulldown") and dai-tdm-slot-tx-idle-mask- (a 32-bit slot mask), where is the position of the codec in the link's codec sound-dai list. It passes them to the codec's set_tdm_idle(), which sets how the codec drives those transmit slots while they are idle. The device trees of the speaker machines set them, but the binding does not describe them, so dt-validate rejects them and, with no type to go by, fails to decode their values as well. Describe both as pattern properties of the dai-link node. A link has at most eight codecs, so is 0 to 7, and the driver accepts only the two drive modes. Assisted-by: LLM Signed-off-by: Ryan Murray --- .../bindings/sound/apple,macaudio.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/apple,macaudio.yaml b/Documentation/devicetree/bindings/sound/apple,macaudio.yaml index a80f59e315196..fdf3d1883a99d 100644 --- a/Documentation/devicetree/bindings/sound/apple,macaudio.yaml +++ b/Documentation/devicetree/bindings/sound/apple,macaudio.yaml @@ -94,6 +94,24 @@ patternProperties: required: - sound-dai + patternProperties: + "^dai-tdm-idle-mode-[0-7]$": + description: | + How the CODEC at this index of the codec sound-dai list drives the + TDM transmit slots it leaves idle. The index counts the CODECs of + the link in list order, across both CPU-side DAIs. + $ref: /schemas/types.yaml#/definitions/string + enum: + - zero + - pulldown + + "^dai-tdm-slot-tx-idle-mask-[0-7]$": + description: | + Transmit slots of the CODEC at the same index that are idle and + driven as dai-tdm-idle-mode- says, one bit per slot with slot 0 + in the LSB. Only used together with dai-tdm-idle-mode-. + $ref: /schemas/types.yaml#/definitions/uint32 + required: - reg - cpu From b179f5617381ad7570c45714e5ed6b63cce31719 Mon Sep 17 00:00:00 2001 From: Ryan Murray Date: Sat, 24 Oct 2026 17:35:22 +1100 Subject: [PATCH 04/10] dt-bindings: cpufreq: apple,cluster-cpufreq: Allow nonposted-mmio The T6040 device tree places its SoC blocks at the root instead of under a simple-bus, because the boot loader edits several of them by path. With no bus node to carry nonposted-mmio, the blocks that need non-posted writes carry the property themselves, the three cluster cpufreq blocks among them. The property has an effect there. Since commit 47026c4ffedd ("of: address: Allow to specify nonposted-mmio per-device") of_mmio_is_nonposted() checks the device node as well as its parent bus, and of_iomap(), which apple-soc-cpufreq uses, then maps the block with ioremap_np(). Dropping the property would turn these mappings into posted ones, so the fix belongs in the binding, which does not allow the property yet. Allow nonposted-mmio, as the Apple DockChannel, ATC PHY and USB4 ACIO bindings do. Assisted-by: LLM Signed-off-by: Ryan Murray --- .../devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml index 140b500a5f3aa..e2bbb6b4effc1 100644 --- a/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml +++ b/Documentation/devicetree/bindings/cpufreq/apple,cluster-cpufreq.yaml @@ -48,6 +48,8 @@ properties: reg: maxItems: 1 + nonposted-mmio: true + apple,fast-die-effort: $ref: /schemas/types.yaml#/definitions/phandle-array description: | From b2982ee43acf7ba7d2cc5cf1d251fcf8885005d2 Mon Sep 17 00:00:00 2001 From: Ryan Murray Date: Sat, 24 Oct 2026 17:35:23 +1100 Subject: [PATCH 05/10] dt-bindings: soc: apple,t8140-mcc: Allow nonposted-mmio The T6040 device tree places its SoC blocks at the root instead of under a simple-bus, because the boot loader edits several of them by path. With no bus node to carry nonposted-mmio, the blocks that need non-posted writes carry the property themselves, the memory cache controller among them. The property has an effect there. Since commit 47026c4ffedd ("of: address: Allow to specify nonposted-mmio per-device") of_mmio_is_nonposted() checks the device node as well as its parent bus. The OF core then flags the node's memory resources IORESOURCE_MEM_NONPOSTED, and devm_platform_ioremap_resource(), which the MCC driver uses for its planes, maps them with ioremap_np(). Dropping the property would turn these mappings into posted ones, so the fix belongs in the binding, which does not allow the property yet. Allow nonposted-mmio, as the Apple DockChannel, ATC PHY and USB4 ACIO bindings do. Assisted-by: LLM Signed-off-by: Ryan Murray --- .../devicetree/bindings/soc/apple/apple,t8140-mcc.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/soc/apple/apple,t8140-mcc.yaml b/Documentation/devicetree/bindings/soc/apple/apple,t8140-mcc.yaml index ecc42990b5cc1..11f103732ef63 100644 --- a/Documentation/devicetree/bindings/soc/apple/apple,t8140-mcc.yaml +++ b/Documentation/devicetree/bindings/soc/apple/apple,t8140-mcc.yaml @@ -30,6 +30,8 @@ properties: minItems: 1 maxItems: 16 + nonposted-mmio: true + apple,boot-dma-devices: $ref: /schemas/types.yaml#/definitions/phandle-array items: From 008fe3c95efeb6aae4206ac97d15b95e36bbdee7 Mon Sep 17 00:00:00 2001 From: Ryan Murray Date: Sat, 24 Oct 2026 17:35:23 +1100 Subject: [PATCH 06/10] dt-bindings: power: apple,t8140-pmp-report: Allow nonposted-mmio The T6040 device tree places its SoC blocks at the root instead of under a simple-bus, because the boot loader edits several of them by path. With no bus node to carry nonposted-mmio, the blocks that need non-posted writes carry the property themselves, the PMP report aperture among them. The property has an effect there. Since commit 47026c4ffedd ("of: address: Allow to specify nonposted-mmio per-device") of_mmio_is_nonposted() checks the device node as well as its parent bus. The OF core then flags the node's memory resource IORESOURCE_MEM_NONPOSTED, and devm_platform_ioremap_resource(), which the report driver uses, maps it with ioremap_np(). Dropping the property would turn the mapping into a posted one, so the fix belongs in the binding, which does not allow the property yet. The report entries below the aperture have no registers of their own. Allow nonposted-mmio, as the Apple DockChannel, ATC PHY and USB4 ACIO bindings do. Assisted-by: LLM Signed-off-by: Ryan Murray --- .../devicetree/bindings/power/apple,t8140-pmp-report.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/power/apple,t8140-pmp-report.yaml b/Documentation/devicetree/bindings/power/apple,t8140-pmp-report.yaml index 7a12397d2df62..e8eac9e5411e3 100644 --- a/Documentation/devicetree/bindings/power/apple,t8140-pmp-report.yaml +++ b/Documentation/devicetree/bindings/power/apple,t8140-pmp-report.yaml @@ -27,6 +27,8 @@ properties: reg: maxItems: 1 + nonposted-mmio: true + power-domains: maxItems: 1 From 992e3fb1f6cde5c127d53a3b304edec48f514983 Mon Sep 17 00:00:00 2001 From: Ryan Murray Date: Sat, 24 Oct 2026 17:35:23 +1100 Subject: [PATCH 07/10] dt-bindings: power: apple,pmc: Allow nonposted-mmio The T6040 device tree places its SoC blocks at the root instead of under a simple-bus, because the boot loader edits several of them by path. With no bus node to carry nonposted-mmio, the blocks that need non-posted writes carry the property themselves, the PMC voter interface among them. The property has an effect there. Since commit 47026c4ffedd ("of: address: Allow to specify nonposted-mmio per-device") of_mmio_is_nonposted() checks the device node as well as its parent bus. The OF core then flags the node's memory resources IORESOURCE_MEM_NONPOSTED, and devm_platform_ioremap_resource_byname(), which the PMC driver uses for its voters and rails windows, maps them with ioremap_np(). Dropping the property would turn these mappings into posted ones, so the fix belongs in the binding, which does not allow the property yet. Allow nonposted-mmio, as the Apple DockChannel, ATC PHY and USB4 ACIO bindings do. Assisted-by: LLM Signed-off-by: Ryan Murray --- Documentation/devicetree/bindings/power/apple,pmc.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/power/apple,pmc.yaml b/Documentation/devicetree/bindings/power/apple,pmc.yaml index feea57cf5a744..36ac4fe142ddb 100644 --- a/Documentation/devicetree/bindings/power/apple,pmc.yaml +++ b/Documentation/devicetree/bindings/power/apple,pmc.yaml @@ -48,6 +48,8 @@ properties: - const: rails - const: voters + nonposted-mmio: true + power-domains: maxItems: 1 From e1c00bf330cbf4990ab87eb64e3757c804d7e5ef Mon Sep 17 00:00:00 2001 From: Ryan Murray Date: Sat, 24 Oct 2026 17:35:24 +1100 Subject: [PATCH 08/10] dt-bindings: input: apple,dockchannel-hid: Add the tp-accel and mtp nodes The driver uses an interface that the coprocessor announces only when the HID node has a child with the name of that interface. The MTP firmware of the MacBook Pro J616s announces keyboard, multi-touch, stm, actuator, tp-accel and mtp, its device tree has a child for each of them, and tp-accel and mtp both register as HID devices. The binding knows the accelerometer only as tp_accel, the name the firmware of the earlier machines uses, and has no mtp node at all. Describe both nodes, empty like the other interface nodes. Assisted-by: LLM Signed-off-by: Ryan Murray --- .../bindings/input/apple,dockchannel-hid.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Documentation/devicetree/bindings/input/apple,dockchannel-hid.yaml b/Documentation/devicetree/bindings/input/apple,dockchannel-hid.yaml index 07a0b8d1173ce..e039ebf276123 100644 --- a/Documentation/devicetree/bindings/input/apple,dockchannel-hid.yaml +++ b/Documentation/devicetree/bindings/input/apple,dockchannel-hid.yaml @@ -193,6 +193,20 @@ properties: additionalProperties: false description: The trackpad accelerometer. + tp-accel: + type: object + additionalProperties: false + description: + The trackpad accelerometer, under the name that the T6041 coprocessor + firmware announces. + + mtp: + type: object + additionalProperties: false + description: + A vendor HID interface of the coprocessor, announced by the T6041 + firmware. + required: - compatible - reg From b682f48de7aa26ebb51f08a232e6221837ccaf08 Mon Sep 17 00:00:00 2001 From: Ryan Murray Date: Sat, 24 Oct 2026 17:35:24 +1100 Subject: [PATCH 09/10] arm64: dts: apple: t6040-j616s: Add the Bluetooth address placeholder The BCM4388 Bluetooth binding requires local-bd-address. As on the other Apple machines, the boot loader provides it. m1n1 copies the ADT's /chosen mac-address-bluetooth0 into the node that the bluetooth0 alias names, using fdt_setprop(), which replaces the property as readily as it creates it. Add the zeroed placeholder that the other Apple device trees carry. The loaded tree is the same as before whenever the loader has an address. Without one, hci_bcm4377 and the Bluetooth core treat an all-zero local-bd-address like a missing one, so nothing changes at run time either. The comment above the PCIe node said that the boot loader's Bluetooth admission depends on the node exactly as it is. The Wi-Fi and Bluetooth setup in m1n1 reaches these nodes only through the wifi0 and bluetooth0 aliases and adds properties to them without checking the ones already there, and the kernel's BCM4388 admission waits for the Wi-Fi PCI function to bind without reading the Wi-Fi node. Reword the comment to say what the loader does. Fixes: f2a8c9621d0c ("arm64: dts: apple: t6040-j616s: Add Wi-Fi and Bluetooth") Assisted-by: LLM Signed-off-by: Ryan Murray --- arch/arm64/boot/dts/apple/t6040-j616s.dts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/arch/arm64/boot/dts/apple/t6040-j616s.dts b/arch/arm64/boot/dts/apple/t6040-j616s.dts index 4594aa5f1817b..9ad1cbeb3c596 100644 --- a/arch/arm64/boot/dts/apple/t6040-j616s.dts +++ b/arch/arm64/boot/dts/apple/t6040-j616s.dts @@ -523,10 +523,9 @@ }; /* - * Wi-Fi and Bluetooth (BCM4388). The boot loader adds the per-unit - * calibration and Bluetooth address to these nodes, and its Bluetooth - * admission depends on this node exactly as it is; it is kept as the - * booted tree has it. + * Wi-Fi and Bluetooth (BCM4388). The boot loader finds these nodes by + * the paths in the wifi0 and bluetooth0 aliases and adds the per-unit + * calibration, the antenna SKU and the addresses to them. */ / { pcie0: pcie@1cb0000000 { @@ -576,6 +575,8 @@ bluetooth@0,1 { compatible = "pci14e4,5f72"; reg = <0x100 0 0 0 0>; + /* To be filled by the loader */ + local-bd-address = [00 00 00 00 00 00]; brcm,board-type = "apple,hostomel"; status = "okay"; }; From 8794bb3793aba01672f2b10e8ee65a40b3406551 Mon Sep 17 00:00:00 2001 From: Ryan Murray Date: Sat, 24 Oct 2026 17:35:24 +1100 Subject: [PATCH 10/10] arm64: dts: apple: t6040-j616s: Rename the Wi-Fi CLKREQ pin group The Apple pinctrl binding requires the names of pin configuration nodes to end in -pins. Rename wifi-clkreq to wifi-clkreq-pins and its label to match, as the other Apple device trees name their pin groups. The PCIe node refers to the group by phandle, so nothing else changes. Fixes: f2a8c9621d0c ("arm64: dts: apple: t6040-j616s: Add Wi-Fi and Bluetooth") Assisted-by: LLM Signed-off-by: Ryan Murray --- arch/arm64/boot/dts/apple/t6040-j616s.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/apple/t6040-j616s.dts b/arch/arm64/boot/dts/apple/t6040-j616s.dts index 9ad1cbeb3c596..27aa13a9868c0 100644 --- a/arch/arm64/boot/dts/apple/t6040-j616s.dts +++ b/arch/arm64/boot/dts/apple/t6040-j616s.dts @@ -433,7 +433,7 @@ &pinctrl { status = "okay"; - wifi_clkreq: wifi-clkreq { + wifi_clkreq_pins: wifi-clkreq-pins { pinmux = ; }; }; @@ -545,7 +545,7 @@ "phy0", "phy1", "phy2", "phy3"; ranges = <0x43000000 0xb 0xc0000000 0xb 0xc0000000 0 0x20000000 0x2000000 0 0x80000000 0xb 0x80000000 0 0x40000000>; pinctrl-names = "default"; - pinctrl-0 = <&wifi_clkreq>; + pinctrl-0 = <&wifi_clkreq_pins>; #size-cells = <2>; #address-cells = <3>; bus-range = <0 1>;