本方法提供一种对 I2C 设备实施 Hotpatch 补丁的解决方案。本方法不涉及 I2C 补丁具体过程和细节。有关更多的 I2C 方面内容详见:
-
@penghubingzhou:https://www.penghubingzhou.cn
-
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 补丁(略)