pananning Posted September 12, 2021 Share Posted September 12, 2021 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. Quote Link to comment Share on other sites More sharing options...
1Revenger1 Posted September 12, 2021 Share Posted September 12, 2021 (edited) 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 September 12, 2021 by 1Revenger1 1 Quote Link to comment Share on other sites More sharing options...
pananning Posted September 12, 2021 Author Share Posted September 12, 2021 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.DSDT.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. Quote Link to comment Share on other sites More sharing options...
Slice Posted September 12, 2021 Share Posted September 12, 2021 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. Quote Link to comment Share on other sites More sharing options...
pananning Posted September 12, 2021 Author Share Posted September 12, 2021 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.