From: Hans Verkuil <hverkuil+cisco@kernel.org>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Wolfram Sang <wsa+renesas@sang-engineering.com>
Cc: linux-i2c@vger.kernel.org,
Jarkko Nikula <jarkko.nikula@linux.intel.com>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
Jan Dabros <jsd@semihalf.com>, Andi Shyti <andi.shyti@kernel.org>
Subject: Re: i2c-designware: not possible to write to different i2c addresses in one transfer?
Date: Sat, 18 Oct 2025 20:17:36 +0200 [thread overview]
Message-ID: <a776e232-d26b-405c-b468-0e449296becd@kernel.org> (raw)
In-Reply-To: <aO-kZUwqcoqnFfTh@smile.fi.intel.com>
On 15/10/2025 15:40, Andy Shevchenko wrote:
> On Wed, Oct 15, 2025 at 01:51:20PM +0200, Wolfram Sang wrote:
>> Hi Hans,
>>
>> lucky you, I happen to have a board with that controller on the table
>> currently :)
>>
>>> This worked fine for the Raspberry Pi 4B using the broadcom i2c driver, but for
>>> the Raspberry Pi 5 using the designware driver it fails with -EINVAL and these
>>> kernel messages:
>>>
>>> [ 272.284689] i2c_designware 1f00074000.i2c: i2c_dw_xfer_msg: invalid target address
>>
>> Confirmed.
>>
>>> Looking in i2c-designware-master.c it seems it cannot handle consecutive messages for
>>> different addresses.
>>
>> I agree. I leave the final judgement to the experts (Andy, Mika), but I
>> already anticipate that I need to extend the existing
>> I2C_AQ_COMB_SAME_ADDR quirk into a more generic one. And set the quirk
>> in this driver.
>
> May I ask a dumb question? Why do we need such an awkward transaction
> to begin with?
>
That's how the datasheet defines the transfer. And in turn it is based on the VESA
E-DDC standard for reading display EDIDs. By doing it in a single transaction you
ensure that the bytes are written to (or read from) the correct EEPROM segment. If
it was split in two commands, then someone could change the segment inadvertently.
I.e., you set the segment to 1, then someone writes to it as well and sets it to 2,
then you write the EDID data to the EEPROM, which has now selected the wrong segment.
For now I have split up the transaction into two independent transfers in my driver,
one to the segment address, one writing to the EEPROM. This works, but it is not really
how it is supposed to be done. And I was actually surprised that it worked, since a
write to the EEPROM without writing to the segment pointer first in the same transaction
should write to segment 0, according to the cat24c208 datasheet.
I couldn't tell from the designware driver code whether this was 1) impossible (HW limitation),
2) possible, but not implemented, or 3) a bug. The comment in the code before the
"invalid target address" error was rather vague.
Regards,
Hans
next prev parent reply other threads:[~2025-10-18 18:17 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-15 11:25 i2c-designware: not possible to write to different i2c addresses in one transfer? Hans Verkuil
2025-10-15 11:51 ` Wolfram Sang
2025-10-15 13:40 ` Andy Shevchenko
2025-10-18 18:17 ` Hans Verkuil [this message]
2025-10-18 19:21 ` Andy Shevchenko
2025-10-20 9:41 ` Hans Verkuil
2025-10-19 17:53 ` Wolfram Sang
2025-10-20 7:15 ` Hans Verkuil
2025-10-20 11:59 ` Mika Westerberg
2025-10-20 12:29 ` Hans Verkuil
2025-10-20 12:45 ` Mika Westerberg
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=a776e232-d26b-405c-b468-0e449296becd@kernel.org \
--to=hverkuil+cisco@kernel.org \
--cc=andi.shyti@kernel.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=jarkko.nikula@linux.intel.com \
--cc=jsd@semihalf.com \
--cc=linux-i2c@vger.kernel.org \
--cc=mika.westerberg@linux.intel.com \
--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