From: stigge@antcom.de (Roland Stigge)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH RFC 1/2] gpio: Add a block GPIO API to gpiolib
Date: Sun, 30 Sep 2012 12:50:42 +0200 [thread overview]
Message-ID: <50682402.8020402@antcom.de> (raw)
In-Reply-To: <CAOY=C6GG6jqqEAAGJjmDG-BFT2eq=9+ck+F_EOcthRgDCDv8=Q@mail.gmail.com>
On 30/09/12 11:35, Stijn Devriendt wrote:
> In our kernel tree we have similar code. If you like I can request
> permission
> to share. I can, however, already give you an update on the basic
> structure, perhaps
> it's useful now.
>
> For the first part, the drivers need to implement a the gpio interface
> for groups.
> gpio_set_multi, gpio_get_multi, gpio_direction_input_multi,
> gpio_direction_output_multi. Each of them gets a 'u32 mask'.
>
> Secondly, gpiolib gets some new code to handle groups:
> groups are requested via a list of gpio ids. Mind that order is respected:
> request( [1, 5, 2, 4] ) followed by a set(0x5) will translate to
> gpio_set_multi( 0x18 ). An opaque gpio_group struct is used to keep track.
> This means the gpiolib interface also has a u32 mask, but translation is
> done for the gpio-drivers.
>
> There is some code to request groups via device-tree (again respecting
> order)
> and there are also platform driver structures.
>
> gpiolib was also extended to export groups into sysfs, respecting policy
> (input, output, user-selectable) and to make softlinks to groups in other
> driver's subdir. (One driver we use this in is a power-sequencer with 2
> gpios selecting a margining profile, this driver then has the gpio_group
> exported in it's sysfs dir as .../profile, allowing H/W engineers to select
> the profile without voltage glitches)
>
> There's also a separate driver, that does nothing more than exporting
> both individual pins and groups to userspace based on platform description
> or devicetree. This is probably less interesting for mainline, since we're
> abusing device-tree to do away with some init script that can do the same.
>
> The rationale behind a 32bit mask is that typical processors can at most
> set one processor-word worth of GPIOs at once and there are probably
> few chips with over 32GPIOs on a single gpio_chip anyway.
> Nevertheless, in the era of 64bit, it's definitely possible to go for
> u64 instead.
Hi Stijn,
thank you for your notes!
Besides what I discussed with JC and Linus, I find the unsigned int
(i.e. u32 or u64, depending on the arch) quite appealing. It is a nice
compromise between my general bit mapped data model (variable size *u8
array) and the bool *values list. Even maps easily onto a single sysfs
entry for values, by abstracting a gpio list to an actual data word.
What do others think? JC? Linus? I'm considering this (unsigned int
data) a valid option.
One question: How did you solve the one-value-per-file in the sysfs
interface?
Thanks in advance!
Roland
WARNING: multiple messages have this Message-ID (diff)
From: Roland Stigge <stigge@antcom.de>
To: Stijn Devriendt <highguy@gmail.com>
Cc: grant.likely@secretlab.ca, linus.walleij@linaro.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, w.sang@pengutronix.de,
jbe@pengutronix.de,
Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>,
bgat@billgatliff.com
Subject: Re: [PATCH RFC 1/2] gpio: Add a block GPIO API to gpiolib
Date: Sun, 30 Sep 2012 12:50:42 +0200 [thread overview]
Message-ID: <50682402.8020402@antcom.de> (raw)
In-Reply-To: <CAOY=C6GG6jqqEAAGJjmDG-BFT2eq=9+ck+F_EOcthRgDCDv8=Q@mail.gmail.com>
On 30/09/12 11:35, Stijn Devriendt wrote:
> In our kernel tree we have similar code. If you like I can request
> permission
> to share. I can, however, already give you an update on the basic
> structure, perhaps
> it's useful now.
>
> For the first part, the drivers need to implement a the gpio interface
> for groups.
> gpio_set_multi, gpio_get_multi, gpio_direction_input_multi,
> gpio_direction_output_multi. Each of them gets a 'u32 mask'.
>
> Secondly, gpiolib gets some new code to handle groups:
> groups are requested via a list of gpio ids. Mind that order is respected:
> request( [1, 5, 2, 4] ) followed by a set(0x5) will translate to
> gpio_set_multi( 0x18 ). An opaque gpio_group struct is used to keep track.
> This means the gpiolib interface also has a u32 mask, but translation is
> done for the gpio-drivers.
>
> There is some code to request groups via device-tree (again respecting
> order)
> and there are also platform driver structures.
>
> gpiolib was also extended to export groups into sysfs, respecting policy
> (input, output, user-selectable) and to make softlinks to groups in other
> driver's subdir. (One driver we use this in is a power-sequencer with 2
> gpios selecting a margining profile, this driver then has the gpio_group
> exported in it's sysfs dir as .../profile, allowing H/W engineers to select
> the profile without voltage glitches)
>
> There's also a separate driver, that does nothing more than exporting
> both individual pins and groups to userspace based on platform description
> or devicetree. This is probably less interesting for mainline, since we're
> abusing device-tree to do away with some init script that can do the same.
>
> The rationale behind a 32bit mask is that typical processors can at most
> set one processor-word worth of GPIOs at once and there are probably
> few chips with over 32GPIOs on a single gpio_chip anyway.
> Nevertheless, in the era of 64bit, it's definitely possible to go for
> u64 instead.
Hi Stijn,
thank you for your notes!
Besides what I discussed with JC and Linus, I find the unsigned int
(i.e. u32 or u64, depending on the arch) quite appealing. It is a nice
compromise between my general bit mapped data model (variable size *u8
array) and the bool *values list. Even maps easily onto a single sysfs
entry for values, by abstracting a gpio list to an actual data word.
What do others think? JC? Linus? I'm considering this (unsigned int
data) a valid option.
One question: How did you solve the one-value-per-file in the sysfs
interface?
Thanks in advance!
Roland
next prev parent reply other threads:[~2012-09-30 10:50 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-27 21:22 [PATCH RFC 1/2] gpio: Add a block GPIO API to gpiolib Roland Stigge
2012-09-27 21:22 ` Roland Stigge
2012-09-27 21:22 ` [PATCH RFC 2/2] gpio-max730x: Add block GPIO API Roland Stigge
2012-09-27 21:22 ` Roland Stigge
2012-09-28 2:47 ` [PATCH RFC 1/2] gpio: Add a block GPIO API to gpiolib Jean-Christophe PLAGNIOL-VILLARD
2012-09-28 2:47 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-28 7:14 ` Roland Stigge
2012-09-28 7:14 ` Roland Stigge
2012-09-28 7:51 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-28 7:51 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-28 8:51 ` Roland Stigge
2012-09-28 8:51 ` Roland Stigge
2012-09-28 9:08 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-28 9:08 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-28 9:23 ` Roland Stigge
2012-09-28 9:23 ` Roland Stigge
2012-09-28 10:28 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-28 10:28 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-28 11:32 ` Roland Stigge
2012-09-28 11:32 ` Roland Stigge
2012-09-28 16:01 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-28 16:01 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-28 18:32 ` Roland Stigge
2012-09-28 18:32 ` Roland Stigge
2012-09-29 19:57 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-29 19:57 ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-30 10:34 ` Roland Stigge
2012-09-30 10:34 ` Roland Stigge
2012-09-30 15:11 ` Stijn Devriendt
2012-09-30 15:11 ` Stijn Devriendt
2012-09-28 9:14 ` Linus Walleij
2012-09-28 9:14 ` Linus Walleij
2012-09-28 9:52 ` Roland Stigge
2012-09-28 9:52 ` Roland Stigge
2012-09-28 11:34 ` Linus Walleij
2012-09-28 11:34 ` Linus Walleij
2012-09-28 12:35 ` Roland Stigge
2012-09-28 12:35 ` Roland Stigge
2012-09-30 9:35 ` Stijn Devriendt
2012-09-30 9:39 ` Stijn Devriendt
2012-09-30 10:50 ` Roland Stigge [this message]
2012-09-30 10:50 ` Roland Stigge
2012-09-30 14:52 ` Stijn Devriendt
2012-09-30 14:52 ` Stijn Devriendt
2012-09-30 15:09 ` Roland Stigge
2012-09-30 15:09 ` Roland Stigge
2012-09-30 15:19 ` Stijn Devriendt
2012-09-30 15:19 ` Stijn Devriendt
2012-09-30 15:46 ` Roland Stigge
2012-09-30 15:46 ` Roland Stigge
2012-10-03 23:11 ` Linus Walleij
2012-10-03 23:11 ` Linus Walleij
2012-10-03 23:07 ` Linus Walleij
2012-10-03 23:07 ` Linus Walleij
2012-10-04 20:25 ` Roland Stigge
2012-10-04 20:25 ` Roland Stigge
2012-10-03 19:08 ` Mark Brown
2012-10-03 19:08 ` Mark Brown
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=50682402.8020402@antcom.de \
--to=stigge@antcom.de \
--cc=linux-arm-kernel@lists.infradead.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 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.