Jump to content

Please help me customize the touch pad SSDT.


pananning
 Share

5 posts in this topic

Recommended Posts

It'd be helpful if you could put the laptop and it's specs in your signature.

On Dells, _OSI to XOSI does break brightness keys unless you do OSID to XSID first. This is because on Dell machines, there is an ACPI method named \_SB.OSID. ACPI names are always padded out to 4 characters with underscores, so it becomes \_SB_.OSID. When the _OSI to XOSI patch is applied, it becomes \_SBX.OSID, which breaks it.
Rehabman mentions the OSID to XSID patch somewhere, might look in his laptop config.plist repo - I think most of the config.plist in there has it.

The below option could also work, though I honestly think _OSI to XOSI works better, at least on laptops. The below option doesn't always work.

Spoiler

 The second option is to create an OSYS variable within the scope of the I2C0 device. You'd be adding something like this below to a SSDT:




If (_OSI("Darwin"))
{
  Scope (\_SB.PCI0.I2C0)
  {
    Name (OSYS, 0x07DF) // I2C0 and 
  }
}

This would change OSYS just within the scope of the I2C0 (and TPD0) device. This doesn't always work, since some methods called from I2C0 (such as LSTA in my DSDT) are in a different scope. For instance, on my X1 Extreme, _STA for I2C0 calls LSTA, which is under the \_SB.PCI0 scope. This means that LSTA would check for OSYS under the \_SB.PCI0 scope. When _INI is called under \_SB.PCI0 during boot, the _INI method sets OSYS to some default value before checking for an OS, which would overwrite whatever I set in the SSDT above. Below is an example of the _INI method from my DSDT:




Method (_INI, 0, Serialized)  // _INI: Initialize
        {
            TBPE = 0x01
            OSYS = 0x03E8 // OSYS is always set to this when _INI is called, unless it detects a valid OS
            If (CondRefOf (\XOSI))
            {
                If (\XOSI ("Windows 2001"))
                {
                    \WNTF = 0x01
                    \WXPF = 0x01
                    \WSPV = 0x00
                    OSYS = 0x07D1
                }
			.....

 


 

Edited by 1Revenger1
  • Thanks 1
Link to comment
Share on other sites

35 minutes ago, pananning said:

My touchpad doesn't work. I tried to solve it but failed, so I asked everyone for help.Please do not use SSDT-XOSI.aml, because it will lead to the invalidation of brightness level.174026jnbzdvc5mhp156xn_edit_285647815410580.png.dcdf84c8e9e8dd450f13bc29963c68c9.png174027vfofmmp2fn7ww9wd_edit_285657423782453.png.e57499631cf4122d3114671c8f97c089.png174028jv66o6lzedvzllox_edit_285668831190785.png.b08095c74f4f5ffd6f605dd42239305b.pngDSDT.aml

DSDT.aml was extracted with Clover.

My computer is an i5-8250u laptop, which is Xiaomi Ruby 15.6.

5 minutes ago, 1Revenger1 said:

It'd be helpful if you could put the laptop and it's specs in your signature.

On Dells, _OSI to XOSI does break brightness keys unless you do OSID to XSID first. This is because on Dell machines, there is an ACPI method named \_SB.OSID. ACPI names are always padded out to 4 characters with underscores, so it becomes \_SB_.OSID. When the _OSI to XOSI patch is applied, it becomes \_SBX.OSID, which breaks it.
Rehabman mentions the OSID to XSID patch somewhere, might look in his laptop config.plist repo - I think most of the config.plist in there has it.

The below option could also work, though I honestly think _OSI to XOSI works better, at least on laptops. The below option doesn't always work.

  Hide contents

 The second option is to create an OSYS variable within the scope of the I2C0 device. You'd be adding something like this below to a SSDT:



If (_OSI("Darwin"))
{
  Scope (\_SB.PCI0.I2C0)
  {
    Name (OSYS, 0x07DF) // I2C0 and 
  }
}

This would change OSYS just within the scope of the I2C0 (and TPD0) device. This doesn't always work, since some methods called from I2C0 (such as LSTA in my DSDT) are in a different scope. For instance, on my X1 Extreme, _STA for I2C0 calls LSTA, which is under the \_SB.PCI0 scope. When _INI is called under \_SB.PCI0, the _INI method sets OSYS to some default value before checking for an OS, which would overwrite whatever I set in the SSDT above. Below is an example of the _INI method from my DSDT:



Method (_INI, 0, Serialized)  // _INI: Initialize
        {
            TBPE = 0x01
            OSYS = 0x03E8 // OSYS is always set to this when _INI is called, unless it detects a valid OS
            If (CondRefOf (\XOSI))
            {
                If (\XOSI ("Windows 2001"))
                {
                    \WNTF = 0x01
                    \WXPF = 0x01
                    \WSPV = 0x00
                    OSYS = 0x07D1
                }
			.....

 


 

Thank you. I'll try it when I have time.

Link to comment
Share on other sites

56 minutes ago, pananning said:

My touchpad doesn't work. I tried to solve it but failed, so I asked everyone for help.Please do not use SSDT-XOSI.aml, because it will lead to the invalidation of brightness level.DSDT.aml

DSDT.aml was extracted with Clover.

Clover can patch DSDT with several methods. But I can't tell you what namely seeing nothing. This is investigation required.

May be FixDarwin7 will be enough.

Link to comment
Share on other sites

7 hours ago, 1Revenger1 said:

It'd be helpful if you could put the laptop and it's specs in your signature.

On Dells, _OSI to XOSI does break brightness keys unless you do OSID to XSID first. This is because on Dell machines, there is an ACPI method named \_SB.OSID. ACPI names are always padded out to 4 characters with underscores, so it becomes \_SB_.OSID. When the _OSI to XOSI patch is applied, it becomes \_SBX.OSID, which breaks it.
Rehabman mentions the OSID to XSID patch somewhere, might look in his laptop config.plist repo - I think most of the config.plist in there has it.

The below option could also work, though I honestly think _OSI to XOSI works better, at least on laptops. The below option doesn't always work.

  Reveal hidden contents

 The second option is to create an OSYS variable within the scope of the I2C0 device. You'd be adding something like this below to a SSDT:



If (_OSI("Darwin"))
{
  Scope (\_SB.PCI0.I2C0)
  {
    Name (OSYS, 0x07DF) // I2C0 and 
  }
}

This would change OSYS just within the scope of the I2C0 (and TPD0) device. This doesn't always work, since some methods called from I2C0 (such as LSTA in my DSDT) are in a different scope. For instance, on my X1 Extreme, _STA for I2C0 calls LSTA, which is under the \_SB.PCI0 scope. This means that LSTA would check for OSYS under the \_SB.PCI0 scope. When _INI is called under \_SB.PCI0 during boot, the _INI method sets OSYS to some default value before checking for an OS, which would overwrite whatever I set in the SSDT above. Below is an example of the _INI method from my DSDT:



Method (_INI, 0, Serialized)  // _INI: Initialize
        {
            TBPE = 0x01
            OSYS = 0x03E8 // OSYS is always set to this when _INI is called, unless it detects a valid OS
            If (CondRefOf (\XOSI))
            {
                If (\XOSI ("Windows 2001"))
                {
                    \WNTF = 0x01
                    \WXPF = 0x01
                    \WSPV = 0x00
                    OSYS = 0x07D1
                }
			.....

 


 

Success, thank you.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...