Jump to content

ASUS Zenbook Prime UX31A-DB51 Ultrabook - fixes, mods, tweaks, etc


nhart12
 Share

1,056 posts in this topic

Recommended Posts

Hi guys. Have anybody tried to run Mavericks on Asus UX32A?

 

Specs:

Intel® Core™ i5 3317U Processor
Intel® HM76 Express Chipset
13.3" 16:9 HD with EWV (1366 x 768)
Integrated Intel® HD Graphics 4000

 

If someone can help with this notebook, please write me PM.

Link to comment
Share on other sites

Hi guys. Have anybody tried to run Mavericks on Asus UX32A?

 

Specs:

Intel® Core™ i5 3317U Processor

Intel® HM76 Express Chipset

13.3" 16:9 HD with EWV (1366 x 768)

Integrated Intel® HD Graphics 4000

 

If someone can help with this notebook, please write me PM.

 

Should work fine. Most of these UX3* laptops are very similar. You'll need to rip out the wireless card and replace it with another as it has the Intel Centrino like all the others, the Centrino card is NEVER going to work in OS X. 

 

Other than that, try testing around with the kexts in this thread. There aren't any DSDTs for the UX32A as far as I know though, only the UX32VD and UX31A so you might need to patch it yourself. PMPatch the BIOS to use the native AppleIntelCPUPowerManagement (modifying the BIOS is always is a dangerous operation!).

 

Look around the thread, you'll probably get it working just fine. Follow some of the steps below for example.

 

 

Yearh. What about the ux32vd?

 

Half the thread is about the UX32VD.

 

The UX32VD is very straight forward. Turn Intel Virtualization Technology off in the BIOS, do not use npci=0x*000 flags or anything. Boot with -x when installing or delete/skip nVidia from the installation media, otherwise it won't start the installer.

 

Once it has been installed, boot it up using -x, delete all nVidia kexts (they're named NV* and GeForce) from S/L/E, if it still doesn't boot, delete the Bluetooth kexts as well.

 

If your UX32VD has a i7-3517U, dump the DSDT (Google it)  and compare it with 68x' unmodified DSDT using a text comparison tool, if they're alike you should be able to use his modified without any problems. His SSDT should work as well, or you can dump your own.

 

Use the kexts 68x provided on the previous page, they should work fine. Go to OSXLatitude and find EMlyDinEsH's Elan Touchpad Driver for the clickpad. 

 

Things still not working with the UX32VD:

- Internal SD Card reader (it is detected as a USB device, but isn't functional).

- The GeForce 620M will never work in OS X due to not having any drivers. It barely even works in GNU/Linux due to being an Optimus card. You'll need to rely on the HD4000.

- VGA accessory to the mini-display port isn't working after 10.8.2 Mountain Lion due to changes Apple has done to the Framebuffer kext. 

 

Other than that, everything else should work perfectly fine, even the USB Ethernet and webcam.

 

If you have issues, don't forget to look backwards in this thread. You NEED to read the thread if you have any issues as it most likely has been addressed before in the thread, so please look back and see if anyone solved the problem before.

  • Like 1
Link to comment
Share on other sites

Should work fine. Most of these UX3* laptops are very similar. You'll need to rip out the wireless card and replace it with another as it has the Intel Centrino like all the others, the Centrino card is NEVER going to work in OS X. 

 

Other than that, try testing around with the kexts in this thread. There aren't any DSDTs for the UX32A as far as I know though, only the UX32VD and UX31A so you might need to patch it yourself. PMPatch the BIOS to use the native AppleIntelCPUPowerManagement (modifying the BIOS is always is a dangerous operation!).

 

Look around the thread, you'll probably get it working just fine. Follow some of the steps below for example.

 

I have problems with Intel HD4000 and LED. Trying Clover to boot, but have no needed experience to setup it properly.

I get ability to run OSX Mavericks in safe mode.

 

As for Wi-Fi -- I have external usb module. It's working fine with OS X.

Link to comment
Share on other sites

Link to comment
Share on other sites

 

Here is my config.plist. Do not use it without reading the Clover wiki.

You have been warned (there are some sleep issues that I am still trying to diagnose).

config.plist.txt

Link to comment
Share on other sites

Guys, i don't know why you think that nvidia card is not working... thats not true... because:

 

You have the option to unlock bios and enable static graphics switching... you can set in bios, which card you want use...

osx have no problems with the nvidia card...

Just remember, you disable optimus with this and you need always to reboot and change in bios the card you want to use...

 

 

 

2nd... Why do you delete always the kexts? Why just didn't disable the card with the DSDT?

There are enough threads that explains how to do that...

 

 

Just my 5 Cants :-)

Cheers :-)

Link to comment
Share on other sites

Get running OSX on UX32a only in safe mode (Chameleon). Who know how to get Intel HD working (specs in signature)? Have no dsdt or smbios right now (don't know how to configure). Right now trying Clover. Is there manual how to setup Intel HD4000?

Link to comment
Share on other sites

Get running OSX on UX32a only in safe mode (Chameleon). Who know how to get Intel HD working (specs in signature)? Have no dsdt or smbios right now (don't know how to configure). Right now trying Clover. Is there manual how to setup Intel HD4000?

 

Export with Clover your Tables and send them to me... Use F4 in Clover... For the rest you need to search self :-)

And i need the exact model!

Please update your bios before to the Latest version!

 

Cheers

  • Like 1
Link to comment
Share on other sites

Export with Clover your Tables and send them to me... Use F4 in Clover... For the rest you need to search self :-)

And i need the exact model!

Please update your bios before to the Latest version!

 

Cheers

Asus UX32a with Core i5 and intel HD 4000 https://www.asus.com/Notebooks_Ultrabooks/ASUS_ZENBOOK_UX32A/#specifications

I have have updated to latest BIOS. I have attached ACPI dump by Clover. Only thing different from official buid - i have extended RAM by 8Gb (10Gb total). Also i have external Wi-Fi, that should working on OSX.

 

Thank you for attention :)

Asus_UX32a_ACPI_Dump.zip

Link to comment
Share on other sites

Guys, i don't know why you think that nvidia card is not working... thats not true... because:

 

You have the option to unlock bios and enable static graphics switching... you can set in bios, which card you want use...

osx have no problems with the nvidia card...

Just remember, you disable optimus with this and you need always to reboot and change in bios the card you want to use..

 

I have no info about it. proof plz

Thanx

Link to comment
Share on other sites

I am currently working on an USB 3.0 Multiplex patch for the UX3-X laptops. However, I need IORegs with all the USB ports plugged in by USB devices.

Please make sure that you are using GenericUSBXHCI. I appreciate the help.

Link to comment
Share on other sites

I am currently working on an USB 3.0 Multiplex patch for the UX3-X laptops. However, I need IORegs with all the USB ports plugged in by USB devices.

Please make sure that you are using GenericUSBXHCI. I appreciate the help.

 

i have a 8 series USB... (HM87) dev id 9c31...

 

Dunno if it gonna help you, since all the ivy ux3XX have an series 7 USB...

Dunno if you know, this is maybe gonna help you:

https://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/usb/usb_7-series-multiplex.txt

 

But however, here is my Ioreg, dsdt, whatever you need (haswell, 8 series): Attached :-)

UX301LA.zip

Link to comment
Share on other sites

i have a 8 series USB... (HM87) dev id 9c31...

 

Dunno if it gonna help you, since all the ivy ux3XX have an series 7 USB...

Dunno if you know, this is maybe gonna help you:

https://github.com/RehabMan/Laptop-DSDT-Patch/blob/master/usb/usb_7-series-multiplex.txt

 

But however, here is my Ioreg, dsdt, whatever you need (haswell, 8 series): Attached :-)

 

The patch will not work. Trust me, spent the last two days trying to figure out it works (and what the patches do). I am almost there, but I just need to know where a certain of the patch goes where.

  • Like 1
Link to comment
Share on other sites

Here is my config.plist. Do not use it without reading the Clover wiki.

You have been warned (there are some sleep issues that I am still trying to diagnose).

 

There seems to be a syntax error in this config.plist. (DSDT section is not closed correctly)

 

Corrected version with same settings attached.

I am currently working on an USB 3.0 Multiplex patch for the UX3-X laptops. However, I need IORegs with all the USB ports plugged in by USB devices.

Please make sure that you are using GenericUSBXHCI. I appreciate the help.

 

Don't know if it helps. In this scenario there are only USB 2 devices connected. (I can do a mixed USB 3.0 and USB 2 scenario later.)

 

(GenericUSBXHCI.kext is the version you posted a few pages ago. IOUSBFamily.kext is stock.)

config.plist.txt

ioreg.txt

  • Like 1
Link to comment
Share on other sites

I am currently working on an USB 3.0 Multiplex patch for the UX3-X laptops. However, I need IORegs with all the USB ports plugged in by USB devices.

Please make sure that you are using GenericUSBXHCI. I appreciate the help.

 

Here you go. Used two USB2.0 flash drives and one 3.0 on the latest GenericUSBXHCI kext.

ioreg.zip

  • Like 1
Link to comment
Share on other sites

My USB 3.0 and USB 2 scenario. With USB 3.0 hub.

 

Can you please use IOReg versions 2.1 or less? Version 3.0 has issues when saving the file; the file is corrupted. I also purposely deleted the section to discourage people from just using it without read the Clover wiki and checking the configuration.

Link to comment
Share on other sites

I personally would like to use Rehabman's ACPIPoller due to the fact that I can set the method name and the IOProperty; and a huge plus, the code is also documented.

 

Anyways, after testing the below code the fan is silent and quiet. SO far, fan reporting is not possible due to the manual fan control. The below DSDT code allows for a quieter and "efficient" fan (both fans on the UX32VD will be used).

 

Replace your SMCD with:

                Device (SMCD)
                {
                    Name (_HID, "FAN00000")  // _HID: Hardware ID
                    Method (FAN0, 0, NotSerialized)
                    {
                        Store (\_TZ.RFAN (Zero), Local0)
                        Return (Local0)
                    }

                    Method (FAN1, 0, NotSerialized)
                    {
                        Store (\_TZ.RFAN (One), Local0)
                        Return (Local0)
                    }

                    Method (TCPU, 0, Serialized)
                    {
                        Store (^^EC0.ECPU, Local0)
                        Return (Local0)
                    }

                    Method (TIGC, 0, Serialized)
                    {
                        Store (^^EC0.TH0R, Local0)
                        Return (Local0)
                    }

                    Name (TACH, Package (0x04)
                    {
                        "System Fan", 
                        "FAN0", 
                        "GPU Fan", 
                        "FAN1"
                    })
                    Name (FTAB, Buffer (0x12)
                    {
                        /* 0000 */   0x1E, 0x28, 0x28, 0x46, 0x36, 0x50, 0x32, 0x64,
                        /* 0008 */   0x37, 0x73, 0x3C, 0x80, 0x41, 0x96, 0x46, 0xC8,
                        /* 0010 */   0xFF, 0xFF
                    })
                    Name (FHST, Buffer (0x10)
                    {
                        /* 0000 */   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                        /* 0008 */   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                    })
                    Name (FIDX, Zero)
                    Name (FNUM, Zero)
                    Name (FSUM, Zero)
                    Name (FLST, 0xFF)
                    Name (FCNT, Zero)
                    Name (FCTU, 0x14)
                    Name (FCTD, 0x28)
                    Name (FSPD, Zero)
                    Name (FANE, Zero)
                    Method (FCPU, 0, Serialized)
                    {
                        Store (One, FANE)
                        Store (TCPU (), Local0)
                        Add (Local0, FSUM, Local1)
                        Store (FIDX, Local2)
                        Subtract (Local1, DerefOf (Index (FHST, Local2)), Local1)
                        Store (Local0, Index (FHST, Local2))
                        Store (Local1, FSUM)
                        Increment (Local2)
                        If (LGreaterEqual (Local2, SizeOf (FHST)))
                        {
                            Store (Zero, Local2)
                        }

                        Store (Local2, FIDX)
                        Store (FNUM, Local2)
                        If (LNotEqual (Local2, SizeOf (FHST)))
                        {
                            Increment (Local2)
                            Store (Local2, FNUM)
                        }

                        Divide (Local1, Local2, , Local0)
                        If (LGreater (Local0, 0xFF))
                        {
                            Store (0xFF, Local0)
                        }

                        Store (Zero, Local2)
                        While (LGreater (Local0, DerefOf (Index (FTAB, Local2))))
                        {
                            Add (Local2, 0x02, Local2)
                        }

                        If (LGreater (Local2, FLST))
                        {
                            Subtract (Local2, FLST, Local1)
                            Store (FCTU, Local4)
                        }
                        Else
                        {
                            Subtract (FLST, Local2, Local1)
                            Store (FCTD, Local4)
                        }

                        If (LEqual (Local1, Zero))
                        {
                            Store (Zero, FCNT)
                        }
                        Else
                        {
                            Store (FCNT, Local3)
                            Increment (Local3)
                            Store (Local3, FCNT)
                            Divide (ShiftLeft (Local4, One), Local1, , Local1)
                            If (LGreaterEqual (Local3, Local1))
                            {
                                Store (Local2, FLST)
                                Increment (Local2)
                                Store (DerefOf (Index (FTAB, Local2)), FSPD)
                                ^^EC0.SFNV (One, FSPD)
                                ^^EC0.SFNV (0x02, FSPD)
                                Store (Zero, FCNT)
                            }
                        }

                        Return (Local0)
                    }

                    Method (TCPP, 0, Serialized)
                    {
                        Store (FNUM, Local0)
                        If (LNotEqual (Local0, Zero))
                        {
                            Store (FSUM, Local1)
                            Divide (Local1, Local0, , Local0)
                        }

                        Return (Local0)
                    }

                    Method (TSYS, 0, Serialized)
                    {
                        Return (FCNT)
                    }
                }

Replace SFNV:

        Name (DEC1, Zero)
        Name (DEC2, Zero)
        Method (SFNV, 2, Serialized)
        {
            If (LEqual (Arg0, Zero))
            {
                If (LEqual (DEC1, One))
                {
                    Store (RRAM (0x0521), Local0)
                    Or (Local0, 0x80, Local0)
                    WRAM (0x0521, Local0)
                }

                If (LEqual (DEC2, One))
                {
                    Store (RRAM (0x0522), Local0)
                    Or (Local0, 0x80, Local0)
                    WRAM (0x0522, Local0)
                }

                Store (Zero, DEC1)
                Store (Zero, DEC2)
                Return (Zero)
            }

            If (LEqual (Arg0, One))
            {
                Store (RRAM (0x0521), Local0)
                And (Local0, 0x7F, Local0)
                WRAM (0x0521, Local0)
                Store (One, DEC1)
                ST84 (Zero, Arg1)
                Return (Zero)
            }

            If (LEqual (Arg0, 0x02))
            {
                Store (RRAM (0x0522), Local0)
                And (Local0, 0x7F, Local0)
                WRAM (0x0522, Local0)
                Store (One, DEC2)
                ST84 (One, Arg1)
                Return (Zero)
            }

            Return (Zero)
        }

I added support to make both fans go automatic.

 

Add this to _PTS:

            If (\_SB.PCI0.LPCB.SMCD.FANE)
            {
                \_SB.PCI0.LPCB.EC0.SFNV (Zero, Zero)
            }

This will shut the fans off before going to sleep by putting in "Auto Mode".

 

Again, this is for the UX32VD and use at your own risk.

 

Hi 68x... I'm trying to get fan control to work. Right now it changes the fan control behavior (starts with maximum fan, fan never stops even when it is around 45C. Normally stops on bios/auto mode. HWMonitor shows 35rpm for cpu and gpu fan.).

 

It seems it is kind of working, since the behavior is changed. (I put SMCD device in \_SB.PCI0.LPCB.SMCD).

 

There are comments/documentation for the SFNV methode (http://forum.notebookreview.com/asus/705656-fan-control-asus-prime-ux31-ux31a-ux32a-ux32vd.html):

Name (DECF, Zero) // stores which fans were set to manual control, for later resetting back to auto
Method (SFNV, 2, Serialized)
{
    If (LEqual (Arg0, Zero))
    {
        If (And (DECF, One)) // reset Fan1 back to Auto speed control
        {
            Store (RRAM (0x0521), Local0)
            Or (Local0, 0x80, Local0)
            WRAM (0x0521, Local0) // 0x8d auto ON/OFF
        }

        If (And (DECF, 0x02)) // reset Fan2 back to Auto speed control
        {
            Store (RRAM (0x0522), Local0)
            Or (Local0, 0x80, Local0)
            WRAM (0x0522, Local0) // 0x8e auto ON/OFF
        }

        Store (Zero, DECF)
        Return (Zero)
    }

    If (LEqual (Arg0, One)) // set fan speed manually for Fan1
    {
        Store (RRAM (0x0521), Local0)
        And (Local0, 0x7F, Local0)
        WRAM (0x0521, Local0) // 0xd manually set
        Or (DECF, One, DECF)
        ST84 (Zero, Arg1)
        Return (Zero)
    }

    If (LEqual (Arg0, 0x02)) // set fan speed manually for Fan2
    {
        Store (RRAM (0x0522), Local0)
        And (Local0, 0x7F, Local0)
        WRAM (0x0522, Local0) // 0xe manually set
        Or (DECF, 0x02, DECF)
        ST84 (One, Arg1)
        Return (Zero)
    }

    Return (Zero)
}

Is there any documentation/comments for the SMCD device code?

Link to comment
Share on other sites

Fan Max Speed: 6500 RP/min
0xFF = 255
6500 / 255 = ~25,5

\_SB.PCI0.LPCB.EC0.SFNV 1 0x7D //set Fan0 speed to 0x7D
----> 0x7D = 125 ---> 125 x 25,5 = 3187,5 RP/min

\_SB.PCI0.LPCB.EC0.SFNV 2 0x00 //set Fan1 speed to 0x00
----> 0x00 = 0 ----> OFF

\_SB.PCI0.LPCB.EC0.SFNV 0 0   //Set ALL Fans to Automatic
\_SB.PCI0.LPCB.EC0.SFNV 0 1   //Set Fan1 to Automatic
\_SB.PCI0.LPCB.EC0.SFNV 0 2   //Set Fan2 to Automatic

NOTE: In Manual mode, you can't read out Fan Speed!!
----> Thats why we Mutiply our Custom setted Speed with 25,5 !!!

\_SB.PCI0.LPCB.EC0.TACH (Zero)  // Read current FAN1 Speed in RP/min
\_SB.PCI0.LPCB.EC0.TACH (One)   // Read current FAN2 Speed in RP/min
Device (SMCD)
    {
        Name (_HID, "FAN00000") // Just for FakeSMC, that it knows what to look for!
                                // Can be MON00000 or other, see inside FakeSMC info.plist
        Name (TACH, Package (0x04) // This is description for FAN's
        {
            "Left Fan", "FAN1",   // "ANY NAME", "Any Method Name",
            "Right Fan", "FAN0"   // Example: "My Ass Megafan", "MSMF"
        })

        Method (FAN0, 0, NotSerialized)  // FAN0 = Right Fan, as wrote on top!
        {
            Store (\_SB.PCI0.LPCB.EC0.TACH (Zero), Local0) //Store FAN0 RPm in Local0 Variable
            Return (Local0)  // Returns the Variable (Rpm) for FakeSMC
        }

        Method (FAN1, 0, NotSerialized) // FAN1 = Left Fan, as described on top...
        {
            Store (\_SB.PCI0.LPCB.EC0.TACH (One), Local0) // Store FAN1 into Local0 Variable
            Return (Local0) // Returns the Variable (Rpm) for FakeSMC
        }
        Name (KLVN, Zero)   // Not use Kelvins (Celsius instead) 
        Name (TEMP, Package (0x0C) // Description Package "Temperature" for FakeSMC
        {
            "CPU Heatsink", "TCPU",   // "Custom Name", "linked Method",
            "CPU Proximity", "TCPP", 
            "PCH Die", "TPCH", 
            "Mainboard", "TSYS",
            "Passive Cooling", "CPCT",
            "Critical Temp", "CPTM"
        })
        Method (TCPU, 0, NotSerialized)  // The rest is same like on top...
        {
            Store (\_SB.PCI0.LPCB.EC0.ECPU, Local0)
            Return (Local0)
        }
        Method (TCPP, 0, NotSerialized)
        {
            Store (\_SB.PCI0.LPCB.EC0.TH0R, Local0)
            Return (Local0)
        }
        Method (TPCH, 0, NotSerialized)
        {
            Store (\_SB.PCI0.LPCB.EC0.TH1L, Local0)
            Return (Local0)
        }
        Method (TSYS, 0, NotSerialized)
        {
            Store (\_SB.PCI0.LPCB.EC0.TH1R, Local0)
            Return (Local0)
        }
        Method (CPCT, 0, NotSerialized)
        {
            Store (\_SB.PCI0.LPCB.EC0.EPSV, Local0)
            Return (Local0)
        }
        Method (CPTM, 0, NotSerialized)
        {
            Store (\_SB.PCI0.LPCB.EC0.ECRT, Local0)
            Return (Local0)
        }
    }

Device (PROB) // Polling Device name for FakeSMC, The Methods here are executed every
              // 1/2/3/whatever second!
    {
        Name (_HID, EisaId ("PNP0C02")) // Expose PLLD to IORegistry
        Name (_CID, EisaId ("PRB0000")) // device compatible name allows ACPIProbe matching
        Name (INVL, 0x3E8)          // Set Polling interval 1 sec
        Name (TOUT, Zero)           // Set Polling timeout  0 sec (continuous polling)
        Name (LOGG, One)            // Enable Console logging of values returned by methods
        Name (LIST, Package (One)   // Define methods to poll
        { "SFNS" })
        
        Method (SFNS, 0, NotSerialized)
        {
            Store (\_SB.PCI0.LPCB.EC0.ECPU, Local0)      // Get current CPU Temperature
            If (LLessEqual (Local0, 0x32)) {             // If CPU is < 50C, disable both Fans
                \_SB.PCI0.LPCB.EC0.SFNV (One, Zero)    // Set FAN0 OFF
                \_SB.PCI0.LPCB.EC0.SFNV (0x02, Zero)   // Set FAN1 OFF
                Store ("Fans are OFF", Local1) } Else {  // Store "Fans are OFF" for Logging output
                \_SB.PCI0.LPCB.EC0.SFNV (Zero, Zero)     // If CPU is > 50C, set to Automatic
                Store ("Fans are AUTO", Local1) }  // Store Fans are AUTO for log output...
            Return (Local1)  // Return for FakeSMC Logging
        }
    }

FakeSMC is not good described... there are no WIKI, nothing... Its all searched together... 

But here you have something to start with!

 

Cheers :-)

Link to comment
Share on other sites

Fan Max Speed: 6500 RP/min
0xFF = 255
6500 / 255 = ~25,5

\_SB.PCI0.LPCB.EC0.SFNV 1 0x7D //set Fan0 speed to 0x7D
----> 0x7D = 125 ---> 125 x 25,5 = 3187,5 RP/min

\_SB.PCI0.LPCB.EC0.SFNV 2 0x00 //set Fan1 speed to 0x00
----> 0x00 = 0 ----> OFF

\_SB.PCI0.LPCB.EC0.SFNV 0 0   //Set ALL Fans to Automatic
\_SB.PCI0.LPCB.EC0.SFNV 0 1   //Set Fan1 to Automatic
\_SB.PCI0.LPCB.EC0.SFNV 0 2   //Set Fan2 to Automatic

NOTE: In Manual mode, you can't read out Fan Speed!!
----> Thats why we Mutiply our Custom setted Speed with 25,5 !!!

\_SB.PCI0.LPCB.EC0.TACH (Zero)  // Read current FAN1 Speed in RP/min
\_SB.PCI0.LPCB.EC0.TACH (One)   // Read current FAN2 Speed in RP/min
Device (SMCD)
    {
        Name (_HID, "FAN00000") // Just for FakeSMC, that it knows what to look for!
                                // Can be MON00000 or other, see inside FakeSMC info.plist
        Name (TACH, Package (0x04) // This is description for FAN's
        {
            "Left Fan", "FAN1",   // "ANY NAME", "Any Method Name",
            "Right Fan", "FAN0"   // Example: "My Ass Megafan", "MSMF"
        })

        Method (FAN0, 0, NotSerialized)  // FAN0 = Right Fan, as wrote on top!
        {
            Store (\_SB.PCI0.LPCB.EC0.TACH (Zero), Local0) //Store FAN0 RPm in Local0 Variable
            Return (Local0)  // Returns the Variable (Rpm) for FakeSMC
        }

        Method (FAN1, 0, NotSerialized) // FAN1 = Left Fan, as described on top...
        {
            Store (\_SB.PCI0.LPCB.EC0.TACH (One), Local0) // Store FAN1 into Local0 Variable
            Return (Local0) // Returns the Variable (Rpm) for FakeSMC
        }
        Name (KLVN, Zero)   // Not use Kelvins (Celsius instead) 
        Name (TEMP, Package (0x0C) // Description Package "Temperature" for FakeSMC
        {
            "CPU Heatsink", "TCPU",   // "Custom Name", "linked Method",
            "CPU Proximity", "TCPP", 
            "PCH Die", "TPCH", 
            "Mainboard", "TSYS",
            "Passive Cooling", "CPCT",
            "Critical Temp", "CPTM"
        })
        Method (TCPU, 0, NotSerialized)  // The rest is same like on top...
        {
            Store (\_SB.PCI0.LPCB.EC0.ECPU, Local0)
            Return (Local0)
        }
        Method (TCPP, 0, NotSerialized)
        {
            Store (\_SB.PCI0.LPCB.EC0.TH0R, Local0)
            Return (Local0)
        }
        Method (TPCH, 0, NotSerialized)
        {
            Store (\_SB.PCI0.LPCB.EC0.TH1L, Local0)
            Return (Local0)
        }
        Method (TSYS, 0, NotSerialized)
        {
            Store (\_SB.PCI0.LPCB.EC0.TH1R, Local0)
            Return (Local0)
        }
        Method (CPCT, 0, NotSerialized)
        {
            Store (\_SB.PCI0.LPCB.EC0.EPSV, Local0)
            Return (Local0)
        }
        Method (CPTM, 0, NotSerialized)
        {
            Store (\_SB.PCI0.LPCB.EC0.ECRT, Local0)
            Return (Local0)
        }
    }

Device (PROB) // Polling Device name for FakeSMC, The Methods here are executed every
              // 1/2/3/whatever second!
    {
        Name (_HID, EisaId ("PNP0C02")) // Expose PLLD to IORegistry
        Name (_CID, EisaId ("PRB0000")) // device compatible name allows ACPIProbe matching
        Name (INVL, 0x3E8)          // Set Polling interval 1 sec
        Name (TOUT, Zero)           // Set Polling timeout  0 sec (continuous polling)
        Name (LOGG, One)            // Enable Console logging of values returned by methods
        Name (LIST, Package (One)   // Define methods to poll
        { "SFNS" })
        
        Method (SFNS, 0, NotSerialized)
        {
            Store (\_SB.PCI0.LPCB.EC0.ECPU, Local0)      // Get current CPU Temperature
            If (LLessEqual (Local0, 0x32)) {             // If CPU is < 50C, disable both Fans
                \_SB.PCI0.LPCB.EC0.SFNV (One, Zero)    // Set FAN0 OFF
                \_SB.PCI0.LPCB.EC0.SFNV (0x02, Zero)   // Set FAN1 OFF
                Store ("Fans are OFF", Local1) } Else {  // Store "Fans are OFF" for Logging output
                \_SB.PCI0.LPCB.EC0.SFNV (Zero, Zero)     // If CPU is > 50C, set to Automatic
                Store ("Fans are AUTO", Local1) }  // Store Fans are AUTO for log output...
            Return (Local1)  // Return for FakeSMC Logging
        }
    }

FakeSMC is not good described... there are no WIKI, nothing... Its all searched together... 

But here you have something to start with!

 

Cheers :-)

 

 

Thanks Ramalama!

 

I see, there are two different concepts to call the SFNV method. 1.) code inside SMCD with ACPIPoller 2.) "PROB" device with ACPIProbe

 

I just was asking, because I don't understand the logic inside 68x's SMCD device.

 

The logic should be something like some up-thresholds for faster fan speed and some down-thresholds for lowering fan speed.

 

Like maybe:

Up-Threshold  Down-Threshold Fan-Speed

0C                       0C                          0%

60C                     45C                        10%

65C                     55C                         25%

67C                     59C                         40%

...

Link to comment
Share on other sites

Its simple, you can do easily the code yourself... just use \_SB.PCI0.LPCB.EC0.ECPU to get the temperature you want and SFNV to set your custom Rpm Speed...

 

the "\_SB.PCI0.LPCB.EC0.ECPU" you get is always temperature in Celsius and hex format, 0x32 = 50°C for example...

 

just use something like this, and define yourself how you want the thermal working:

 

Store (\_SB.PCI0.LPCB.EC0.ECPU, Local0) // Store current Celsius Temperature °C in Local0 Variable

If (LLessEqual (Local0, 0x32)) { // If less as 50°C and 50°C do:

\_SB.PCI0.LPCB.EC0.SFNV (One, Zero) //FAN0 to OFF

\_SB.PCI0.LPCB.EC0.SFNV (0x02, Zero) //FAN1 to OFF

}

If (LOr( LGreater(Local0,0x32), LLessEgual(Local0,0x3C))) { // If greater as 50°C and Less as 60°C and 60°C do this:

\_SB.PCI0.LPCB.EC0.SFNV (One0x64) //FAN0 to 0x64(100) --> 100 x 25,5 = 2550 RPm

\_SB.PCI0.LPCB.EC0.SFNV (0x02, 0x8C) //FAN1 to 0x8C(140) --> 140 x 25,5 = 3570 RPm

 

}

If .... Whatever you want...

 

 

Its really simple... nothing special :-)

 

Do your own code, and be happy :-)

 

---------

 

PS: Sry, maybe i misunderstood you, what you mean with threshold?

 

If you want it more continuous, you can just multiply CPU temperature with Fan Speed values...

It's simple too, i can explain it if you want...

 

Cheers :-)

Link to comment
Share on other sites

 Share

×
×
  • Create New...