aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/gpio.txt
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2008-07-25 04:46:07 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-07-25 13:53:30 -0400
commitd8f388d8dc8d4f36539dd37c1fff62cc404ea0fc (patch)
treedf8603775c889f29f8a03c77b9f7913bfd90d296 /Documentation/gpio.txt
parent8b6dd986823a8d92ed9f54baa5cef8604d9d9d44 (diff)
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>
Diffstat (limited to 'Documentation/gpio.txt')
-rw-r--r--Documentation/gpio.txt123
1 files changed, 118 insertions, 5 deletions
diff --git a/Documentation/gpio.txt b/Documentation/gpio.txt
index c35ca9e40d4c..8b69811a9642 100644
--- a/Documentation/gpio.txt
+++ b/Documentation/gpio.txt
@@ -347,15 +347,12 @@ necessarily be nonportable.
347Dynamic definition of GPIOs is not currently standard; for example, as 347Dynamic definition of GPIOs is not currently standard; for example, as
348a side effect of configuring an add-on board with some GPIO expanders. 348a side effect of configuring an add-on board with some GPIO expanders.
349 349
350These calls are purely for kernel space, but a userspace API could be built
351on top of them.
352
353 350
354GPIO implementor's framework (OPTIONAL) 351GPIO implementor's framework (OPTIONAL)
355======================================= 352=======================================
356As noted earlier, there is an optional implementation framework making it 353As noted earlier, there is an optional implementation framework making it
357easier for platforms to support different kinds of GPIO controller using 354easier for platforms to support different kinds of GPIO controller using
358the same programming interface. 355the same programming interface. This framework is called "gpiolib".
359 356
360As a debugging aid, if debugfs is available a /sys/kernel/debug/gpio file 357As a debugging aid, if debugfs is available a /sys/kernel/debug/gpio file
361will be found there. That will list all the controllers registered through 358will 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
439calls for that GPIO can work. One way to address such dependencies is for 436calls for that GPIO can work. One way to address such dependencies is for
440such gpio_chip controllers to provide setup() and teardown() callbacks to 437such gpio_chip controllers to provide setup() and teardown() callbacks to
441board specific code; those board specific callbacks would register devices 438board specific code; those board specific callbacks would register devices
442once all the necessary resources are available. 439once all the necessary resources are available, and remove them later when
440the GPIO controller device becomes unavailable.
441
442
443Sysfs Interface for Userspace (OPTIONAL)
444========================================
445Platforms which use the "gpiolib" implementors framework may choose to
446configure a sysfs user interface to GPIOs. This is different from the
447debugfs interface, since it provides control over GPIO direction and
448value instead of just showing a gpio state summary. Plus, it could be
449present on production systems without debugging support.
450
451Given approprate hardware documentation for the system, userspace could
452know for example that GPIO #23 controls the write protect line used to
453protect boot loader segments in flash memory. System upgrade procedures
454may need to temporarily remove that protection, first importing a GPIO,
455then changing its output state, then updating the code before re-enabling
456the write protection. In normal use, GPIO #23 would never be touched,
457and the kernel would have no need to know about it.
458
459Again depending on appropriate hardware documentation, on some systems
460userspace GPIO can be used to determine system configuration data that
461standard kernels won't know about. And for some tasks, simple userspace
462GPIO drivers could be all that the system really needs.
463
464Note that standard kernel drivers exist for common "LEDs and Buttons"
465GPIO tasks: "leds-gpio" and "gpio_keys", respectively. Use those
466instead of talking directly to the GPIOs; they integrate with kernel
467frameworks better than your userspace code could.
468
469
470Paths in Sysfs
471--------------
472There 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
480That's in addition to standard files including the "device" symlink.
481
482The 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
497GPIO signals have paths like /sys/class/gpio/gpio42/ (for GPIO #42)
498and 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
517GPIO controllers have paths like /sys/class/gpio/chipchip42/ (for the
518controller implementing GPIOs starting at #42) and have the following
519read-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
529Board documentation should in most cases cover what GPIOs are used for
530what purposes. However, those numbers are not always stable; GPIOs on
531a daughtercard might be different depending on the base board being used,
532or other cards in the stack. In such cases, you may need to use the
533gpiochip nodes (possibly in conjunction with schematics) to determine
534the correct GPIO number to use for a given signal.
535
536
537Exporting from Kernel code
538--------------------------
539Kernel code can explicitly manage exports of GPIOs which have already been
540requested 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
548After a kernel driver requests a GPIO, it may only be made available in
549the sysfs interface by gpio_export(). The driver can control whether the
550signal direction may change. This helps drivers prevent userspace code
551from accidentally clobbering important system state.
552
553This explicit exporting can help with debugging (by making some kinds
554of experiments easier), or can provide an always-there interface that's
555suitable for documenting as part of a board support package.