# DSDT Patches for Dell E5x30 Series # For 1366x768 screen laptop # Pokenguyen # Update 09.06.2017 wl_michal Sleep Problem USB Solved und anderes # # Based on RehabMan’s patches # Fix name error into_all all code_regex \*pnp0c14 replaceall_matched begin PNP0C14 end; # remove wmi device into device label AMW0 remove_entry; into scope label _SB.AMW0 remove_entry; into method label WMNF replace_content begin // nothing end; # invalid external into method label PPCE code_regex Store\s\(Local0,\s\^CPU0\.\_PPC\) remove_matched; # clear BTEV for freezing issues # into method label BTEV replace_content begin // nothing end; # fix _Q66 for lid sleep into method label _Q66 code_regex If\s\(LNotEqual\s\([^\}]*\} remove_matched begin // end; # Disable nVidia into definitionblock code_regex . insert begin External(\_SB_.PCI0.PEG0.VID._OFF, MethodObj)\n External(\_SB_.PCI0.PEG0.VID._ON, MethodObj)\n end; into method label _INI parent_label _SB.PCI0 code_regex ([\s\S]*) replace_matched begin If (CondRefOf(\\_SB_.PCI0.PEG0.VID._OFF)) { \\_SB_.PCI0.PEG0.VID._OFF() }\n %1 end; into method label _PTS code_regex ([\s\S]*) replace_matched begin If (CondRefOf(\\_SB_.PCI0.PEG0.VID._ON)) { \\_SB_.PCI0.PEG0.VID._ON() }\n %1 end; into method label _WAK code_regex (Return\s+\(.*) replace_matched begin If (CondRefOf(\\_SB_.PCI0.PEG0.VID._OFF)) { \\_SB_.PCI0.PEG0.VID._OFF() }\n %1 end; # remove unused GFX0 entry into device label GFX0 name_adr 0x00020000 remove_entry; # rename GFX0, VID -> IGPU for better power management into_all all code_regex \(GFX0 replaceall_matched begin (IGPU end; into_all all label GFX0 set_label begin IGPU end; into device label VID name_adr 0x00020000 set_label begin IGPU end; into_all all label _SB.PCI0.VID set_label begin _SB.PCI0.IGPU end; into_all all code_regex PCI0\.VID replaceall_matched begin PCI0.IGPU end; # Inject 0x0166003 to HD4000 for 1366x768 into method label _DSM parent_adr 0x00020000 remove_entry; into device name_adr 0x00020000 insert begin Method (_DSM, 4, NotSerialized)\n {\n If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n Return (Package()\n {\n "AAPL,ig-platform-id", Buffer() { 0x03, 0x00, 0x66, 0x01 },\n "hda-gfx", Buffer() { "onboard-1" },\n })\n }\n end; # brightness into device label IGPU code_regex (OperationRegion\s\(IGD2,\sPCI_Config[^\}]*\}) remove_matched; into device label IGPU code_regex (OperationRegion\s\(IGDP,\sPCI_Config[^\}]*\}) replace_matched begin %1\n OperationRegion (IGD2, PCI_Config, 0x10, 4)\n Field (IGD2, AnyAcc, NoLock, Preserve)\n {\n BAR1,32,\n }\n end; # duplicated for case it is in separate scope into scope label _SB.PCI0.IGPU code_regex (OperationRegion\s\(IGD2,\sPCI_Config[^\}]*\}) remove_matched; into scope label _SB.PCI0.IGPU code_regex (OperationRegion\s\(IGDP,\sPCI_Config[^\}]*\}) replace_matched begin %1\n OperationRegion (IGD2, PCI_Config, 0x10, 4)\n Field (IGD2, AnyAcc, NoLock, Preserve)\n {\n BAR1,32,\n }\n end; into device label PNLF remove_entry; into definitionblock code_regex . insert begin Scope (\_SB)\n {\n Device (PNLF)\n {\n // normal PNLF declares (note some of this probably not necessary)\n Name (_HID, EisaId ("APP0002"))\n Name (_CID, "backlight")\n Name (_UID, 10)\n Name (_STA, 0x0B)\n //define hardware register access for brightness\n // you can see BAR1 value in RW-Everything under Bus00,02 Intel VGA controler PCI\n // Note: Not sure which one is right here... for now, going with BAR1 masked\n //OperationRegion (BRIT, SystemMemory, Subtract(\_SB.PCI0.IGPU.BAR1, 4), 0xe1184)\n OperationRegion (BRIT, SystemMemory, And(\_SB.PCI0.IGPU.BAR1, Not(0xF)), 0xe1184)\n Field (BRIT, AnyAcc, Lock, Preserve)\n {\n Offset(0x48250),\n LEV2, 32,\n LEVL, 32,\n Offset(0x70040),\n P0BL, 32,\n Offset(0xc8250),\n LEVW, 32,\n LEVX, 32,\n Offset(0xe1180),\n PCHL, 32,\n }\n // DEB1 special for setting KLVX at runtime...\n //Method (DEB1, 1, NotSerialized)\n //{\n // Store(Arg0, KLVX)\n //}\n Name(KPCH, 0)\n // _INI deals with differences between native setting and desired\n Method (_INI, 0, NotSerialized)\n {\n Store(PCHL, KPCH)\n Store(ShiftRight(KLVX,16), Local0)\n Store(ShiftRight(LEVX,16), Local1)\n if (LNotEqual(Local0, Local1))\n {\n Divide(Multiply(LEVL, Local0), Local1,, Local0)\n //Store(P0BL, Local1)\n //While(LEqual (P0BL, Local1)) {}\n Store(Local0, LEVL)\n Store(KLVX, LEVX)\n }\n }\n // _BCM/_BQC: set/get for brightness level\n Method (_BCM, 1, NotSerialized)\n {\n // initialize for consistent backlight level before/after sleep\n if (LNotEqual(PCHL, KPCH)) { Store(KPCH, PCHL) }\n If (LNotEqual(LEVW, 0x80000000)) { Store (0x80000000, LEVW) }\n If (LNotEqual(LEVX, KLVX)) { Store (KLVX, LEVX) }\n // store new backlight level\n Store(Match(_BCL, MGE, Arg0, MTR, 0, 2), Local0)\n If (LEqual(Local0, Ones)) { Subtract(SizeOf(_BCL), 1, Local0) }\n If (LNotEqual(LEV2, 0x80000000)) { Store(0x80000000, LEV2) }\n Store(DerefOf(Index(_BCL, Local0)), LEVL)\n }\n Method (_BQC, 0, NotSerialized)\n {\n Store(Match(_BCL, MGE, LEVL, MTR, 0, 2), Local0)\n If (LEqual(Local0, Ones)) { Subtract(SizeOf(_BCL), 1, Local0) }\n Return(DerefOf(Index(_BCL, Local0)))\n }\n Method (_DOS, 1, NotSerialized)\n {\n ^^PCI0.IGPU._DOS(Arg0)\n }\n // extended _BCM/_BQC for setting "in between" levels\n Method (XBCM, 1, NotSerialized)\n {\n // initialize for consistent backlight level before/after sleep\n if (LNotEqual(PCHL, KPCH)) { Store(KPCH, PCHL) }\n If (LNotEqual(LEVW, 0x80000000)) { Store (0x80000000, LEVW) }\n If (LNotEqual(LEVX, KLVX)) { Store (KLVX, LEVX) }\n // store new backlight level\n If (LGreater(Arg0, XRGH)) { Store(XRGH, Arg0) }\n If (LAnd(Arg0, LLess(Arg0, XRGL))) { Store(XRGL, Arg0) }\n If (LNotEqual(LEV2, 0x80000000)) { Store(0x80000000, LEV2) } \n Store(Arg0, LEVL)\n }\n Method (XBQC, 0, NotSerialized)\n {\n Store(LEVL, Local0)\n If (LGreater(Local0, XRGH)) { Store(XRGH, Local0) }\n If (LAnd(Local0, LLess(Local0, XRGL))) { Store(XRGL, Local0) }\n Return(Local0)\n }\n }\n }\n end; into device label PNLF code_regex Name\s\(_BCL,\sPackage[^\}]*\}\) remove_matched; into device label PNLF code_regex Name\s\(XOPT,.*\)\n removeall_matched; into device label PNLF code_regex Name\s\(XRGL,.*\)\n removeall_matched; into device label PNLF code_regex Name\s\(XRGH,.*\)\n removeall_matched; into device label PNLF code_regex Name\s\(KLVX,.*\)\n removeall_matched; into device label PNLF code_regex . insert begin // Use XOPT=1 to disable smooth transitions\n Name (XOPT, Zero)\n // XRGL/XRGH: defines the valid range\n Name (XRGL, 40)\n Name (XRGH, 1808)\n // KLVX is initialization value for LEVX\n Name (KLVX, 0x7100000)\n // _BCL: returns list of valid brightness levels\n // first two entries describe ac/battery power levels\n Name (_BCL, Package()\n {\n 1808,\n 479,\n 0,\n 55, 55, 57, 59,\n 62, 66, 71, 77,\n 83, 91, 99, 108,\n 119, 130, 142, 154,\n 168, 183, 198, 214,\n 232, 250, 269, 289,\n 309, 331, 354, 377,\n 401, 426, 453, 479,\n 507, 536, 566, 596,\n 627, 660, 693, 727,\n 762, 797, 834, 872,\n 910, 949, 990, 1031,\n 1073, 1115, 1159, 1204,\n 1249, 1296, 1343, 1391,\n 1440, 1490, 1541, 1592,\n 1645, 1698, 1753, 1808,\n })\n end; # Insert Apple USB properties into EHC1 #into method label _DSM parent_adr 0x001D0000 remove_entry; #into device name_adr 0x001D0000 insert #begin #Method (_DSM, 4, NotSerialized)\n #{\n # If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n # Return (Package()\n # {\n # "AAPL,clock-id", Buffer() { 0x01 },\n # "built-in", Buffer() { 0x00 },\n # "subsystem-id", Buffer() { 0x70, 0x72, 0x00, 0x00 },\n # "subsystem-vendor-id", Buffer() { 0x86, 0x80, 0x00, 0x00 },\n # "AAPL,current-available", 2100,\n # "AAPL,current-extra", 2200,\n # "AAPL,current-extra-in-sleep", 1600,\n # "AAPL,device-internal", 0x02,\n # "AAPL,max-port-current-in-sleep", 2100,\n # })\n #}\n #end; # Insert Apple USB properties into EHC2 #into method label _DSM parent_adr 0x001A0000 remove_entry; #into device name_adr 0x001A0000 insert #begin #Method (_DSM, 4, NotSerialized)\n #{\n # If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n # Return (Package()\n # {\n # "AAPL,clock-id", Buffer() { 0x01 },\n # "built-in", Buffer() { 0x00 },\n # "subsystem-id", Buffer() { 0x70, 0x72, 0x00, 0x00 },\n # "subsystem-vendor-id", Buffer() { 0x86, 0x80, 0x00, 0x00 },\n # "AAPL,current-available", 2100,\n # "AAPL,current-extra", 2200,\n # "AAPL,current-extra-in-sleep", 1600,\n # "AAPL,device-internal", 0x02,\n # "AAPL,max-port-current-in-sleep", 2100,\n # })\n #}\n #end; # Insert Apple USB properties into USB 3.0 XHC #into method label _DSM parent_adr 0x00140000 remove_entry; #into device name_adr 0x00140000 insert #begin #Method (_DSM, 4, NotSerialized)\n #{\n # If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n # Return (Package()\n # {\n # "AAPL,clock-id", Buffer() { 0x02 },\n # "built-in", Buffer() { 0x00 },\n # "subsystem-id", Buffer() { 0x70, 0x72, 0x00, 0x00 },\n # "subsystem-vendor-id", Buffer() { 0x86, 0x80, 0x00, 0x00 },\n # "AAPL,current-available", 2100,\n # "AAPL,current-extra", 2200,\n # "AAPL,current-extra-in-sleep", 1600,\n # "AAPL,device-internal", 0x02,\n # "AAPL,max-port-current-in-sleep", 2100,\n # })\n #}\n #end; # Replace all instances of AC with ADP1 #into_all all code_regex \.AC, replaceall_matched begin .ADP1, end; #into_all all code_regex \(AC, replaceall_matched begin (ADP1, end; #into all label AC set_label begin ADP1 end; # Disable BAT1 and BAT2 devices into method label _STA parent_label BAT1 replace_content begin Return (Zero) end; into method label _STA parent_label BAT2 replace_content begin Return (Zero) end; # Fix Mutex into_all all code_regex Mutex\s+\(([^,]*),\s+[^)]*\) replaceall_matched begin Mutex(%1, 0) end; # Fix method PNOT, called from AC adapter device (AC/ADP1) into method label PNOT replace_content begin // nothing end; # IRQ fix into device name_hid PNP0000 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched; into device name_hid PNP0100 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched; into device name_hid PNP0B00 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched; into device name_hid PNP0103 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} removeall_matched; into device name_hid PNP0103 code_regex Name\s\(([^,]+),\sResourceTemplate\s\(\)\n\s+\{((?:.|\n)*)\}\) replace_matched begin Name (%1, ResourceTemplate()\n {\n IRQNoFlags() { 0, 8, 11, 15 }\n %2 })\n end; # SMBUS fix into device label BUS0 parent_adr 0x001F0003 remove_entry; into device name_adr 0x001F0003 insert begin Device (BUS0)\n {\n Name (_CID, "smbus")\n Name (_ADR, Zero)\n Device (DVL0)\n {\n Name (_ADR, 0x57)\n Name (_CID, "diagsvault")\n Method (_DSM, 4, NotSerialized)\n {\n If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n Return (Package() { "address", 0x57 })\n }\n }\n }\n end; # RTC fix into device name_hid PNP0B00 code_regex (IO\s\((?:\s*[^,]+,\s*(?:\/\/\s.*)?\s*\n)+\s*)(\dx\d+)(,\s*(?:\/\/\s.*)?\s*\n\s*\)) replace_matched begin %10x02%3 end; # Shutdown fix into method label _PTS code_regex_not If\s\(LEqual\s\(Arg0,\s0x05\)\) code_regex ^((?:.|\n)*)$ replace_matched begin If (LEqual (Arg0, 0x05)) {}\n Else\n {\n %1 }\n end; # HPET fix to avoid AppleIntelCPUPowerManagement panic into method label _STA parent_hid PNP0103 remove_entry; into device name_hid PNP0103 code_regex Name\s\(_STA\,\s+0x0F\) remove_matched; into device name_hid PNP0103 insert begin Name (_STA, 0x0F)\n end; into method label _CRS parent_hid PNP0103 remove_entry; into device name_hid PNP0103 insert begin Method (_CRS, 0, NotSerialized)\n {\n Return (BUF0)\n }\n end; # OS Darwin check #into method label _INI parent_label _SB.PCI0 code_regex If\s+\(_OSI\s+\(\"Windows\s2006\"\)\) replace_matched #begin If(LOr(_OSI("Darwin"),_OSI("Windows 2006"))) end; # Power fix - cause AppleACPIACAdapter to be loaded #into device name_hid ACPI0003 code_regex Name\s+\(_PRW,[\s\S]*\}\) remove_matched; #into device name_hid ACPI0003 insert #begin #Name (_PRW, Package() { 0x18, 0x03 }) #end; # Add the missing MCHC device into device label MCHC parent_label PCI0 remove_entry; into device label PCI0 insert begin Device (MCHC)\n {\n Name (_ADR, Zero)\n } end; # Fix _WAK into method label _WAK code_regex ([\s\S]*) replace_matched begin If (LOr(LLess(Arg0,1),LGreater(Arg0,5))) { Store(3,Arg0) }\n %1 end; # Inject Audio info into method label _DSM parent_label HDEF remove_entry; into device label HDEF insert begin Method (_DSM, 4, NotSerialized)\n {\n If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n Return (Package()\n {\n "layout-id", Buffer() { 12, 0x00, 0x00, 0x00 },\n "hda-gfx", Buffer() { "onboard-1" },\n "PinConfigurations", Buffer() { },\n })\n }\n end; into device label IMEI parent_label PCI0 remove_entry; into device label PCI0 insert begin Device (IMEI)\n {\n Name (_ADR, 0x00160000)\n }\n end; # ab hier Micha #usb_prw_0x0d_xhc.txt # remove _PRW methods to prevent instant wake # delete any existing XHC1 device #into device label XHC1 name_adr 0x00140000 remove_entry; # delete any existing USB2 device #into device label USB2 name_adr 0x001D0000 remove_entry; # if _PRW objects are methods #into method label _PRW parent_adr 0x001D0000 remove_entry; #into method label _PRW parent_adr 0x001A0000 remove_entry; #into method label _PRW parent_adr 0x00140000 remove_entry; into method label _PRW parent_adr 0x001B0000 remove_entry; # some other LAN cards use 0x00190000 into method label _PRW parent_adr 0x00190000 remove_entry; # if _PRW methods are stuffed into a separate scope #into method label _PRW parent_label _SB.PCI0.EHC1 remove_entry; #into method label _PRW parent_label _SB.PCI0.EHC2 remove_entry; #into method label _PRW parent_label _SB.PCI0.XHC remove_entry; #into method label _PRW parent_label \_SB.PCI0.EHC1 remove_entry; #into method label _PRW parent_label \_SB.PCI0.EHC2 remove_entry; #into method label _PRW parent_label \_SB.PCI0.XHC remove_entry; # if _PRW objects are names #into device name_adr 0x001D0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched; #into device name_adr 0x001A0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched; #into device name_adr 0x00140000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched; #into device name_adr 0x001B0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched; #into device name_adr 0x00190000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched; # some _PRW have three entries in the Package #into device name_adr 0x001D0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched; #into device name_adr 0x001A0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched; #into device name_adr 0x00140000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched; #into device name_adr 0x001B0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched; #into device name_adr 0x00190000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched; # seems to work better if _PRW is present, but returns 0 (original was 3) for sleep state #into device name_adr 0x001D0000 insert begin Name(_PRW, Package() { 0x0D, 0 }) end; #into device name_adr 0x001A0000 insert begin Name(_PRW, Package() { 0x0D, 0 }) end; #into device name_adr 0x00140000 insert begin Name(_PRW, Package() { 0x0D, 0 }) end; #into device name_adr 0x001B0000 insert begin Name(_PRW, Package() { 0x0D, 0 }) end; #into device name_adr 0x00190000 insert begin Name(_PRW, Package() { 0x0D, 0 }) end; #syscl_fixBrightnesskey_VoodooPS2 into method label BRT6 replace_content begin If (LEqual (Arg0, One))\n {\n Notify (LCD, 0x86)\n Notify (^^LPCB.PS2K, 0x0406)\n }\n If (And (Arg0, 0x02))\n {\n Notify (LCD, 0x87)\n Notify (^^LPCB.PS2K, 0x0405)\n }\n end; # _OSI(WIN7) Wird für die Brightness Tasten benötigt. Bildschirm an bei Aufklappen dann nur über Tastaturdruck into method label OSID code_regex _OSI\s+\(WIN7\) replaceall_matched begin LOr(_OSI(WIN7),_OSI("Darwin")) end; # Patch for O2Micro SD Card Reader into device label PXSX parent_label RP06 insert begin Method (_DSM, 4, NotSerialized)\n {\n If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n Return (Package()\n {\n "AAPL,slot-name",\n "Built-in",\n "device-type", Buffer() { "Media Controller" },\n "model", Buffer() { "O2 Micro SD Card Reader" },\n "compatible", Buffer() { "pci14e4,16bc" },\n })\n }\n end;