diff options
| author | Hitesh Patel <hitesh@ebytelogic.com> | 2026-10-07 10:31:46 +0530 |
|---|---|---|
| committer | Andi Shyti <andi.shyti@kernel.org> | 2026-10-09 10:55:01 +0200 |
| commit | 0265dfc5d2a8de303561ced996c46b38f95cb4ef (patch) | |
| tree | 1fdc415c52129bc28a8504cee9014d005ec539f8 /tools/lib/python | |
| parent | 898f9403066a96e74b97b0554d372fd49149fd05 (diff) | |
| download | linux-next-0265dfc5d2a8de303561ced996c46b38f95cb4ef.tar.gz linux-next-0265dfc5d2a8de303561ced996c46b38f95cb4ef.zip | |
i2c: qcom-cci: always enable SCL clock stretching
The CCI timing tables leave SCL clock stretching disabled. A slave that
holds SCL low is then not waited for: the master keeps its own clock
timing and the transfer fails with a NACK or returns corrupt data.
This is hit with a camera reached through a GMSL serializer/deserializer
I2C tunnel (MAX9296A/MAX96717 on the RB3 Gen2 vision mezzanine). The
deserializer acknowledges the address locally, but forwards the
transaction over the coax link and stretches SCL until the remote side
has completed it, which takes well over one clock period at 100 kHz.
Without stretching the register reads of the sensor behind the link
intermittently return garbage and writes are dropped, which shows up as
random sensor init failures.
Clock stretching is part of the I2C specification for every speed mode
and a device that does not stretch is unaffected by enabling it, so set
the bit unconditionally in cci_init() and drop the per-table
scl_stretch_en field, which is zero in every table.
Signed-off-by: Hitesh Patel <hitesh@ebytelogic.com>
Reviewed-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
Tested-by: Hangxiang Ma <hangxiang.ma@oss.qualcomm.com> # S5KJN5 on Kaanapali
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Link: https://patch.msgid.link/20261007050147.274096-1-hitesh@ebytelogic.com
Diffstat (limited to 'tools/lib/python')
0 files changed, 0 insertions, 0 deletions
