All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] i2c: qcom-geni: restore tSCL with 32MHz I2C fast-mode
@ 2026-09-29  4:14 Daniel J Blueman
  2026-09-30  7:19 ` Mukesh Savaliya
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel J Blueman @ 2026-09-29  4:14 UTC (permalink / raw)
  To: Mukesh Kumar Savaliya, Viken Dadhaniya, Andi Shyti,
	Manikanta Mylavarapu, Bjorn Andersson
  Cc: linux-i2c, linux-arm-msm, linux-kernel, stable, Daniel J Blueman

Commit cb97bf3d4f91 ("i2c: qcom-geni: Fix hardcoded clock index in
SE_GENI_CLK_SEL") allowed GENI to use 32MHz clock. This changed I2C
timing, making the Yoga Slim 7x keyboard (ITE 048D:8987) unusable
on all boots, and touchpad unusable on some boots, resulting in:

  i2c_hid_of 1-003a: unexpected HID descriptor bcdVersion (0x0000)
  i2c_hid_of 1-002c: failed to fetch HID descriptor: -110

With this change, t_high_cnt 3 and clk_div 4 gave a tSCL of 375ns
versus the previous default of 521ns, however the I2C spec has a
minimum tSCL of 600ns.

Restore tSCL to the spec with t_high_cnt 5 giving a 625ns tSCL,
verified on Lenovo Yoga Slim 7x X1E-80100.

Fixes: 506bb2ab0075 ("i2c: qcom-geni: Support systems with 32MHz serial engine clock")
Cc: <stable@vger.kernel.org>
Signed-off-by: Daniel J Blueman <daniel@quora.org>
---
 drivers/i2c/busses/i2c-qcom-geni.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c
index 6a39e21d5ed4..1336a09ca183 100644
--- a/drivers/i2c/busses/i2c-qcom-geni.c
+++ b/drivers/i2c/busses/i2c-qcom-geni.c
@@ -193,7 +193,7 @@ static const struct geni_i2c_clk_fld geni_i2c_clk_map_19p2mhz[] = {
 /* source_clock = 32 MHz */
 static const struct geni_i2c_clk_fld geni_i2c_clk_map_32mhz[] = {
 	{ I2C_MAX_STANDARD_MODE_FREQ, 12, 9, 10, 26 },
-	{ I2C_MAX_FAST_MODE_FREQ, 4, 3, 9, 19 },
+	{ I2C_MAX_FAST_MODE_FREQ, 4, 5, 9, 19 },
 	{ I2C_MAX_FAST_MODE_PLUS_FREQ, 2, 3, 5, 15 },
 	{}
 };
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread
* Re: [PATCH] i2c: qcom-geni: restore tSCL with 32MHz I2C fast-mode
@ 2026-10-12 12:25 Birk Skyum
  0 siblings, 0 replies; 8+ messages in thread
From: Birk Skyum @ 2026-10-12 12:25 UTC (permalink / raw)
  To: Daniel J Blueman
  Cc: Mukesh Kumar Savaliya, Viken Dadhaniya, Andi Shyti,
	Manikanta Mylavarapu, Bjorn Andersson, linux-i2c, linux-arm-msm,
	linux-kernel, stable

On Tue, 29 Sep 2026 12:14:43 +0800, Daniel J Blueman wrote:
> With this change, t_high_cnt 3 and clk_div 4 gave a tSCL of 375ns
> versus the previous default of 521ns, however the I2C spec has a
> minimum tSCL of 600ns.
>
> Restore tSCL to the spec with t_high_cnt 5 giving a 625ns tSCL,
> verified on Lenovo Yoga Slim 7x X1E-80100.

This fixes it on another Yoga Slim 7x (83ED).

I took a distribution build of 7.2.8 that works on this laptop and
replaced only i2c-qcom-geni.ko, built from the same tree:

  7.2.8 driver                   keyboard works
  7.2.9 driver                   keyboard and touchpad dead
  7.2.9 driver with this patch   keyboard, touchpad, touchscreen work

With the patch the keyboard takes the disk passphrase in the initramfs
again. The five I2C controllers in use run from the 32 MHz clock, as
they do without it, and the log has no error from geni_i2c or
i2c_hid_of. That is one boot.

Tested-by: Birk Skyum <birk.skyum@pm.me> # Lenovo Yoga Slim 7x

Thanks,
Birk


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-10-13 18:29 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-29  4:14 [PATCH] i2c: qcom-geni: restore tSCL with 32MHz I2C fast-mode Daniel J Blueman
2026-09-30  7:19 ` Mukesh Savaliya
2026-09-30  9:31   ` Daniel J Blueman
2026-10-06  4:57     ` Mukesh Savaliya
2026-10-09 19:01       ` Sasha Levin
2026-10-13  7:34         ` Thorsten Leemhuis
2026-10-13 18:28           ` Mukesh Savaliya
  -- strict thread matches above, loose matches on Subject: below --
2026-10-12 12:25 Birk Skyum

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.