Re: Sharing a driver between similar devices

Michael Hope

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

"Michael Hope via"
<> writes:

> Hi there.  I'm porting Zephyr to the Arduino Nano 33 IOT.  The board has a
> 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 best
> 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), some_compat)?

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?

-- 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.

> [1]:
> [2]:
> -- Michael



Join to automatically receive all group messages.