cleveriax 发表于 2016-8-12 01:11

[翻译] Skylake下I2C触摸板驱动

引用:https://github.com/maximevince/VoodooI2CPCI/releases/tag/v1.0VoodooI2C driver that works on my Skylake ASUS UX305CA, with ELAN1000 touchpad.翻译过来给大家参考。
第一步,禁止Apple I2C驱动加载。sudo mv /System/Library/Extensions/AppleIntelLpssI2C.kext /System/Library/Extensions/AppleIntelLpssI2C.kext.old
第二步,给DSDT打补丁(以下范例供参考)。 # I2C 控制器Scope (_SB.PCI0)
    {
      Device (I2C0)
      {
            Name (LINK, "\\_SB.PCI0.I2C0")
            Name (_HID, "INT3442")// _HID: Hardware ID
            Method (_HRV, 0, NotSerialized)// _HRV: Hardware Revision
            {
                Return (LHRV (SB10))
            }

            Method (_CRS, 0, NotSerialized)// _CRS: Current Resource Settings
            {
                Return (LCRS (SMD0, SB00, SIR0))
            }

            Method (_PSC, 0, NotSerialized)// _PSC: Power State Current
            {
                GETD (SB10)
            }

            Method (_PS0, 0, NotSerialized)// _PS0: Power State 0
            {
                LPD0 (SB10)
            }

            Method (_PS3, 0, NotSerialized)// _PS3: Power State 3
            {
                LPD3 (SB10)
            }

            Method (_STA, 0, NotSerialized)// _STA: Status
            {
                Return (LSTA (SMD0))
            }

            Name (_ADR, 0x00150000)// _ADR: Address
            Method (XDSM, 4, Serialized)
            {
                If (PCIC (Arg0))
                {
                  Return (PCID (Arg0, Arg1, Arg2, Arg3))
                }

                Return (Zero)
            }
      }
    } # I2C 触控板Scope (_SB.PCI0.I2C0)
    {
      Device (ETPD)
      {
            Name (_ADR, One)// _ADR: Address
            Method (_HID, 0, NotSerialized)// _HID: Hardware ID
            {
                If (ELAN)
                {
                  Return ("ELAN1000")
                }

                If (FOLT)
                {
                  Return ("FTE1001")
                }

                Return ("ELAN1010")
            }

            Name (_CID, "PNP0C50")// _CID: Compatible ID
            Name (_UID, One)// _UID: Unique ID
            Name (_S0W, 0x03)// _S0W: S0 Device Wake State
            Method (_S3W, 0, NotSerialized)// _S3W: S3 Device Wake State
            {
                If (LEqual (S0ID, Zero))
                {
                  Return (0x03)
                }
                Else
                {
                  Return (Zero)
                }
            }

            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg0, ToUUID ("3cdff6f7-4267-4555-ad05-b30a3d8938de") /* HID I2C Device */))
                {
                  If (LEqual (Arg2, Zero))
                  {
                        If (LEqual (Arg1, One))
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                          
                            })
                        }
                        Else
                        {
                            Return (Buffer (One)
                            {
                                 0x00                                          
                            })
                        }
                  }

                  If (LEqual (Arg2, One))
                  {
                        Return (One)
                  }
                }
                Else
                {
                  Return (Buffer (One)
                  {
                         0x00                                          
                  })
                }
            }

            Method (_STA, 0, NotSerialized)// _STA: Status
            {
                If (LEqual (TPIF, Zero))
                {
                  Return (Zero)
                }

                If (And (DSYN, One))
                {
                  Return (Zero)
                }

                Return (0x0F)
            }

            Method (_CRS, 0, Serialized)// _CRS: Current Resource Settings
            {
                Name (SBFI, ResourceTemplate ()
                {
                  I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
                        AddressingMode7Bit, "\\_SB.PCI0.I2C0",
                        0x00, ResourceConsumer, , Exclusive,
                        )
                  Interrupt (ResourceConsumer, Level, ActiveLow, Shared, ,, )
                  {
                        0x0000006D,
                  }
                })
                Return (SBFI)
            }
      }
    }

PS:安装kext前可以先手动加载看看。[        DISCUZ_CODE_148        ]gt; sudo cp -R ~/Downloads/VoodooI2C.kext /tmp
[        DISCUZ_CODE_148        ]gt; sudo kextutil -v /tmp/VoodooI2C.kext

yanghenry 发表于 2016-9-16 16:28

谢谢,下载了试试看

mengzhilan 发表于 2016-11-15 13:32

大神,请问小米笔记本触控板驱动了吗?

ynt02468 发表于 2016-12-25 23:10

一定要修改dsdt吗?

ynt02468 发表于 2017-1-11 16:10

修改dsdt重启,dsdt错误,然后voodooI2C错误》

豪客大人 发表于 2017-2-23 16:41

dsdt修改完毕。。但是voodooI2C就panic了。。

thanatos2057 发表于 2017-4-6 21:28


dsdt修改完毕。。但是voodooI2C就panic了。。

thanatos2057 发表于 2017-4-11 14:33

谢谢,下载了试试看

thanatos2057 发表于 2017-4-11 14:34

谢谢,下载了试试看

tsepangching 发表于 2017-4-22 17:19

谢谢分享。

蓝牙童梦 发表于 2017-5-17 16:13

感谢楼主成都热心分享

yanghenry 发表于 2017-7-2 07:26

下载了这个链接https://github.com/maximevince/VoodooI2CPCI/releases/tag/v1.0里的voodooI2C.kext 安装后就panic了

yanghenry 发表于 2017-7-2 17:54

禁用AppleIntelLpssI2C.kext,再安装链接里的voodooI2C,就死机

ID1ID 发表于 2018-1-29 21:24

谢谢老大分享

kofachel 发表于 2020-5-12 17:08

感谢楼主分享!
页: [1]
查看完整版本: [翻译] Skylake下I2C触摸板驱动