From: Andy Shevchenko <andriy.shevchenko@intel.com>
To: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: "Ahmad Fatoum" <a.fatoum@pengutronix.de>,
"Kent Gibson" <warthog618@gmail.com>,
"Jan Lübbe" <jlu@pengutronix.de>, "Marek Vasut" <marex@denx.de>,
"Geert Uytterhoeven" <geert+renesas@glider.be>,
"Linus Walleij" <linus.walleij@linaro.org>,
linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
"Bartosz Golaszewski" <bartosz.golaszewski@linaro.org>
Subject: Re: [PATCH v3 06/10] gpio: sysfs: don't use driver data in sysfs callbacks for line attributes
Date: Mon, 30 Jun 2025 16:27:58 +0300 [thread overview]
Message-ID: <aGKQ3m87REse0abU@smile.fi.intel.com> (raw)
In-Reply-To: <20250630-gpio-sysfs-chip-export-v3-6-b997be9b7137@linaro.org>
On Mon, Jun 30, 2025 at 02:37:13PM +0200, Bartosz Golaszewski wrote:
> From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
>
> Currently each exported GPIO is represented in sysfs as a separate class
> device. This allows us to simply use dev_get_drvdata() to retrieve the
> pointer passed to device_create_with_groups() from sysfs ops callbacks.
>
> However, we're preparing to add a parallel set of per-line sysfs
> attributes that will live inside the associated gpiochip group. They are
> not registered as class devices and so have the parent device passed as
> argument to their callbacks (the GPIO chip class device).
>
> Put the attribute structs inside the GPIO descriptor data and
> dereference the relevant ones using container_of() in the callbacks.
> This way, we'll be able to reuse the same code for both the legacy and
> new GPIO attributes.
...
> - struct gpiod_data *data = dev_get_drvdata(dev);
> + struct gpiod_data *data = container_of(attr, struct gpiod_data,
> + dir_attr);
> - struct gpiod_data *data = dev_get_drvdata(dev);
> + struct gpiod_data *data = container_of(attr, struct gpiod_data,
> + dir_attr);
I still think that bunch of definitions to wrap contaner_of():s will help.
Note, two of them you are using even in the code below, besides the attribute
show()/store() cases.
...
> + if (strcmp(attr->name, "direction") == 0) {
> + data = container_of(dev_attr, struct gpiod_data, dir_attr);
> +
> + if (!data->direction_can_change)
> mode = 0;
data = dir_attr_to_gpiod_data(dev_attr);
if (!data->direction_can_change)
mode = 0;
> + } else if (strcmp(attr->name, "edge") == 0) {
> + data = container_of(dev_attr, struct gpiod_data, edge_attr);
> +
> + if (gpiod_to_irq(data->desc) < 0)
> mode = 0;
In the similar way:
data = edge_attr_to_gpiod_data(dev_attr);
if (gpiod_to_irq(data->desc) < 0)
mode = 0;
> + if (!data->direction_can_change &&
> + test_bit(FLAG_IS_OUT, &data->desc->flags))
> mode = 0;
> }
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2025-06-30 13:28 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-30 12:37 [PATCH v3 00/10] gpio: sysfs: add a per-chip export/unexport attribute pair Bartosz Golaszewski
2025-06-30 12:37 ` [PATCH v3 01/10] gpio: sysfs: use gpiod_is_equal() to compare GPIO descriptors Bartosz Golaszewski
2025-07-04 8:05 ` Linus Walleij
2025-06-30 12:37 ` [PATCH v3 02/10] gpio: sysfs: add a parallel class device for each GPIO chip using device IDs Bartosz Golaszewski
2025-06-30 12:37 ` [PATCH v3 03/10] gpio: sysfs: only get the dirent reference for the value attr once Bartosz Golaszewski
2025-07-04 8:05 ` Linus Walleij
2025-06-30 12:37 ` [PATCH v3 04/10] gpio: sysfs: pass gpiod_data directly to internal GPIO sysfs functions Bartosz Golaszewski
2025-06-30 12:37 ` [PATCH v3 05/10] gpio: sysfs: rename the data variable in gpiod_(un)export() Bartosz Golaszewski
2025-06-30 12:37 ` [PATCH v3 06/10] gpio: sysfs: don't use driver data in sysfs callbacks for line attributes Bartosz Golaszewski
2025-06-30 13:27 ` Andy Shevchenko [this message]
2025-06-30 13:39 ` Bartosz Golaszewski
2025-06-30 14:22 ` Andy Shevchenko
2025-06-30 12:37 ` [PATCH v3 07/10] gpio: sysfs: don't look up exported lines as class devices Bartosz Golaszewski
2025-06-30 12:37 ` [PATCH v3 08/10] gpio: sysfs: export the GPIO directory locally in the gpiochip<id> directory Bartosz Golaszewski
2025-07-04 8:06 ` Linus Walleij
2025-06-30 12:37 ` [PATCH v3 09/10] gpio: sysfs: allow disabling the legacy parts of the GPIO sysfs interface Bartosz Golaszewski
2025-06-30 12:37 ` [PATCH v3 10/10] gpio: TODO: remove the task for the sysfs rework Bartosz Golaszewski
2025-07-04 8:09 ` Linus Walleij
2025-07-01 14:05 ` [PATCH v3 00/10] gpio: sysfs: add a per-chip export/unexport attribute pair Andy Shevchenko
2025-07-02 3:54 ` Kent Gibson
2025-07-02 9:45 ` Bartosz Golaszewski
2025-07-02 10:12 ` Kent Gibson
2025-07-02 10:28 ` Bartosz Golaszewski
2025-07-02 11:01 ` Kent Gibson
2025-07-02 11:59 ` Andy Shevchenko
2025-07-02 12:42 ` Kent Gibson
2025-07-02 12:05 ` Geert Uytterhoeven
2025-07-02 11:55 ` Andy Shevchenko
2025-07-02 13:18 ` Bartosz Golaszewski
2025-07-04 8:21 ` Linus Walleij
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aGKQ3m87REse0abU@smile.fi.intel.com \
--to=andriy.shevchenko@intel.com \
--cc=a.fatoum@pengutronix.de \
--cc=bartosz.golaszewski@linaro.org \
--cc=brgl@bgdev.pl \
--cc=geert+renesas@glider.be \
--cc=jlu@pengutronix.de \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marex@denx.de \
--cc=warthog618@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.