From: Boris Staletic <bstaletic@axiado.com>
To: Frank Li <Frank.li@nxp.com>
Cc: "linux-i3c@lists.infradead.org" <linux-i3c@lists.infradead.org>
Subject: Re: i3c: scanning for i2c client devices on the network
Date: Thu, 18 Sep 2025 16:15:17 +0200 [thread overview]
Message-ID: <aMwT9S92IpIOT_Gq@axiado.com> (raw)
In-Reply-To: <aMmZnG/sbErB4Ly4@lizhi-Precision-Tower-5810>
On Tue, Sep 16, 2025 at 01:08:44PM -0400, Frank Li wrote:
> On Wed, Sep 10, 2025 at 02:01:33PM +0000, Boris Staletic wrote:
> > Hello,
> >
> > We have an I3C bus where the user may ultimately attach an I2C slave with an arbitrary address, with the idea
> > of using i2c-utils to communicate with the I2C slave from userland.
> >
> > With the current kernel, I2C slaves need to be known statically and thus i2cdetect fails to detect any slaves.
> > All communication attempts get rejected early, because i3c_master_find_i2c_dev_by_addr returns NULL and then i3c_master_i2c_adapter_xfer exits with ENOENT.
> > I3c_master_find_i2c_dev_by_addr returns NULL because bus->devs.i2c ends up being empty.
> >
> > Since the I2C drivers have i2c_detect and i3c_master_controller has its own i2c_adater, I looked into what needs to be done for networks
> > with I3C masters to use the existing i2c_detect mechanism. That lead me to the following list of changes:
> >
> > - i3c_master_controllr's i2c_adapter needs to have its class member set.
> > - In i2c_detect_address, temp_client->dev needs to be populated and registered before the call to i2c_default_probe.
> > - Otherwise the attempt to probe gets rejected early, for the same reason described above (i3c_master_find_i2c_dev_by_addr returning NULL).
> >
> > That much was enough to get i2c_detect to work with an I3C master.
> > To complete the use case I also needed a registered i2c_driver that implements a simple i2c_driver.detect function.
> > In my test, the detect function simply checked whether i2c_smbus_read_byte_data(client, 0) returns a non-error value.
> >
> > Could anyone comment whether this is the right approach for implementing I2C slave detection with an I3C master?
>
> Generally, it is the same as I2C. just send out address, and check if target
> ACK/NACK this address.
Are you referring here to i2c_new_scanned_device? If so, that also, in
my testing, couldn't detect any devices without modificatioins.
The failure to scan happens because:
- i2c_new_scanned_device calls i2c_default_probe, which calls
i2c_smbus_xfer.
- that eventually gets to i3c_master_i2c_adapter_xfer, which looks up
existing devices by calling i3c_master_find_i2c_dev_by_addr.
- i3c_master_find_i2c_dev_by_addr returns NULL
- i3c_master_i2c_adapter_xfer then returns -ENOENT, ven before trying to
communicate over the wire.
I am probably missing something, because, as far as I can tell, neither
i2c_detect, nor i2c_new_scanned_device can currently be used with an I3C
master.
Would you mind elaborating more on the suggested approach?
Thanks in advance,
Boris Staletic
>
> Address 7E, REPEAT START, scan's address. ACK/NACK STOP.
>
> Check ACK/NACK. But you don't know if it is i3c device or i2c device by this
> way.
>
> send 7E to avoid IBI during you send out address.
>
> Fank
>
> > The most iffy part of this approach is the need for such a dummy driver, just so the I3C master knows that "something exists".
> > I'd welcome any sort of feedback.
> >
> > Thanks,
> > Boris Staletic
> > --
> > linux-i3c mailing list
> > linux-i3c@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-i3c
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
next prev parent reply other threads:[~2025-09-18 14:15 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-10 14:01 i3c: scanning for i2c client devices on the network Boris Staletic
2025-09-16 9:31 ` RFC: " Boris Staletic
2025-09-16 17:08 ` Frank Li
2025-09-18 14:15 ` Boris Staletic [this message]
2025-09-22 11:43 ` Boris Staletic
2025-09-23 18:46 ` Mukesh Savaliya
2025-09-24 18:20 ` Frank Li
2025-09-25 15:42 ` Boris Staletic
2025-09-22 11:46 ` Boris Staletic
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=aMwT9S92IpIOT_Gq@axiado.com \
--to=bstaletic@axiado.com \
--cc=Frank.li@nxp.com \
--cc=linux-i3c@lists.infradead.org \
/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