Re: Sharing a driver between similar devices

Bolivar, Marti

Michael Hope <michaelh@...> writes:

On Fri, 24 Jul 2020 at 22:06, Bolivar, Marti <Marti.Bolivar@...>

Hi Michael,

"Michael Hope via"
<> writes:

Hi there. I'm porting Zephyr to the Arduino Nano 33 IOT. The board has
LSM6DS3 IMU which is very similar to the LSM6DSL that's already supported
by Zephyr and I'd like to re-use it.

I've refactored [1] the lsm6dsl driver to be multi-instance. What's the
best way of then using the same driver for two different compats? The
I've come up with is [2] but that has name collision issues.
Have you tried to set some state in the config structure based on the
value of DT_NODE_HAS_COMPAT(DT_DRV_INST(your_instance_number),
That sounds good.

The second part of the problem is iterating over both the lsm6dsl and
lsm6ds3 types. Doing two DT_INST_FOREACH_STATUS_OKAY(fn), one for each
compat, can give name collisions. Any ideas?
Could you please describe the collisions in more detail? I checked the
patch in your footnote [2] below but I'm not seeing the issue, sorry.

Taking a guess, though, if there's an issue with naming a global
variable for a device config or data field within the "fn" expansion,
perhaps pasting DT_DRV_COMPAT onto the relevant variable names using the
## preprocessor operator is a fix?


-- Michael

Note that the chips also have a different WHO_AM_I value, so need very
slightly different configuration.
E.g. setting the WHO_AM_I in your config struct based on this, and using
that in your init functions to disambiguate.


-- Michael

Join to automatically receive all group messages.