GPIO Interfaces

1This provides an overview of GPIO access conventions on Linux. 2 3These calls use the gpio_* naming prefix. No other calls should use that 4prefix, or the related __gpio_* prefix. 5 6 7What is a GPIO? 8=============== 9A "General Purpose Input/Output" (GPIO) is a flexible software-controlled 10digital signal. They are provided from many kinds of chip, and are familiar 11to Linux developers working with embedded and custom hardware. Each GPIO 12represents a bit connected to a particular pin, or "ball" on Ball Grid Array 13(BGA) packages. Board schematics show which external hardware connects to 14which GPIOs. Drivers can be written generically, so that board setup code 15passes such pin configuration data to drivers. 16 17System-on-Chip (SOC) processors heavily rely on GPIOs. In some cases, every 18non-dedicated pin can be configured as a GPIO; and most chips have at least 19several dozen of them. Programmable logic devices (like FPGAs) can easily 20provide GPIOs; multifunction chips like power managers, and audio codecs 21often have a few such pins to help with pin scarcity on SOCs; and there are 22also "GPIO Expander" chips that connect using the I2C or SPI serial busses. 23Most PC southbridges have a few dozen GPIO-capable pins (with only the BIOS 24firmware knowing how they're used). 25 26The exact capabilities of GPIOs vary between systems. Common options: 27 28 - Output values are writable (high=1, low=0). Some chips also have 29 options about how that value is driven, so that for example only one 30 value might be driven ... supporting "wire-OR" and similar schemes 31 for the other value (notably, "open drain" signaling). 32 33 - Input values are likewise readable (1, 0). Some chips support readback 34 of pins configured as "output", which is very useful in such "wire-OR" 35 cases (to support bidirectional signaling). GPIO controllers may have 36 input de-glitch/debounce logic, sometimes with software controls. 37 38 - Inputs can often be used as IRQ signals, often edge triggered but 39 sometimes level triggered. Such IRQs may be configurable as system 40 wakeup events, to wake the system from a low power state. 41 42 - Usually a GPIO will be configurable as either input or output, as needed 43 by different product boards; single direction ones exist too. 44 45 - Most GPIOs can be accessed while holding spinlocks, but those accessed 46 through a serial bus normally can't. Some systems support both types. 47 48On a given board each GPIO is used for one specific purpose like monitoring 49MMC/SD card insertion/removal, detecting card writeprotect status, driving 50a LED, configuring a transceiver, bitbanging a serial bus, poking a hardware 51watchdog, sensing a switch, and so on. 52 53 54GPIO conventions 55================ 56Note that this is called a "convention" because you don't need to do it this 57way, and it's no crime if you don't. There **are** cases where portability 58is not the main issue; GPIOs are often used for the kind of board-specific 59glue logic that may even change between board revisions, and can't ever be 60used on a board that's wired differently. Only least-common-denominator 61functionality can be very portable. Other features are platform-specific, 62and that can be critical for glue logic. 63 64Plus, this doesn't require any implementation framework, just an interface. 65One platform might implement it as simple inline functions accessing chip 66registers; another might implement it by delegating through abstractions 67used for several very different kinds of GPIO controller. (There is some 68optional code supporting such an implementation strategy, described later 69in this document, but drivers acting as clients to the GPIO interface must 70not care how it's implemented.) 71 72That said, if the convention is supported on their platform, drivers should 73use it when possible. Platforms must declare GENERIC_GPIO support in their 74Kconfig (boolean true), and provide an <asm/gpio.h> file. Drivers that can't 75work without standard GPIO calls should have Kconfig entries which depend 76on GENERIC_GPIO. The GPIO calls are available, either as "real code" or as 77optimized-away stubs, when drivers use the include file: 78 79 #include <linux/gpio.h> 80 81If you stick to this convention then it'll be easier for other developers to 82see what your code is doing, and help maintain it. 83 84Note that these operations include I/O barriers on platforms which need to 85use them; drivers don't need to add them explicitly. 86 87 88Identifying GPIOs 89----------------- 90GPIOs are identified by unsigned integers in the range 0..MAX_INT. That 91reserves "negative" numbers for other purposes like marking signals as 92"not available on this board", or indicating faults. Code that doesn't 93touch the underlying hardware treats these integers as opaque cookies. 94 95Platforms define how they use those integers, and usually #define symbols 96for the GPIO lines so that board-specific setup code directly corresponds 97to the relevant schematics. In contrast, drivers should only use GPIO 98numbers passed to them from that setup code, using platform_data to hold 99board-specific pin configuration data (along with other board specific 100data they need). That avoids portability problems. 101 102So for example one platform uses numbers 32-159 for GPIOs; while another 103uses numbers 0..63 with one set of GPIO controllers, 64-79 with another 104type of GPIO controller, and on one particular board 80-95 with an FPGA. 105The numbers need not be contiguous; either of those platforms could also 106use numbers 2000-2063 to identify GPIOs in a bank of I2C GPIO expanders. 107 108If you want to initialize a structure with an invalid GPIO number, use 109some negative number (perhaps "-EINVAL"); that will never be valid. To 110test if such number from such a structure could reference a GPIO, you 111may use this predicate: 112 113 int gpio_is_valid(int number); 114 115A number that's not valid will be rejected by calls which may request 116or free GPIOs (see below). Other numbers may also be rejected; for 117example, a number might be valid but temporarily unused on a given board. 118 119Whether a platform supports multiple GPIO controllers is a platform-specific 120implementation issue, as are whether that support can leave "holes" in the space 121of GPIO numbers, and whether new controllers can be added at runtime. Such issues 122can affect things including whether adjacent GPIO numbers are both valid. 123 124Using GPIOs 125----------- 126The first thing a system should do with a GPIO is allocate it, using 127the gpio_request() call; see later. 128 129One of the next things to do with a GPIO, often in board setup code when 130setting up a platform_device using the GPIO, is mark its direction: 131 132 /* set as input or output, returning 0 or negative errno */ 133 int gpio_direction_input(unsigned gpio); 134 int gpio_direction_output(unsigned gpio, int value); 135 136The return value is zero for success, else a negative errno. It should 137be checked, since the get/set calls don't have error returns and since 138misconfiguration is possible. You should normally issue these calls from 139a task context. However, for spinlock-safe GPIOs it's OK to use them 140before tasking is enabled, as part of early board setup. 141 142For output GPIOs, the value provided becomes the initial output value. 143This helps avoid signal glitching during system startup. 144 145For compatibility with legacy interfaces to GPIOs, setting the direction 146of a GPIO implicitly requests that GPIO (see below) if it has not been 147requested already. That compatibility is being removed from the optional 148gpiolib framework. 149 150Setting the direction can fail if the GPIO number is invalid, or when 151that particular GPIO can't be used in that mode. It's generally a bad 152idea to rely on boot firmware to have set the direction correctly, since 153it probably wasn't validated to do more than boot Linux. (Similarly, 154that board setup code probably needs to multiplex that pin as a GPIO, 155and configure pullups/pulldowns appropriately.) 156 157 158Spinlock-Safe GPIO access 159------------------------- 160Most GPIO controllers can be accessed with memory read/write instructions. 161Those don't need to sleep, and can safely be done from inside hard 162(nonthreaded) IRQ handlers and similar contexts. 163 164Use the following calls to access such GPIOs, 165for which gpio_cansleep() will always return false (see below): 166 167 /* GPIO INPUT: return zero or nonzero */ 168 int gpio_get_value(unsigned gpio); 169 170 /* GPIO OUTPUT */ 171 void gpio_set_value(unsigned gpio, int value); 172 173The values are boolean, zero for low, nonzero for high. When reading the 174value of an output pin, the value returned should be what's seen on the 175pin ... that won't always match the specified output value, because of 176issues including open-drain signaling and output latencies. 177 178The get/set calls have no error returns because "invalid GPIO" should have 179been reported earlier from gpio_direction_*(). However, note that not all 180platforms can read the value of output pins; those that can't should always 181return zero. Also, using these calls for GPIOs that can't safely be accessed 182without sleeping (see below) is an error. 183 184Platform-specific implementations are encouraged to optimize the two 185calls to access the GPIO value in cases where the GPIO number (and for 186output, value) are constant. It's normal for them to need only a couple 187of instructions in such cases (reading or writing a hardware register), 188and not to need spinlocks. Such optimized calls can make bitbanging 189applications a lot more efficient (in both space and time) than spending 190dozens of instructions on subroutine calls. 191 192 193GPIO access that may sleep 194-------------------------- 195Some GPIO controllers must be accessed using message based busses like I2C 196or SPI. Commands to read or write those GPIO values require waiting to 197get to the head of a queue to transmit a command and get its response. 198This requires sleeping, which can't be done from inside IRQ handlers. 199 200Platforms that support this type of GPIO distinguish them from other GPIOs 201by returning nonzero from this call (which requires a valid GPIO number, 202which should have been previously allocated with gpio_request): 203 204 int gpio_cansleep(unsigned gpio); 205 206To access such GPIOs, a different set of accessors is defined: 207 208 /* GPIO INPUT: return zero or nonzero, might sleep */ 209 int gpio_get_value_cansleep(unsigned gpio); 210 211 /* GPIO OUTPUT, might sleep */ 212 void gpio_set_value_cansleep(unsigned gpio, int value); 213 214 215Accessing such GPIOs requires a context which may sleep, for example 216a threaded IRQ handler, and those accessors must be used instead of 217spinlock-safe accessors without the cansleep() name suffix. 218 219Other than the fact that these accessors might sleep, and will work 220on GPIOs that can't be accessed from hardIRQ handlers, these calls act 221the same as the spinlock-safe calls. 222 223 ** IN ADDITION ** calls to setup and configure such GPIOs must be made 224from contexts which may sleep, since they may need to access the GPIO 225controller chip too: (These setup calls are usually made from board 226setup or driver probe/teardown code, so this is an easy constraint.) 227 228 gpio_direction_input() 229 gpio_direction_output() 230 gpio_request() 231 232## gpio_request_one() 233## gpio_request_array() 234## gpio_free_array() 235 236 gpio_free() 237 gpio_set_debounce() 238 239 240 241Claiming and Releasing GPIOs 242---------------------------- 243To help catch system configuration errors, two calls are defined. 244 245 /* request GPIO, returning 0 or negative errno. 246 * non-null labels may be useful for diagnostics. 247 */ 248 int gpio_request(unsigned gpio, const char *label); 249 250 /* release previously-claimed GPIO */ 251 void gpio_free(unsigned gpio); 252 253Passing invalid GPIO numbers to gpio_request() will fail, as will requesting 254GPIOs that have already been claimed with that call. The return value of 255gpio_request() must be checked. You should normally issue these calls from 256a task context. However, for spinlock-safe GPIOs it's OK to request GPIOs 257before tasking is enabled, as part of early board setup. 258 259These calls serve two basic purposes. One is marking the signals which 260are actually in use as GPIOs, for better diagnostics; systems may have 261several hundred potential GPIOs, but often only a dozen are used on any 262given board. Another is to catch conflicts, identifying errors when 263(a) two or more drivers wrongly think they have exclusive use of that 264signal, or (b) something wrongly believes it's safe to remove drivers 265needed to manage a signal that's in active use. That is, requesting a 266GPIO can serve as a kind of lock. 267 268Some platforms may also use knowledge about what GPIOs are active for 269power management, such as by powering down unused chip sectors and, more 270easily, gating off unused clocks. 271 272Note that requesting a GPIO does NOT cause it to be configured in any 273way; it just marks that GPIO as in use. Separate code must handle any 274pin setup (e.g. controlling which pin the GPIO uses, pullup/pulldown). 275 276Also note that it's your responsibility to have stopped using a GPIO 277before you free it. 278 279Considering in most cases GPIOs are actually configured right after they 280are claimed, three additional calls are defined: 281 282 /* request a single GPIO, with initial configuration specified by 283 * 'flags', identical to gpio_request() wrt other arguments and 284 * return value 285 */ 286 int gpio_request_one(unsigned gpio, unsigned long flags, const char *label); 287 288 /* request multiple GPIOs in a single call 289 */ 290 int gpio_request_array(struct gpio *array, size_t num); 291 292 /* release multiple GPIOs in a single call 293 */ 294 void gpio_free_array(struct gpio *array, size_t num); 295 296where 'flags' is currently defined to specify the following properties: 297 298 * GPIOF_DIR_IN - to configure direction as input 299 * GPIOF_DIR_OUT - to configure direction as output 300 301 * GPIOF_INIT_LOW - as output, set initial level to LOW 302 * GPIOF_INIT_HIGH - as output, set initial level to HIGH 303 304since GPIOF_INIT_* are only valid when configured as output, so group valid 305combinations as: 306 307 * GPIOF_IN - configure as input 308 * GPIOF_OUT_INIT_LOW - configured as output, initial level LOW 309 * GPIOF_OUT_INIT_HIGH - configured as output, initial level HIGH 310 311In the future, these flags can be extended to support more properties such 312as open-drain status. 313 314Further more, to ease the claim/release of multiple GPIOs, 'struct gpio' is 315introduced to encapsulate all three fields as: 316 317 struct gpio { 318 unsigned gpio; 319 unsigned long flags; 320 const char *label; 321 }; 322 323A typical example of usage: 324 325 static struct gpio leds_gpios[] = { 326 { 32, GPIOF_OUT_INIT_HIGH, "Power LED" }, /* default to ON */ 327 { 33, GPIOF_OUT_INIT_LOW, "Green LED" }, /* default to OFF */ 328 { 34, GPIOF_OUT_INIT_LOW, "Red LED" }, /* default to OFF */ 329 { 35, GPIOF_OUT_INIT_LOW, "Blue LED" }, /* default to OFF */ 330 { ... }, 331 }; 332 333 err = gpio_request_one(31, GPIOF_IN, "Reset Button"); 334 if (err) 335 ... 336 337 err = gpio_request_array(leds_gpios, ARRAY_SIZE(leds_gpios)); 338 if (err) 339 ... 340 341 gpio_free_array(leds_gpios, ARRAY_SIZE(leds_gpios)); 342 343 344GPIOs mapped to IRQs 345-------------------- 346GPIO numbers are unsigned integers; so are IRQ numbers. These make up 347two logically distinct namespaces (GPIO 0 need not use IRQ 0). You can 348map between them using calls like: 349 350 /* map GPIO numbers to IRQ numbers */ 351 int gpio_to_irq(unsigned gpio); 352 353 /* map IRQ numbers to GPIO numbers (avoid using this) */ 354 int irq_to_gpio(unsigned irq); 355 356Those return either the corresponding number in the other namespace, or 357else a negative errno code if the mapping can't be done. (For example, 358some GPIOs can't be used as IRQs.) It is an unchecked error to use a GPIO 359number that wasn't set up as an input using gpio_direction_input(), or 360to use an IRQ number that didn't originally come from gpio_to_irq(). 361 362These two mapping calls are expected to cost on the order of a single 363addition or subtraction. They're not allowed to sleep. 364 365Non-error values returned from gpio_to_irq() can be passed to request_irq() 366or free_irq(). They will often be stored into IRQ resources for platform 367devices, by the board-specific initialization code. Note that IRQ trigger 368options are part of the IRQ interface, e.g. IRQF_TRIGGER_FALLING, as are 369system wakeup capabilities. 370 371Non-error values returned from irq_to_gpio() would most commonly be used 372with gpio_get_value(), for example to initialize or update driver state 373when the IRQ is edge-triggered. Note that some platforms don't support 374this reverse mapping, so you should avoid using it. 375 376 377Emulating Open Drain Signals 378---------------------------- 379Sometimes shared signals need to use "open drain" signaling, where only the 380low signal level is actually driven. (That term applies to CMOS transistors; 381"open collector" is used for TTL.) A pullup resistor causes the high signal 382level. This is sometimes called a "wire-AND"; or more practically, from the 383negative logic (low=true) perspective this is a "wire-OR". 384 385One common example of an open drain signal is a shared active-low IRQ line. 386Also, bidirectional data bus signals sometimes use open drain signals. 387 388Some GPIO controllers directly support open drain outputs; many don't. When 389you need open drain signaling but your hardware doesn't directly support it, 390there's a common idiom you can use to emulate it with any GPIO pin that can 391be used as either an input or an output: 392 393 LOW: gpio_direction_output(gpio, 0) ... this drives the signal 394 and overrides the pullup. 395 396 HIGH: gpio_direction_input(gpio) ... this turns off the output, 397 so the pullup (or some other device) controls the signal. 398 399If you are "driving" the signal high but gpio_get_value(gpio) reports a low 400value (after the appropriate rise time passes), you know some other component 401is driving the shared signal low. That's not necessarily an error. As one 402common example, that's how I2C clocks are stretched: a slave that needs a 403slower clock delays the rising edge of SCK, and the I2C master adjusts its 404signaling rate accordingly. 405 406 407What do these conventions omit? 408=============================== 409One of the biggest things these conventions omit is pin multiplexing, since 410this is highly chip-specific and nonportable. One platform might not need 411explicit multiplexing; another might have just two options for use of any 412given pin; another might have eight options per pin; another might be able 413to route a given GPIO to any one of several pins. (Yes, those examples all 414come from systems that run Linux today.) 415 416Related to multiplexing is configuration and enabling of the pullups or 417pulldowns integrated on some platforms. Not all platforms support them, 418or support them in the same way; and any given board might use external 419pullups (or pulldowns) so that the on-chip ones should not be used. 420(When a circuit needs 5 kOhm, on-chip 100 kOhm resistors won't do.) 421Likewise drive strength (2 mA vs 20 mA) and voltage (1.8V vs 3.3V) is a 422platform-specific issue, as are models like (not) having a one-to-one 423correspondence between configurable pins and GPIOs. 424 425There are other system-specific mechanisms that are not specified here, 426like the aforementioned options for input de-glitching and wire-OR output. 427Hardware may support reading or writing GPIOs in gangs, but that's usually 428configuration dependent: for GPIOs sharing the same bank. (GPIOs are 429commonly grouped in banks of 16 or 32, with a given SOC having several such 430banks.) Some systems can trigger IRQs from output GPIOs, or read values 431from pins not managed as GPIOs. Code relying on such mechanisms will 432necessarily be nonportable. 433 434Dynamic definition of GPIOs is not currently standard; for example, as 435a side effect of configuring an add-on board with some GPIO expanders. 436 437 438GPIO implementor's framework (OPTIONAL) 439======================================= 440As noted earlier, there is an optional implementation framework making it 441easier for platforms to support different kinds of GPIO controller using 442the same programming interface. This framework is called "gpiolib". 443 444As a debugging aid, if debugfs is available a /sys/kernel/debug/gpio file 445will be found there. That will list all the controllers registered through 446this framework, and the state of the GPIOs currently in use. 447 448 449Controller Drivers: gpio_chip 450----------------------------- 451In this framework each GPIO controller is packaged as a "struct gpio_chip" 452with information common to each controller of that type: 453 454 - methods to establish GPIO direction 455 - methods used to access GPIO values 456 - flag saying whether calls to its methods may sleep 457 - optional debugfs dump method (showing extra state like pullup config) 458 - label for diagnostics 459 460There is also per-instance data, which may come from device.platform_data: 461the number of its first GPIO, and how many GPIOs it exposes. 462 463The code implementing a gpio_chip should support multiple instances of the 464controller, possibly using the driver model. That code will configure each 465gpio_chip and issue gpiochip_add(). Removing a GPIO controller should be 466rare; use gpiochip_remove() when it is unavoidable. 467 468Most often a gpio_chip is part of an instance-specific structure with state 469not exposed by the GPIO interfaces, such as addressing, power management, 470and more. Chips such as codecs will have complex non-GPIO state. 471 472Any debugfs dump method should normally ignore signals which haven't been 473requested as GPIOs. They can use gpiochip_is_requested(), which returns 474either NULL or the label associated with that GPIO when it was requested. 475 476 477Platform Support 478---------------- 479To support this framework, a platform's Kconfig will "select" either 480ARCH_REQUIRE_GPIOLIB or ARCH_WANT_OPTIONAL_GPIOLIB 481and arrange that its <asm/gpio.h> includes <asm-generic/gpio.h> and defines 482three functions: gpio_get_value(), gpio_set_value(), and gpio_cansleep(). 483 484It may also provide a custom value for ARCH_NR_GPIOS, so that it better 485reflects the number of GPIOs in actual use on that platform, without 486wasting static table space. (It should count both built-in/SoC GPIOs and 487also ones on GPIO expanders. 488 489ARCH_REQUIRE_GPIOLIB means that the gpiolib code will always get compiled 490into the kernel on that architecture. 491 492ARCH_WANT_OPTIONAL_GPIOLIB means the gpiolib code defaults to off and the user 493can enable it and build it into the kernel optionally. 494 495If neither of these options are selected, the platform does not support 496GPIOs through GPIO-lib and the code cannot be enabled by the user. 497 498Trivial implementations of those functions can directly use framework 499code, which always dispatches through the gpio_chip: 500 501 #define gpio_get_value __gpio_get_value 502 #define gpio_set_value __gpio_set_value 503 #define gpio_cansleep __gpio_cansleep 504 505Fancier implementations could instead define those as inline functions with 506logic optimizing access to specific SOC-based GPIOs. For example, if the 507referenced GPIO is the constant "12", getting or setting its value could 508cost as little as two or three instructions, never sleeping. When such an 509optimization is not possible those calls must delegate to the framework 510code, costing at least a few dozen instructions. For bitbanged I/O, such 511instruction savings can be significant. 512 513For SOCs, platform-specific code defines and registers gpio_chip instances 514for each bank of on-chip GPIOs. Those GPIOs should be numbered/labeled to 515match chip vendor documentation, and directly match board schematics. They 516may well start at zero and go up to a platform-specific limit. Such GPIOs 517are normally integrated into platform initialization to make them always be 518available, from arch_initcall() or earlier; they can often serve as IRQs. 519 520 521Board Support 522------------- 523For external GPIO controllers -- such as I2C or SPI expanders, ASICs, multi 524function devices, FPGAs or CPLDs -- most often board-specific code handles 525registering controller devices and ensures that their drivers know what GPIO 526numbers to use with gpiochip_add(). Their numbers often start right after 527platform-specific GPIOs. 528 529For example, board setup code could create structures identifying the range 530of GPIOs that chip will expose, and passes them to each GPIO expander chip 531using platform_data. Then the chip driver's probe() routine could pass that 532data to gpiochip_add(). 533 534Initialization order can be important. For example, when a device relies on 535an I2C-based GPIO, its probe() routine should only be called after that GPIO 536becomes available. That may mean the device should not be registered until 537calls for that GPIO can work. One way to address such dependencies is for 538such gpio_chip controllers to provide setup() and teardown() callbacks to 539board specific code; those board specific callbacks would register devices 540once all the necessary resources are available, and remove them later when 541the GPIO controller device becomes unavailable. 542 543 544Sysfs Interface for Userspace (OPTIONAL) 545======================================== 546Platforms which use the "gpiolib" implementors framework may choose to 547configure a sysfs user interface to GPIOs. This is different from the 548debugfs interface, since it provides control over GPIO direction and 549value instead of just showing a gpio state summary. Plus, it could be 550present on production systems without debugging support. 551 552Given appropriate hardware documentation for the system, userspace could 553know for example that GPIO #23 controls the write protect line used to 554protect boot loader segments in flash memory. System upgrade procedures 555may need to temporarily remove that protection, first importing a GPIO, 556then changing its output state, then updating the code before re-enabling 557the write protection. In normal use, GPIO #23 would never be touched, 558and the kernel would have no need to know about it. 559 560Again depending on appropriate hardware documentation, on some systems 561userspace GPIO can be used to determine system configuration data that 562standard kernels won't know about. And for some tasks, simple userspace 563GPIO drivers could be all that the system really needs. 564 565Note that standard kernel drivers exist for common "LEDs and Buttons" 566GPIO tasks: "leds-gpio" and "gpio_keys", respectively. Use those 567instead of talking directly to the GPIOs; they integrate with kernel 568frameworks better than your userspace code could. 569 570 571Paths in Sysfs 572-------------- 573There are three kinds of entry in /sys/class/gpio: 574 575 - Control interfaces used to get userspace control over GPIOs; 576 577 - GPIOs themselves; and 578 579 - GPIO controllers ("gpio_chip" instances). 580 581That's in addition to standard files including the "device" symlink. 582 583The control interfaces are write-only: 584 585 /sys/class/gpio/ 586 587 "export" ... Userspace may ask the kernel to export control of 588 a GPIO to userspace by writing its number to this file. 589 590 Example: "echo 19 > export" will create a "gpio19" node 591 for GPIO #19, if that's not requested by kernel code. 592 593 "unexport" ... Reverses the effect of exporting to userspace. 594 595 Example: "echo 19 > unexport" will remove a "gpio19" 596 node exported using the "export" file. 597 598GPIO signals have paths like /sys/class/gpio/gpio42/ (for GPIO #42) 599and have the following read/write attributes: 600 601 /sys/class/gpio/gpioN/ 602 603 "direction" ... reads as either "in" or "out". This value may 604 normally be written. Writing as "out" defaults to 605 initializing the value as low. To ensure glitch free 606 operation, values "low" and "high" may be written to 607 configure the GPIO as an output with that initial value. 608 609 Note that this attribute *will not exist* if the kernel 610 doesn't support changing the direction of a GPIO, or 611 it was exported by kernel code that didn't explicitly 612 allow userspace to reconfigure this GPIO's direction. 613 614 "value" ... reads as either 0 (low) or 1 (high). If the GPIO 615 is configured as an output, this value may be written; 616 any nonzero value is treated as high. 617 618 If the pin can be configured as interrupt-generating interrupt 619 and if it has been configured to generate interrupts (see the 620 description of "edge"), you can poll(2) on that file and 621 poll(2) will return whenever the interrupt was triggered. If 622 you use poll(2), set the events POLLPRI and POLLERR. If you 623 use select(2), set the file descriptor in exceptfds. After 624 poll(2) returns, either lseek(2) to the beginning of the sysfs 625 file and read the new value or close the file and re-open it 626 to read the value. 627 628 "edge" ... reads as either "none", "rising", "falling", or 629 "both". Write these strings to select the signal edge(s) 630 that will make poll(2) on the "value" file return. 631 632 This file exists only if the pin can be configured as an 633 interrupt generating input pin. 634 635 "active_low" ... reads as either 0 (false) or 1 (true). Write 636 any nonzero value to invert the value attribute both 637 for reading and writing. Existing and subsequent 638 poll(2) support configuration via the edge attribute 639 for "rising" and "falling" edges will follow this 640 setting. 641 642GPIO controllers have paths like /sys/class/gpio/gpiochip42/ (for the 643controller implementing GPIOs starting at #42) and have the following 644read-only attributes: 645 646 /sys/class/gpio/gpiochipN/ 647 648 "base" ... same as N, the first GPIO managed by this chip 649 650 "label" ... provided for diagnostics (not always unique) 651 652 "ngpio" ... how many GPIOs this manges (N to N + ngpio - 1) 653 654Board documentation should in most cases cover what GPIOs are used for 655what purposes. However, those numbers are not always stable; GPIOs on 656a daughtercard might be different depending on the base board being used, 657or other cards in the stack. In such cases, you may need to use the 658gpiochip nodes (possibly in conjunction with schematics) to determine 659the correct GPIO number to use for a given signal. 660 661 662Exporting from Kernel code 663-------------------------- 664Kernel code can explicitly manage exports of GPIOs which have already been 665requested using gpio_request(): 666 667 /* export the GPIO to userspace */ 668 int gpio_export(unsigned gpio, bool direction_may_change); 669 670 /* reverse gpio_export() */ 671 void gpio_unexport(); 672 673 /* create a sysfs link to an exported GPIO node */ 674 int gpio_export_link(struct device *dev, const char *name, 675 unsigned gpio) 676 677 /* change the polarity of a GPIO node in sysfs */ 678 int gpio_sysfs_set_active_low(unsigned gpio, int value); 679 680After a kernel driver requests a GPIO, it may only be made available in 681the sysfs interface by gpio_export(). The driver can control whether the 682signal direction may change. This helps drivers prevent userspace code 683from accidentally clobbering important system state. 684 685This explicit exporting can help with debugging (by making some kinds 686of experiments easier), or can provide an always-there interface that's 687suitable for documenting as part of a board support package. 688 689After the GPIO has been exported, gpio_export_link() allows creating 690symlinks from elsewhere in sysfs to the GPIO sysfs node. Drivers can 691use this to provide the interface under their own device in sysfs with 692a descriptive name. 693 694Drivers can use gpio_sysfs_set_active_low() to hide GPIO line polarity 695differences between boards from user space. This only affects the 696sysfs interface. Polarity change can be done both before and after 697gpio_export(), and previously enabled poll(2) support for either 698rising or falling edge will be reconfigured to follow this setting.
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )