From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: R Ha <rha051117@gmail.com>,
Jarkko Nikula <jarkko.nikula@linux.intel.com>
Cc: wsa+renesas@sang-engineering.com, linux-i2c@vger.kernel.org,
linux-acpi@vger.kernel.org, trivial@kernel.org
Subject: Re: [PATCH 1/1] Force ELAN06FA touchpad I2C bus freq to 100KHz
Date: Wed, 8 Jan 2025 07:51:50 +0200 [thread overview]
Message-ID: <20250108055150.GY3713119@black.fi.intel.com> (raw)
In-Reply-To: <CACHtJB-4UGaqKw5zZjE_vPeYX+bMUMiHPNfNYzD6Wmv6jdAuhg@mail.gmail.com>
Hi,
On Tue, Jan 07, 2025 at 06:16:09AM -0600, R Ha wrote:
> 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
I'm adding Jarkko who is expert in the designware I2C maybe he has some
ideas. IIRC we expect the HCNT/LCNT values to be passed from ACPI tables to
the driver.
@Jarkko, it seems that standard I2C HID touchpad does not work properly
with the 400 kHz as passed in I2CSerialBusV2() resource but it works with
either 100 kHz and 1 MHz. It also works fine in Windows. To me it sounds
like that we may have wrong/missing HCNT/LCNT values?
> Here's what I have found with the string "\\_SB.PC00.I2C1" in my ACPI table:
> #1
There should be Device() node for that too. The ones you listed are just
child devices connected to that bus.
> 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)
> }
> }
> }
> }
next prev parent reply other threads:[~2025-01-08 5:51 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-03 5:16 [PATCH 0/1] Force I2C bus freq to 100KHz for ELAN06FA touchpad Randolph Ha
2025-01-03 5:16 ` [PATCH 1/1] Force ELAN06FA touchpad I2C bus freq to 100KHz Randolph Ha
2025-01-03 9:33 ` Mika Westerberg
2025-01-03 23:46 ` R Ha
2025-01-05 8:33 ` Mika Westerberg
2025-01-06 1:28 ` [PATCH] " Randolph Ha
2025-01-06 9:00 ` [PATCH 1/1] " R Ha
2025-01-07 7:27 ` Mika Westerberg
2025-01-07 12:16 ` R Ha
2025-01-08 5:51 ` Mika Westerberg [this message]
2025-01-08 9:29 ` R Ha
2025-01-09 11:19 ` Mika Westerberg
2025-01-10 8:31 ` R Ha
2025-01-10 11:26 ` Mika Westerberg
2025-01-10 11:45 ` Jarkko Nikula
2025-01-10 12:07 ` Mika Westerberg
2025-01-11 15:57 ` [PATCH] " Randolph Ha
2025-01-13 6:48 ` Mika Westerberg
2025-01-13 19:52 ` Randolph Ha
2025-01-14 11:58 ` Wolfram Sang
2025-01-15 19:39 ` R Ha
2025-01-11 16:05 ` [PATCH 1/1] " R Ha
2025-01-13 6:49 ` Mika Westerberg
2025-01-06 9:08 ` R Ha
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250108055150.GY3713119@black.fi.intel.com \
--to=mika.westerberg@linux.intel.com \
--cc=jarkko.nikula@linux.intel.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=rha051117@gmail.com \
--cc=trivial@kernel.org \
--cc=wsa+renesas@sang-engineering.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox