From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Thomas Richard <thomas.richard@bootlin.com>
Cc: Linus Walleij <linus.walleij@linaro.org>,
Bartosz Golaszewski <brgl@bgdev.pl>,
Geert Uytterhoeven <geert+renesas@glider.be>,
linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
thomas.petazzoni@bootlin.com, DanieleCleri@aaeon.eu,
GaryWang@aaeon.com.tw
Subject: Re: [PATCH RFC v2 3/6] gpio: aggregator: export symbols of the gpio-fwd library
Date: Mon, 17 Mar 2025 19:10:10 +0200 [thread overview]
Message-ID: <Z9hXcr_GPhPt_gel@smile.fi.intel.com> (raw)
In-Reply-To: <20250317-aaeon-up-board-pinctrl-support-v2-3-36126e30aa62@bootlin.com>
On Mon, Mar 17, 2025 at 04:38:01PM +0100, Thomas Richard wrote:
> Export all symbols and create header file for the gpio-fwd library.
...
> #include <linux/gpio/consumer.h>
> #include <linux/gpio/driver.h>
> +#include <linux/gpio/gpio-fwd.h>
Please, name it forwarder.h.
> #include <linux/gpio/machine.h>
...
> +int gpio_fwd_get_direction(struct gpio_chip *chip, unsigned int offset)
> {
> struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
>
> return gpiod_get_direction(fwd->descs[offset]);
> }
> +EXPORT_SYMBOL_GPL(gpio_fwd_get_direction);
No namespace? Ditto for all exports.
> -static int gpio_fwd_get_multiple(struct gpiochip_fwd *fwd, unsigned long *mask,
> - unsigned long *bits)
> +static int gpio_fwd_get_multiple_unlocked(struct gpiochip_fwd *fwd,
> + unsigned long *mask, unsigned long *bits)
> {
> struct gpio_desc **descs = fwd_tmp_descs(fwd);
> unsigned long *values = fwd_tmp_values(fwd);
> @@ -332,8 +320,8 @@ static int gpio_fwd_get_multiple(struct gpiochip_fwd *fwd, unsigned long *mask,
> return 0;
> }
>
> -static int gpio_fwd_get_multiple_locked(struct gpio_chip *chip,
> - unsigned long *mask, unsigned long *bits)
> +int gpio_fwd_get_multiple(struct gpio_chip *chip, unsigned long *mask,
> + unsigned long *bits)
> {
> struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
> unsigned long flags;
> @@ -341,16 +329,17 @@ static int gpio_fwd_get_multiple_locked(struct gpio_chip *chip,
>
> if (chip->can_sleep) {
> mutex_lock(&fwd->mlock);
> - error = gpio_fwd_get_multiple(fwd, mask, bits);
> + error = gpio_fwd_get_multiple_unlocked(fwd, mask, bits);
> mutex_unlock(&fwd->mlock);
> } else {
> spin_lock_irqsave(&fwd->slock, flags);
> - error = gpio_fwd_get_multiple(fwd, mask, bits);
> + error = gpio_fwd_get_multiple_unlocked(fwd, mask, bits);
> spin_unlock_irqrestore(&fwd->slock, flags);
> }
>
> return error;
> }
> +EXPORT_SYMBOL_GPL(gpio_fwd_get_multiple);
These two are nicely named. Instead of touching them, just simply add an
exported wrapper. We can optimize it latter if needed, but it reduces a lot
the churn in this patch.
...
> -static void gpio_fwd_set_multiple(struct gpiochip_fwd *fwd, unsigned long *mask,
> - unsigned long *bits)
> +static void gpio_fwd_set_multiple_unlocked(struct gpiochip_fwd *fwd,
> + unsigned long *mask,
> + unsigned long *bits)
> {
> struct gpio_desc **descs = fwd_tmp_descs(fwd);
> unsigned long *values = fwd_tmp_values(fwd);
> @@ -404,37 +395,40 @@ static void gpio_fwd_set_multiple(struct gpiochip_fwd *fwd, unsigned long *mask,
> gpiod_set_array_value(j, descs, NULL, values);
> }
>
> -static void gpio_fwd_set_multiple_locked(struct gpio_chip *chip,
> - unsigned long *mask, unsigned long *bits)
> +void gpio_fwd_set_multiple(struct gpio_chip *chip, unsigned long *mask,
> + unsigned long *bits)
> {
> struct gpiochip_fwd *fwd = gpiochip_get_data(chip);
> unsigned long flags;
>
> if (chip->can_sleep) {
> mutex_lock(&fwd->mlock);
> - gpio_fwd_set_multiple(fwd, mask, bits);
> + gpio_fwd_set_multiple_unlocked(fwd, mask, bits);
> mutex_unlock(&fwd->mlock);
> } else {
> spin_lock_irqsave(&fwd->slock, flags);
> - gpio_fwd_set_multiple(fwd, mask, bits);
> + gpio_fwd_set_multiple_unlocked(fwd, mask, bits);
> spin_unlock_irqrestore(&fwd->slock, flags);
> }
> }
> +EXPORT_SYMBOL_GPL(gpio_fwd_set_multiple);
Ditto.
...
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#ifndef __LINUX_GPIO_FWD_H
> +#define __LINUX_GPIO_FWD_H
This header uses something that is defined in other headers. Please follow IWYU
principle.
...
> +struct gpiochip_fwd_timing {
> + u32 ramp_up_us;
> + u32 ramp_down_us;
types.h
> +};
...
> +struct gpiochip_fwd {
> + struct device *dev;
struct device;
// forward declaration is enough.
> + struct gpio_chip chip;
Where is this being defined?
> + struct gpio_desc **descs;
> + union {
> + struct mutex mlock; /* protects tmp[] if can_sleep */
> + spinlock_t slock; /* protects tmp[] if !can_sleep */
And these?
> + };
> + struct gpiochip_fwd_timing *delay_timings;
> + unsigned long tmp[]; /* values and descs for multiple ops */
> +};
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2025-03-17 17:10 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-17 15:37 [PATCH RFC v2 0/6] Add pinctrl support for the AAEON UP board FPGA Thomas Richard
2025-03-17 15:37 ` [PATCH RFC v2 1/6] gpiolib: add gpiochip_add_pin_range_sparse() function Thomas Richard
2025-03-17 16:59 ` Andy Shevchenko
2025-04-09 13:49 ` Thomas Richard
2025-03-18 6:00 ` kernel test robot
2025-03-17 15:38 ` [PATCH RFC v2 2/6] gpio: aggregator: refactor the forwarder part Thomas Richard
2025-03-17 17:04 ` Andy Shevchenko
2025-03-17 15:38 ` [PATCH RFC v2 3/6] gpio: aggregator: export symbols of the gpio-fwd library Thomas Richard
2025-03-17 17:10 ` Andy Shevchenko [this message]
2025-03-17 15:38 ` [PATCH RFC v2 4/6] gpio: aggregator: handle runtime registration of gpio_desc in gpiochip_fwd Thomas Richard
2025-03-17 17:13 ` Andy Shevchenko
2025-04-09 14:50 ` Thomas Richard
2025-03-17 15:38 ` [PATCH RFC v2 5/6] gpio: aggregator: add possibility to attach data to the forwarder Thomas Richard
2025-03-18 13:18 ` Bartosz Golaszewski
2025-03-17 15:38 ` [PATCH RFC v2 6/6] pinctrl: Add pin controller driver for AAEON UP boards Thomas Richard
2025-03-17 18:42 ` Andy Shevchenko
2025-04-09 14:02 ` Thomas Richard
2025-04-15 8:39 ` Thomas Richard
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=Z9hXcr_GPhPt_gel@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=DanieleCleri@aaeon.eu \
--cc=GaryWang@aaeon.com.tw \
--cc=brgl@bgdev.pl \
--cc=geert+renesas@glider.be \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=thomas.richard@bootlin.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.