This is (another) Windows spoofing patch to activate I2C over HID device for VoodooI2C work. The main different between _OSI to XOSI
and SSDT-OSYS
is this patch will be set global, so there is a chance to break your working trackpad as some laptop have more than one pointing devices in your DSDT and all of them will be activated and make VoodooI2C attached to wrong I2C Device.
-
-
Save rockavoldy/eeff232c932bf3eaa01b47c4d9253dd3 to your computer and use it in GitHub Desktop.
DefinitionBlock ("", "SSDT", 2, "ACDT", "OSYS", 0) | |
{ | |
External (LINX, IntObj) | |
External (OSYS, FieldUnitObj) | |
Scope (_SB) | |
{ | |
Device (PCI1) | |
{ | |
Name (_ADR, Zero) // _ADR: Address | |
Method (_INI, 0, NotSerialized) // _INI: Initialize | |
{ | |
If (CondRefOf (\OSYS)) | |
{ | |
If (_OSI ("Linux")) | |
{ | |
OSYS = 0x03E8 | |
LINX = One | |
} | |
If (_OSI ("Windows 2001")) | |
{ | |
OSYS = 0x07D1 | |
} | |
If (_OSI ("Windows 2001 SP1")) | |
{ | |
OSYS = 0x07D1 | |
} | |
If (_OSI ("Windows 2001 SP2")) | |
{ | |
OSYS = 0x07D2 | |
} | |
If (_OSI ("Windows 2001.1")) | |
{ | |
OSYS = 0x07D3 | |
} | |
If (_OSI ("Windows 2006")) | |
{ | |
OSYS = 0x07D6 | |
} | |
If (_OSI ("Windows 2009")) | |
{ | |
OSYS = 0x07D9 | |
} | |
If (_OSI ("Windows 2012")) | |
{ | |
OSYS = 0x07DC | |
} | |
If (_OSI ("Windows 2013")) | |
{ | |
OSYS = 0x07DD | |
} | |
If (_OSI ("Windows 2015")) | |
{ | |
OSYS = 0x07DF | |
} | |
If (_OSI ("Windows 2017")) | |
{ | |
OSYS = 0x07E1 | |
} | |
If (_OSI ("Windows 2018")) | |
{ | |
OSYS = 0x07E2 | |
} | |
If (_OSI ("Darwin")) | |
{ | |
OSYS = 0x07DF | |
} | |
} | |
} | |
Method (_STA, 0, NotSerialized) // _STA: Status | |
{ | |
If (_OSI ("Darwin")) | |
{ | |
Return (0x0F) | |
} | |
Else | |
{ | |
Return (Zero) | |
} | |
} | |
} | |
} | |
} | |
@rockavoldy I finaly found where is the problem with this solution!
This method sets OSYS variable, but this preset only works in method _CRS of my touchpad device, but not in method _INI, where is also needed. I don't know why and how to fix it with preset variable method, so I prepare pretty hard-core ACPI rename :).
@kecinzer this patch should be global, maybe other touchpad device in your DSDT initialized too when try to set SDM1 = zero, so there is many devices activated. Try to eliminate other devices
@kecinzer this patch should be global, maybe other touchpad device in your DSDT initialized too when try to set SDM1 = zero, so there is many devices activated. Try to eliminate other devices
Yes, my laptop can have also touchscreen. Some people using my config reported that changing method from _OSI to XOSI breaks his touchscreen. So I thinking why is _OSI to XOSI method so bad? It seems to me more compatible and global.
So after many dreamless nights I return to day 0 solution using _OSI to XOSI rename and Windows spoofing.
@kecinzer this patch should be global, maybe other touchpad device in your DSDT initialized too when try to set SDM1 = zero, so there is many devices activated. Try to eliminate other devices
Yes, my laptop can have also touchscreen. Some people using my config reported that changing method from _OSI to XOSI breaks his touchscreen. So I thinking why is _OSI to XOSI method so bad? It seems to me more compatible and global.
So after many dreamless nights I return to day 0 solution using _OSI to XOSI rename and Windows spoofing.
@kecinzer, I have been following your posts in few websites since our laptop DSDT are similar. I am using CLOVER and I tried hard coded in DSDT but no success with the touchpad. It returns i2c bus busy. I think that's related to pin rather than _OSI. I will try to figure it out in next few days and share my progress.
@walechan did you make any progress on it? After some time I still would like to switch from _OSI to XOSI rename :).
@rockavoldy I finaly found where si the problem. By accident I mentioned, that trackpad works after sleep. And then I found this _INI function:
`Method (_INI, 0, NotSerialized) // _INI: Initialize
{
If ((OSYS < 0x07DC))
{
SRXO (GPDI, One)
}
Problem si
SHPO (GPDI, One)
. When I created rename to XINI and made my custom Method without this condition, it works like a charm.But I would like to do it without this renames. I tried set variable SDM1 = zero in SSDT, but it's not working, I don't know what I do wrong.
It's possible to make this variable preset?
I tried set SDM1 = zero in PCI1 _INI function, but without success. I tried put it in the () scope, but it still not working.
What is interesting is, that if I set SDM1 = One in PCI1 _INI function, trackpad works in polling mode.