[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2] misc/pca9552: Fix for pca9552 not getting reset
From: |
Miles Glenn |
Subject: |
Re: [PATCH v2] misc/pca9552: Fix for pca9552 not getting reset |
Date: |
Tue, 10 Oct 2023 14:56:15 -0500 |
On Mon, 2023-10-09 at 23:06 +0200, Cédric Le Goater wrote:
> Hello Glenn,
>
> On 10/5/23 23:10, Glenn Miles wrote:
> > Testing of the pca9552 device on the powernv platform
> > showed that the reset method was not being called when
> > an instance of the device was realized. This was causing
> > the INPUT0/INPUT1 POR values to be incorrect.
> >
> > Fixed by overriding the parent pca955x_realize method with a
> > new pca9552_realize method which first calls
> > the parent pca955x_realize method followed by the
> > pca9552_reset function.
> >
> > Signed-off-by: Glenn Miles <milesg@linux.vnet.ibm.com>
> > ---
> > hw/misc/pca9552.c | 8 +++++++-
> > 1 file changed, 7 insertions(+), 1 deletion(-)
> >
> > diff --git a/hw/misc/pca9552.c b/hw/misc/pca9552.c
> > index fff19e369a..bc12dced7f 100644
> > --- a/hw/misc/pca9552.c
> > +++ b/hw/misc/pca9552.c
> > @@ -384,6 +384,12 @@ static void pca955x_realize(DeviceState *dev,
> > Error **errp)
> > qdev_init_gpio_out(dev, s->gpio, k->pin_count);
> > }
> >
> > +static void pca9552_realize(DeviceState *dev, Error **errp)
> > +{
> > + pca955x_realize(dev, errp);
> > + pca9552_reset(dev);
> > +}
>
> This looks wrong. You need both handlers, a realize and a reset.
>
> Thanks,
>
> C.
>
Ok, sent version 3.
Thanks,
Glenn
>
> > +
> > static Property pca955x_properties[] = {
> > DEFINE_PROP_STRING("description", PCA955xState, description),
> > DEFINE_PROP_END_OF_LIST(),
> > @@ -416,7 +422,7 @@ static void pca9552_class_init(ObjectClass *oc,
> > void *data)
> > DeviceClass *dc = DEVICE_CLASS(oc);
> > PCA955xClass *pc = PCA955X_CLASS(oc);
> >
> > - dc->reset = pca9552_reset;
> > + dc->realize = pca9552_realize;
> > dc->vmsd = &pca9552_vmstate;
> > pc->max_reg = PCA9552_LS3;
> > pc->pin_count = 16;