From: Kent Gibson <warthog618@gmail.com>
To: Andy Shevchenko <andy.shevchenko@gmail.com>,
Bartosz Golaszewski <bgolaszewski@baylibre.com>,
Linus Walleij <linus.walleij@linaro.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
"open list:GPIO SUBSYSTEM" <linux-gpio@vger.kernel.org>
Subject: Re: [PATCH 13/22] gpio: uapi: define uAPI V2
Date: Fri, 26 Jun 2020 22:02:11 +0800 [thread overview]
Message-ID: <20200626140211.GA29493@sol> (raw)
In-Reply-To: <20200624154057.GA8622@sol>
On Wed, Jun 24, 2020 at 11:40:57PM +0800, Kent Gibson wrote:
> On Wed, Jun 24, 2020 at 05:33:26PM +0300, Andy Shevchenko wrote:
> > On Tue, Jun 23, 2020 at 7:04 AM Kent Gibson <warthog618@gmail.com> wrote:
> > >
> > > Add a new version of the uAPI to address existing 32/64bit alignment
> >
[ snip ]
> >
> > I'm wondering how many lines (in average) the user usually changes at
> > once? One? Two?
> >
> > Perhaps we need to be better with this, something like single line /
> > multiple lines?
> >
> > So, having a struct for single line change being embedded multiple
> > times would allow to configure atomically several lines with different
> > requirements.
> > For example you can turn directions of the two lines for some kind of
> > half-duplex bit banging protocol.
> >
> > I'm not sure about the rest, but to me it seems reasonable to have
> > single vs. multiple separation in some of the structures.
> >
>
I think you are right about this - we should be taking the opportunity
to remove the homogeneous config restriction, so we can have a mixture
of lines with different configs in the one request.
e.g. I've had a request to have lines with different active low settings.
Your example requires both inputs and outputs.
And for a recent rotary encoder example I would've liked to be able to
have edge detection on one line, but return a snapshot with the state
of several lines in the edge event.
So what I'm thinking is to replace the config that I had proposed with
something like this:
struct attrib {
/*
* the set of lines from request.offsets that this attrib DOESN'T
* apply to. A zero value means it applies to all lines.
* A set bit means the line request.offsets[bit] does NOT get this
* attribute.
*/
__u64 mask[GPIOLINES_BITMAP_SIZE];
/*
* an attribute identifier that dictates the which of the union
* fields is valid and how it is interpreted.
*/
__u32 id;
union {
__u64 flags; /* similar to v1 handleflags + eventflags */
__u32 debounce_period;
__u64 values[GPIOLINES_BITMAP_SIZE]; /* for id == output */
/* ... */
/* future config values go here */
/*
* padding to ensure 32/64-bit alignment of attrib
*
* This must be the largest sized value.
*/
__u32 padding[3];
};
};
/* config is a stack of attribs associated with requested lines. */
struct config {
/* the number of populated attribs */
__u32 num_attribs;
/* for 32/64-bit alignment */
__u32 padding;
struct attrib attribs[MAX_CONFIG_ATTRIBS];
};
The idea is a stack of attributes, each of which can be applied to a
subset of the requested lines, as determined by the attrib.mask.
The config for a given attribute on a given line is determined by
finding the first match while walking down the stack, or falling
back to the sensible default if no match is found.
To reduce the number of attributes required, a number of boolean or
boolean-ish fields can be combined into flags, similar to v1.
I'm guessing a handful of attribs would suffice for the vast majority of
cases, so MAX_CONFIG_ATTRIBS would be in the 5-10 range.
(Are we concerned about struct sizes?)
Adding new config attribs in the future would involve adding a new id
and a corresponding value in the union. So we can potentially add as
many new config attribs as we like - though the user would still be
limited to MAX_CONFIG_ATTRIBS and may have to trade-off attribs in
their particular application.
Does that make any sense?
Cheers,
Kent.
next prev parent reply other threads:[~2020-06-26 14:02 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-23 4:00 [PATCH 00/22] gpio: cdev: add uAPI V2 Kent Gibson
2020-06-23 4:00 ` [PATCH 01/22] gpiolib: move gpiolib-sysfs function declarations into their own header Kent Gibson
2020-06-24 13:34 ` Bartosz Golaszewski
2020-06-24 13:38 ` Kent Gibson
2020-06-23 4:00 ` [PATCH 02/22] gpiolib: cdev: sort includes Kent Gibson
2020-06-24 13:34 ` Bartosz Golaszewski
2020-06-23 4:00 ` [PATCH 03/22] gpiolib: cdev: minor indentation fixes Kent Gibson
2020-06-24 13:35 ` Bartosz Golaszewski
2020-06-23 4:00 ` [PATCH 04/22] gpiolib: cdev: refactor gpiohandle_flags_to_desc_flags Kent Gibson
2020-06-24 13:51 ` Bartosz Golaszewski
2020-06-23 4:00 ` [PATCH 05/22] gpiolib: cdev: rename 'filep' and 'filp' to 'file' to be consistent with other use Kent Gibson
2020-06-24 13:52 ` Bartosz Golaszewski
2020-06-23 4:00 ` [PATCH 06/22] gpiolib: cdev: rename numdescs to num_descs Kent Gibson
2020-06-24 13:53 ` Bartosz Golaszewski
2020-06-23 4:00 ` [PATCH 07/22] gpiolib: cdev: remove pointless decrement of i Kent Gibson
2020-06-24 13:53 ` Bartosz Golaszewski
2020-06-23 4:00 ` [PATCH 08/22] gpiolib: cdev: complete the irq/thread timestamp handshake Kent Gibson
2020-06-24 14:00 ` Bartosz Golaszewski
2020-06-24 14:08 ` Kent Gibson
2020-06-25 9:44 ` Bartosz Golaszewski
2020-06-25 10:01 ` Kent Gibson
2020-06-30 9:08 ` Bartosz Golaszewski
2020-06-23 4:00 ` [PATCH 09/22] gpiolib: cdev: rename priv to gcdev Kent Gibson
2020-06-24 14:04 ` Bartosz Golaszewski
2020-06-24 14:19 ` Kent Gibson
2020-06-24 14:20 ` Bartosz Golaszewski
2020-06-24 23:16 ` Kent Gibson
2020-06-25 10:26 ` Bartosz Golaszewski
2020-06-23 4:00 ` [PATCH 10/22] gpiolib: cdev: fix minor race in GET_LINEINFO_WATCH Kent Gibson
2020-06-24 14:05 ` Bartosz Golaszewski
2020-06-24 14:46 ` Andy Shevchenko
2020-06-24 15:57 ` Kent Gibson
2020-06-24 22:58 ` Kent Gibson
2020-06-25 8:44 ` Andy Shevchenko
2020-06-25 9:13 ` Kent Gibson
2020-06-25 9:23 ` Andy Shevchenko
2020-06-25 9:36 ` Kent Gibson
2020-06-23 4:00 ` [PATCH 11/22] gpiolib: cdev: remove recalculation of offset Kent Gibson
2020-06-30 8:56 ` Bartosz Golaszewski
2020-06-23 4:00 ` [PATCH 12/22] gpio: uapi: define GPIO_MAX_NAME_SIZE for array sizes Kent Gibson
2020-06-24 14:13 ` Bartosz Golaszewski
2020-06-23 4:00 ` [PATCH 13/22] gpio: uapi: define uAPI V2 Kent Gibson
2020-06-24 14:33 ` Andy Shevchenko
2020-06-24 15:40 ` Kent Gibson
2020-06-26 14:02 ` Kent Gibson [this message]
2020-06-24 14:36 ` Bartosz Golaszewski
2020-06-24 23:58 ` Kent Gibson
2020-06-23 4:00 ` [PATCH 14/22] gpiolib: make cdev a build option Kent Gibson
2020-06-29 14:25 ` Bartosz Golaszewski
2020-06-23 4:01 ` [PATCH 15/22] gpiolib: add build option for CDEV V1 ABI Kent Gibson
2020-06-29 14:26 ` Bartosz Golaszewski
2020-06-23 4:01 ` [PATCH 16/22] gpiolib: cdev: add V2 uAPI implementation to parity with V1 Kent Gibson
2020-06-23 17:44 ` Dan Carpenter
2020-06-23 23:23 ` Kent Gibson
2020-06-23 4:01 ` [PATCH 17/22] gpiolib: cdev: report edge detection in lineinfo Kent Gibson
2020-06-23 4:01 ` [PATCH 18/22] gpiolib: cdev: support setting debounce Kent Gibson
2020-06-23 4:01 ` [PATCH 19/22] gpio: uapi: document uAPI V1 as deprecated Kent Gibson
2020-06-23 4:01 ` [PATCH 20/22] tools: gpio: switch tools to V2 uAPI Kent Gibson
2020-06-23 4:01 ` [PATCH 21/22] tools: gpio: add debounce support to gpio-event-mon Kent Gibson
2020-06-23 4:01 ` [PATCH 22/22] tools: gpio: support monitoring multiple lines Kent Gibson
2020-06-30 10:43 ` Bartosz Golaszewski
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=20200626140211.GA29493@sol \
--to=warthog618@gmail.com \
--cc=andy.shevchenko@gmail.com \
--cc=bgolaszewski@baylibre.com \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.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).