aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/gpio.txt
diff options
context:
space:
mode:
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.