本方法提供一种对 I2C 设备实施 Hotpatch 补丁的解决方案。本方法不涉及 I2C 补丁具体过程和细节。有关更多的 I2C 方面内容详见:
- @penghubingzhou:https://www.penghubingzhou.cn
- @神楽小白(GZ小白):https://blog.gzxiaobai.cn/
- @神楽小白(GZ小白)的触摸板热补丁范例库:https://github.com/GZXiaoBai/Hackintosh-TouchPad-Hotpatch
- VoodooI2C 官方文档:https://voodooi2c.github.io/#GPIO%20Pinning/GPIO%20Pinning
- VoodooI2C 官方支持帖 https://www.tonymacx86.com/threads/voodooi2c-help-and-support.243378/
- Q群:
837538729
(1 群已满),921143329
(2 群)
-
禁止原 I2C 设备。详见《二进制更名与预置变量》。
/* * GPI0 enable */ DefinitionBlock("", "SSDT", 2, "OCLT", "GPI0", 0) { External(GPEN, FieldUnitObj) // External(GPHD, FieldUnitObj) Scope (\) { If (_OSI ("Darwin")) { GPEN = 1 // GPHD = 2 } } }
-
新建一个 I2C 设备
TPXX
,将原设备所有内容移植到TPXX
中。 -
修正
TPXX
有关内容:-
原 I2C 设备
名称
全部替换为TPXX
-
修正
_STA
部分为:Method (_STA, 0, NotSerialized) { If (_OSI ("Darwin")) { Return (0x0F) } Else { Return (Zero) } }
-
修正禁止原 I2C 设备时用到的变量的
有关内容
,使其符合逻辑关系。 -
修正涉及到操作系统变量 OSYS 的
有关内容
,使其符合逻辑关系。
-
-
排除错误。
-
I2C 补丁。
-
使用《预置变量法》禁止
TPD1
。Scope (\) { If (_OSI ("Darwin")) { SDS1 = 0 } }
-
新建设备
TPXX
,将原TPD1
所有内容移植到TPXX
中。External(_SB.PCI0.I2C1, DeviceObj) Scope (_SB.PCI0.I2C1) { Device (TPXX) { 原TPD1内容 } }
-
修正
TPXX
内容-
所有
TPD1
替换为TPXX
。 -
补丁中
_STA
部分替换为:Method (_STA, 0, NotSerialized) { If (_OSI ("Darwin")) { Return (0x0F) } Else { Return (Zero) } }
-
查找
SDS1
(禁止TPD1
时用到的变量),将原If (SDS1...)
修改为If (one)
。 -
查找
OSYS
,删除(注释掉)以下内容://If (LLess (OSYS, 0x07DC)) //{ // SRXO (GPDI, One) //}
注:
OSYS
小于0x07DC
时,I2C 设备不工作(0x07DC
代表 Windows8)。
-
-
添加外部引用
External...
修补所有错误。 -
I2C 补丁(略)