diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4b44191ec..71aff53fa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -27,7 +27,7 @@
- utilities.py:
- Fix indexing error on Device Paths (thx [@Ausdauersportler](https://github.com/Ausdauersportler))
- Increment Binaries:
- - PatcherSupportPkg 1.1.6 - release
+ - PatcherSupportPkg 1.1.7 - release
## 0.6.7
- Resolve partition buttons overlapping in Install OpenCore UI
diff --git a/data/sys_patch_dict.py b/data/sys_patch_dict.py
index 1fb466e54..d4bdb3207 100644
--- a/data/sys_patch_dict.py
+++ b/data/sys_patch_dict.py
@@ -1290,6 +1290,27 @@ class SystemPatchDictionary():
"IOUSBHostFamily.kext": "12.6.2",
},
},
- }
+ },
+ "PCIe Web Camera": {
+ "Display Name": "Miscellaneous: PCIe Web Camera",
+ "OS Support": {
+ "Minimum OS Support": {
+ "OS Major": os_data.os_data.sonoma,
+ "OS Minor": 0
+ },
+ "Maximum OS Support": {
+ "OS Major": os_data.os_data.max_os,
+ "OS Minor": 99
+ },
+ },
+ "Install Non-Root": {
+ "/Library/CoreMediaIO/Plug-Ins": {
+ "AppleCamera.plugin": "14.0 Beta 1"
+ },
+ "/Library/LaunchDaemons": {
+ "com.apple.cmio.AppleCameraAssistant.plist": "14.0 Beta 1"
+ },
+ },
+ },
},
}
\ No newline at end of file
diff --git a/payloads/Config/config.plist b/payloads/Config/config.plist
index 4b675e7dd..42631326c 100644
--- a/payloads/Config/config.plist
+++ b/payloads/Config/config.plist
@@ -1671,6 +1671,24 @@
PlistPath
Contents/Info.plist
+
+ Arch
+ x86_64
+ Comment
+ PCIe Camera
+ Enabled
+
+ MaxKernel
+
+ MinKernel
+ 23.0.0
+ BundlePath
+ AppleCameraInterface.kext
+ ExecutablePath
+ Contents/MacOS/AppleCameraInterface
+ PlistPath
+ Contents/Info.plist
+
Block
diff --git a/payloads/Kexts/Misc/AppleCameraInterface-v1.0.0.zip b/payloads/Kexts/Misc/AppleCameraInterface-v1.0.0.zip
new file mode 100644
index 000000000..5b9160535
Binary files /dev/null and b/payloads/Kexts/Misc/AppleCameraInterface-v1.0.0.zip differ
diff --git a/resources/build/misc.py b/resources/build/misc.py
index 470ef7e3a..fec90eaab 100644
--- a/resources/build/misc.py
+++ b/resources/build/misc.py
@@ -237,10 +237,18 @@ class BuildMiscellaneous:
"""
iSight Handler
"""
+ if self.model in smbios_data.smbios_dictionary:
+ if "Legacy iSight" in smbios_data.smbios_dictionary[self.model]:
+ if smbios_data.smbios_dictionary[self.model]["Legacy iSight"] is True:
+ support.BuildSupport(self.model, self.constants, self.config).enable_kext("LegacyUSBVideoSupport.kext", self.constants.apple_isight_version, self.constants.apple_isight_path)
- if "Legacy iSight" in smbios_data.smbios_dictionary[self.model]:
- if smbios_data.smbios_dictionary[self.model]["Legacy iSight"] is True:
- support.BuildSupport(self.model, self.constants, self.config).enable_kext("LegacyUSBVideoSupport.kext", self.constants.apple_isight_version, self.constants.apple_isight_path)
+ if not self.constants.custom_model:
+ if self.constants.computer.pcie_webcam is True:
+ support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleCameraInterface.kext", self.constants.apple_camera_version, self.constants.apple_camera_path)
+ else:
+ if self.model.startswith("MacBook") and self.model in smbios_data.smbios_dictionary:
+ if cpu_data.CPUGen.haswell <= smbios_data.smbios_dictionary[self.model]["CPU Generation"] <= cpu_data.CPUGen.kaby_lake:
+ support.BuildSupport(self.model, self.constants, self.config).enable_kext("AppleCameraInterface.kext", self.constants.apple_camera_version, self.constants.apple_camera_path)
def _usb_handling(self) -> None:
diff --git a/resources/constants.py b/resources/constants.py
index 2d87894fe..adb320ea5 100644
--- a/resources/constants.py
+++ b/resources/constants.py
@@ -13,7 +13,7 @@ class Constants:
def __init__(self) -> None:
# Patcher Versioning
self.patcher_version: str = "0.6.8" # OpenCore-Legacy-Patcher
- self.patcher_support_pkg_version: str = "1.1.6" # PatcherSupportPkg
+ self.patcher_support_pkg_version: str = "1.1.7" # PatcherSupportPkg
self.copyright_date: str = "Copyright © 2020-2023 Dortania"
self.patcher_name: str = "OpenCore Legacy Patcher"
@@ -65,6 +65,7 @@ class Constants:
self.apple_usb_11_injector: str = "1.0.0" # AppleUSBUHCI/OHCI
self.aicpupm_version: str = "1.0.0" # AppleIntelCPUPowerManagement/Client
self.s3x_nvme_version: str = "1.0.0" # IONVMeFamily (14.0 Beta 1, S1X and S3X classes)
+ self.apple_camera_version: str = "1.0.0" # AppleCameraInterface (14.0 Beta 1)
## Apple - Dortania Modified
self.bcm570_version: str = "1.0.2" # CatalinaBCM5701Ethernet
@@ -539,6 +540,10 @@ class Constants:
def s3x_nvme_path(self):
return self.payload_kexts_path / Path(f"Misc/IOS3XeFamily-v{self.s3x_nvme_version}.zip")
+ @property
+ def apple_camera_path(self):
+ return self.payload_kexts_path / Path(f"Misc/AppleCameraInterface-v{self.apple_camera_version}.zip")
+
@property
def plist_folder_path(self):
return self.payload_kexts_path / Path("Plists")
diff --git a/resources/device_probe.py b/resources/device_probe.py
index 0ab96495e..f533bc4a8 100644
--- a/resources/device_probe.py
+++ b/resources/device_probe.py
@@ -630,6 +630,7 @@ class Computer:
trackpad_type: Optional[str] = None
ambient_light_sensor: Optional[bool] = False
third_party_sata_ssd: Optional[bool] = False
+ pcie_webcam: Optional[bool] = False
secure_boot_model: Optional[str] = None
secure_boot_policy: Optional[int] = None
oclp_sys_version: Optional[str] = None
@@ -655,6 +656,7 @@ class Computer:
computer.bluetooth_probe()
computer.topcase_probe()
computer.ambient_light_sensor_probe()
+ computer.pcie_webcam_probe()
computer.sata_disk_probe()
computer.oclp_sys_patch_probe()
computer.check_rosetta()
@@ -733,6 +735,13 @@ class Computer:
self.ambient_light_sensor = True
ioreg.IOObjectRelease(device)
+ def pcie_webcam_probe(self):
+ # CMRA/14E4:1570
+ device = next(ioreg.ioiterator_to_list(ioreg.IOServiceGetMatchingServices(ioreg.kIOMasterPortDefault, ioreg.IOServiceNameMatching("CMRA".encode()), None)[1]), None)
+ if device:
+ self.pcie_webcam = True
+ ioreg.IOObjectRelease(device)
+
def sdxc_controller_probe(self):
sdxc_controllers = ioreg.ioiterator_to_list(
ioreg.IOServiceGetMatchingServices(
diff --git a/resources/sys_patch/sys_patch_detect.py b/resources/sys_patch/sys_patch_detect.py
index b4bf3eba8..23e2d18f8 100644
--- a/resources/sys_patch/sys_patch_detect.py
+++ b/resources/sys_patch/sys_patch_detect.py
@@ -61,6 +61,7 @@ class DetectRootPatch:
self.legacy_gmux = False
self.legacy_keyboard_backlight = False
self.legacy_uhci_ohci = False
+ self.legacy_pcie_webcam = False
# Patch Requirements
self.amfi_must_disable = False
@@ -519,6 +520,8 @@ class DetectRootPatch:
self.has_network = network_handler.NetworkUtilities().verify_network_connection()
+ self.legacy_pcie_webcam = self.constants.computer.pcie_webcam
+
if self._check_uhci_ohci() is True:
self.legacy_uhci_ohci = True
self.requires_root_kc = True
@@ -591,6 +594,7 @@ class DetectRootPatch:
"Miscellaneous: Legacy GMUX": self.legacy_gmux,
"Miscellaneous: Legacy Keyboard Backlight": self.legacy_keyboard_backlight,
"Miscellaneous: Legacy USB 1.1": self.legacy_uhci_ohci,
+ "Miscellaneous: PCIe Web Camera": self.legacy_pcie_webcam,
"Settings: Requires AMFI exemption": self.amfi_must_disable,
"Settings: Supports Auxiliary Cache": not self.requires_root_kc,
"Settings: Kernel Debug Kit missing": self.missing_kdk if self.constants.detected_os >= os_data.os_data.ventura.value else False,
diff --git a/resources/sys_patch/sys_patch_generate.py b/resources/sys_patch/sys_patch_generate.py
index 93c40c760..cdcbdff7e 100644
--- a/resources/sys_patch/sys_patch_generate.py
+++ b/resources/sys_patch/sys_patch_generate.py
@@ -187,6 +187,9 @@ class GenerateRootPatchSets:
if self.hardware_details["Miscellaneous: Legacy USB 1.1"] is True:
required_patches.update({"Legacy USB 1.1": all_hardware_patchset["Miscellaneous"]["Legacy USB 1.1"]})
+ if self.hardware_details["Miscellaneous: PCIe Web Camera"] is True:
+ required_patches.update({"PCIe Web Camera": all_hardware_patchset["Miscellaneous"]["PCIe Web Camera"]})
+
if required_patches:
host_os_float = float(f"{self.constants.detected_os}.{self.constants.detected_os_minor}")