Monitoring With Fakesmc |
|
|

May 23 2010, 07:40 PM




- Advanced Member
- Group: Developer
- Posts: 5,559
First of all thanks to Netkas for the new era in Hackintoshes - FakeSMC.
Now we joined our efforts to make a tool for monitoring temperatures, fans and other sensors or parameters.
Mozo - maintainer, me and usr-sse2 - team members.
The project is based on Netkas's 2.5 version but with plugin support. It is opensource and located at
www.assembla.com.Sources can be obtained by SVN
svn co http://subversion.assembla.com/svn/fakesmcPlugins created:
IntelThermal - Intel CPU temperature monitoring.
LPCMonitor - temperatures and fans from ITE, Winbond and Fintek controllers. - now replaced by
SuperIO plugin
TZplugin - temperature from ACPI device "Thermal Zone" - now excluded by
ACPI monitor replacement
NVidia GPU temperature and FAN
Intel X3100 temperature
Radeon temperature
ACPI monitor - temperatures, fans, voltage, current - all that you can find in your DSDT. Manual DSDT modifying required. Look posts 10-23
For example
CODE
//Slice - there is my ACPI monitor device
Device (SPIO)
{
Name (_CID, "monitor")
Name (_STA, 0x0F)
Method (SMC0, 0, NotSerialized) //System FAN0
{
Store (\_TZ.TZ0.FRSP(), Local0)
Return (Local0)
}
Method (SMCA, 0, NotSerialized) //CPU heatsink
{
Store (\_SB.PCI0.LPC0.EC0.RTMP, Local0)
Return (Local0)
}
}
Screen_shot_2010_07_26_at_15.42.57.png ( 61.04K )
Number of downloads: 4385How to install FakeSMCTo look the values you need iStatMenu or iStatPro.
The last one I have modified to show battery info.
iStat_pro.wdgt_wBattery.zip ( 528.51K )
Number of downloads: 3044To monitor Thermal Zone (- deprecated) you need AppleACPIThermal.kext.
Correct it dependency to your AppleACPIPlatform version.
AppleACPIThermal.kext.zip ( 11.94K )
Number of downloads: 2570About it look
at the threadUtility to check all SMC values
SMC_util2.zip ( 9.16K )
Number of downloads: 484021.06.2010
Bugs corrected, devices added, improvements.
Now there are 2 plugins for the same purpose, use only one of them
SuperIO supports ITE, Winbond, Fintek
SMCITEController supports only ITE but more functions then SuperIO.
06.07.2010
FakeSMC.kext_Tiger_rev277.zip ( 74.83K )
Number of downloads: 45026.07.2010
New revision.
* Add Radeon support
* Add NSC support
* Add CPU freq monitor (CPUi.kext used together with IntelThermal.kext) for use with smcK utility.
* different enhancements
If you have ITE chip you can replace SuperIO plugin by SMCITEController plugin for use with smcK utility.
smcK_Stat_i.app.zip ( 94.47K )
Number of downloads: 196728.07.2010
Bugs corrected, new devices added
13.09.2010
Updates. Mistakes with x3100.
FakeSMC_rev405_Snow.zip ( 302.08K )
Number of downloads: 6870
FakeSMC_rev405_Leo.zip ( 157.38K )
Number of downloads: 1003For some ASUS nVidia 9800 there is more correct
FakeSMCnVclockNew
FakeSMCIntelMonitor is a replacement for IntelThermal+CPUi. Also provides CPU voltage.
29.10.2010 One bug corrected. Check link above.

May 24 2010, 12:52 AM


- Member
- Group: Comrade
- Posts: 54
Great!. Its working on my Wind, S10 Netbooks. I will test it more.

May 24 2010, 07:05 AM




- Advanced Member
- Group: Developer
- Posts: 5,559
QUOTE (rals2007 @ May 24 2010, 04:52 AM)

Great!. Its working on my Wind, S10 Netbooks. I will test it more.

Screenshot, please.

May 24 2010, 09:46 AM



- Member
- Group: Comrade
- Posts: 32
Hi, thx for this great work but it doesn't work on my MSI P45T C51, no more cpu temp when this new fakesmc is loaded, i can only monitor smart hdd

May 24 2010, 10:50 AM




- Advanced Member
- Group: Developer
- Posts: 5,559
QUOTE (boombeng @ May 24 2010, 01:46 PM)

Hi, thx for this great work but it doesn't work on my MSI P45T C51, no more cpu temp when this new fakesmc is loaded, i can only monitor smart hdd
It is really strange. I install plugin, reboot and see it is not loaded.
Load manually - works.
Clear caches, delete mkext and so on.
Next day this plugin loaded at boot and works fine.

May 24 2010, 11:10 AM



- Member
- Group: Comrade
- Posts: 32
I added
CODE
<key>OSBundleRequired</key>
<string>Root</string>
to the 3 plugins and get a kernel Panic on LPCMonitor

May 24 2010, 01:11 PM



- Member
- Group: Comrade
- Posts: 80
Clubber_77.zip ( 358.35K )
Number of downloads: 471

May 24 2010, 01:52 PM


- Member
- Group: Comrade
- Posts: 54
QUOTE (Slice @ May 24 2010, 04:05 PM)

Screenshot, please.
i too have a random KP. Tried loading in /Extra or S/L/E. I thought i had it working, but seems its not stable dur to the KP regarding the Thermal plugins.

May 24 2010, 05:05 PM


- Member
- Group: Comrade
- Posts: 77
Great work!! This is working flawlessly here

SMCMON.jpg ( 52.07K )
Number of downloads: 2044Thx!
EDIT: Would it be possible to label the fans ? ex: CPU, front, back.... like in real macs.
EDIT 2: I know we are talking about monitoring, but is there any chance to have the fan speed profiles working?
This post has been edited by Trauma: May 24 2010, 07:34 PM

May 24 2010, 07:37 PM

- Advanced Member
- Group: Staff
- Posts: 714
Finally!

Was hard to read on apple.ru

I do have same KP on LPC plugin on W83667HG, have to put it on mkext to get it loaded, but KP.
What I noticed playing with old version, it dosen't like more then 3 fans, when I added 4(since first 4 are all on BANK0 so no need to play with BSEL) i got KP

Also got stuck on divisor stuff, still don't get that code...
Here are my ASUS DSDT entry's for it:
CODE
Device (SIOR)
{
Name (_HID, EisaId ("PNP0C02"))
Name (_UID, 0x2E)
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0290, // Range Minimum
0x0290, // Range Maximum
0x00, // Alignment
0x10, // Length
)
})
OperationRegion (HWRE, SystemIO, 0x0290, 0x0A)
Field (HWRE, ByteAcc, NoLock, Preserve)
{
Offset (0x05),
HIDX, 8,
HDAT, 8
}
IndexField (HIDX, HDAT, ByteAcc, NoLock, Preserve)
{
Offset (0x04),
CHNM, 1, // SYSFANOUT_SEL. SYSFANOUT Output Mode Selection.
CFNM, 1, // CPUFANOUT_SEL. CPUFANOUT Output Mode Selection.
CHNS, 2, // SYSFANOUT_MODE. SYSFANOUT Mode Control.
CFNS, 2, // CPUFANOUT_MODE. CPUFANOUT Mode Control.
Offset (0x05),
SYST, 8, // SYSTIN Target Temperature Register/ SYSFANIN Target Speed Register
TRGT, 8, // CPUTIN Target Temperature Register/ CPUFANIN Target Speed Register
TTRG, 8, // Tolerance of Target Temperature or Target Speed Register
Offset (0x08),
SSDN, 8, // SYSFANOUT Stop Value Register
CSDN, 8, // CPUFANOUT Stop Value Register
SSUP, 8, // SYSFANOUT Start-up Value Register
CSUP, 8, // CPUFANOUT Start-up Value Register
SSTP, 8, // SYSFANOUT Stop Time Register
CSTP, 8, // CPUFANOUT Stop Time Register
Offset (0x20),
VCOR, 8, // CPUVCORE reading / Vcore Voltage
V12V, 8, // VIN0 reading / +12 Voltage
Offset (0x23),
V33V, 8, // 3VCC reading / +3.3 Voltage
V50V, 8, // VIN1 reading / +5 Voltage
VIN2, 8, // VIN2 reading
VIN3, 8, // VIN3 reading
Offset (0x27),
MBTE, 8, // SYSFAN temperature source reading / MotherBoard Temperature
FAN1, 8, // SYSFANIN reading (BANK0) / MotherBoard FAN(CHASSIS1 FAN Speed)
FAN2, 8, // CPUFANIN reading (BANK0) / CPU FAN Speed
FAN3, 8, // AUXFANIN reading (BANK0) / POWER FAN Speed
Offset (0x3F),
CFN3, 8, // AUXFANIN1 reading (BANK0) / CHASSIS2 FAN Speed
Offset (0x47),
FDR1, 8, // Fan Divisor Register I
Offset (0x4B),
FD13, 8, // Fan Divisor Register II
FD15, 8,
Offset (0x4E),
BSEL, 4, // Register 50h ~ 5Fh Bank Select Register
Offset (0x4F),
Offset (0x50),
TSR1, 8,
, 7,
TSR2, 1,
Offset (0x53),
FAN4, 8, // AUXFANIN2 reading (BANK5) / CHASSIS3 FAN Speed
Offset (0x59),
FND4, 8,
Offset (0x5D),
FD21, 8
}
Name (SNCT, 0x00)
Name (E1BK, 0x00)
Method (HWV0, 0, NotSerialized)
{
Return (Multiply (VCOR, 0x08))
}
Method (HWV1, 0, NotSerialized)
{
Return (Multiply (V12V, 0x08))
}
..........................
Didnt got time to comment all...
Waiting for news

Thanks!

May 24 2010, 08:20 PM




- Advanced Member
- Group: Developer
- Posts: 5,559
Sure, the work is only at initial stage.
There is NVidia GPU temperature reading at alpha stage.
Battery temperature is near. etc.
THeKiNGIf you prepare some Device in DSDT for a kext may attach to by IONameMatch and include ACPI methods like
CODE
Method (GFN1, 0, Unserialized)
{
Store (SIOR.FAN1, Local0)
Return (Local0)
}
Then I can create a plugin with reading
CODE
if (kIOReturnSuccess == SIORDevice->evaluateInteger("GFN1", &tmp))
Fan1speed = ((int)tmp;
and assign some SMC key to the value

May 24 2010, 08:50 PM



- Member
- Group: Comrade
- Posts: 32
Well, it works when it is in S/L/E but I still don't have more sensor in istat
In kexstat we can see LPC monitor and SMC IntelThermal are loaded
CODE
89 0 0xffffff7f80dda000 0x4000 0x4000 org.mozodojo.FakeSMCLPCMonitor (1.0) <34 7 4 3>
87 0 0xffffff7f80dd5000 0x3000 0x3000 org.mozodojo.FakeSMCIntelThermal (1.1) <34 7 4 3>
In log :
CODE
24/05/10 22:33:02 kernel FakeSMCLPCMonitor: [Debug] Initialising...
24/05/10 22:33:02 kernel FakeSMCLPCMonitor: [Debug] Probing...
24/05/10 22:33:02 kernel FakeSMCLPCMonitor: [Debug] Freeing...
24/05/10 22:33:02 kernel FakeSMCLPCMonitor: [Debug] Initialising...
24/05/10 22:33:02 kernel FakeSMCLPCMonitor: [Debug] Probing...
24/05/10 22:33:02 kernel FakeSMCLPCMonitor: [Debug] Freeing...
24/05/10 22:33:02 kernel FakeSMCLPCMonitor: [Debug] Initialising...
24/05/10 22:33:02 kernel FakeSMCLPCMonitor: [Debug] Probing...
24/05/10 22:33:02 kernel FakeSMCLPCMonitor: [Debug] Freeing...
Motherboard has a Fintek F71882FG that uses the same ID as F71882
Ioreg :
CODE
| +-o FakeSMC <class FakeSMC, id 0x1000001dd, !registered, !matched, activ$
| +-o SMC <class IOACPIPlatformDeviceCh, id 0x1000001ed, registered, match$
| | +-o AppleSMC <class AppleSMC, id 0x1000002f6, registered, matched, act$
| | +-o SMCWatchDogTimer <class SMCWatchDogTimer, id 0x1000002f8, regist$
| | +-o AppleSMCClient <class AppleSMCClient, id 0x10000048c, !registere$
| | +-o AppleSMCClient <class AppleSMCClient, id 0x10000048d, !registere$
QUOTE
There is NVidia GPU temperature reading at alpha stage.
And what about ATI ?
Thanks again,

May 25 2010, 03:29 AM

- Advanced Member
- Group: Staff
- Posts: 714
QUOTE (Slice @ May 24 2010, 11:20 PM)

THeKiNGIf you prepare some Device in DSDT for a kext may attach to by IONameMatch and include ACPI methods like
CODE
Method (GFN1, 0, Unserialized)
{
Store (SIOR.FAN1, Local0)
Return (Local0)
}
Then I can create a plugin with reading
CODE
if (kIOReturnSuccess == SIORDevice->evaluateInteger("GFN1", &tmp))
Fan1speed = ((int)tmp;
and assign some SMC key to the value
Great!
I'll do this and let you know.
But we need to make sure the names aren't used on other methods, so IMO we can use something like this:
CODE
Name (SMC0, Zero) // FAN1 key
Method (RFN1, 0, NotSerialized)
{
Store (FAN1, SMC0)
Return (SMC0)
}
Then you can make it look for SMC0 to SMCZ, guess those are sufficient for what we need

And create a set like this:
SMC0=FAN1/System FAN
SMC1=FAN2/CPU FAN
SMC2=FAN3/Power FAN
SMC3=AUX1 FAN/Exhaust1
SMC4=AUX2 FAN/Exhaust2
// Guess 5 FANS are enough for most configurations...
Then:
SMC5=Temperature1/CPU Heatsync
SMC6=Temperature2/NorthBridge
SMC7=Temperature3
SMC8=Temperature4
SMC9=Temperature5
SMCA=CPU VCORE
SMCB=+12V
SMCC=+3.3V
SMCD=+5V
SMCE=
SMCF=
...
What do you think?

May 25 2010, 06:25 AM




- Advanced Member
- Group: Developer
- Posts: 5,559
QUOTE (Trauma @ May 24 2010, 08:05 PM)

EDIT: Would it be possible to label the fans ? ex: CPU, front, back.... like in real macs.
You can make it by yourself in fakesmc.info.plist
CODE
<key>SMCKeys</key>
<dict>
<key>F0ID</key>
<string>CPU</string>
<key>F1ID</key>
<string>Chassis</string>
<key>F2ID</key>
<string>Front</string>
QUOTE
EDIT 2: I know we are talking about monitoring, but is there any chance to have the fan speed profiles working?
Usually fan profile works with good DSDT. You have to set _OSI="Darwin" and related Names like OSFL, OSTP etc.
Next, you must have working AppleLPC, and in some configs AppleACPIEC. And sometimes AppleACPIThermal.kext
QUOTE (THe KiNG @ May 25 2010, 06:29 AM)

Great!
I'll do this and let you know.
But we need to make sure the names aren't used on other methods, so IMO we can use something like this:
CODE
Name (SMC0, Zero) // FAN1 key
Method (RFN1, 0, NotSerialized)
{
Store (FAN1, SMC0)
Return (SMC0)
}
Then you can make it look for SMC0 to SMCZ, guess those are sufficient for what we need

And create a set like this:
SMC0=FAN1/System FAN
SMC1=FAN2/CPU FAN
SMC2=FAN3/Power FAN
SMC3=AUX1 FAN/Exhaust1
SMC4=AUX2 FAN/Exhaust2
// Guess 5 FANS are enough for most configurations...
Then:
SMC5=Temperature1/CPU Heatsync
SMC6=Temperature2/NorthBridge
SMC7=Temperature3
SMC8=Temperature4
SMC9=Temperature5
SMCA=CPU VCORE
SMCB=+12V
SMCC=+3.3V
SMCD=+5V
SMCE=
SMCF=
...
What do you think?
Let it be as you propose. I only need a list of SMC keys corresponding to the SMCx
CODE
[keyDisplayNames setValue:@"Mem Controller" forKey:@"Tm0P"];
[keyDisplayNames setValue:@"Mem Bank A1" forKey:@"TM0P"];
[keyDisplayNames setValue:@"Mem Bank A2" forKey:@"TM1P"];
[keyDisplayNames setValue:@"Mem Bank A3" forKey:@"TM2P"];
[keyDisplayNames setValue:@"Mem Bank A4" forKey:@"TM3P"];
[keyDisplayNames setValue:@"Mem Bank A5" forKey:@"TM4P"];
[keyDisplayNames setValue:@"Mem Bank A6" forKey:@"TM5P"];
[keyDisplayNames setValue:@"Mem Bank A7" forKey:@"TM6P"];
[keyDisplayNames setValue:@"Mem Bank A8" forKey:@"TM7P"];
[keyDisplayNames setValue:@"Mem Bank B1" forKey:@"TM8P"];
[keyDisplayNames setValue:@"Mem Bank B2" forKey:@"TM9P"];
[keyDisplayNames setValue:@"Mem Bank B3" forKey:@"TMAP"];
[keyDisplayNames setValue:@"Mem Bank B4" forKey:@"TMBP"];
[keyDisplayNames setValue:@"Mem Bank B5" forKey:@"TMCP"];
[keyDisplayNames setValue:@"Mem Bank B6" forKey:@"TMDP"];
[keyDisplayNames setValue:@"Mem Bank B7" forKey:@"TMEP"];
[keyDisplayNames setValue:@"Mem Bank B8" forKey:@"TMFP"];
[keyDisplayNames setValue:@"Mem module A1" forKey:@"TM0S"];
[keyDisplayNames setValue:@"Mem module A2" forKey:@"TM1S"];
[keyDisplayNames setValue:@"Mem module A3" forKey:@"TM2S"];
[keyDisplayNames setValue:@"Mem module A4" forKey:@"TM3S"];
[keyDisplayNames setValue:@"Mem module A5" forKey:@"TM4S"];
[keyDisplayNames setValue:@"Mem module A6" forKey:@"TM5S"];
[keyDisplayNames setValue:@"Mem module A7" forKey:@"TM6S"];
[keyDisplayNames setValue:@"Mem module A8" forKey:@"TM7S"];
[keyDisplayNames setValue:@"Mem module B1" forKey:@"TM8S"];
[keyDisplayNames setValue:@"Mem module B2" forKey:@"TM9S"];
[keyDisplayNames setValue:@"Mem module B3" forKey:@"TMAS"];
[keyDisplayNames setValue:@"Mem module B4" forKey:@"TMBS"];
[keyDisplayNames setValue:@"Mem module B5" forKey:@"TMCS"];
[keyDisplayNames setValue:@"Mem module B6" forKey:@"TMDS"];
[keyDisplayNames setValue:@"Mem module B7" forKey:@"TMES"];
[keyDisplayNames setValue:@"Mem module B8" forKey:@"TMFS"];
[keyDisplayNames setValue:@"CPU A" forKey:@"TC0H"];
[keyDisplayNames setValue:@"CPU A" forKey:@"TC0D"];
[keyDisplayNames setValue:@"CPU B" forKey:@"TC1D"];
[keyDisplayNames setValue:@"CPU C" forKey:@"TC2D"];
[keyDisplayNames setValue:@"CPU D" forKey:@"TC3D"];
[keyDisplayNames setValue:@"CPU A" forKey:@"TCAH"];
[keyDisplayNames setValue:@"CPU B" forKey:@"TCBH"];
[keyDisplayNames setValue:@"CPU C" forKey:@"TCCH"];
[keyDisplayNames setValue:@"CPU D" forKey:@"TCDH"];
[keyDisplayNames setValue:@"GPU" forKey:@"TG0P"];
[keyDisplayNames setValue:@"Ambient" forKey:@"TA0P"];
[keyDisplayNames setValue:@"HD Bay 1" forKey:@"TH0P"];
[keyDisplayNames setValue:@"HD Bay 2" forKey:@"TH1P"];
[keyDisplayNames setValue:@"HD Bay 3" forKey:@"TH2P"];
[keyDisplayNames setValue:@"HD Bay 4" forKey:@"TH3P"];
[keyDisplayNames setValue:@"Optical Drive" forKey:@"TO0P"];
[keyDisplayNames setValue:@"Heatsink A" forKey:@"Th0H"];
[keyDisplayNames setValue:@"Heatsink B" forKey:@"Th1H"];
[keyDisplayNames setValue:@"Heatsink C" forKey:@"Th2H"];
[keyDisplayNames setValue:@"GPU Diode" forKey:@"TG0D"];
[keyDisplayNames setValue:@"GPU Heatsink" forKey:@"TG0H"];
[keyDisplayNames setValue:@"GPU Heatsink 2" forKey:@"TG1H"];
[keyDisplayNames setValue:@"Power supply 2" forKey:@"Tp1C"];
[keyDisplayNames setValue:@"Power supply 1" forKey:@"Tp0C"];
[keyDisplayNames setValue:@"Power supply 1" forKey:@"Tp0P"];
[keyDisplayNames setValue:@"Enclosure Base" forKey:@"TB0T"];
[keyDisplayNames setValue:@"Enclosure Base 2" forKey:@"TB1T"];
[keyDisplayNames setValue:@"Enclosure Base 3" forKey:@"TB2T"];
[keyDisplayNames setValue:@"Enclosure Base 4" forKey:@"TB3T"];
[keyDisplayNames setValue:@"Northbridge 1" forKey:@"TN0P"];
[keyDisplayNames setValue:@"Northbridge 2" forKey:@"TN1P"];
[keyDisplayNames setValue:@"Northbridge" forKey:@"TN0H"];
[keyDisplayNames setValue:@"Expansion Slots" forKey:@"TS0C"];
[keyDisplayNames setValue:@"Airport Card" forKey:@"TW0P"];
[keyDisplayNames setValue:@"PCI Slot 1 Pos 1" forKey:@"TA0S"];
[keyDisplayNames setValue:@"PCI Slot 1 Pos 2" forKey:@"TA1S"];
[keyDisplayNames setValue:@"PCI Slot 2 Pos 1" forKey:@"TA2S"];
[keyDisplayNames setValue:@"PCI Slot 2 Pos 2" forKey:@"TA3S"];
[keyDisplayNames setValue:@"Ambient 2" forKey:@"TA1P"];
[keyDisplayNames setValue:@"Power supply 2" forKey:@"Tp1P"];
[keyDisplayNames setValue:@"Power supply 3" forKey:@"Tp2P"];
[keyDisplayNames setValue:@"Power supply 4" forKey:@"Tp3P"];
[keyDisplayNames setValue:@"Power supply 5" forKey:@"Tp4P"];
[keyDisplayNames setValue:@"Power supply 6" forKey:@"Tp5P"];

May 25 2010, 09:23 AM

- Advanced Member
- Group: Staff
- Posts: 714
QUOTE (Slice @ May 25 2010, 09:25 AM)

Let it be as you propose. I only need a list of SMC keys corresponding to the SMCx
OK! Here we go:
CODE
// Fan Keys:
SMC0 = F0ID "System Fan"
SMC1 = F1ID "Processor Fan"
SMC2 = F2ID "Power Fan"
SMC3 = F3ID "Intake Fan"
SMC4 = F4ID "Exhaust Fan"
SMC5 = F5ID "Aux Fan"
SMC6 = To be filled
SMC7 = To be filled
SMC8 = To be filled
SMC9 = To be filled
// Temperature Keys:
SMCA = TC0H "CPU Heatsink"
SMCB = TN0H "MCP/MCH/Northbridge Heatsink"
SMCC = TW0P "AUX Sensor"
SMCD = To be filled
SMCE = To be filled
SMCF = To be filled
SMCG = To be filled
SMCH = To be filled
SMCI = To be filled
SMCJ = To be filled
// Voltage Keys (V):
SMCK = VCAC "CPU Core Voltage"
SMCL = Vp0C "+12V Voltage"
SMCM = Vp1C "+3.3V Voltage"
SMCN = Vp2C "+5V Voltage"
// Current Values (A):
SMCO = ICAC "CPU Core Current"
SMCP = Ip0C "+12V Current"
SMCQ = Ip1C "+3.3V Current"
SMCR = Ip2C "+5V Current
// Power Keys (W):
SMCS = PC0C "CPU Core Power"
SMCT = To be filled
SMCU = To be filled
SMCV = To be filled
SMCW = To be filled
SMCX = To be filled
SMCY = To be filled
SMCZ = To be filled
What do you think?

May 25 2010, 09:31 AM




- Advanced Member
- Group: Developer
- Posts: 5,559
OK! It will be standard.
And what about the device containing this methods?
PS.
For Thermal Zone I use key TN0P aka Northbridge
For NVidia GPU - TG0D - GPU diode
LPC monitor uses keys: TN0P, Th0H,
For Intel CPU keys TC0D, TC1D...
And Fans 0-5

May 25 2010, 10:59 AM

- Advanced Member
- Group: Staff
- Posts: 714
QUOTE (Slice @ May 25 2010, 12:31 PM)

OK! It will be standard.
And what about the device containing this methods?
USE the built-in one? => SIOR?
Or create a new one like ATKD?

May 25 2010, 11:57 AM




- Advanced Member
- Group: Developer
- Posts: 5,559
May be write
Name (_CID, "monitor") ?
So I can write IONameMatch="monitor"
But other question
CODE
Name (SMC0, Zero) // FAN1 key
Method (RFN1, 0, NotSerialized)
{
Store (FAN1, SMC0)
Return (SMC0)
}
I can't read SMC0 because it will not be refreshed by the request.
I need to read RFN1. So I think it is better to write
CODE
Method (SMC0, 0, NotSerialized)
{
Store (FAN1, Local0)
Return (Local0)
}
I already do it for Thermal zone
CODE
Method (_TMP, 0, NotSerialized) // get current temp
{
Store (\_SB.PCI0.LPCB.WSEC.C2K (\_SB.PCI0.LPCB.WSEC.THS0), Local0)
Return (Local0)
}
Another question. What about units to convert values?
For Thermal Zone I know that it is Kelvin*10 and convert it to Celsius in the driver.
What you do? Convert to appropriate units in DSDT so I read it 1:1 or I need to do some conversion in the driver?

May 25 2010, 12:48 PM

- Advanced Member
- Group: Staff
- Posts: 714
Yes you right about SMC0-Z stuff must be on method.
But can we use Local0 for all or on each Method we use another like Local1 and so?
We can try this:
CODE
Method (OSDW, 0, NotSerialized)
{
If (CondRefOf (_OSI, Local0))
{
If (_OSI ("Darwin"))
{
Return (One)
}
}
Return (Zero)
}
CODE
Device (SMCK)
{
Name (_HID, EisaId ("PNP0C02"))
Name (_CID, "monitor")
Method (_STA, 0, NotSerialized)
{
If (OSDW ())
{
Return (0x0F)
}
Return (Zero)
}
Method (SMC0, 0, NotSerialized)
{
Store (FAN1, Local0)
Return (Local0)
}
Method (SMC1, 0, NotSerialized)
{
Store (FAN2, Local0)
Return (Local0)
}
}
IASL dosen't complain, so we can't know w/o to try

About conversions stuff lemme look on DSDT code and see, but first lets get main stuff working.

May 25 2010, 02:30 PM




- Advanced Member
- Group: Developer
- Posts: 5,559
I think Local0 is local for {} or inside a Name/Method as I see at whole DSDT.
It's a pity I can't give you a test driver at the moment. I am on three days trip and will be here only on friday. Wait, please.
But you can test by imitating Thermal Zone. The driver at topic.
CODE
Scope (_TZ)
{
ThermalZone (THM)
{
Method (_TMP, 0, NotSerialized) // get current temp
{
Store (FAN1, Local0)
Return (Local0)
}
}
}