gf0067 发表于 2023-6-1 16:32

触摸版只能强制轮询模式?怎么办

机型是 联想 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 也看不到这两个原设备被注册到系统里

ren1 发表于 2023-6-1 17:55

我是来抢楼的

xlhero 发表于 2023-6-1 19:28

黑哥的论坛,要支持

woelde 发表于 2023-6-1 21:21

:lol20年水粉

liualing 发表于 2023-6-1 22:38

我喜欢黑妹,可以约起来吗

andyabc 发表于 2023-6-1 23:57

水窝老用户,支持下

联想IBM 发表于 2023-6-2 06:50

我喜欢黑妹,可以约起来吗

WWG1969 发表于 2023-6-2 08:05

不错,支持下楼主

bboo1218 发表于 2023-6-2 09:06

23年水窝,感谢有你

iamyuzheng 发表于 2023-6-2 10:16

我是来抢楼的
页: [1] 2 3
查看完整版本: 触摸版只能强制轮询模式?怎么办