diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3c506b9b50..e26681bcbe 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,8 @@
## 1.4.0
- Refactor subprocess invocations
- Resolve RecoveryOS support (Regression resolved in OpenCorePkg)
+- Restore SPI Keyboard and Trackpad support for macOS 14.4 and newer
+ - Applicable for MacBook8,1, MacBookPro13,x and MacBookPro14,x
- Increment binaries:
- OpenCorePkg 0.9.7 - release
diff --git a/payloads/Config/config.plist b/payloads/Config/config.plist
index 4b4c131470..1753894170 100644
--- a/payloads/Config/config.plist
+++ b/payloads/Config/config.plist
@@ -1799,6 +1799,42 @@
PlistPath
Contents/Info.plist
+
+ Arch
+ x86_64
+ Comment
+ AppleHSSPISupport - SPI Top Case Support
+ Enabled
+
+ MaxKernel
+
+ MinKernel
+ 23.4.0
+ BundlePath
+ AppleHSSPISupport.kext
+ ExecutablePath
+ Contents/MacOS/AppleHSSPISupport
+ PlistPath
+ Contents/Info.plist
+
+
+ Arch
+ x86_64
+ Comment
+ AppleHSSPIHIDDriver - SPI Top Case Support
+ Enabled
+
+ MaxKernel
+
+ MinKernel
+ 23.4.0
+ BundlePath
+ AppleHSSPIHIDDriver.kext
+ ExecutablePath
+ Contents/MacOS/AppleHSSPIHIDDriver
+ PlistPath
+ Contents/Info.plist
+
Block
diff --git a/payloads/Kexts/Misc/AppleHSSPIHIDDriver-v1.0.0.zip b/payloads/Kexts/Misc/AppleHSSPIHIDDriver-v1.0.0.zip
new file mode 100644
index 0000000000..a2976878c5
Binary files /dev/null and b/payloads/Kexts/Misc/AppleHSSPIHIDDriver-v1.0.0.zip differ
diff --git a/payloads/Kexts/Misc/AppleHSSPISupport-v1.0.0.zip b/payloads/Kexts/Misc/AppleHSSPISupport-v1.0.0.zip
new file mode 100644
index 0000000000..cfb3b79ba2
Binary files /dev/null and b/payloads/Kexts/Misc/AppleHSSPISupport-v1.0.0.zip differ
diff --git a/resources/build/misc.py b/resources/build/misc.py
index eddfbb53a1..2adc375665 100644
--- a/resources/build/misc.py
+++ b/resources/build/misc.py
@@ -180,9 +180,17 @@ def _firewire_handling(self) -> None:
def _topcase_handling(self) -> None:
"""
- USB Top Case Handler
+ USB/SPI Top Case Handler
"""
+ # macOS 14.4 Beta 1 strips SPI-based top case support for USB-C Macs pre-T2
+ if self.model.startswith("MacBook") and self.model in smbios_data.smbios_dictionary:
+ if self.model == "MacBook8,1" or (cpu_data.CPUGen.skylake <= smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.CPUGen.kaby_lake):
+ logging.info("- Enabling SPI-based top case support")
+ support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleHSSPISupport.kext", self.constants.apple_spi_version, self.constants.apple_spi_path)
+ support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleHSSPIHIDDriver.kext", self.constants.apple_spi_hid_version, self.constants.apple_spi_hid_path)
+
+
#On-device probing
if not self.constants.custom_model and self.computer.internal_keyboard_type and self.computer.trackpad_type:
diff --git a/resources/constants.py b/resources/constants.py
index 1703a9043c..7164b737d9 100644
--- a/resources/constants.py
+++ b/resources/constants.py
@@ -70,6 +70,8 @@ def __init__(self) -> None:
self.t1_sse_version: str = "1.1.0" # AppleSSE (13.6 - T1 support)
self.t1_key_store_version: str = "1.1.0" # AppleKeyStore (13.6 - T1 support)
self.t1_corecrypto_version: str = "1.0.1" # corecrypto (13.6 - T1 support)
+ self.apple_spi_version: str = "1.0.0" # AppleHSSPISupport (14.4 Beta 1)
+ self.apple_spi_hid_version: str = "1.0.0" # AppleHSSPIHIDDriver (14.4 Beta 1)
## Apple - Dortania Modified
self.bcm570_version: str = "1.0.2" # CatalinaBCM5701Ethernet
@@ -459,6 +461,14 @@ def t1_sse_path(self):
def t1_corecrypto_path(self):
return self.payload_kexts_path / Path(f"Misc/corecrypto_T1-v{self.t1_corecrypto_version}.zip")
+ @property
+ def apple_spi_path(self):
+ return self.payload_kexts_path / Path(f"Misc/AppleHSSPISupport-v{self.apple_spi_version}.zip")
+
+ @property
+ def apple_spi_hid_path(self):
+ return self.payload_kexts_path / Path(f"Misc/AppleHSSPIHIDDriver-v{self.apple_spi_hid_version}.zip")
+
@property
def mousse_path(self):
return self.payload_kexts_path / Path(f"SSE/AAAMouSSE-v{self.mousse_version}.zip")