shinzon Posted August 10, 2015 Share Posted August 10, 2015 Hardware status:[Working] Wireless (swapped to Dell DW1510)[Working] Ethernet[Working] Audio (including Internal Microphone, Line In/Out)[Working] USB2/3 (using native Apple kexts)[Working] Backlight[Working] Battery[Working] HD4000 Graphics (with full acceleration)[Working] VGA port [buggy][Working] HDMI port (including audio over HDMI)[Working] SDCard Reader [Works OOTB][Working] Webcam [Works OOTB][Working] Keyboard/Trackpad (including Fn keys)[Working] Sleep/Wake[Working] Hibernate[Working] Facetime/iMessageThis post assumes you've installed Yosemite and are booting with the latest version of Clover. This post assumes a certain level of experience, and is meant more as a collection of solutions than a step-by-step guide. By the end of this post, all your hardware should work flawlessly, and OSX maintenance upgrades (e.g. 10.10.2 > 10.10.3) should install without trashing your system.Since there are different V5-171-* variants, my system specs are as follows:Acer Aspire V5-171-9661Intel Core i7-3517UHM77 chipsetIntel HD4000 graphics, 1366x768Elantech Touchpad with v4 hardwareAnatel Atheros AR5B22InsydeH20 EFI 3.7System BIOS Version 2.21Clover Bootloader r3241 (as of the time of this writing) [booting in EFI mode]OSx 10.10.4 Yosemite (as of the time of this writing)This guide should equally apply to any V5-171-* built in 2012-2013 that has an Ivy Bridge Core i5 or i7 processor.SMBios The 11" MacBookAir5,1 uses an Ivy Brdige Core i7 3***U processor with HD4000 graphics on an Intel HM77 board. This would seem the perfect model to emulate for this laptop. Unfortunately, Clover doesn't provide an option for the 5,1 in its wizard, only for the 13" 5,2. You can either create the SMBios manually, matching the values for a real MacBookAir5,1, or just use 5,2 since it has the same hardware minus the screen size. The Retina MacBookPro10,1 would be another good option. It uses an Ivy Bridge Core i7 3***M processor with HD4000 graphics and the HM77 Chipset. Here's the values for a MacBookAir5,1: <key>SMBIOS</key> <dict> <key>BiosReleaseDate</key> <string>06/08/15</string> <key>BiosVendor</key> <string>Apple Inc.</string> <key>BiosVersion</key> <string>MBA51.88Z.00EF.B03.1506081623</string> <key>Board-ID</key> <string>Mac-66F35F19FE2A0D05</string> <key>BoardManufacturer</key> <string>Apple Inc.</string> <key>BoardType</key> <integer>10</integer> <key>ChassisAssetTag</key> <string>Air-Enclosure</string> <key>ChassisManufacturer</key> <string>Apple Inc.</string> <key>ChassisType</key> <string>10</string> <key>Family</key> <string>MacBook Air</string> <key>Manufacturer</key> <string>Apple Inc.</string> <key>Mobile</key> <true/> <key>ProductName</key> <string>MacBookAir5,1</string> <key>SerialNumber</key> <string>C02XXXXXDRV6</string> <key>Trust</key> <false/> <key>Version</key> <string>1.0</string> </dict> You'll need to generate your own Serial.Additionally, you can find dumps (DSDT, IOReg, etc.) for real Mac hardware at the following link:http://tdev.me/2010/12/apple-hardware-dumps/KextsBasic kexts you'll need. Install all kexts to ../Clover/kexts/10.10/ unless otherwise specified:FakeSMChttps://bitbucket.org/RehabMan/os-x-fakesmc-kozlek/downloadsElanTouchpad Driverhttps://osxlatitude.com/index.php?/topic/1948-elan-and-focaltech-smart-touchpad-driver-mac-os-x/Clover ConfigurationMy clover config is attached to this post, and can likely be used as is (generate your own serial), but in general: Disable all ACPI DSDT edits except for New Way and Fix Regions Use the wizard to generate an smbios of MacBookAir5,1 Nearly everything clover offers should be disabled (graphics, USB, etc.). We'll fix things in other ways. My Bootflags: -v dart=0 nv_disable=1 kext-dev-mode=1 -xcpmClover Drivers:Drivers present in ../Clover/drivers64UEFI/FSInject-64.efiHFSPlus.efi - Needed for Clover to read HFS+ formatted partitions.NTFS.efi - Needed for Clover to read NTFS formatted partitions (if you're dual-booting with windows).OsxAptioFix2Drv-64.efi - Needed to enable hibernation when booted in UEFI mode, and to fix the persistence of the hardware NVRam.OsxFatBinaryDrv-64.efi - Needed for Clover to read Fat32 formatted partitions.DSDTGet the stock ACPI tables. I booted into Ubuntu Linux for this.You should now have your stock DSDT and SSDTs.The first step is to correct any errors (Patch at end of section). Mine had a single error: Result is not used. Operator has no effect: line 6114 Original: Method (_L1F, 0, NotSerialized) // _Lxx: Level-Triggered GPE { Not (LPDL, LPDL) If (LEqual (\_SB.PCI0.LPCB.EC0.IOAC, Zero)) { Store (\_SB.PCI0.LPCB.EC0.LIDF, Local0) Not (Local0, Local0) If (LGreaterEqual (OSYS, 0x07D6)) { Add (Local0, 0x02) \_SB.PCI0.GFX0.GLID (Local0) } Notify (\_SB.PCI0.LPCB.LID0, 0x80) } Else { If (LEqual (\_SB.PCI0.LPCB.EC0.LIDF, One)) { \_SB.PCI0.GFX0.GLID (0x03) } } } } Corrected: [deleted bolded line] Method (_L1F, 0, NotSerialized) // _Lxx: Level-Triggered GPE { Not (LPDL, LPDL) If (LEqual (\_SB.PCI0.LPCB.EC0.IOAC, Zero)) { Store (\_SB.PCI0.LPCB.EC0.LIDF, Local0) Not (Local0, Local0) If (LGreaterEqual (OSYS, 0x07D6)) { \_SB.PCI0.GFX0.GLID (Local0) } Notify (\_SB.PCI0.LPCB.LID0, 0x80) } Else { If (LEqual (\_SB.PCI0.LPCB.EC0.LIDF, One)) { \_SB.PCI0.GFX0.GLID (0x03) } } } } I also fixed two warnings: Not all control paths return a value WM00: line 4783 original: Method (WM00, 3, NotSerialized) { Store ("00", CTID) If (LEqual (Arg1, 0x06)) { CSMI (Arg1, Arg2) Return (DI00) } edited: [added the bold] Method (WM00, 3, NotSerialized) { Store ("00", CTID) If (LEqual (Arg1, 0x06)) { CSMI (Arg1, Arg2) Return (DI00) } [B]Return (Buffer (One) { 0x00 })[/B] } Resource tag larger than field 64bit tag, 32bit feild: line 1488 Original: If (LOr (LEqual (MM64, Zero), LLessEqual (OSYS, 0x07D3))) { [B]CreateDWordField (BUF0, \_SB.PCI0._Y0F._LEN, MSLN)[/B] // _LEN: Length Store (Zero, MSLN) } Edited: [changed CreateDWordField to CreateQWordField] If (LOr (LEqual (MM64, Zero), LLessEqual (OSYS, 0x07D3))) { [B]CreateQWordField (BUF0, \_SB.PCI0._Y0F._LEN, MSLN)[/B] // _LEN: Length Store (Zero, MSLN) } I also created a patch that automates the above changes, taking care of the error, and both warnings, and also addresses the vast majority of the remarks: # Fix Error "Result is not used, operator has no effect" Line 5690 into method label _L1F parent_label _GPE code_regex Add\s\(Local0\,\s0x02\) remove_matched; # Fix Warning "ResourceTag larger than Field (Size mismatch, Tag: 64 bits, Field: 32 bits)" Line 1488 into method label _CRS parent_hid PNP0A08 code_regex CreateDWordField\s\(BUF0\,\s\\\_SB\.PCI0\.\_Y0F replace_matched begin CreateQWordField (BUF0, \\_SB.PCI0._Y0F end; # Fix Warning "Not all control paths return a value (WM00)" Line 4783 into method label WM00 parent_hid PNP0C14 insert begin Return (Buffer (One)\n {\n 0x00\n })\n end; # Fix Remark "Use of compiler reserved name (_T_0)" into_all all code_regex _T_([0-9]) replaceall_matched begin T_%1 end; DSDT should now compile without any errors or warnings. Save a virgin copy so you can backtrack if you make any mistakes.Now we begin patching. Nearly all of the patches I used are from RehabMan's laptop patch repo:https://github.com/RehabMan/Laptop-DSDT-PatchBasic Recommended PatchesAdd MCHChttps://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/system/system_MCHC.txtFix Mutexhttps://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/system/system_Mutex.txtMasquerade OSX ("Darwin") as Windows 8 ("Windows 2012")https://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/system/system_OSYS_win8.txtSMBus Fixhttps://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/system/system_SMBUS.txtHD4000 GraphicsApply following patches from the repo to your DSDT:Rename GFX0 to IGPU (apply first)https://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/graphics/graphics_Rename-GFX0.txtEnabled HD4000 & Inject HDMI infohttps://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/graphics/graphics_HD4K_low.txtYou'll also need to set ig-platform-id in clover: <key>Graphics</key> <dict> <key>ig-platform-id</key> <string>0x01660003</string> </dict> Power ManagementThis is accomplished through Clover, or a custom SSDT. I used ssdtprgen.sh to generate a custom SSDT.aml and placed it into ../Clover/ACPI/patched/ to handle my power management. If you go this route, you must also enable Xnu CPU Power Management using bootflag -xcpm and must also set KernelPM to true in your Clover config.USBTo get USB fully working, simply apply these two patches:https://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/usb/usb_7-series.txt (apply first)https://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/usb/usb_7-series-multiplex.txtMultiplex patch needs a couple of minor edits to work with this laptop. First, our bios uses Name not Method for USB _PWR. Find the line that reads: Method (_PRW, 0, NotSerialized) { Return (GPRW (0x0D, 0x04)) }\n and edit it to read: Name (_PRW, Package () { 0x0D, 0x03 })\n Also in the multiplex patch, find the line that reads: "AAPL,device-internal", 0x02,\n and edit it to read: "AAPL,device-internal", Zero,\n to match what the MacBookPro10,1 (same chipset) uses. It uses "AAPL,device-internal", 0x02, for ECH1 and ECH2, and 0x00 (Zero) for XHC1.Now, reboot (MAKE SURE YOU UNINSTALL GenericUSBXHCI.kext!), and USB should be fully functional using native Apple kexts.AudioAudio required much fiddling. The V5-171-9661 uses an ALC271x codec. One can find a working kext here:http://www.insanelymac.com/forum/topic/298663-applehda-for-yosemite/that will give you functioning internal speakers, and headphone jack after applying the following DSDT layout patch: # Maintained by: toleda for: github.com/toleda/audio_alc8xx # File: hdef3-alc8xx_audio-3.txt_v2.0 # Credit: PikeRAlpha # # Add_HDEF, for dsdts with no HDEF, set Audio_ID: 3 # # 1. Enable Audio ID: 3, Add HDEF/layout-id=3 into method label _DSM parent_adr 0x001B0000 remove_entry; into device name_adr 0x001B0000 insert begin Method (_DSM, 4, NotSerialized)\n {\n If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n Return (Package()\n {\n "layout-id", Buffer() { 0x03, 0x00, 0x00, 0x00 },\n "PinConfigurations", Buffer(Zero) {},\n "hda-gfx", Buffer() { "onboard-1" },\n })\n }\n end; but to get the internal microphone working, and to make sound survive OSX upgrades, some further work is needed.To make sound update-proof, you need to have Clover patch AppleHDA.kext on the fly, and use an injector kext to supply the stock AppleHDA.kext with information about our codec. Starting with the above kext for ALC271x, I followed this guide:http://www.insanelymac.com/forum/topic/298027-guide-aio-guides-for-hackintosh/page-2?do=findComment&comment=2030060to create a DummyHDA.kext. If installed to /System/Library/Extensions along side the untouched AppleHDA.kext, and Clover has the following patches applied (an explanation of how to generate your Clover patches with a script is in the thread linked above), the system should now have sound (but no mic). <dict> <key>Comment</key> <string>Expect 2 matches</string> <key>Find</key> <data> hAjsEA== </data> <key>Name</key> <string>AppleHDA</string> <key>Replace</key> <data> AAAAAA== </data> </dict> <dict> <key>Comment</key> <string>Expect 2 matches</string> <key>Find</key> <data> hQjsEA== </data> <key>Name</key> <string>AppleHDA</string> <key>Replace</key> <data> AAAAAA== </data> </dict> <dict> <key>Comment</key> <string>Expect 2 matches</string> <key>Find</key> <data> hBnUEQ== </data> <key>Name</key> <string>AppleHDA</string> <key>Replace</key> <data> aQLsEA== </data> </dict> To fix the internal microphone, you'll need to edit the pathmaps and codec information you added to DummyHDA.kext. My DummyHDA.kext with these edits already made is attached to this post, and can likely be used without modification on another V5-171-9661.Relevant Tutorial Thread:http://www.insanelymac.com/forum/topic/295001-guide-to-patch-applehda-for-your-codec/The ALC271x kext from which we took the files uses layout 3, and pathmap id 269 (under path 48 in platforms.xml).Structure of pathmaps.xml from downloaded ALC271x kext in PlistEdit Pro: PathMaps | [0-47] | 48-[Contains PathMapID for our codec used by ALC271x pathced kext, 269] | PathMapID: 269 | PathMap | 0-INPUT | | | 0—Line In | | | | | 0 Input NodeID | | | | | 1 Mixer/Selector NodeID | | | | | 2 Pin Complex NodeID | | | 1—Internal Microphone | | | 0 Input NodeID | | | 1 Mixer/Selector NodeID | | | 2 Pin Complex NodeID | 1—OUTPUT | 0—Internal Speakers | | | 0 Pin Complex NodeID | | | 1 Mixer/Selector NodeID | | | 2 Output NodeID | 1—Headphone Jack | 0 Pin Complex NodeID | 1 Mixer/Selector NodeID | 2 Output NodeID NodeIDs for V5-171-9661Line inInput 9Selector 34Complex 18MicrophoneInput 8Mixer 35Complex 27Internal SpeakerPin Complex 20Mixer 13Output 3HeadphonePin Complex 33Mixer 12Output 2In the pathmap.xml we took from the ALC271x's kext and placed into DummyHDA.kext, it was only necessary to change the mic’s pin complex from 24 to 27, all the other nodes were correct already.The next step is to edit the codec verbs for the microphone as follows: Original: 01471c10 01471d00 01471e17 01471f90 01b71c20 01b71d00 01b71ea7 01b71f90 01d71c30 01d71d90 01d71e18 01d71f40 02171c40 02171d10 02171e21 02171f00 Corrected: 01471c10 01471d00 01471e17 01471f90 01471c10 01471d00 01471e17 01471f90 01d71c30 01d71d90 01d71e18 01d71f40 02171c40 02171d10 02171e21 02171f00 As you can see I changed the second set of four verbs (bold) from:01b71c20 01b71d00 01b71ea7 01b71f90to:01471c10 01471d00 01471e17 01471f90as per bcc9’s script. Everything else in this kext matches the verbs provided by the script.If you edit the info.plist file in a text editor, you’ll need to convert the codec verb string from hex to base64.The info.plist edits should look like this: Original: <key>CodecID</key> <integer>283902569</integer> <key>ConfigData</key> <data> AUccEAFHHQABRx4XAUcfkAG3HCABtx0AAbce pwG3H5AB1xwwAdcdkAHXHhgB1x9AAhccQAIX HRACFx4hAhcfAA== </data> Corrected: <key>CodecID</key> <integer>283902569</integer> <key>ConfigData</key> <data> AYccMAGHHRABhx6BAYcfAAGXHEABlx0AAZce oAGXH5ABtxwQAbcdAAG3HhMBtx+QAhccYAIX HRACFx4hAhcfAAG3DAI= </data> Install the edited dummy kext to /System/Library/Extensions, rebuild the kext cache, reboot, and sound should work (make sure you have the stock, untouched AppleHDA.kext in /System/Library/Extensions, not the downloaded ALC271x kext).With these changes, the files taken from the modified ALC271x AppleHDA and placed into DummyHDA will allow the stock AppleHDA.kext to load, provide sound/mic, and sound will survive OSX upgrades.WirelessNot possible. Replace the card with a Dell 1510, or similar OSX compatible card. Note that the DW1510 does not have Bluetooth, and the V5-171-9661's Bluetooth chip is integrated on the stock wireless card. If Bluetooth is important to you, you'll have to use a different card.EthernetThe V5-171-9661 has a Netlink BCM57785. To ensure that ethernet survives OSX upgrades, I used FakePCID and an injector to load the stock Apple network kext.https://github.com/RehabMan/OS-X-Fake-PCI-IDAdd FakePCID.kext and FakePCIID_BCM57XX_as_BCM57765.kext to ../Clover/kext/10.10, reboot, and ethernet works.BatteryDone with Rehabman's ACPI Battery Driver:https://github.com/RehabMan/OS-X-ACPI-Battery-Driverand a DSDT edit, utilizing this patch from the repo:https://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/battery/battery_Acer-Aspire-E1-571.txtHDMI Audio & VGASimply apply the following Clover kext patch: <dict> <key>Comment</key> <string>HDMI-audio HD4000 0x01660003, port 0205</string> <key>Find</key> <data> AgUAAAAEAAAHBAAA </data> <key>Name</key> <string>AppleIntelFramebufferCapri</string> <key>Replace</key> <data> AgUAAAAIAAAGAAAA </data> </dict> Brightness ControlApply following patch from the repo to your DSDT:https://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/graphics/graphics_PNLF_ivy_sandy.txtThat patch will get rudimentary brightness controls working, but for full control, in conjunction with that patch, you'll either need to install Rehabman's Backlight kext:https://github.com/RehabMan/OS-X-ACPI-Backlightor, as I did, you can use an injector kext to load the default Apple backlight kext. Install the kext in /System/Library/Extensions (doesn't load from ../Clover/kexts/10.10), rebuild the kext cache, reboot and you should have full backlight control. My injector kext with this work done is attached.Brightness KeysFn+LArrow for brightness downFn+RArrow for brightness upThe V5-171-9661 uses DSDT ec query method _Q11 for brightness down, and _Q12 for brightness up.As of version 4.3 of the Elantech driver, there is native support for ACPI brightness keys, releaving us of the need to use a middleman kext to enable them. With this new version, you only need to apply this simple DSDT patch to get the keys working: #Edit methods _Q11 and _Q12 to interface with KBC0 into method label _Q11 replace_content begin // Brightness Down\n Notify (KBC0, 0x20)\n end; into method label _Q12 replace_content begin // Brightness Up\n Notify (KBC0, 0x10)\n end; Note that by default the driver has FinerBrightnessControl set to true in it's info.plist, breaking brightness control into 64 steps, as opposed to the normal 16 that OS X uses. See this thread for more information on how to configure the Elantech driver:https://osxlatitude.com/index.php?/topic/5969-details-about-the-enhanced-keyboard-for-elan-touchpad-driver/Hibernation, Hardware NVRam, Facetime & iMessageWhen booting in UEFI mode, Hibernation can be enabled by including the OsxAptioFix2Drv-64.efi Clover driver when you install. With this driver included, hibernation, set to mode 3 (safe sleep) by default, will work with no other changes. To test this, sleep the laptop with the A/C cable disconnected, and then pull the battery. With the battery reattached, when the laptop is powered on, Clover should say (Hibernated) next to your OSX partition, and when selected, your computer should return to the state it was in when you put it to sleep.Including OsxAptioFix2Drv-64.efi also fixes the hardware NVRam, allowing one to forgo including Clover's NVRam emulator, EmuVariableUefi-64.efi. Without either driver installed, NVRam contents does not persist across reboots.Functional NVRram, whether Clover's emulator, or the hardware NVRam, is required for Facetime & Messages to work. In short, it is necessary to get a unique serial number, to ensure NVRam works, and to call Apple. Optional: Trim Support (for those with SSDs)As of 10.10.4, you only need to issue a terminal command to enable trim support: $ sudo trimforce enable Optional: Rename Devices in DSDT to Match Apple ConventionsI created a patch that renames all relevant devices in the DSDT to match what OSX expects. This patch is purely cosmetic; apply at your own risk.Renames:EC0 > ECSAT0 > SATAACAD > ADP1BAT1 > SMB0PXSX@RP02 > ARPTPXSX@RP03 > GIGECRF1 > SDXCXHC > XHC1 # Rename EC0 to EC (embedded controller) to be more Apple-like into device label EC0 set_label begin EC end; into scope label EC0 set_label begin EC end; into_all all code_regex \.EC0\. replaceall_matched begin \.EC\. end; into_all all code_regex \^EC0\. replaceall_matched begin \^EC\. end; # Rename SAT0 to SATA (serial ata) to be more Apple-like into device label SAT0 set_label begin SATA end; # Rename ACAD (ac adapter) to ADP1 to be more Apple-like into device label ACAD set_label begin ADP1 end; into method label _Q37 parent_hid PNP0C09 code_regex ACAD replaceall_matched begin ADP1 end; into method label _Q38 parent_hid PNP0C09 code_regex ACAD replaceall_matched begin ADP1 end; # Rename BAT1 (battery) to SMB0 to be more Apple-like into device label BAT1 parent_label _SB.PCI0.LPCB set_label begin SMB0 end; into_all all code_regex Notify\s\(BAT1 replaceall_matched begin Notify (SMB0 end; # Rename PXSX at RP02 (wireless) to ARPT to be more Apple-like into device label PXSX parent_adr 0x001C0001 set_label begin ARPT end; into method label HPME parent_adr 0x001C0001 code_regex PXSX replaceall_matched begin ARPT end; # Rename PXSX at RP03 (ethernet) to GIGE to be more Apple-like into device label PXSX parent_adr 0x001C0002 set_label begin GIGE end; into method label HPME parent_adr 0x001C0002 code_regex PXSX replaceall_matched begin GIGE end; # Rename CRF1 at RP03 (sdcard reader) to SDXC to be more Apple-like into device label CRF1 parent_adr 0x001C0002 set_label begin SDXC end; # Rename XHC to XHC1 (usb3.0) to be more Apple-like into device label XHC set_label begin XHC1 end; into_all all code_regex \^XHC\. replaceall_matched begin \^XHC1\. end; Optional: Implement Compiler Recommended DSDT OptimizationsI created a patch that addresses the vast majority of the optimizations the compiler suggests. Again, use at your own risk. # Optimization Change \_SB.PCI0._Y0* to ^_Y0* into_all all code_regex \\_SB\.PCI0\._Y0([0-9]) replaceall_matched begin \^_Y0%1 end; into_all all code_regex \\_SB\.PCI0\._Y0([A-F]) replaceall_matched begin \^_Y0%1 end; # Optimization: Change \_SB.PCI0.LPCB.HPET.Y1* to ^_Y1* into_all all code_regex \\_SB\.PCI0\.LPCB\.HPET\._Y1([0-9]) replaceall_matched begin \^_Y1%1 end; # Optimization: Change \_SB.PCI0.PDRC._Y1* to ^_Y1* into_all all code_regex \\_SB\.PCI0\.PDRC\._Y1([0-9]) replaceall_matched begin \^_Y1%1 end; # Optimization: (0x00000000 to Zero into_all all code_regex \(0x00000000 replaceall_matched begin \(Zero end; # Optimization: Package (0x01) to Package (One) into_all all code_regex Package\s\(0x01\) replaceall_matched begin Package (One) end; In the attached zip you'll find my Clover config.plist; my DummyHDA.kext; my AppleBacklightInjector.kext; my native, untouched DSDT; and my patched DSDT. If you can diff my untouched DSDT with yours and have only trivial differences, then you can use my patched DSDT as is. V5-171-9661 Post Install.zip 1 Link to comment Share on other sites More sharing options...
Recommended Posts