Re: How to make a bus with heterogeneous devices?

Federico Vaga
2012-03-02T10:16:04Z

> That's fine, it is what happens with lots of drivers, you can do this
> with the default attribute group assigned to that driver, right?

We can't because a driver can handle devices with different set of
attributes. We can't use device->groups because only if match succeed
we know which attributes add to the device.
That's because the same driver handles several similar devices, to avoid
proliferation of almost-identical drivers. So the drivers attaches
attributes to the device after match succeeds.

The solution that I temporarily implemented is the following:

> > [...]
> > 3- Attributes may be added after match succeeds, before calling
> > probe.
> > This cam be done with a "raw" call to sysfs_create_group(); then
> > groups cna be added to dev->groups so they will be removed on
> > device_unregister().
> > [...]

(with calling probe I mean calling "my" driver probe)

I know it's not a nice solution and I know it's not nice add groups to
device->groups after registration. I can use sysfs_create_group() and
sysfs_remove_group() without touching the device.

> I think you need to look at how the system bus is handled. It just
> went into 3.3-rc and allows for "different" types of devices to all be
> on the same bus, with different drivers and attributes. Let me know if
> how that works does not work out for you.

(thank you for the reference to the patches)

I think it doesn't work in our case for the same reason we can't use
device_driver->groups: we know too late in the register process which
attributes add to a device, practically at the end of the registration.
Maybe I'm missing something.

--
Federico Vaga