ACPI gpio mapping

Discussion in 'UDOO X86' started by yamikiri, Jun 11, 2021.

  1. yamikiri

    yamikiri New Member

    Joined:
    Apr 24, 2017
    Messages:
    5
    Likes Received:
    1
    Hi,

    I'm trying to enable an HID I2C device on Windows 10 using UDOO x86 II advanced plus.
    The bus I choose is I2C1 on Braswell and interrupt pin is 37 in CN14.
    By using "\\_SB.PCI0.I2C1" in ACPI table, I can successfully access I2C in windows.
    But Interrupt seems not working, I couldn't map pin 37 to ACPI GPIO name.
    I thought it was "\\_SB.GPO3" and the offset is 4A, but it isn't....
    Is there any reference to guide me correctly configure these GPIO?

    Below is ASL I use to bring up HID device:
    Code:
    Device(MM)
    {
            Name(_ADR, 0)
            Name(_HID, "MSFT1234")
            Name(_SUB, "MCMM7150")
            Name(_CID, "PNP0C50")
            Name(_HRV, 1)
            Name(_UID, 3)
            Method(_CRS, 0x0, NotSerialized)
            {
                Name(RBUF, ResourceTemplate()
                {
                    I2CSerialBus (0x40, ControllerInitiated, 400000, AddressingMode7Bit, "\\_SB.PCI0.I2C1", , , ,)
                    GpioInt (Level, ActiveLow, ExclusiveAndWake, PullNone, 0, "\\_SB.GPO3", 0, ResourceConsumer, ,) { 0x004A }
                })
                Return(RBUF)
            }
               
            Method(_DSM, 0x4, NotSerialized)
            {
                // DSM UUID
                switch(ToBuffer(Arg0))
                {
                    // ACPI DSM UUID for HIDI2C
                    case(ToUUID("3CDFF6F7-4267-4555-AD05-B30A3D8938DE"))
                    {
                        // DSM Function
                        switch(ToInteger(Arg2))
                        {
                            // Function 0: Query function, return based on revision
                            case(0)
                            {
                                // DSM Revision
                                switch(ToInteger(Arg1))
                                {
                                    // Revision 1: Function 1 supported
                                    case(1)
                                    {
                                        Return(Buffer(One) { 0x03 })
                                    }
    
                                    default
                                    {
                                        Return(Buffer(One) { 0x00 })
                                    }
                                }
                            }
    
                            // Function 1 : HID Function
                            case(1)
                            {
                                // HID Descriptor Address
                                Return(0x0001)
                            }
    
                            default
                            {
                                // Functions 2+: not supported
                                Return(0x0001)
                            }
                        }
                    }
    
                    default
                    {
                        // No other GUIDs supported
                        Return(Buffer(One) { 0x00 })
                    }
                }
            }
    }
    
     
  2. yamikiri

    yamikiri New Member

    Joined:
    Apr 24, 2017
    Messages:
    5
    Likes Received:
    1
    Update:

    I've found a pin that I could match ACPI table with physical pin.
    It's GPIO_SUS3 which physical pin is 40@CN12
    The ACPI resource is 17@"\\_SB.GPO1".
    So I modified the asl code as follow and connect interrupt to 40@CN12, and the I2C HID device works.
    Code:
    I2CSerialBus (0x40, ControllerInitiated, 400000, AddressingMode7Bit, "\\_SB.PCI0.I2C1", , , ,)
    GpioIo(Shared, PullDefault, 0x0000, 0x0000, IoRestrictionInputOnly, "\\_SB.GPO1", 0, ResourceConsumer, ,) { 17 }
    GpioInt (Level, ActiveLow, ExclusiveAndWake, PullNone, 0, "\\_SB.GPO1", 0, ResourceConsumer, ,) { 17 }
    
     

Share This Page