linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Michael Welling <mwelling@ieee.org>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: Johan Hovold <johan@kernel.org>,
	Markus Pargmann <mpa@pengutronix.de>,
	Alexandre Courbot <gnurou@gmail.com>,
	"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
	Alexandre Courbot <acourbot@nvidia.com>,
	Arnd Bergmann <arnd@arndb.de>, Mark Brown <broonie@kernel.org>,
	Amit Kucheria <amit.kucheria@linaro.org>
Subject: Re: [PATCH 0/6] GPIO character device skeleton
Date: Wed, 4 Nov 2015 13:44:55 -0600	[thread overview]
Message-ID: <20151104194455.GA27450@deathstar> (raw)
In-Reply-To: <CACRpkdaQYDk4s9b79xh+vL-3SFYp5GN3KpjgsSshzF0E+1-r5A@mail.gmail.com>

On Tue, Nov 03, 2015 at 06:18:42PM +0100, Linus Walleij wrote:
> On Tue, Nov 3, 2015 at 1:06 PM, Johan Hovold <johan@kernel.org> wrote:
> > [Pargmann]
> >> As an idea: We could use the complete path to create some sort of unique id for
> >> the device (perhaps hash or something different). This id can be exported as
> >> device attribute and would allow udev to create some links as known from
> >> /dev/disk/by-id for example. This would make identifying a single chip quite
> >> easy for any userspace application and we would avoid having this really long
> >> path somewhere.
> >
> > The unique ids are already there in sysfs, for example:
> >
> > $ for x in /sys/bus/gpio/devices/gpiochip*; do readlink $x; done
> > ../../../devices/platform/68000000.ocp/48310000.gpio/gpiochip0
> > ../../../devices/platform/68000000.ocp/49050000.gpio/gpiochip1
> > ../../../devices/platform/68000000.ocp/49052000.gpio/gpiochip2
> > ../../../devices/platform/68000000.ocp/49054000.gpio/gpiochip3
> > ../../../devices/platform/68000000.ocp/49056000.gpio/gpiochip4
> > ../../../devices/platform/68000000.ocp/49058000.gpio/gpiochip5
> > ../../../devices/platform/68000000.ocp/48070000.i2c/i2c-0/0-0048/twl4030-gpio/gpiochip6
> > ../../../devices/platform/68000000.ocp/48064000.usbhshost/48064800.ehci/usb1/1-2/1-2.3/1-2.3:1.0/gpiochip7
> >
> > And libudev can be used to lookup devices based on (parent) attributes
> > (such as USB VID/PID, serial numbers, etc).
> >
> > We could also export further attributes if that would help (e.g.
> > gpio-chip labels).
> 
> Yeah sysfs does provide this.
> 
> This has the problem that everyone and their dog need to use udev
> or something like it. Some library or so that run around in sysfs like
> libudev+systemdlib does currently.
> 
> And since Android does not use udev, and Busybox does not use udev,
> there are quite a few million users there. Or at least two big projects that
> need to reimplement the same idea. It could be argued that they should,
> since sysfs is indeed an ABI.
> 
> In the Busybox mdev case part of the goal is to minimize userspace code
> size too, and it does not support the complex rules of udev for example.
> 
> It'd be nice if devices could be uniquely identified in the chardev alone
> I think, then we don't need to much reliance on external assumptions
> and traversing sysfs somehow for more info.

So I added a few duplicate SPI gpio controllers to see how it looks in userspace.

root@som-imx6q:~# lsgpio
GPIO chip: 209c000.gpio, 32 GPIO lines
GPIO chip: 20a0000.gpio, 32 GPIO lines
GPIO chip: 20a4000.gpio, 32 GPIO lines
GPIO chip: 20a8000.gpio, 32 GPIO lines
GPIO chip: 20ac000.gpio, 32 GPIO lines
GPIO chip: 20b0000.gpio, 32 GPIO lines
GPIO chip: 20b4000.gpio, 32 GPIO lines
GPIO chip: mcp23s08, 8 GPIO lines
GPIO chip: mcp23s08, 8 GPIO lines

As expected the two are indistinguishable using the lsgpio.

Here is how they look in the /sys/bus/gpio directory:
root@som-imx6q:~# for x in /sys/bus/gpio/devices/gpiochip*; do readlink $x; done
../../../devices/soc0/soc/2000000.aips-bus/209c000.gpio/gpiochip0
../../../devices/soc0/soc/2000000.aips-bus/20a0000.gpio/gpiochip1
../../../devices/soc0/soc/2000000.aips-bus/20a4000.gpio/gpiochip2
../../../devices/soc0/soc/2000000.aips-bus/20a8000.gpio/gpiochip3
../../../devices/soc0/soc/2000000.aips-bus/20ac000.gpio/gpiochip4
../../../devices/soc0/soc/2000000.aips-bus/20b0000.gpio/gpiochip5
../../../devices/soc0/soc/2000000.aips-bus/20b4000.gpio/gpiochip6
../../../devices/soc0/soc/2000000.aips-bus/2000000.spba-bus/2008000.ecspi/spi_master/spi0/spi0.0/gpiochip7
../../../devices/soc0/soc/2000000.aips-bus/2000000.spba-bus/200c000.ecspi/spi_master/spi1/spi1.0/gpiochip8

Here is what the debug out looks like:
root@som-imx6q:~# cat /sys/kernel/debug/gpio 
gpiochip0: GPIOs 0-31, parent: platform/209c000.gpio, 209c000.gpio:

gpiochip1: GPIOs 32-63, parent: platform/20a0000.gpio, 20a0000.gpio:
 gpio-33  (                    |PCIe reset          ) out hi    

gpiochip2: GPIOs 64-95, parent: platform/20a4000.gpio, 20a4000.gpio:
 gpio-83  (                    |spi_imx             ) out hi    
 gpio-84  (                    |spi_imx             ) out hi    
 gpio-93  (                    |phy-reset           ) out hi    

gpiochip3: GPIOs 96-127, parent: platform/20a8000.gpio, 20a8000.gpio:

gpiochip4: GPIOs 128-159, parent: platform/20ac000.gpio, 20ac000.gpio:

gpiochip5: GPIOs 160-191, parent: platform/20b0000.gpio, 20b0000.gpio:

gpiochip6: GPIOs 192-223, parent: platform/20b4000.gpio, 20b4000.gpio:

gpiochip8: GPIOs 496-503, parent: spi/spi1.0, mcp23s08, can sleep:

gpiochip7: GPIOs 504-511, parent: spi/spi0.0, mcp23s08, can sleep:

The parent string here is perhaps a good way to distinguish between similar
registrations. Perhaps the bus part of parent string could be added to another
string in the struct that is passed to userspace with the ioctl.

> 
> Yours,
> Linus Walleij

  reply	other threads:[~2015-11-04 19:45 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-22  8:32 [PATCH 0/6] GPIO character device skeleton Linus Walleij
2015-10-22  8:32 ` [PATCH 1/6] gpio: make the gpiochip a real device Linus Walleij
2015-10-24 18:09   ` Markus Pargmann
2015-10-25  7:06   ` Alexandre Courbot
2015-10-26  2:12     ` Mark Brown
2015-11-03 21:20     ` Linus Walleij
2015-11-02 10:31   ` Johan Hovold
2015-11-02 12:25     ` Mark Brown
2015-11-02 12:43       ` Johan Hovold
2015-11-02 12:47         ` Mark Brown
2015-11-02 12:53           ` Johan Hovold
2015-11-02 13:06             ` Mark Brown
2015-11-02 13:14               ` Johan Hovold
2015-11-02 13:17                 ` Mark Brown
2015-11-02 13:25                   ` Johan Hovold
2015-11-03 21:24     ` Linus Walleij
2015-11-04 10:48       ` Linus Walleij
2015-11-05  9:44         ` Johan Hovold
2015-11-05 10:29           ` Mark Brown
2015-11-16 14:27           ` Linus Walleij
2015-12-03 14:04             ` Linus Walleij
2015-12-03 14:06               ` Linus Walleij
2015-12-03 21:26                 ` Michael Welling
2015-12-04 22:31                 ` Michael Welling
2015-12-11 17:58                   ` Linus Walleij
2015-12-08  9:29               ` Johan Hovold
2015-12-11 18:06                 ` Linus Walleij
2015-10-22  8:32 ` [PATCH 2/6] gpio: refer to gpio device in prints and debugfs Linus Walleij
2015-10-22  8:32 ` [PATCH 3/6] gpio: add a userspace chardev ABI for GPIOs Linus Walleij
2015-10-22 20:35   ` Michael Welling
2015-10-24  0:30   ` Greg Kroah-Hartman
2016-01-28 11:13     ` Linus Walleij
2015-10-26  1:34   ` Mark Brown
2016-01-27 10:05   ` Bamvor Zhang Jian
2016-01-28 11:14     ` Linus Walleij
2016-01-29 10:24       ` Bamvor Zhang Jian
2016-02-10 10:04         ` Linus Walleij
2015-10-22  8:32 ` [PATCH 4/6] tools/gpio: create GPIO tools Linus Walleij
2015-10-25  8:23   ` Alexandre Courbot
2015-10-22  8:32 ` [PATCH 5/6] gpio: add a userspace character device ABI Linus Walleij
2015-10-24 18:46   ` Markus Pargmann
2015-10-22  8:32 ` [PATCH 6/6] gpio: ABI: mark the sysfs ABI as obsolete Linus Walleij
2015-10-22 18:57 ` [PATCH 0/6] GPIO character device skeleton Michael Welling
2015-10-24 17:53 ` Markus Pargmann
2015-10-30 14:40   ` Linus Walleij
2015-11-02 10:00     ` Johan Hovold
2015-10-24 18:42 ` Markus Pargmann
2015-10-30  1:55   ` Alexandre Courbot
2015-10-30 19:48     ` Linus Walleij
2015-11-02 10:13       ` Johan Hovold
2015-11-03  7:23         ` Markus Pargmann
2015-11-03 12:06           ` Johan Hovold
2015-11-03 17:18             ` Linus Walleij
2015-11-04 19:44               ` Michael Welling [this message]
2015-11-05  9:40               ` Johan Hovold
2015-11-05 14:11                 ` Linus Walleij
2015-11-06 10:21                   ` Johan Hovold
2015-11-16 13:33                     ` Linus Walleij
2015-11-03 17:05           ` Linus Walleij
2015-10-30 14:43   ` Linus Walleij
2015-10-30 22:54     ` Arnd Bergmann
2015-11-01  9:37       ` Linus Walleij
2015-11-02 10:16         ` Johan Hovold
2015-10-26  2:18 ` Mark Brown
2015-10-30  1:55 ` Alexandre Courbot
2015-10-30 19:47   ` Linus Walleij
2015-11-01  2:41     ` Mark Brown
2015-11-03  7:39       ` Markus Pargmann
2015-11-03  8:50         ` Mark Brown
2015-11-03 10:21           ` Amit Kucheria
2015-11-03 17:06           ` 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=20151104194455.GA27450@deathstar \
    --to=mwelling@ieee.org \
    --cc=acourbot@nvidia.com \
    --cc=amit.kucheria@linaro.org \
    --cc=arnd@arndb.de \
    --cc=broonie@kernel.org \
    --cc=gnurou@gmail.com \
    --cc=johan@kernel.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=mpa@pengutronix.de \
    /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).