Re: [PATCH 1/1] Force ELAN06FA touchpad I2C bus freq to 100KHz

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Thanks for clarifying the speed. Seems like this bug is different than
I thought.

In my ACPI table there were no references to HCNT or LCNT
specifically. I'm not sure if this is normal.

In addition, I noticed that there were debug messages in dmesg
relating to the HCNT and LCNT.
I'm not sure if they'll be useful, but here they are (taken from an
unmodified kernel):
[    3.543648] i2c i2c-14: Successfully instantiated SPD at 0x50
[    3.543790] Standard Mode HCNT:LCNT = 552:652
[    3.543794] Fast Mode HCNT:LCNT = 100:200

Here's what I have found with the string "\\_SB.PC00.I2C1" in my ACPI table:
#1
Scope (_SB)
{
    Device (PEPD)
    {
        Name (_HID, "INT33A1" /* Intel Power Engine */)  // _HID: Hardware ID
        Name (_CID, EisaId ("PNP0D80") /* Windows-compatible System
Power Management Controller */)  // _CID: Compatible ID
        Name (_UID, One)  // _UID: Unique ID
        Name (LBUF, Buffer (0xC0){})
        Name (PPD0, Package (0x03)
        {
            "\\_SB.PC00.SAT0",
            Zero,
            Package (0x02)
            {
                Zero,
                Package (0x03)
                {
                    0xFF,
                    Zero,
                    0x81
                }
            }
        })
        Name (PPD3, Package (0x03)
        {
            "\\_SB.PC00.SAT0",
            Zero,
            Package (0x02)
            {
                Zero,
                Package (0x02)
                {
                    0xFF,
                    0x03
                }
            }
        })
        Name (WWD3, Package (0x03)
        {
            "\\_SB.PC00.RP04",
            Zero,
            Package (0x02)
            {
                Zero,
                Package (0x02)
                {
                    0xFF,
                    0x03
                }
            }
        })
        Name (PKD0, Package (0x02)
        {
            Zero,
            Package (0x03)
            {
                0xFF,
                Zero,
                0x81
            }
        })
        Name (PKD3, Package (0x02)
        {
            Zero,
            Package (0x02)
            {
                0xFF,
                0x03
            }
        })
        Name (DEVY, Package (0x77)
        {
            [...]
            Package (0x03)
            {
                "\\_SB.PC00.I2C0",
                One,
                Package (0x02)
                {
                    Zero,
                    Package (0x02)
                    {
                        0xFF,
                        0x03
                    }
                }
            },

            Package (0x03)
            {
                "\\_SB.PC00.I2C1",
                One,
                Package (0x02)
                {
                    Zero,
                    Package (0x02)
                    {
                        0xFF,
                        0x03
                    }
                }
            },

            Package (0x03)
            {
                "\\_SB.PC00.XHCI",
                One,
                Package (0x02)
                {
                    Zero,
                    Package (0x02)
                    {
                        0xFF,
                        0x03
                    }
                }
            },

            Package (0x03)
            {
                "\\_SB.PC00.HDAS",
                One,
                Package (0x02)
                {
                    Zero,
                    Package (0x03)
                    {
                        0xFF,
                        Zero,
                        0x81
                    }
                }
            },
            [...The rest are similar, only changinng the strings]
        })
    }
}

#2 (seems related to another device)
Scope (_SB.PC00.I2C1)
{
    Device (PA06)
    {
        Name (_HID, "MCHP1930")  // _HID: Hardware ID
        Name (_UID, "I2C1&PA06")  // _UID: Unique ID
        Name (_S0W, 0x03)  // _S0W: S0 Device Wake State
        Method (_STA, 0, Serialized)  // _STA: Status
        {
            If (POME)
            {
                Switch (ToInteger (PLID))
                {
                    Case (Package (0x01)
                        {
                            0x0C
                        }

)
                    {
                        Return (0x0F)
                    }
                    Default
                    {
                        Return (Zero)
                    }

                }
            }

            Return (Zero)
        }

        Method (_CRS, 0, Serialized)  // _CRS: Current Resource Settings
        {
            Name (RBUF, ResourceTemplate ()
            {
                I2cSerialBusV2 (0x0000, ControllerInitiated, 0x00061A80,
                    AddressingMode7Bit, "\\_SB.PC00.I2C1",
                    0x00, ResourceConsumer, _Y3A, Exclusive,
                    )
            })
            CreateWordField (RBUF, \_SB.PC00.I2C1.PA06._CRS._Y3A._ADR,
BADR)  // _ADR: Address
            Switch (ToInteger (PLID))
            {
                Case (Package (0x01)
                    {
                        0x0C
                    }

)
                {
                    BADR = 0x17
                }
                Default
                {
                    BADR = Zero
                }

            }

            Return (RBUF) /* \_SB_.PC00.I2C1.PA06._CRS.RBUF */
        }

        Method (_DSM, 4, Serialized)  // _DSM: Device-Specific Method
        {
            If ((Arg0 != ToUUID
("033771e0-1705-47b4-9535-d1bbe14d9a09") /* Unknown UUID */))
            {
                Return (Buffer (One)
                {
                     0x00                                             // .
                })
            }

            Switch (ToInteger (Arg2))
            {
                Case (Zero)
                {
                    Switch (ToInteger (Arg1))
                    {
                        Case (Zero)
                        {
                            Return (Buffer (One)
                            {
                                 0x03
           // .
                            })
                        }
                        Case (One)
                        {
                            Return (Buffer (One)
                            {
                                 0x7F
           // .
                            })
                        }

                    }

                    Break
                }
                Case (One)
                {
                    Name (PKG1, Package (0x02)
                    {
                        Package (0x08)
                        {
                            "",
                            Zero,
                            "",
                            Zero,
                            "",
                            Zero,
                            "",
                            Zero
                        },

                        Package (0x08)
                        {
                            "",
                            Zero,
                            "VBAT_IN_ELPMIC",
                            0x32,
                            "V3P3DX_EDP",
                            0x0A,
                            "VCC_EDP_BKLT",
                            0x32
                        }
                    })
                    Switch (ToInteger (PLID))
                    {
                        Case (Package (0x01)
                            {
                                0x0C
                            }

)
                        {
                            Return (DerefOf (PKG1 [One]))
                        }
                        Default
                        {
                            Return (DerefOf (PKG1 [Zero]))
                        }

                    }
                }
                Case (0x02)
                {
                    If ((Arg1 < One))
                    {
                        Break
                    }

                    Name (PKG2, Package (0x02)
                    {
                        Package (0x04)
                        {
                            Zero,
                            Zero,
                            Zero,
                            Zero
                        },

                        Package (0x04)
                        {
                            Zero,
                            0xC350,
                            0x2710,
                            0xC350
                        }
                    })
                    Switch (ToInteger (PLID))
                    {
                        Case (Package (0x01)
                            {
                                0x0C
                            }

)
                        {
                            Return (DerefOf (PKG2 [One]))
                        }
                        Default
                        {
                            Return (DerefOf (PKG2 [Zero]))
                        }

                    }
                }
                Case (0x03)
                {
                    If ((Arg1 < One))
                    {
                        Break
                    }

                    Name (BUF3, Package (0x01)
                    {
                        0x0F
                    })
                    Return (BUF3) /* \_SB_.PC00.I2C1.PA06._DSM.BUF3 */
                }
                Case (0x04)
                {
                    If ((Arg1 < One))
                    {
                        Break
                    }

                    Name (BUF4, Package (0x01)
                    {
                        Zero
                    })
                    Return (BUF4) /* \_SB_.PC00.I2C1.PA06._DSM.BUF4 */
                }
                Case (0x05)
                {
                    If ((Arg1 < One))
                    {
                        Break
                    }

                    Name (BUF5, Package (0x02)
                    {
                        0x0400,
                        0x08
                    })
                    Return (BUF5) /* \_SB_.PC00.I2C1.PA06._DSM.BUF5 */
                }
                Case (0x06)
                {
                    If ((Arg1 < One))
                    {
                        Break
                    }

                    Name (BUF6, Package (0x01)
                    {
                        0x0384
                    })
                    Return (BUF6) /* \_SB_.PC00.I2C1.PA06._DSM.BUF6 */
                }

            }

            Return (Buffer (One)
            {
                 0x00                                             // .
            })
        }
    }
}

#3 (also seems related to another device)
ElseIf ((I2SB == One))
{
    Scope (_SB.PC00.I2C1)
    {
        Device (HDAC)
        {
            Name (_HID, "INT00000")  // _HID: Hardware ID
            Name (_DDN, "Intel(R) Smart Sound Technology Audio Codec")
 // _DDN: DOS Device Name
            Name (_UID, One)  // _UID: Unique ID
            Name (CADR, Zero)
            Name (CDIS, Zero)
            Method (_INI, 0, NotSerialized)  // _INI: Initialize
            {
                If ((I2SC == One))
                {
                    _HID = "INT34C2"
                    _CID = "INT34C2"
                    CADR = 0x1C
                }
                ElseIf ((I2SC == 0x02))
                {
                    _HID = "10EC1308"
                    _CID = "10EC1308"
                    CADR = 0x10
                }
                ElseIf ((I2SC == 0x03))
                {
                    _HID = "ESSX8326"
                    _CID = "ESSX8326"
                    _DDN = "ESSX Codec Controller 8326 "
                }
            }

            Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
            {
                If ((I2SC == 0x03))
                {
                    Name (SBFB, ResourceTemplate ()
                    {
                        I2cSerialBusV2 (0x0018, ControllerInitiated, 0x00061A80,
                            AddressingMode7Bit, "\\_SB.PC00.I2C0",
                            0x00, ResourceConsumer, , Exclusive,
                            )
                        I2cSerialBusV2 (0x0009, ControllerInitiated, 0x00061A80,
                            AddressingMode7Bit, "\\_SB.PC00.I2C0",
                            0x00, ResourceConsumer, , Exclusive,
                            )
                    })
                    Name (PBUF, ResourceTemplate ()
                    {
                        GpioIo (Exclusive, PullDefault, 0x0000,
0x0000, IoRestrictionOutputOnly,
                            "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                            )
                            {   // Pin list
                                0x0000
                            }
                    })
                    Name (SBFG, ResourceTemplate ()
                    {
                        GpioInt (Edge, ActiveBoth, ExclusiveAndWake,
PullNone, 0x0000,
                            "\\_SB.GPI0", 0x00, ResourceConsumer, ,
                            )
                            {   // Pin list
                                0x0000
                            }
                    })
                    CreateWordField (PBUF, 0x17, PWRP)
                    PWRP = GNUM (0x09030006)
                    CreateWordField (SBFG, 0x17, INTP)
                    INTP = GNUM (0x09030007)
                    Return (ConcatenateResTemplate (SBFB,
ConcatenateResTemplate (PBUF, SBFG)))
                }
                Else
                {
                    Return (ConcatenateResTemplate (IICB (CADR, I2SB),
INTB (I2SI, Zero, Zero)))
                }
            }

            Method (_STA, 0, NotSerialized)  // _STA: Status
            {
                If (((I2SC != Zero) && (CDIS != One)))
                {
                    Return (0x0F)
                }

                If ((CDIS == One))
                {
                    Return (0x0D)
                }

                Return (Zero)
            }

            Method (_SRS, 1, Serialized)  // _SRS: Set Resource Settings
            {
                CDIS = Zero
            }

            Method (_DIS, 0, NotSerialized)  // _DIS: Disable Device
            {
                CDIS = One
            }

            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                If ((Arg0 == Buffer (0x10)
                        {
                            /* 0000 */  0x04, 0x0C, 0x80, 0xA9, 0x16,
0xE0, 0x3E, 0x34,  // ......>4
                            /* 0008 */  0x41, 0xF4, 0x6B, 0xCC, 0xE7,
0x0F, 0x43, 0x32   // A.k...C2
                        }))
                {
                    If ((Arg2 == Zero))
                    {
                        Return (0x55)
                    }

                    [...Rest are similar to above, for values of Arg2
from 0 to DF]
                }

                Return (0xFF)
            }
        }
    }
}




[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux