Skip to content

Commit d8f388d

Browse files
David Brownelltorvalds
authored andcommitted
gpio: sysfs interface
This adds a simple sysfs interface for GPIOs. /sys/class/gpio /export ... asks the kernel to export a GPIO to userspace /unexport ... to return a GPIO to the kernel /gpioN ... for each exported GPIO #N /value ... always readable, writes fail for input GPIOs /direction ... r/w as: in, out (default low); write high, low /gpiochipN ... for each gpiochip; #N is its first GPIO /base ... (r/o) same as N /label ... (r/o) descriptive, not necessarily unique /ngpio ... (r/o) number of GPIOs; numbered N .. N+(ngpio - 1) GPIOs claimed by kernel code may be exported by its owner using a new gpio_export() call, which should be most useful for driver debugging. Such exports may optionally be done without a "direction" attribute. Userspace may ask to take over a GPIO by writing to a sysfs control file, helping to cope with incomplete board support or other "one-off" requirements that don't merit full kernel support: echo 23 > /sys/class/gpio/export ... will gpio_request(23, "sysfs") and gpio_export(23); use /sys/class/gpio/gpio-23/direction to (re)configure it, when that GPIO can be used as both input and output. echo 23 > /sys/class/gpio/unexport ... will gpio_free(23), when it was exported as above The extra D-space footprint is a few hundred bytes, except for the sysfs resources associated with each exported GPIO. The additional I-space footprint is about two thirds of the current size of gpiolib (!). Since no /dev node creation is involved, no "udev" support is needed. Related changes: * This adds a device pointer to "struct gpio_chip". When GPIO providers initialize that, sysfs gpio class devices become children of that device instead of being "virtual" devices. * The (few) gpio_chip providers which have such a device node have been updated. * Some gpio_chip drivers also needed to update their module "owner" field ... for which missing kerneldoc was added. * Some gpio_chips don't support input GPIOs. Those GPIOs are now flagged appropriately when the chip is registered. Based on previous patches, and discussion both on and off LKML. A Documentation/ABI/testing/sysfs-gpio update is ready to submit once this merges to mainline. [akpm@linux-foundation.org: a few maintenance build fixes] Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Cc: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de> Cc: Greg KH <greg@kroah.com> Cc: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 8b6dd98 commit d8f388d

File tree

12 files changed

+712
-20
lines changed

12 files changed

+712
-20
lines changed

Documentation/gpio.txt

Lines changed: 118 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -347,15 +347,12 @@ necessarily be nonportable.
347347
Dynamic definition of GPIOs is not currently standard; for example, as
348348
a side effect of configuring an add-on board with some GPIO expanders.
349349

350-
These calls are purely for kernel space, but a userspace API could be built
351-
on top of them.
352-
353350

354351
GPIO implementor's framework (OPTIONAL)
355352
=======================================
356353
As noted earlier, there is an optional implementation framework making it
357354
easier for platforms to support different kinds of GPIO controller using
358-
the same programming interface.
355+
the same programming interface. This framework is called "gpiolib".
359356

360357
As a debugging aid, if debugfs is available a /sys/kernel/debug/gpio file
361358
will be found there. That will list all the controllers registered through
@@ -439,4 +436,120 @@ becomes available. That may mean the device should not be registered until
439436
calls for that GPIO can work. One way to address such dependencies is for
440437
such gpio_chip controllers to provide setup() and teardown() callbacks to
441438
board specific code; those board specific callbacks would register devices
442-
once all the necessary resources are available.
439+
once all the necessary resources are available, and remove them later when
440+
the GPIO controller device becomes unavailable.
441+
442+
443+
Sysfs Interface for Userspace (OPTIONAL)
444+
========================================
445+
Platforms which use the "gpiolib" implementors framework may choose to
446+
configure a sysfs user interface to GPIOs. This is different from the
447+
debugfs interface, since it provides control over GPIO direction and
448+
value instead of just showing a gpio state summary. Plus, it could be
449+
present on production systems without debugging support.
450+
451+
Given approprate hardware documentation for the system, userspace could
452+
know for example that GPIO #23 controls the write protect line used to
453+
protect boot loader segments in flash memory. System upgrade procedures
454+
may need to temporarily remove that protection, first importing a GPIO,
455+
then changing its output state, then updating the code before re-enabling
456+
the write protection. In normal use, GPIO #23 would never be touched,
457+
and the kernel would have no need to know about it.
458+
459+
Again depending on appropriate hardware documentation, on some systems
460+
userspace GPIO can be used to determine system configuration data that
461+
standard kernels won't know about. And for some tasks, simple userspace
462+
GPIO drivers could be all that the system really needs.
463+
464+
Note that standard kernel drivers exist for common "LEDs and Buttons"
465+
GPIO tasks: "leds-gpio" and "gpio_keys", respectively. Use those
466+
instead of talking directly to the GPIOs; they integrate with kernel
467+
frameworks better than your userspace code could.
468+
469+
470+
Paths in Sysfs
471+
--------------
472+
There are three kinds of entry in /sys/class/gpio:
473+
474+
- Control interfaces used to get userspace control over GPIOs;
475+
476+
- GPIOs themselves; and
477+
478+
- GPIO controllers ("gpio_chip" instances).
479+
480+
That's in addition to standard files including the "device" symlink.
481+
482+
The control interfaces are write-only:
483+
484+
/sys/class/gpio/
485+
486+
"export" ... Userspace may ask the kernel to export control of
487+
a GPIO to userspace by writing its number to this file.
488+
489+
Example: "echo 19 > export" will create a "gpio19" node
490+
for GPIO #19, if that's not requested by kernel code.
491+
492+
"unexport" ... Reverses the effect of exporting to userspace.
493+
494+
Example: "echo 19 > unexport" will remove a "gpio19"
495+
node exported using the "export" file.
496+
497+
GPIO signals have paths like /sys/class/gpio/gpio42/ (for GPIO #42)
498+
and have the following read/write attributes:
499+
500+
/sys/class/gpio/gpioN/
501+
502+
"direction" ... reads as either "in" or "out". This value may
503+
normally be written. Writing as "out" defaults to
504+
initializing the value as low. To ensure glitch free
505+
operation, values "low" and "high" may be written to
506+
configure the GPIO as an output with that initial value.
507+
508+
Note that this attribute *will not exist* if the kernel
509+
doesn't support changing the direction of a GPIO, or
510+
it was exported by kernel code that didn't explicitly
511+
allow userspace to reconfigure this GPIO's direction.
512+
513+
"value" ... reads as either 0 (low) or 1 (high). If the GPIO
514+
is configured as an output, this value may be written;
515+
any nonzero value is treated as high.
516+
517+
GPIO controllers have paths like /sys/class/gpio/chipchip42/ (for the
518+
controller implementing GPIOs starting at #42) and have the following
519+
read-only attributes:
520+
521+
/sys/class/gpio/gpiochipN/
522+
523+
"base" ... same as N, the first GPIO managed by this chip
524+
525+
"label" ... provided for diagnostics (not always unique)
526+
527+
"ngpio" ... how many GPIOs this manges (N to N + ngpio - 1)
528+
529+
Board documentation should in most cases cover what GPIOs are used for
530+
what purposes. However, those numbers are not always stable; GPIOs on
531+
a daughtercard might be different depending on the base board being used,
532+
or other cards in the stack. In such cases, you may need to use the
533+
gpiochip nodes (possibly in conjunction with schematics) to determine
534+
the correct GPIO number to use for a given signal.
535+
536+
537+
Exporting from Kernel code
538+
--------------------------
539+
Kernel code can explicitly manage exports of GPIOs which have already been
540+
requested using gpio_request():
541+
542+
/* export the GPIO to userspace */
543+
int gpio_export(unsigned gpio, bool direction_may_change);
544+
545+
/* reverse gpio_export() */
546+
void gpio_unexport();
547+
548+
After a kernel driver requests a GPIO, it may only be made available in
549+
the sysfs interface by gpio_export(). The driver can control whether the
550+
signal direction may change. This helps drivers prevent userspace code
551+
from accidentally clobbering important system state.
552+
553+
This explicit exporting can help with debugging (by making some kinds
554+
of experiments easier), or can provide an always-there interface that's
555+
suitable for documenting as part of a board support package.

arch/arm/plat-omap/gpio.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1488,6 +1488,9 @@ static int __init _omap_gpio_init(void)
14881488
bank->chip.set = gpio_set;
14891489
if (bank_is_mpuio(bank)) {
14901490
bank->chip.label = "mpuio";
1491+
#ifdef CONFIG_ARCH_OMAP1
1492+
bank->chip.dev = &omap_mpuio_device.dev;
1493+
#endif
14911494
bank->chip.base = OMAP_MPUIO(0);
14921495
} else {
14931496
bank->chip.label = "gpio";

arch/avr32/mach-at32ap/pio.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,8 @@ static int __init pio_probe(struct platform_device *pdev)
360360
pio->chip.label = pio->name;
361361
pio->chip.base = pdev->id * 32;
362362
pio->chip.ngpio = 32;
363+
pio->chip.dev = &pdev->dev;
364+
pio->chip.owner = THIS_MODULE;
363365

364366
pio->chip.direction_input = direction_input;
365367
pio->chip.get = gpio_get;

drivers/gpio/Kconfig

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,21 @@ config DEBUG_GPIO
2323
slower. The diagnostics help catch the type of setup errors
2424
that are most common when setting up new platforms or boards.
2525

26+
config GPIO_SYSFS
27+
bool "/sys/class/gpio/... (sysfs interface)"
28+
depends on SYSFS && EXPERIMENTAL
29+
help
30+
Say Y here to add a sysfs interface for GPIOs.
31+
32+
This is mostly useful to work around omissions in a system's
33+
kernel support. Those are common in custom and semicustom
34+
hardware assembled using standard kernels with a minimum of
35+
custom patches. In those cases, userspace code may import
36+
a given GPIO from the kernel, if no kernel driver requested it.
37+
38+
Kernel drivers may also request that a particular GPIO be
39+
exported to userspace; this can be useful when debugging.
40+
2641
# put expanders in the right section, in alphabetical order
2742

2843
comment "I2C GPIO expanders:"

0 commit comments

Comments
 (0)