Contribute
Register

VoodooI2C Help and Support

Status
Not open for further replies.
It means you haven't properly followed the instructions on the GPIO pinning guide.
But in ELAN 1300 kext it worked. My ioreg with ELAN1300 1.0.4 kext is here. #1884

What I have done...please enlighten,,
1. Adding the VoodooI2C DSDT Patch Repository --> maciasl Done
2. Windows Patches Apply --> its win10
3. GPIO Controller Patches Apply [SKL+]-->its gen8 coffelake
but controllers i2c [SKL ]need too? I dont, maybe it need. it said unhurt if applied.
4. GPIO Patches (Skylake+ systems) there you go,,,

Pin Enabling (Apply for each I2C device)
I have only touchpad no touchscreen.
Code:
             I2C HID Device ACPI\ELAN1300\1     ACPI\PNP0C50    \_SB.PCI0.I2C1.ETPD
           Intel(R) Serial IO GPIO Host Controller - INT344B \_SB.PCI0.GPI0
            Intel(R) Serial IO I2C Host Controller - 9D60 \_SB.PCI0.I2C0
            Intel(R) Serial IO I2C Host Controller - 9D61 \_SB.PCI0.I2C1

Step 1: Determining your interrupt pinning situation.
Code:
From ioreg
IOACPIPlane:/_SB/PCI0@0/I2C1@150001/ETPD@1
IOInterruptSpecifiers 6d 00 00 00 03 00 00 00
it has iointerruptspecifiers mean need dsdt patching.
6d is 109, the max 2f = 47 means need dsdt patching.

Step 1.b. make sure that your I2C Serial Bus Name is correctly labelled...
Code:
    Scope (_SB.PCI0.I2C1)
    {
        Device (ETPD)
        {

         //Suspect start

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

        //Suspect end

      }
    }


changed to..

Code:
    Scope (_SB.PCI0.I2C1)
    {
        Device (ETPD)
        {

     
         //Suspect start..

            Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings
            {
                Name (SBFB, ResourceTemplate ()
                {
                    I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
                        AddressingMode7Bit, "\\_SB.PCI0.I2C1",
                        0x00, ResourceConsumer, , Exclusive,
                        )
                })
                Return (SBFB)
            }

        //Suspect end continues

      }
    }

Step 2a: Ensuring your device is GPIO-pinned
Strangely on the DSDT _SB.PCIO.I2C0 has TPD0,HDAC,UCM1,UCM2. this TPD0 is pad right?, and _SB_PCIO.I2C1 has TPL1,IMP3 no ETDP...

Code:
 Scope (_SB.PCI0.I2C0)
    {
        Device (TPD0)
        {
            Name (HID2, Zero)
            Name (SBFB, ResourceTemplate ()
            {
                I2cSerialBusV2 (0x0020, ControllerInitiated, 0x00061A80,
                    AddressingMode7Bit, "\\_SB.PCI0.I2C0",
                    0x00, ResourceConsumer, _Y24, Exclusive,
                    )
            })
            Name (SBFI, ResourceTemplate ()
            {
                Interrupt (ResourceConsumer, Level, ActiveLow, ExclusiveAndWake, ,, _Y25)
                {
                    0x00000000,
                }
            })
            Name (SBFG, ResourceTemplate ()
            {
                GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
                    "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x0000
                    }
            })

       // continues to..
            Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                If (LLess (OSYS, 0x07DC))
                {
                    Return (SBFI)
                }

                If (LEqual (SDM0, Zero))
                {
                    Return (ConcatenateResTemplate (SBFB, SBFG))
                }

                Return (ConcatenateResTemplate (SBFB, SBFI))
            }
        }


     //and...

    Scope (_SB.PCI0.I2C1)
    {
        Device (TPL1)
        {
            Name (HID2, Zero)
            Name (SBFB, ResourceTemplate ()
            {
                I2cSerialBusV2 (0x004C, ControllerInitiated, 0x00061A80,
                    AddressingMode7Bit, "\\_SB.PCI0.I2C1",
                    0x00, ResourceConsumer, _Y2A, Exclusive,
                    )
            })
            Name (SBFG, ResourceTemplate ()
            {
                GpioInt (Level, ActiveLow, Exclusive, PullDefault, 0x0000,
                    "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x0000
                    }
            })
            Name (SBFI, ResourceTemplate ()
            {
                Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, _Y2B)
                {
                    0x00000000,
                }
            })
       // continues to..
            Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                If (LLess (OSYS, 0x07DC))
                {
                    Return (SBFI)
                }

                If (LEqual (SDM1, Zero))
                {
                    Return (ConcatenateResTemplate (SBFB, SBFG))
                }

                Return (ConcatenateResTemplate (SBFB, SBFI))
            }
        }

This Name may appear in the root level of your device entry or it could possibly appear in the _CRS method.
My case is ROOT LEVEL right?
Zero on pinned list said to be unpinned right ?

Step 2b: Adding in the missing Resource Template


If the device is unpinned, insert the following into the root of device's entry:
Code:
   Name (SBFG, ResourceTemplate ()
   {
       GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
           "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
           )
           {   // Pin list
               0x0000
           }
   })

insert where? I already got it...
may now consider your device to be root pinned (but not well-root pinned) and can proceed to Step 2d.
however step 2c is interesting...
If you can find a line that looks like this:
Code:
       Return (ConcatenateResTemplate (SBFB, SBFG))
Then your device is well-pinned.
Warning: this is not the same as the following:
Code:
       Return (ConcatenateResTemplate (SBFB, SBFI))
you need SBFG and not SBFI.

I got both you see with if...
Code:
              If (LEqual (SDM1, Zero))
                {
                    Return (ConcatenateResTemplate (SBFB, SBFG))
                }

                Return (ConcatenateResTemplate (SBFB, SBFI))
            }

So I changed bot i2c0 and i2c1 on _CRS
Code:
              If (LEqual (SDM1, Zero))
                {
                    Return (ConcatenateResTemplate (SBFB, SBFG))
                }

                Return (ConcatenateResTemplate (SBFB, SBFG))
            }

Step 2d: Manually pinning your device
6D right?

Look up the device's hexadecimal APIC pin number in the right hand column.
https://github.com/coreboot/coreboot/blob/master/src/soc/intel/skylake/include/soc/gpio_defs.h#L43
#define GPP_D13_IRQ 0x6d

d13 ! lucky number

Go to second table
https://github.com/coreboot/coreboo...kylake/include/soc/gpio_soc_defs.h#L37#define GPP_D13 #define GPP_D13 85

85 decimal to hexa is 55 !

SO I modified into
Code:
 Scope (_SB.PCI0.I2C0)
    {
        Device (TPD0)
        {
            Name (HID2, Zero)
            Name (SBFB, ResourceTemplate ()
            {
                I2cSerialBusV2 (0x0020, ControllerInitiated, 0x00061A80,
                    AddressingMode7Bit, "\\_SB.PCI0.I2C0",
                    0x00, ResourceConsumer, _Y24, Exclusive,
                    )
            })
            Name (SBFI, ResourceTemplate ()
            {
                Interrupt (ResourceConsumer, Level, ActiveLow, ExclusiveAndWake, ,, _Y25)
                {
                    0x00000000,
                }
            })
            Name (SBFG, ResourceTemplate ()
            {
                GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
                    "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x55
                    }
            })

       // continues to..

            Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                If (LLess (OSYS, 0x07DC))
                {
                    Return (SBFI)
                }

                If (LEqual (SDM0, Zero))
                {
                    Return (ConcatenateResTemplate (SBFB, SBFG))
                }

                Return (ConcatenateResTemplate (SBFB, SBFG))
            }
        }


     //and...


    Scope (_SB.PCI0.I2C1)
    {
        Device (TPL1)
        {
            Name (HID2, Zero)
            Name (SBFB, ResourceTemplate ()
            {
                I2cSerialBusV2 (0x004C, ControllerInitiated, 0x00061A80,
                    AddressingMode7Bit, "\\_SB.PCI0.I2C1",
                    0x00, ResourceConsumer, _Y2A, Exclusive,
                    )
            })
            Name (SBFG, ResourceTemplate ()
            {
                GpioInt (Level, ActiveLow, Exclusive, PullDefault, 0x0000,
                    "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x55
                    }
            })
            Name (SBFI, ResourceTemplate ()
            {
                Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, _Y2B)
                {
                    0x00000000,
                }
            })

       // continues to..
            Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                If (LLess (OSYS, 0x07DC))
                {
                    Return (SBFI)
                }

                If (LEqual (SDM1, Zero))
                {
                    Return (ConcatenateResTemplate (SBFB, SBFG))
                }

                Return (ConcatenateResTemplate (SBFB, SBFG))
            }
        }

Step 2e: Ensuring your DSDT notifies the system that your device is GPIO pinned
make sure that there are no other Return statements in your _CRS method apart from the following at the end:
Code:
   Return (ConcatenateResTemplate (SBFB, SBFG))

maybe should I go change
Code:
            Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                If (LLess (OSYS, 0x07DC))
                {
                    Return (SBFI)
                }

                If (LEqual (SDM1, Zero))
                {
                    Return (ConcatenateResTemplate (SBFB, SBFG))
                }

                Return (ConcatenateResTemplate (SBFB, SBFI))
            }
        }

to

Code:
            Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                If (LLess (OSYS, 0x07DC))
                {
                    Return (SBFI)
                }


                Return (ConcatenateResTemplate (SBFB, SBFG))
            }
        }

Can you pointed where I was missing? I think I miss on patching x0055 instead 0x55
 
Last edited:
Found the mistake!!

it always in the same scope on lower dsdt Scope
Code:
(_SB.PCI0.I2C1)
    {
        Device (ETPD)
never going up like on step 2a to 2e... on
Scope (_SB.PCI0.I2C0 ) and Scope (_SB.PCI0.I2C1 ) that has no ETPD...
the top only for cluing root unpinned zero..
I curious when it said paste...

From
Code:
    Scope (_SB.PCI0.I2C1)
    {
        Device (ETPD)
        {
            Name (_ADR, One)  // _ADR: Address
            Name (ETPH, Package (0x16)
            {
                "ELAN1200",
                "ELAN1201",
                "ELAN1203",
                "ELAN1200",
                "ELAN1201",
                "ELAN1300",
                "ELAN1301",
                "ELAN1300",
                "ELAN1301",
                "ELAN1000",
                "ELAN1200",
                "ELAN1200",
                "ELAN1200",
                "ELAN1200",
                "ELAN1200",
                "ELAN1203",
                "ELAN1203",
                "ELAN1201",
                "ELAN1300",
                "ELAN1300",
                "ELAN1200",
                "ELAN1300"
            })
            Name (FTPH, Package (0x05)
            {
                "FTE1001",
                "FTE1200",
                "FTE1200",
                "FTE1300",
                "FTE1300"
            })
            Method (_HID, 0, NotSerialized)  // _HID: Hardware ID
            {
                If (And (TPDI, 0x04))
                {
                    Return (DerefOf (Index (ETPH, TPHI)))
                }

                If (And (TPDI, 0x10))
                {
                    Return (DerefOf (Index (FTPH, TPHI)))
                }

                Return ("ELAN1010")
            }

            Name (_CID, "PNP0C50")  // _CID: Compatible ID
            Name (_UID, One)  // _UID: Unique ID
            Name (_S0W, 0x03)  // _S0W: S0 Device Wake State
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                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 (LOr (LNotEqual (TPIF, One), LAnd (DSYN, One)))
                {
                    Return (Zero)
                }

                Return (0x0F)
            }

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

to

Code:
    Scope (_SB.PCI0.I2C1)
    {
        Device (ETPD)
        {
           //FIX1 start
            Name (SBFG, ResourceTemplate ()
            {
                GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
                    "\\_SB.PCI0.GPI0", 0x00, ResourceConsumer, ,
                    )
                    {   // Pin list
                        0x0055
                    }
            })
            //FIX1 end
            Name (_ADR, One)  // _ADR: Address
            Name (ETPH, Package (0x16)
            {
                "ELAN1200",
                "ELAN1201",
                "ELAN1203",
                "ELAN1200",
                "ELAN1201",
                "ELAN1300",
                "ELAN1301",
                "ELAN1300",
                "ELAN1301",
                "ELAN1000",
                "ELAN1200",
                "ELAN1200",
                "ELAN1200",
                "ELAN1200",
                "ELAN1200",
                "ELAN1203",
                "ELAN1203",
                "ELAN1201",
                "ELAN1300",
                "ELAN1300",
                "ELAN1200",
                "ELAN1300"
            })
            Name (FTPH, Package (0x05)
            {
                "FTE1001",
                "FTE1200",
                "FTE1200",
                "FTE1300",
                "FTE1300"
            })
            Method (_HID, 0, NotSerialized)  // _HID: Hardware ID
            {
                If (And (TPDI, 0x04))
                {
                    Return (DerefOf (Index (ETPH, TPHI)))
                }

                If (And (TPDI, 0x10))
                {
                    Return (DerefOf (Index (FTPH, TPHI)))
                }

                Return ("ELAN1010")
            }

            Name (_CID, "PNP0C50")  // _CID: Compatible ID
            Name (_UID, One)  // _UID: Unique ID
            Name (_S0W, 0x03)  // _S0W: S0 Device Wake State
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                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 (LOr (LNotEqual (TPIF, One), LAnd (DSYN, One)))
                {
                    Return (Zero)
                }

                Return (0x0F)
            }

            Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings
            {
                Name (SBFB, ResourceTemplate ()
                {
                    I2cSerialBusV2 (0x0015, ControllerInitiated, 0x00061A80,
                        AddressingMode7Bit, "\\_SB.PCI0.I2C1",
                        0x00, ResourceConsumer, , Exclusive,
                        )
                })
                // FIX2 start
                Return (ConcatenateResTemplate (SBFB, SBFG)) //FIX2 end
            }
        }
    }

and put the voodooi2chid.kext voodooi2c.kext on the clover extra kext...
with same gpio pinning.

next question?
AppleHPM.kext, AppleIntelLpssI2c.kext, AppleIntelLpssI2cController.kext no need to erase from S/L/E or not?
 
Hello. The laptop HP-360.
I have long tried to patch DSDT, look for GPIO and I did not succeed (I probably did not translate the instructions). Then I without patches and GPIO installed the kext in CLOVER / KEXT and I got a touch screen.

But there are several questions.
1. Double-tap does not work with one finger to open the file on the desktop. (If you open the finder, then the double tap works in it)
2. Increase / decrease in dilution / reduction of two fingers does not work
3. No on-screen keyboard
4. When the display is unfolded (to get a laptop in the form of a tablet), the keyboard does not turn off

I enclose the files. Advise how to be?
 

Attachments

  • RehabMan.zip
    3.1 MB · Views: 96
next question?
AppleHPM.kext, AppleIntelLpssI2c.kext, AppleIntelLpssI2cController.kext no need to erase from S/L/E or not?

Installing to Clover means that you do not need to remove these kexts. Also in the future please do not post such long messages with code in them. They are difficult to read and make it harder to help you.

Hello. The laptop HP-360.
I have long tried to patch DSDT, look for GPIO and I did not succeed (I probably did not translate the instructions). Then I without patches and GPIO installed the kext in CLOVER / KEXT and I got a touch screen.

But there are several questions.
1. Double-tap does not work with one finger to open the file on the desktop. (If you open the finder, then the double tap works in it)
2. Increase / decrease in dilution / reduction of two fingers does not work
3. No on-screen keyboard
4. When the display is unfolded (to get a laptop in the form of a tablet), the keyboard does not turn off

I enclose the files. Advise how to be?

Sounds like your touchscreen is a USB device and thus does not need any DSDT patches (this is made clear in the instruction site).

1. You need to fiddle with the double tap speed in the system preference pane to get the desirable speed.
2. I do not understand what this means. If you mean pinch to zoom then this is not a supported gesture (yet).
3. And? What does that have to do with VoodooI2C?
4. This also has nothing to do with VoodooI2C. Convertible tables and laptops have separate devices that are responsible for notifying the system that the device has converted from/to tablet mode. Real Macbooks don't have such a thing so macOS does not implement any drivers for these situations. VoodooI2C is an I2C input driver, not a convertible tablet driver.

Also note that (were you to have an issue) RehabMan's debug archives are not the VoodooI2C troubleshooting archives. The debug archives he requests are not useful to me in troubleshooting VoodooI2C issues.
 
Also note that (were you to have an issue) RehabMan's debug archives are not the VoodooI2C troubleshooting archives. The debug archives he requests are not useful to me in troubleshooting VoodooI2C issues.

FYI...
Looking at your instructions for troubleshooting, I think gen_debug.sh provides all the information requested.
If you believe something is missing, it can be added to gen_debug.sh...
 
Sounds like your touchscreen is a USB device and thus does not need any DSDT patches (this is made clear in the instruction site).

in windows the tach screen is displayed as a HID I2C device

1. You need to fiddle with the double tap speed in the system preference pane to get the desirable speed.

where it can be adjusted, in the pref panel, the double-click speed adjustment does not affect in any way.
3. And? What does that have to do with VoodooI2C?

How to type text using the touch screen, if there is no on-screen keyboard, or Woodoo does not do this


Sending new files
 

Attachments

  • Arhiv.zip
    14.5 MB · Views: 98
in windows the tach screen is displayed as a HID I2C device



where it can be adjusted, in the pref panel, the double-click speed adjustment does not affect in any way.


How to type text using the touch screen, if there is no on-screen keyboard, or Woodoo does not do this


Sending new files
Slowing down the double click speed should improve the performance of the touchscreen.

VoodooI2C doesn't provide an on-screen keyboard and I don't know why you think it would. VoodooI2C is a driver. You can either use the one built into macOS or download a 3rd party one.
 
Status
Not open for further replies.
Back
Top