Re: [RFC v2 0/4] Introduce i3c device userspace interface

From: Boris Brezillon
Date: Mon Feb 17 2020 - 10:52:11 EST


On Mon, 17 Feb 2020 15:32:55 +0000
Vitor Soares <Vitor.Soares@xxxxxxxxxxxx> wrote:

> Hi Boris,
>
> From: Boris Brezillon <boris.brezillon@xxxxxxxxxxxxx>
> Date: Mon, Feb 17, 2020 at 14:51:41
>
> > Hello Vitor,
> >
> > Sorry for taking so long to reply, and thanks for working on that topic.
> >
> > On Wed, 29 Jan 2020 13:17:31 +0100
> > Vitor Soares <Vitor.Soares@xxxxxxxxxxxx> wrote:
> >
> > > For today there is no way to use i3c devices from user space and
> > > the introduction of such API will help developers during the i3c device
> > > or i3c host controllers development.
> > >
> > > The i3cdev module is highly based on i2c-dev and yet I tried to address
> > > the concerns raised in [1].
> > >
> > > NOTES:
> > > - The i3cdev dynamically request an unused major number.
> > >
> > > - The i3c devices are dynamically exposed/removed from dev/ folder based
> > > on if they have a device driver bound to it.
> >
> > May I ask why you need to automatically bind devices to the i3cdev
> > driver when they don't have a driver matching the device id
> > loaded/compiled-in? If we get the i3c subsystem to generate proper
> > uevents we should be able to load the i3cdev module and bind the device
> > to this driver using a udev rule.
>
> My idea was to expose every device to user-space by default so we can
> test them without a driver (more or less the i2c use case) but as we
> agreed during the i3c subsystem only expose devices that doesn't have
> device driver.

Those that do not have a driver *yet*. What if i3cdev is compiled-in
and other I3C drivers are enabled as modules? When the device is
discovered at boot time is will be automatically bound to the i3cdev
driver since no matching drivers are available at that point. But
the end user probably expects this device to be attached to the in
kernel driver.

> I considered to have a uevent but to expose the devices by default it
> would required something generic, what I didn't figure out and tend to
> follow the i2c-dev module.

Well, I3C and I2C/SPI are quite different in this regard. I2C dev
exposes the whole bus, and SPI devs don't have a standard way to
uniquely identify the device connected on the bus (unless it has a
dedicated compatible for DT-based boards). In that case it might make
sense to auto-bind all orphan devs to the default spidev driver, though
I'm not entirely sure it's really necessary since that's probably a
per-board decision, and having a udev rule matching the bus/CS would
make sense too.

>
> With this current approach even if a device has a driver we can unbind it
> through the Sysfs and have access from user space which I found useful
> for debug.

That's my point. We're making the default 'on-demand driver loading'
use case more complicated to ease the less common 'userspace driver'
use case.