Changes between Version 16 and Version 17 of gpio


Ignore:
Timestamp:
08/23/2019 06:17:54 PM (3 months ago)
Author:
Tim Harvey
Comment:

moved GPIO mapping up a level and expanded with libgpiod example

Legend:

Unmodified
Added
Removed
Modified
  • gpio

    v16 v17  
    5454
    5555You can look at the output of /sys/kernel/debug/gpio to see what GPIO's are available and from what controller. The controller name will indicate if its an I2C controller or not.
     56
     57
     58[=#mapping]
     59= GPIO mapping
     60The various product hardware manuals will call out GPIO devices on the board and provide a table mapping the GPIO to a GPIO host controller, a function, and a connector pinout (if going off-board).
     61
     62This hardware mapping is defined in the following files depending on board/family:
     63* Newport: Linux kernel device-tree (ie [http://github.com/Gateworks/dts-newport])
     64* Ventana: Linux kernel device-tree (ie [http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi arch/arm/boot/dts/imx6qdl-gw54xx.dtsi])
     65* Laguna: Linux kernel board-support files (ie [https://github.com/Gateworks/openwrt/blob/16.02/target/linux/cns3xxx/files/arch/arm/mach-cns3xxx/laguna.c arch/arm/mach-cns3xxx/laguna.c]).
     66
     67** Product Family specific notes:
     68 * Newport:
     69  - CN80XX GPIOs: The CN80XX has one 48bit GPIO controller
     70   - GPIO![0-48]: gpio-464 to gpio-511
     71 * Ventana:
     72  - IMX6 GPIOs: The IMX6 has 7 32bit GPIO controllers for a possible 224 fast ARM based GPIO's
     73   - GPIO1_IO![0-31]: gpio0-gpio31
     74   - GPIO2_IO![0-31]: gpio32-gpio63
     75   - GPIO3_IO![0-31]: gpio64-gpio95
     76   - GPIO4_IO![0-31]: gpio96-gpio127
     77   - GPIO5_IO![0-31]: gpio128-gpio159
     78   - GPIO6_IO![0-31]: gpio160-gpio191
     79   - GPIO7_IO![0-31]: gpio192-gpio223
     80  - [wiki:gsc GSC] GPIOs:
     81   - GSC_GPIO_P0![0-7]: gpio240-gpio247
     82   - GSC_GPIO_P1![0-7]: gpio247-gpio255
     83  - additional i2c based GPIO port-expanders present on some boards would begin at gpio116
     84 * Laguna:
     85  - cns3xxx GPIOs: The CNS3xxx has 2 32bit GPIO controllers for a possible 64 fast ARM based GPIO's
     86   - GPIOA![0-31]: gpio0-gpio31
     87   - GPIOB![0-31]: gpio32-gpio63
     88  - [wiki:gsc GSC] GPIOs:
     89   - GSC_GPIO_P0![0-7]: gpio100-gpio107
     90   - GSC_GPIO_P1![0-7]: gpio108-gpio115
     91  - additional i2c based GPIO port-expanders present on some boards would begin at gpio116
     92
     93Note that the Linux gpio mapping is not guaranteed to remain constant across kernel versions. Care should be taken to consult {{{/sys/kernel/debug/gpio}}} and {{{/sys/class/gpio}}} when changing kernel versions.
     94
     95When referring to [http://www.gateworks.com/usermanuals Gateworks board user hardware manuals] you will need to translate the hardware pin name to a gpio using the information above. Some examples:
     96 * Newport GPIO8 would be the 8th IO on the CN80XX GPIO controller thus map to gpio-472.
     97 * Laguna GPIOA8 would be the 9th IO on the GPIOA controller (the first is GPIOA0) thus map to gpio 0+8 = gpio-8
     98 * Laguna GPIOB1 would be the 2nd IO on the GPIOB controller thus map to gpio 32+2 = gpio-34
     99 * Ventana GPIO![1]:DIO16 is GPIO block 1 IO 16 thus maps to gpio0 + 16 (or 0*32+16) = gpio-16
     100 * Ventana GPIO![2]:DIO9 is GPIO block 2 IO 9 thus maps to gpio32 + 9 (or 1*32+9) = gpio-41
     101 * Equation: Ventana GPIO<x>__IO<y> is GPIO block x IO y thus maps to: gpio-((x-1)*32)+y
     102
     103
     104Examples:
     105 * If libgpiod is installed (gpiod package in Ubuntu) the {{{gpioinfo}}} app will show you all gpio controllers and details about the GPIO lines each one offers. Note that using the Linux GPIO character device API and/or libgpiod is the preferred way to access GPIO in userspace:
     106{{{#!bash
     107root@bionic-newport:~/libgpiod# gpioinfo
     108gpiochip0 - 48 lines:
     109        line   0:      unnamed       unused   input  active-high
     110        line   1:      unnamed       unused   input  active-high
     111        line   2:      unnamed       unused   input  active-high
     112        line   3:      unnamed       unused   input  active-high
     113        line   4:      unnamed  "interrupt"   input  active-high [used]
     114        line   5:      unnamed       unused   input  active-high
     115        line   6:      unnamed       unused   input  active-high
     116        line   7:      unnamed       unused   input  active-high
     117        line   8:      unnamed "mmc_supply_3v3" output active-high [used]
     118        line   9:      unnamed       unused   input  active-high
     119        line  10:      unnamed       unused  output  active-high
     120        line  11:      unnamed       unused   input  active-high
     121        line  12:      unnamed       unused   input  active-high
     122        line  13:      unnamed       unused   input  active-high
     123        line  14:      unnamed      "user2"  output  active-high [used]
     124        line  15:      unnamed       unused  output  active-high
     125        line  16:      unnamed       unused  output  active-high
     126        line  17:      unnamed       unused  output  active-high
     127        line  18:      unnamed       unused  output  active-high
     128        line  19:      unnamed       unused  output  active-high
     129        line  20:      unnamed       unused   input  active-high
     130        line  21:      unnamed       unused   input  active-high
     131        line  22:      unnamed       unused   input  active-high
     132        line  23:      unnamed       unused  output  active-high
     133        line  24:      unnamed       unused   input  active-high
     134        line  25:      unnamed       unused   input  active-high
     135        line  26:      unnamed       unused   input  active-high
     136        line  27:      unnamed       unused   input  active-high
     137        line  28:      unnamed       unused  output  active-high
     138        line  29:      unnamed       unused   input  active-high
     139        line  30:      unnamed   "pps-gpio"   input  active-high [used]
     140        line  31:      unnamed      "user1"  output  active-high [used]
     141        line  32:      unnamed       unused   input  active-high
     142        line  33:      unnamed       unused   input  active-high
     143        line  34:      unnamed       unused   input  active-high
     144        line  35:      unnamed       unused   input  active-high
     145        line  36:      unnamed       unused   input  active-high
     146        line  37:      unnamed       unused   input  active-high
     147        line  38:      unnamed       unused   input  active-high
     148        line  39:      unnamed       unused   input  active-high
     149        line  40:      unnamed       unused   input  active-high
     150        line  41:      unnamed       unused   input  active-high
     151        line  42:      unnamed       unused   input  active-high
     152        line  43:      unnamed       unused   input  active-high
     153        line  44:      unnamed       unused   input  active-high
     154        line  45:      unnamed       unused   input  active-high
     155        line  46:      unnamed       unused   input  active-high
     156        line  47:      unnamed       unused   input  active-high
     157gpiochip1 - 16 lines:
     158        line   0:      unnamed       unused  output  active-high
     159        line   1:      unnamed       unused   input  active-high
     160        line   2:      unnamed    "user_pb"   input   active-low [used]
     161        line   3:      unnamed       unused   input  active-high
     162        line   4:      unnamed       unused   input  active-high
     163        line   5:      unnamed       unused   input  active-high
     164        line   6:      unnamed       unused   input  active-high
     165        line   7:      unnamed       unused   input  active-high
     166        line   8:      unnamed       unused   input  active-high
     167        line   9:      unnamed       unused   input  active-high
     168        line  10:      unnamed       unused   input  active-high
     169        line  11:      unnamed       unused   input  active-high
     170        line  12:      unnamed       unused   input  active-high
     171        line  13:      unnamed       unused   input  active-high
     172        line  14:      unnamed       unused   input  active-high
     173        line  15:      unnamed       unused   input  active-high
     174}}}
     175 * If debugfs is enabled in the kernel and mounted (as it is on Gateworks BSP's) you can see a nice table of {{{sysfsgpio}}} GPIO mapping via {{{/sys/kernel/debug/gpio}}}. Some examples:
     176  - Newport GW6400:
     177{{{#!bash
     178# cat /sys/kernel/debug/gpio
     179gpiochip1: GPIOs 448-463, parent: i2c/0-0023, pca9555, can sleep:
     180
     181gpiochip0: GPIOs 464-511, parent: pci/0000:00:06.0, gpio_thunderx:
     182 gpio-472 (                    |mmc_supply_3v3      ) out hi   
     183 gpio-478 (                    |user2               ) out lo   
     184 gpio-495 (                    |user1               ) out lo   
     185}}}
     186  - Ventana GW5400:
     187{{{#!bash
     188# cat /sys/kernel/debug/gpio
     189GPIOs 0-31, platform/209c000.gpio, 209c000.gpio:
     190 gpio-26  (pps-gpio            ) in  lo   
     191 gpio-29  (PCIe reset          ) out lo   
     192 gpio-30  (phy-reset           ) out hi   
     193
     194GPIOs 32-63, platform/20a0000.gpio, 20a0000.gpio:
     195
     196GPIOs 64-95, platform/20a4000.gpio, 20a4000.gpio:
     197 gpio-86  (usb_otg_vbus        ) out lo   
     198
     199GPIOs 96-127, platform/20a8000.gpio, 20a8000.gpio:
     200 gpio-102 (user1               ) out lo   
     201 gpio-103 (user2               ) out lo   
     202 gpio-111 (user3               ) out lo   
     203
     204GPIOs 128-159, platform/20ac000.gpio, 20ac000.gpio:
     205
     206GPIOs 160-191, platform/20b0000.gpio, 20b0000.gpio:
     207
     208GPIOs 192-223, platform/20b4000.gpio, 20b4000.gpio:
     209 gpio-192 (2198000.usdhc cd    ) in  hi   
     210
     211GPIOs 240-255, i2c/0-0023, pca9555, can sleep:
     212 gpio-240 (user_pb             ) in  hi
     213}}}
     214   * Note that this does not show GPIO's that are not used by Linux drivers such as USB HUB reset, Ethernet PHY reset, etc.
     215  - Laguna GW2388:
     216{{{#!bash
     217# cat /sys/kernel/debug/gpio
     218GPIOs 0-31, cns3xxx_gpio0:
     219 gpio-0   (GPS_PPS             ) in  hi
     220 gpio-3   (USB_FAULT#          ) in  hi
     221 gpio-6   (USB_VBUS_EN         ) out hi
     222 gpio-7   (GSM_SEL0            ) out lo
     223 gpio-8   (GSM_SEL1            ) out lo
     224 gpio-9   (FP_SER_EN           ) out lo
     225
     226GPIOs 32-63, cns3xxx_gpio1:
     227
     228GPIOs 100-115, i2c/0-0023, pca9555, can sleep:
     229 gpio-100 (USER_PB#            ) in  hi
     230 gpio-114 (user2               ) out hi
     231 gpio-115 (user1               ) out hi
     232}}}
     233  - Laguna GW2387:
     234{{{#!bash
     235# cat /sys/kernel/debug/gpio
     236GPIOs 0-31, cns3xxx_gpio0:
     237 gpio-0   (GPS_PPS             ) in  hi
     238 gpio-2   (USB_FAULT#          ) in  hi
     239 gpio-5   (USB_PCI_SEL         ) out lo
     240 gpio-6   (USB_VBUS_EN         ) out hi
     241 gpio-7   (GSM_SEL0            ) out lo
     242 gpio-8   (GSM_SEL1            ) out lo
     243 gpio-9   (FP_SER_EN           ) out lo
     244
     245GPIOs 32-63, cns3xxx_gpio1:
     246
     247GPIOs 100-115, i2c/0-0023, pca9555, can sleep:
     248 gpio-100 (USER_PB#            ) in  hi
     249 gpio-114 (user2               ) out hi
     250 gpio-115 (user1               ) out hi
     251}}}
     252
     253See also:
     254 * [wiki:newport/DigitalIO Newport Digital IO Mapping Page]
     255 * [wiki:ventana/DigitalIO Ventana Digital IO Mapping Page]
     256 * [wiki:laguna/DigitalIO Laguna Digital IO Mapping Page]
     257
    56258
    57259
     
    189391
    190392
    191 [=#mapping]
    192 == GPIO mapping ==
    193 The various product hardware manuals will call out GPIO devices on the board and provide a table mapping the GPIO to a GPIO host controller, a function, and a connector pinout (if going off-board).
    194 
    195 This hardware mapping is defined in the following files depending on board/family:
    196 * Newport: Linux kernel device-tree (ie [http://github.com/Gateworks/dts-newport])
    197 * Ventana: Linux kernel device-tree (ie [http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi arch/arm/boot/dts/imx6qdl-gw54xx.dtsi])
    198 * Laguna: Linux kernel board-support files (ie [https://github.com/Gateworks/openwrt/blob/16.02/target/linux/cns3xxx/files/arch/arm/mach-cns3xxx/laguna.c arch/arm/mach-cns3xxx/laguna.c]).
    199 
    200 ** Product Family specific notes:
    201  * Newport:
    202   - CN80XX GPIOs: The CN80XX has one 48bit GPIO controller
    203    - GPIO![0-48]: gpio-464 to gpio-511
    204  * Ventana:
    205   - IMX6 GPIOs: The IMX6 has 7 32bit GPIO controllers for a possible 224 fast ARM based GPIO's
    206    - GPIO1_IO![0-31]: gpio0-gpio31
    207    - GPIO2_IO![0-31]: gpio32-gpio63
    208    - GPIO3_IO![0-31]: gpio64-gpio95
    209    - GPIO4_IO![0-31]: gpio96-gpio127
    210    - GPIO5_IO![0-31]: gpio128-gpio159
    211    - GPIO6_IO![0-31]: gpio160-gpio191
    212    - GPIO7_IO![0-31]: gpio192-gpio223
    213   - [wiki:gsc GSC] GPIOs:
    214    - GSC_GPIO_P0![0-7]: gpio240-gpio247
    215    - GSC_GPIO_P1![0-7]: gpio247-gpio255
    216   - additional i2c based GPIO port-expanders present on some boards would begin at gpio116
    217  * Laguna:
    218   - cns3xxx GPIOs: The CNS3xxx has 2 32bit GPIO controllers for a possible 64 fast ARM based GPIO's
    219    - GPIOA![0-31]: gpio0-gpio31
    220    - GPIOB![0-31]: gpio32-gpio63
    221   - [wiki:gsc GSC] GPIOs:
    222    - GSC_GPIO_P0![0-7]: gpio100-gpio107
    223    - GSC_GPIO_P1![0-7]: gpio108-gpio115
    224   - additional i2c based GPIO port-expanders present on some boards would begin at gpio116
    225 
    226 Note that the Linux gpio mapping is not guaranteed to remain constant across kernel versions. Care should be taken to consult {{{/sys/kernel/debug/gpio}}} and {{{/sys/class/gpio}}} when changing kernel versions.
    227 
    228 When referring to [http://www.gateworks.com/usermanuals Gateworks board user hardware manuals] you will need to translate the hardware pin name to a gpio using the information above. Some examples:
    229  * Newport GPIO8 would be the 8th IO on the CN80XX GPIO controller thus map to gpio-472.
    230  * Laguna GPIOA8 would be the 9th IO on the GPIOA controller (the first is GPIOA0) thus map to gpio 0+8 = gpio-8
    231  * Laguna GPIOB1 would be the 2nd IO on the GPIOB controller thus map to gpio 32+2 = gpio-34
    232  * Ventana GPIO![1]:DIO16 is GPIO block 1 IO 16 thus maps to gpio0 + 16 (or 0*32+16) = gpio-16
    233  * Ventana GPIO![2]:DIO9 is GPIO block 2 IO 9 thus maps to gpio32 + 9 (or 1*32+9) = gpio-41
    234  * Equation: Ventana GPIO<x>__IO<y> is GPIO block x IO y thus maps to: gpio-((x-1)*32)+y
    235 
    236 
    237 See also:
    238  * [wiki:ventana/DigitalIO Ventana Digital IO Mapping Page]
    239 
    240 === Examples ===
    241 
    242 If debugfs is enabled in the kernel and mounted (as it is on Gateworks BSP's) you can see a nice table of GPIO mapping via {{{/sys/kernel/debug/gpio}}}. Some examples:
    243  * Newport GW6400:
    244 {{{#!bash
    245 # cat /sys/kernel/debug/gpio
    246 gpiochip1: GPIOs 448-463, parent: i2c/0-0023, pca9555, can sleep:
    247 
    248 gpiochip0: GPIOs 464-511, parent: pci/0000:00:06.0, gpio_thunderx:
    249  gpio-472 (                    |mmc_supply_3v3      ) out hi   
    250  gpio-478 (                    |user2               ) out lo   
    251  gpio-495 (                    |user1               ) out lo   
    252 }}}
    253  * Ventana GW5400:
    254 {{{#!bash
    255 # cat /sys/kernel/debug/gpio
    256 GPIOs 0-31, platform/209c000.gpio, 209c000.gpio:
    257  gpio-26  (pps-gpio            ) in  lo   
    258  gpio-29  (PCIe reset          ) out lo   
    259  gpio-30  (phy-reset           ) out hi   
    260 
    261 GPIOs 32-63, platform/20a0000.gpio, 20a0000.gpio:
    262 
    263 GPIOs 64-95, platform/20a4000.gpio, 20a4000.gpio:
    264  gpio-86  (usb_otg_vbus        ) out lo   
    265 
    266 GPIOs 96-127, platform/20a8000.gpio, 20a8000.gpio:
    267  gpio-102 (user1               ) out lo   
    268  gpio-103 (user2               ) out lo   
    269  gpio-111 (user3               ) out lo   
    270 
    271 GPIOs 128-159, platform/20ac000.gpio, 20ac000.gpio:
    272 
    273 GPIOs 160-191, platform/20b0000.gpio, 20b0000.gpio:
    274 
    275 GPIOs 192-223, platform/20b4000.gpio, 20b4000.gpio:
    276  gpio-192 (2198000.usdhc cd    ) in  hi   
    277 
    278 GPIOs 240-255, i2c/0-0023, pca9555, can sleep:
    279  gpio-240 (user_pb             ) in  hi
    280 }}}
    281   * Note that this does not show GPIO's that are not used by Linux drivers such as USB HUB reset, Ethernet PHY reset, etc.
    282  * Laguna GW2388:
    283 {{{#!bash
    284 # cat /sys/kernel/debug/gpio
    285 GPIOs 0-31, cns3xxx_gpio0:
    286  gpio-0   (GPS_PPS             ) in  hi
    287  gpio-3   (USB_FAULT#          ) in  hi
    288  gpio-6   (USB_VBUS_EN         ) out hi
    289  gpio-7   (GSM_SEL0            ) out lo
    290  gpio-8   (GSM_SEL1            ) out lo
    291  gpio-9   (FP_SER_EN           ) out lo
    292 
    293 GPIOs 32-63, cns3xxx_gpio1:
    294 
    295 GPIOs 100-115, i2c/0-0023, pca9555, can sleep:
    296  gpio-100 (USER_PB#            ) in  hi
    297  gpio-114 (user2               ) out hi
    298  gpio-115 (user1               ) out hi
    299 }}}
    300  * Laguna GW2387:
    301 {{{#!bash
    302 # cat /sys/kernel/debug/gpio
    303 GPIOs 0-31, cns3xxx_gpio0:
    304  gpio-0   (GPS_PPS             ) in  hi
    305  gpio-2   (USB_FAULT#          ) in  hi
    306  gpio-5   (USB_PCI_SEL         ) out lo
    307  gpio-6   (USB_VBUS_EN         ) out hi
    308  gpio-7   (GSM_SEL0            ) out lo
    309  gpio-8   (GSM_SEL1            ) out lo
    310  gpio-9   (FP_SER_EN           ) out lo
    311 
    312 GPIOs 32-63, cns3xxx_gpio1:
    313 
    314 GPIOs 100-115, i2c/0-0023, pca9555, can sleep:
    315  gpio-100 (USER_PB#            ) in  hi
    316  gpio-114 (user2               ) out hi
    317  gpio-115 (user1               ) out hi
    318 }}}
    319 
    320 
    321  
    322 
    323 
    324393
    325394[=#gpio-interrupt]