Yes, it is easy in concept. It is the details that trip people up.
- you must find the appropriate _INI method (the _INI on a device related to your discrete card... the one with _OFF)
- older machines do not have _OFF but contain similar methods... you have to search for them (use your brain)
- errors are reduced with 'iasl -da' but you may still have errors... fix them prior to applying patches
- even after your files are patched, errors corrected, if you open the patched/compiled .aml files, your errors may come back. The errors are not real, as they are created by the disassembly process. Always disassemble in a group with 'iasl -da'
- edit the resulting .dsl files, not .aml files when making changes
- save the resulting files as .aml files (format: ACPI Machine Language Binary). Not surprisingly, AppleACPIPlatform does not like loading text files into ACPI.
- if you rename devices in DSDT, you must do the same rename in all SSDTs you plan on loading (eg. GFX0->IGPU, B0D3->HDAU must be done universally)
- SSDTs that contain duplicate method (any duplicate object, actually) definitions will be thrown away (eg. DTGP can be defined only in one place; best not to use DTGP)
- SSDTs must be placed where the bootloader will load them. Chameleon, in Extra: SSDT.aml, SSDT-1.aml, SSDT-2.aml, no gaps in the numbers (Chameleon stops at first file not found... at first gap). Clover, in EFI/CLOVER/ACPI/patched, SSDT.aml, SSDT-? (where ? is a digit), gaps in the numbers allowed.
- you must drop each OEM SSDT you are patching. Best strategy: drop them all, add the ones you need (patched or not patched)
- some people experience problems with sleep/restart/shutdown when the discrete card is left in the off state... call _ON from DSDT _PTS and _OFF from DSDT _WAK. Use External to access the methods from DSDT. You must refer to the actual path (eg. _SB.PCI0.PEGP.PEG0._OFF)
- if the device with _INI in it (eg. PEG0.PEGP) is not active, OS X will not call _INI. An inactive device is one that returns Zero from _STA. Usually points to other issues with DSDT...
- if you upgrade hardware or BIOS, you must repeat the process...
Having a basic understanding of ACPI, ACPI namespace, how SSDTs are loaded, goes a long way.
One way to troubleshoot an issue is to extract all *patched* DSDT/SSDTs *binaries* from your running system (from ioreg). Then disassemble them with 'iasl -da'. If iasl finds errors in loading all your DSDT/SSDTs into a namespace, so will OS X have the same problems.
how to extract all *patched* DSDT/SSDTs *binaries* from ioreg