DefinitionBlock ("", "SSDT", 2, "hack", "FANS", 0x00000000)
{
/* ACPI Debug */
External (RMDT, DeviceObj)
External (RMDT.PUSH, MethodObj)
External (RMDT.P1, MethodObj)
External (RMDT.P2, MethodObj)
External (RMDT.P3, MethodObj)
External (RMDT.P4, MethodObj)
External (RMDT.P5, MethodObj)
External (RMDT.P6, MethodObj)
External (RMDT.P7, MethodObj)
External (ECRB, MethodObj) // Embedded controller - Read byte
External (ECWB, MethodObj) // Embedded controller - Write byte
External (_SB.PCI0.LPCB.EC.KDRT, MethodObj)
Device (SMCD) // ACPISensors virtual device
{
Name (_HID, "MON00000") // _HID: Hardware ID
Mutex (SMCX, 0x00)
// ACPISensors.kext configuration
Name (TACH, Package()
{
"System Fan", "FAN0",
})
Name (TEMP, Package()
{
"CPU Heatsink", "TCPU",
"FAN #1", "TFN1",
"FAN #2", "TFN2",
"SSD", "TSSD",
"Memory", "TMEM",
})
// Query embedded controller for data
Method (ECQR, 3, Serialized)
{
Acquire (SMCX, 0xFFFF)
If (Arg0 > Zero)
{
\ECWB(Arg0, Arg2)
}
Local0 = Zero
If (Arg1 > 0)
{
Local0 = \ECRB(Arg1)
}
Release (SMCX)
\RMDT.P5("ECQR", Arg0, Arg1, Arg2, Local0)
If (Local0 >= 0x80)
{
Local0 = Zero
}
Return (Local0)
}
// Actual methods to implement fan/temp readings/control
Method (FAN0, 0, Serialized)
{
Store (0x64, Local0)
Return (Local0)
}
Method (TCPU, 0, Serialized)
{
// B0D4._TMP
Local0 = ECQR(0x33, 0x34, 0x00)
\RMDT.P2("TCPU/8086_1903", Local0)
Return (Local0)
}
Method (TFN1, 0, Serialized)
{
// SEN1._TMP
Local0 = ECQR(0x33, 0x34, 0x01)
\RMDT.P2("SEN1/FAN1", Local0)
Return (Local0)
}
Method (TFN2, 0, Serialized)
{
// GEN1._TMP
Local0 = ECQR(0x33, 0x34, 0x02)
\RMDT.P2("GEN1/FAN2", Local0)
Return (Local0)
}
Method (TSSD, 0, Serialized)
{
// SEN2._TMP
Local0 = ECQR(0x33, 0x34, 0x03)
\RMDT.P2("SEN2/SSD HT4", Local0)
Return (Local0)
}
Method (TMEM, 0, Serialized)
{
// TMEM._TMP
Local0 = ECQR(0x33, 0x34, 0x04)
\RMDT.P2("TMEM/Memory Temperature Sensor (HT1)", Local0)
Return (Local0)
}
}
}