Re: [PATCH v4] gpio: sim: don't fiddle with GPIOLIB private members

From: Bartosz Golaszewski
Date: Fri Sep 08 2023 - 08:39:45 EST


On Thu, Sep 7, 2023 at 4:13 PM Andy Shevchenko
<andriy.shevchenko@xxxxxxxxxxxxxxx> wrote:
>
> On Thu, Sep 07, 2023 at 10:27:51AM +0200, Bartosz Golaszewski wrote:
> > From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx>
> >
> > We access internals of struct gpio_device and struct gpio_desc because
> > it's easier but it can actually be avoided and we're working towards a
> > better encapsulation of GPIO data structures across the kernel so let's
> > start at home.
> >
> > Instead of checking gpio_desc flags, let's just track the requests of
> > GPIOs in the driver. We also already store the information about
> > direction of simulated lines.
> >
> > For kobjects needed by sysfs callbacks: we can iterate over the children
> > devices of the top-level platform device and compare their fwnodes
> > against the one passed to the init function from probe.
> >
> > While at it: fix one line break and remove the untrue part about
> > configfs callbacks using dev_get_drvdata() from a comment.
>
> Will LGTM with the couple of remarks being addressed.
>
> ...
>
> > #include <linux/completion.h>
> > #include <linux/configfs.h>
> > #include <linux/device.h>
>
> > +#include <linux/device/bus.h>
>
> No need, the device.h guarantees that.
>

Wait, wasn't you the one who always suggests including headers
directly if we're using any symbols defined in them? Like when I said
that we don't need to include linux/notifier.h because it's already
included in gpiolib.h and you argued the opposite? :)

device_match_fwnode() is defined in linux/device/bus.h so I thought
it's in order to include it.

> ...
>
> > +static int gpio_sim_dev_match_fwnode(struct device *dev, void *data)
> > +{
> > + /*
> > + * We can't pass this directly to device_find_child() due to pointer
> > + * type mismatch.
> > + */
>
> Not sure if this comment adds any value.
>

I disagree - I would have used device_match_fwnode() as argument
passed directly to device_find_child() but I cannot due to pointer
type mismatch error so we need this wrapper and it's useful to say
why.

Bart

> > + return device_match_fwnode(dev, data);
> > +}
>
> --
> With Best Regards,
> Andy Shevchenko
>
>