diff options
author | David Brownell <dbrownell@users.sourceforge.net> | 2008-07-25 04:46:07 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-25 13:53:30 -0400 |
commit | d8f388d8dc8d4f36539dd37c1fff62cc404ea0fc (patch) | |
tree | df8603775c889f29f8a03c77b9f7913bfd90d296 /Documentation | |
parent | 8b6dd986823a8d92ed9f54baa5cef8604d9d9d44 (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')
-rw-r--r-- | Documentation/gpio.txt | 123 |
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. | |||
347 | Dynamic definition of GPIOs is not currently standard; for example, as | 347 | Dynamic definition of GPIOs is not currently standard; for example, as |
348 | a side effect of configuring an add-on board with some GPIO expanders. | 348 | a side effect of configuring an add-on board with some GPIO expanders. |
349 | 349 | ||
350 | These calls are purely for kernel space, but a userspace API could be built | ||
351 | on top of them. | ||
352 | |||
353 | 350 | ||
354 | GPIO implementor's framework (OPTIONAL) | 351 | GPIO implementor's framework (OPTIONAL) |
355 | ======================================= | 352 | ======================================= |
356 | As noted earlier, there is an optional implementation framework making it | 353 | As noted earlier, there is an optional implementation framework making it |
357 | easier for platforms to support different kinds of GPIO controller using | 354 | 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". |
359 | 356 | ||
360 | As a debugging aid, if debugfs is available a /sys/kernel/debug/gpio file | 357 | As a debugging aid, if debugfs is available a /sys/kernel/debug/gpio file |
361 | will be found there. That will list all the controllers registered through | 358 | 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 | |||
439 | calls for that GPIO can work. One way to address such dependencies is for | 436 | calls for that GPIO can work. One way to address such dependencies is for |
440 | such gpio_chip controllers to provide setup() and teardown() callbacks to | 437 | such gpio_chip controllers to provide setup() and teardown() callbacks to |
441 | board specific code; those board specific callbacks would register devices | 438 | 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. | ||