On Tue, Mar 21, 2023 at 6:41 PM Corey Minyard <cminy...@mvista.com> wrote:

> On Tue, Mar 21, 2023 at 11:27:44AM -0700, Patrick Venture wrote:
> > This allows the devices to be more readily found and specified.
> > Without setting the id field, they can only be found by device type
> > name, which doesn't let you specify the second of the same device type
> > behind a bus.
>
> So basically, this helps you find a specific device if you have more
> than one of them.  Yeah, probably a good idea in this case.
>
> >
> > Tested: Verified that by default the device was findable with the id
> > 'pca954x[77]', for an instance attached at that address.
> >
> > Signed-off-by: Patrick Venture <vent...@google.com>
> > Reviewed-by: Hao Wu <wuhao...@google.com>
> > Reviewed-by: Philippe Mathieu-Daudé <phi...@linaro.org>
> > ---
> >  hw/i2c/i2c_mux_pca954x.c | 22 ++++++++++++++++++++++
> >  1 file changed, 22 insertions(+)
> >
> > diff --git a/hw/i2c/i2c_mux_pca954x.c b/hw/i2c/i2c_mux_pca954x.c
> > index a9517b612a..4f8c2d6ae1 100644
> > --- a/hw/i2c/i2c_mux_pca954x.c
> > +++ b/hw/i2c/i2c_mux_pca954x.c
> > @@ -20,6 +20,7 @@
> >  #include "hw/i2c/i2c_mux_pca954x.h"
> >  #include "hw/i2c/smbus_slave.h"
> >  #include "hw/qdev-core.h"
> > +#include "hw/qdev-properties.h"
> >  #include "hw/sysbus.h"
> >  #include "qemu/log.h"
> >  #include "qemu/module.h"
> > @@ -43,6 +44,8 @@ typedef struct Pca954xState {
> >
> >      bool enabled[PCA9548_CHANNEL_COUNT];
> >      I2CBus *bus[PCA9548_CHANNEL_COUNT];
> > +
> > +    char *id;
> >  } Pca954xState;
> >
> >  /*
> > @@ -181,6 +184,17 @@ static void pca9548_class_init(ObjectClass *klass,
> void *data)
> >      s->nchans = PCA9548_CHANNEL_COUNT;
> >  }
> >
> > +static void pca954x_realize(DeviceState *dev, Error **errp)
> > +{
> > +    Pca954xState *s = PCA954X(dev);
> > +    DeviceState *d = DEVICE(s);
> > +    if (s->id) {
> > +        d->id = g_strdup(s->id);
> > +    } else {
> > +        d->id = g_strdup_printf("pca954x[%x]", s->parent.i2c.address);
> > +    }
> > +}
> > +
> >  static void pca954x_init(Object *obj)
> >  {
> >      Pca954xState *s = PCA954X(obj);
> > @@ -197,6 +211,11 @@ static void pca954x_init(Object *obj)
> >      }
> >  }
> >
> > +static Property pca954x_props[] = {
> > +    DEFINE_PROP_STRING("id", Pca954xState, id),
> > +    DEFINE_PROP_END_OF_LIST()
> > +};
>
> There is already an "id=" thing in qemu for doing links between front
> ends and back ends.  That's probably not the best name to use.  Several
> devices, like network devices, use "name" for identification in the
> monitor.
>

So I should change it to name? I'm ok with that. I think bus would be
slightly confusing.  "id" was short and easy.  Will send a v2.


>
> -corey
>
> > +
> >  static void pca954x_class_init(ObjectClass *klass, void *data)
> >  {
> >      I2CSlaveClass *sc = I2C_SLAVE_CLASS(klass);
> > @@ -209,9 +228,12 @@ static void pca954x_class_init(ObjectClass *klass,
> void *data)
> >      rc->phases.enter = pca954x_enter_reset;
> >
> >      dc->desc = "Pca954x i2c-mux";
> > +    dc->realize = pca954x_realize;
> >
> >      k->write_data = pca954x_write_data;
> >      k->receive_byte = pca954x_read_byte;
> > +
> > +    device_class_set_props(dc, pca954x_props);
> >  }
> >
> >  static const TypeInfo pca954x_info[] = {
> > --
> > 2.35.1.894.gb6a874cedc-goog
> >
>

Reply via email to