From: Lukas Wunner <lukas@wunner.de>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: Mathias Duckeck <m.duckeck@kunbus.de>,
Phil Elwell <phil@raspberrypi.org>,
linux-gpio@vger.kernel.org
Subject: Re: [PATCH 2/4] gpio: Introduce ->get_multiple callback
Date: Wed, 4 Oct 2017 22:32:03 +0200 [thread overview]
Message-ID: <20171004203203.GC9195@wunner.de> (raw)
In-Reply-To: <46dea76d0adfe25f30b564d9dc5b3f2b4de099c9.1503319573.git.lukas@wunner.de>
Hi Linus,
one question popped up regarding this patch that I'd like to clarify
before reposting a revised series:
On Mon, Aug 21, 2017 at 03:12:00PM +0200, Lukas Wunner wrote:
> SPI-attached GPIO controllers typically read out all inputs in one go.
> If callers desire the values of multipe inputs, ideally a single readout
> should take place to return the desired values. However the current
> driver API only offers a ->get callback but no ->get_multiple (unlike
> ->set_multiple, which is present). Thus, to read multiple inputs, a
> full readout needs to be performed for every single value (barring
> driver-internal caching), which is inefficient.
[...]
> Introduce the missing callback. Add corresponding consumer functions
> such as gpiod_get_array_value(). Amend linehandle_ioctl() to take
> advantage of the newly added infrastructure.
[...]
> --- a/drivers/gpio/gpiolib.c
> +++ b/drivers/gpio/gpiolib.c
> @@ -365,28 +365,28 @@ static long linehandle_ioctl(struct file *filep, unsigned int cmd,
> struct linehandle_state *lh = filep->private_data;
> void __user *ip = (void __user *)arg;
> struct gpiohandle_data ghd;
> + int vals[GPIOHANDLES_MAX];
> int i;
>
> if (cmd == GPIOHANDLE_GET_LINE_VALUES_IOCTL) {
> - int val;
> + /* TODO: check if descriptors are really input */
> + int ret = gpiod_get_array_value_complex(false,
> + true,
> + lh->numdescs,
> + (const struct gpio_desc **)lh->descs,
> + vals);
I've designed the function signature of
gpiod_get_array_value_complex()
gpiod_get_raw_array_value()
gpiod_get_array_value()
gpiod_get_raw_array_value_cansleep()
gpiod_get_array_value_cansleep()
such that a "const struct gpio_desc **" argument is passed in (the point
being the const). This was done to enforce const-correctness and for
consistency with the family of functions to read a single GPIO, such as
gpiod_get_value() which take a "const struct gpio_desc *".
However after actually using the newly introduced functions in a driver,
I've discovered that the const keyword is mostly just an annoyance in this
case: When acquiring GPIOs with gpiod_get_array(), the resulting
struct gpio_desc ** is not const. Thus, a cast is necessary whenever
feeding the result of gpiod_get_array() to gpiod_get_array_value(),
which may well be the most common use case. (It's probably less common
that folks construct the array by hand.) A cast is also already necessary
for the invocation of gpiod_get_array_value_complex() quoted above.
So I'm wondering if the const keyword does more harm than good in this case.
Let me know what you think.
Thanks,
Lukas
next prev parent reply other threads:[~2017-10-04 20:39 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-21 13:12 [PATCH 0/4] GPIO driver for Maxim MAX3191x Lukas Wunner
2017-08-21 13:12 ` [PATCH 3/4] dt-bindings: gpio: max3191x: Document new driver Lukas Wunner
2017-08-23 0:48 ` Rob Herring
2017-08-23 9:44 ` Lukas Wunner
[not found] ` <20170823094438.GA12416-JFq808J9C/izQB+pC5nmwQ@public.gmane.org>
2017-08-23 13:03 ` Rob Herring
2017-09-05 8:16 ` Lukas Wunner
2017-10-04 19:31 ` Lukas Wunner
2017-08-21 13:12 ` [PATCH 4/4] gpio: Add driver for Maxim MAX3191x industrial serializer Lukas Wunner
[not found] ` <df530ae703fcfdf52d27a1b6d19b6d1a4724b103.1503319573.git.lukas-JFq808J9C/izQB+pC5nmwQ@public.gmane.org>
2017-08-23 8:09 ` Linus Walleij
2017-08-21 13:12 ` [PATCH 1/4] bitops: Introduce assign_bit() Lukas Wunner
2017-08-21 16:18 ` Bart Van Assche
2017-08-22 8:30 ` Lukas Wunner
2017-08-22 9:27 ` Peter Zijlstra
2017-08-22 10:04 ` Lukas Wunner
2017-08-23 7:32 ` Linus Walleij
2017-08-23 17:09 ` Bart Van Assche
2017-08-24 19:52 ` Linus Walleij
2017-08-21 13:12 ` [PATCH 2/4] gpio: Introduce ->get_multiple callback Lukas Wunner
2017-08-23 7:38 ` Linus Walleij
2017-08-27 17:34 ` Lukas Wunner
2017-08-31 13:48 ` Linus Walleij
2017-08-31 15:46 ` Lukas Wunner
2017-09-03 14:58 ` Linus Walleij
2017-10-04 20:32 ` Lukas Wunner [this message]
2017-10-07 11:23 ` Linus Walleij
2017-10-12 11:15 ` Lukas Wunner
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=20171004203203.GC9195@wunner.de \
--to=lukas@wunner.de \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=m.duckeck@kunbus.de \
--cc=phil@raspberrypi.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).