机型是 联想 Flex5-15
触摸板的硬件名称是 MSFT0001
自己学着 YOGA-C940 的机型打了补丁。在中断模式下,那个触摸板非常卡顿。移动指针,一卡一卡的
这个机子和 C940 几乎一样的配置,只是这个是 15.6 寸,当然了,BIOS 有很大区别,因为 C940 是 YOGA 系列的
目前的情况是
中断模式下触摸板很卡顿,触摸屏没有反应
加入启动参数 -vi2c-force-polling 强制使用轮询模式,那么触摸屏与触控板都能正常工作
但是轮询模式吗,貌似比较消耗 CPU 资源。有没有大佬探讨下呢
我贴一下 dsl 代码
XPD0 触摸板- DefinitionBlock ("", "SSDT", 2, "Tasc11", "XPD0", 0x00000000){ External (_SB_.GNUM, MethodObj) // 1 Arguments External (_SB_.GPDI, FieldUnitObj) External (_SB_.INUM, MethodObj) // 1 Arguments External (_SB_.PCI0.HIDD, MethodObj) // 5 Arguments External (_SB_.PCI0.HIDG, IntObj) External (_SB_.PCI0.I2C0, DeviceObj) External (_SB_.PCI0.I2C0.I2CX, IntObj) External (_SB_.PCI0.I2CM, MethodObj) // 3 Arguments External (_SB_.PCI0.TP7D, MethodObj) // 6 Arguments External (_SB_.PCI0.TP7G, IntObj) External (_SB_.SHPO, MethodObj) // 2 Arguments External (_SB_.TPDB, FieldUnitObj) External (_SB_.TPDH, FieldUnitObj) External (_SB_.TPDS, FieldUnitObj) External (_SB_.TPDT, FieldUnitObj) External (TPDB, FieldUnitObj) External (TPDH, FieldUnitObj) External (TPDM, FieldUnitObj) Scope (_SB.PCI0.I2C0) { Device (XPD0) { Name (HID2, Zero) Name (SBFB, ResourceTemplate () { I2cSerialBusV2 (0x0000, ControllerInitiated, 0x00061A80, AddressingMode7Bit, "NULL", 0x00, ResourceConsumer, _Y00, Exclusive, ) }) Name (SBFG, ResourceTemplate () { GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000, "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, , ) { // Pin list 0x0000 } }) Name (SBFX, ResourceTemplate () { GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000, "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, , ) { // Pin list 0x001B } }) Name (SBFI, ResourceTemplate () { Interrupt (ResourceConsumer, Level, ActiveLow, ExclusiveAndWake, ,, _Y01) { 0x00000000, } }) CreateWordField (SBFB, \_SB.PCI0.I2C0.XPD0._Y00._ADR, BADR) // _ADR: Address CreateDWordField (SBFB, \_SB.PCI0.I2C0.XPD0._Y00._SPE, SPED) // _SPE: Speed CreateWordField (SBFG, 0x17, INT1) CreateDWordField (SBFI, \_SB.PCI0.I2C0.XPD0._Y01._INT, INT2) // _INT: Interrupts Method (_INI, 0, NotSerialized) // _INI: Initialize { INT1 = GNUM (GPDI) INT2 = INUM (GPDI) SHPO (GPDI, One) _HID = "MSFT0001" HID2 = TPDH /* External reference */ BADR = TPDB /* External reference */ If ((TPDS == Zero)) { SPED = 0x000186A0 } If ((TPDS == One)) { SPED = 0x00061A80 } If ((TPDS == 0x02)) { SPED = 0x000F4240 } Return (Zero) } Name (_HID, "XXXX0000") // _HID: Hardware ID Name (_CID, "PNP0C50" /* HID Protocol Device (I2C bus) */) // _CID: Compatible ID Name (_S0W, 0x03) // _S0W: S0 Device Wake State Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method { If ((Arg0 == HIDG)) { Return (HIDD (Arg0, Arg1, Arg2, Arg3, HID2)) } If ((Arg0 == TP7G)) { Return (TP7D (Arg0, Arg1, Arg2, Arg3, SBFB, SBFG)) } Return (Buffer (One) { 0x00 // . }) } Method (_STA, 0, NotSerialized) // _STA: Status { If (_OSI ("Darwin")) { Return (0x0F) } Else { Return (Zero) } } Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings { If ((TPDM == Zero)) { Return (ConcatenateResTemplate (I2CM (I2CX, BADR, SPED), SBFG)) } Return (ConcatenateResTemplate (I2CM (I2CX, BADR, SPED), SBFI)) } } }}
复制代码
TPLX 触摸屏- DefinitionBlock ("", "SSDT", 2, "hack", "TPLX", 0x00000000){ External (_SB_.ADBG, MethodObj) // 1 Arguments External (_SB_.GNUM, MethodObj) // 1 Arguments External (_SB_.GPLI, IntObj) External (_SB_.INUM, MethodObj) // 1 Arguments External (_SB_.PCI0.HIDD, MethodObj) // 5 Arguments External (_SB_.PCI0.HIDG, IntObj) External (_SB_.PCI0.I2C1, DeviceObj) External (_SB_.PCI0.I2C1.I2CX, IntObj) External (_SB_.PCI0.I2CM, MethodObj) // 3 Arguments External (_SB_.PCI0.TP7D, MethodObj) // 6 Arguments External (_SB_.PCI0.TP7G, IntObj) External (_SB_.SGOV, MethodObj) // 2 Arguments External (_SB_.SGRA, MethodObj) // 2 Arguments External (_SB_.SHPO, MethodObj) // 2 Arguments External (_SB_.TPDH, FieldUnitObj) External (_SB_.TPDT, FieldUnitObj) External (TPID, IntObj) External (TPLB, IntObj) External (TPLH, IntObj) External (TPLM, IntObj) External (TPLS, IntObj) External (TPLT, FieldUnitObj) Scope (\) { If (_OSI ("Darwin")) { TPLT = 0x07 } } Scope (_SB.PCI0.I2C1) { Device (TPLX) { Name (HID2, Zero) Name (SBFB, ResourceTemplate () { I2cSerialBusV2 (0x0000, ControllerInitiated, 0x00061A80, AddressingMode7Bit, "NULL", 0x00, ResourceConsumer, _Y03, Exclusive, ) }) Name (SBFG, ResourceTemplate () { GpioInt (Level, ActiveLow, Exclusive, PullDefault, 0x0000, "\\_SB.GPI0", 0x00, ResourceConsumer, , ) { // Pin list 0x0000 } }) Name (SBFI, ResourceTemplate () { Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, _Y01) { 0x00000000, } }) CreateWordField (SBFB, \_SB.PCI0.I2C1.TPLX._Y03._ADR, BADR) // _ADR: Address CreateDWordField (SBFB, \_SB.PCI0.I2C1.TPLX._Y03._SPE, SPED) // _SPE: Speed CreateWordField (SBFG, 0x17, INT1) CreateDWordField (SBFI, \_SB.PCI0.I2C1.TPLX._Y01._INT, INT2) // _INT: Interrupts Method (_INI, 0, NotSerialized) // _INI: Initialize { /* If ((OSYS < 0x07DC)) { SRXO (GPLI, One) } */ INT1 = GNUM (GPLI) INT2 = INUM (GPLI) //If ((TPLM == Zero)) // { SHPO (GPLI, One) // } TPLT = 0x07 If ((TPLT == One)) { _HID = "ATML3432" HID2 = Zero BADR = 0x4C SPED = 0x00061A80 Return (Zero) } If ((TPLT == 0x02)) { _HID = "ATML2952" HID2 = Zero BADR = 0x4A SPED = 0x00061A80 Return (Zero) } If ((TPLT == 0x03)) { _HID = "ELAN2097" HID2 = One BADR = 0x10 SPED = 0x00061A80 Return (Zero) } If ((TPLT == 0x04)) { _HID = "NTRG0001" HID2 = One BADR = 0x07 SPED = 0x00061A80 Return (Zero) } If ((TPLT == 0x05)) { _HID = "NTRG0002" HID2 = One BADR = 0x64 SPED = 0x00061A80 Return (Zero) } If ((TPLT == 0x06)) { _HID = "WCOM508E" HID2 = One BADR = 0x0A If ((TPLS == Zero)) { SPED = 0x00061A80 } If ((TPLS == One)) { SPED = 0x00061A80 } If ((TPLS == 0x02)) { SPED = 0x000F4240 } Return (Zero) } If ((TPLT == 0x07)) { _HID = "WACF2200" HID2 = TPLH /* \TPLH */ BADR = TPLB /* \TPLB */ If ((TPLS == Zero)) { SPED = 0x000186A0 } If ((TPLS == One)) { SPED = 0x00061A80 } If ((TPLS == 0x02)) { SPED = 0x000F4240 } Return (Zero) } } Name (_HID, "XXXX0000") // _HID: Hardware ID Name (_CID, "PNP0C50" /* HID Protocol Device (I2C bus) */) // _CID: Compatible ID Name (_S0W, 0x04) // _S0W: S0 Device Wake State Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method { If ((Arg0 == HIDG)) { Return (HIDD (Arg0, Arg1, Arg2, Arg3, HID2)) } If ((Arg0 == TP7G)) { Return (TP7D (Arg0, Arg1, Arg2, Arg3, SBFB, SBFG)) } Return (Buffer (One) { 0x00 // . }) } Method (_PS0, 0, NotSerialized) // _PS0: Power State 0 { Sleep (0x64) SGOV (0x0603000E, One) Sleep (0x64) SGRA (0x06010003, One) ADBG ("touch panel ps0") } Method (_PS3, 0, NotSerialized) // _PS3: Power State 3 { Sleep (0x64) SGRA (0x06010003, Zero) Sleep (0x64) SGOV (0x0603000E, Zero) ADBG ("touch panel ps3") } Method (_STA, 0, NotSerialized) // _STA: Status { If (_OSI ("Darwin")) { Return (0x0F) } Return (Zero) } Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings { If ((TPLM == Zero)) { Return (ConcatenateResTemplate (I2CM (I2CX, BADR, SPED), SBFG)) } Return (ConcatenateResTemplate (I2CM (I2CX, BADR, SPED), SBFI)) } } }}
复制代码
* 其他信息:原设备名是 TPD0 TPL0
不打补丁的情况下。IORegistryExplorer 也看不到这两个原设备被注册到系统里 |