Dsdt Edits

All Thinkpads

DTGP method

(Silencer)
You need to have it in your DSDT for many other fixes that inject some custom parameters for your devices. I put it above _WAK method, but it can defined be anywhere on the highest scope level (not inside any devices).

Method (DTGP, 5, NotSerialized)
{
    If (LEqual (Arg0, Buffer (0x10)
            {
                /* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44, 
                /* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
            }))
    {
        If (LEqual (Arg1, One))
        {
            If (LEqual (Arg2, Zero))
            {
                Store (Buffer (One)
                    {
                        0x03
                    }, Arg4)
                Return (One)
            }
            If (LEqual (Arg2, One))
            {
                Return (One)
            }
        }
    }
    Store (Buffer (One)
        {
            0x00
        }, Arg4)
    Return (Zero)
}

RTC fix

(Silencer)
It is required for proper power management and latest versions of OSX to work without KP.
Simply comment or delete IRQFlags part.

Device (RTC)
{
    Name (_HID, EisaId ("PNP0B00"))
    Name (_CRS, ResourceTemplate ()
    {
        IO (Decode16,
            0x0070,             // Range Minimum
            0x0070,             // Range Maximum
            0x01,               // Alignment
            0x02,               // Length
            )
        /* Fix - RTC fix 
        IRQNoFlags ()
            {8}
        Fix End */
    })
}

HPET fix

(Silencer)
This is required for proper SpeedStep functionality and some other things.
Just replace your HPET device with this.

Device (HPET)
{
    Name (_HID, EisaId ("PNP0103"))
   Name (_CID, EisaId ("PNP0C01")) 
    Name (_STA, 0x0F)
    Name (_CRS, ResourceTemplate ()
    {
        IRQNoFlags ()
            {0}
        IRQNoFlags ()
            {8}
        Memory32Fixed (ReadOnly,
            0xFED00000,         // Address Base
            0x00000400,         // Address Length
            )
    })
}

PIC and TIMR devices fix

(Silencer)
Required to get rid of audio and video stuttering after SpeedStep with C-states is enabled.
Just remove these codes from each of them:

IRQNoFlags () {2}

and
IRQNoFlags () {0}

IOATAFamily.kext kernel panic fix

(Silencer)
In both your SATA and IDE0 devices, insert the following code above GPCT method:

Field (IDCS, DWordAcc, NoLock, Preserve)
{
            Offset (0x40), 
    PRIT,   16, 
    SECT,   16
}
Method (_INI, 0, NotSerialized)
{
    Store (0xE307, PRIT)
    Store (0xC000, SECT)
}

And then insert the following at the very beginning of _WAK method:
\_SB.PCI0.PATA._INI ()
\_SB.PCI0.SATA._INI ()

Native AHCI support

(Silencer)
Insert the following above GPCT method. Notice how we are using DTGP method defined before.

Method (_DSM, 4, NotSerialized)
{
   Store (Package (0x02)
   {
      "device-id",
       Buffer (0x04)
         {
              0xC5, 0x27, 0x00, 0x00
          }
   }, Local0)
   DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}

OS checks override fix

(Silencer)
Many DSDT versions including the one on ThinkPad have different checks in the code for different operating systems. OSX (Darwin) of course is not there, so we need to make sure some advanced ACPI code is enabled for OSX as well.
Insert the following right underneath the block that has all the operating system names checks and above the line If (LGreaterEqual (_REV, 0x02)).

Store (One, WNTF)
Store (One, WXPF)
Store (0x02, WSPV)
Store (One, WVIS)

Brightness control

(Silencer)
The following device needs to be added above LNKA device right after _INI method within Scope (_SB) block.

Device (PNLF)
{
   Name (_HID, EisaId ("APP0002"))
   Name (_CID, "backlight")
   Name (_UID, 0x0A)
   Name (_STA, 0x0B)
}

AC adpater fix

(Silencer)
Insert the following code after Name (_UID, Zero) line inside AC device.

Name (_PRW, Package (0x02)
{
    0x18,
    0x03
})

Clamshell fix

(Silencer)
Locate method _LID of the device LID and change it as shown. The idea is to check the Lid register and then if it is closed we notify the Sleep button that it was "pushed".

Name (LIDS, One)
Method (_LID, 0, NotSerialized)
{
        Store (^^PCI0.LPC.EC.HPLD, LIDS) 
        XOr (LIDS, One, Local0)
        If (Local0)                        
        { 
            Notify (SLPB, 0x80)                
        } 
        Return (LIDS)
}

Cosmetic DSDT fixes

(Silencer)
Some DSDT fixes are meant to be sort of cosmetic. For example, I've renamed all devices in my DSDT to have the same names that are found in original MacBookPro2,1. Theoretically it might be helpful, but there's no proof that it actually does anything. But anyways, here's the rename map:

  LID -> LID0
  AGP -> PEGP
  VID -> GFX0
  EXP0 -> RP01
  EXP1 -> RP02
  EXP2 -> RP03
  EXP3 -> RP04
  USB0 -> USB1
  USB1 -> USB2
  USB2 -> USB3
  USB3 -> USB4
  PCI1 -> PCIB
  PIC -> IPIC
  FPU -> MATH
  SIO -> LDRC
  IDE0 -> PATA
  PRIM -> PRID
  MSRT -> P_D0

X60t

GMA950 Support (27A2)

(Sebinouse)
Replace your Device (VID) or Device (GFX0) with this :

Device (VID)
            {
                Name (_ADR, 0x00020000)
                Method (_DSM, 4, NotSerialized)
                {
                    Store (Package (0x18)
                        {
                            "AAPL,slot-name", 
                            Buffer (0x09)
                            {
                                "Built in"
                            }, 
 
                            "AAPL,Haslid", 
                            Buffer (0x04)
                            {
                                0x01, 0x00, 0x00, 0x00
                            }, 
 
                            "AAPL,aux-power-connected", 
                            Buffer (0x04)
                            {
                                0x01, 0x00, 0x00, 0x00
                            }, 
 
                            "AAPL,backlight-control", 
                            Buffer (0x04)
                            {
                                0x01, 0x00, 0x00, 0x00
                            }, 
 
                            "AAPL,BacklightRestore", 
                            Buffer (0x04)
                            {
                                0x01, 0x00, 0x00, 0x00
                            }, 
 
                            "AAPL,HasPanel", 
                            Buffer (0x04)
                            {
                                0x01, 0x00, 0x00, 0x00
                            }, 
 
                            "AAPL01,BacklightIntensity", 
                            Unicode ("N"), 
                            "device_type", 
                            Buffer (0x08)
                            {
                                "display"
                            }, 
 
                            "model", 
                            Buffer (0x07)
                            {
                                "GMA950"
                            }, 
 
                            "built-in", 
                            Buffer (One)
                            {
                                0x00
                            }, 
 
                            "device-id", 
                            Buffer (0x04)
                            {
                                0xA2, 0x27, 0x00, 0x00
                            }, 
 
                            "vendor-id", 
                            Buffer (0x04)
                            {
                                0x86, 0x80, 0x00, 0x00
                            }
                        }, Local0)
                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                    Return (Local0)
                }

Disable AppleHDA.kext fix (to use VoodooHDA.kext instead)

Just comment out or delete your HDEF device:
(Silencer)

/* Fix - Disable AppleHDA.kext auto loading to use VoodooHDA.kext 
Device (HDEF)
{
    Name (_ADR, 0x001B0000)
    Name (_S3D, 0x03)
    Name (RID, Zero)
    Name (_PRW, Package (0x02)
    {
        0x05, 
        0x04
    })
    Method (_PSW, 1, NotSerialized)
    {
        Noop
    }
} 
Fix End */

Firewire Support

(Sebinouse)
Add this in "Scope (_GPE)"

Method (_L0B, 0, NotSerialized) 
{
     Notify (\_SB.PCI0.PCIB, 0x02) Notify (\_SB.SLPB, 0x02)
}

and this in "Device (PCIB)"
Device (FRWR)  // Added device for 15:00.1 Ricoh Co Ltd R5C552 IEEE 1394 Controller [1180:0552] (rev 09)
                {
                    Name (_ADR, 0x15000001)  // Reported by 'lspci'  15:00.1 
                    Name (_GPE, 0x0B)        // Callback to (_GPE) Method (_L0B) for (PCIB)
                   // Name (_SUN, 0x01)        // PCI slot 1 in System Profiler (cosmetic)
 
                    Method (_DSM, 4, NotSerialized)
                    {
                        Store (Package (0x06)
                        {
                            "built-in",
                            Buffer (0x01)
                            {
                                Zero
                            },
                            "fwhub",
                            Buffer (0x04)
                            {
                                0x00, 0x00, 0x00, 0x00
                            },
                            "device-id",
                            Buffer (0x04)
                            {
                                0x52, 0x05, 0x00, 0x00  // device ID [1180:0552]
                            }
                        }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                }

X61s

AppleACPIBatteryManager.kext kernel panic

(und3rf0rce)
Our x61s have 2 batteries in DSDT, one called BAT0, and the second one, from UltraBay - BAT1.
So what i actually did to make it work:
- to get rid of KPs, i've made small fix in Manager sources (you can use my attached version)
- to make Manager work, i've forced BAT1 device to return that there is no battery in it. Replace _STA method with:

Method (_STA, 0, NotSerialized)
{
    Return (0x0F)
}

BatteryManager (and BatteryDevice) sources: http://www.mediafire.com/?tikr6u3kx3n5j4g
My compiled kext (universal for 32/64bit): http://www.mediafire.com/?7df18t9oltveeo2

x61t

Wacom dsdt Enabling

if you cannot get the tablet going by any means try this:
a) if you have a WACF004 find Device (DTR) and make sure Method (_HID …) it is set this way :

                    Method (_HID, 0, NotSerialized)
                    {
                        If (DATD)
                        {
                            Return (0x04F0235C)
                        }
                        Else
                        {
                            Return (0x08F0235C)
                        }
                    }

b) if you have a WACF008 find Device (DTR) and make sure it is like this :
                    Method (_HID, 0, NotSerialized)
                    {
                        If (DATD)
                        {
                            Return (0x08F0235C)
                        }
                        Else
                        {
                            Return (0x04F0235C)
                        }
                    }

do not forget that you also need :
1. TabletEnabler,
2. Apple16X50Serial,
3. LegacyX60T (or LegacyX61T) kexts with the lines "WACF004" added
4. TabletMagic installed!
(these are the files needed for WACF004)
(and these for WACF008)