触摸版只能强制轮询模式?怎么办
机型是 联想 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 也看不到这两个原设备被注册到系统里
ssdt 预置参数GPDI试试
页:
[1]