This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM4376: Controlling GPIO from User space /sys/class/gpio

Part Number: AM4376

Hello,

Recently we have developed our custom board based on AM437x and ported RT-Linux on it, to start with some application i started with controlling GPIOs from user space,(GPIO4[8])

To compute the pin number which I was supposed to export  (/Sys/Class/gpio/export) I use formula (32*M)+N but was unable to control it. somewhere I read 32*(M-1)+N to compute, I applied the same and was able to control GPIO4[8] ( Pin 104), I believe that later one is the correct way to compute the pin number.

I have some interfaces which use GPIO0 bank  pins like GPIO0[23],GPIO0[7], and GPIO0[3].

Please suggest how to calculate the pin number to be exported to control pins of GPIO bank 0.

Regards,

Piyush Ghatole 

  • Hi Piyush,

    What is the output of command 'ls -l /sys/class/gpio/'? The calculation is based on the output information.

  • please note output of suggested command ls -l /sys/class/gpio/

    Regards,

    Piyush Ghatole

  • Hi Piyush,

    Sorry for my late response.

    Actually the most important information that I am looking for is missing in the screenshot. I'd need to know the *full* symlinks to explain how to calculate the pin numbers. Could you please resend the command output to include the right section as  well?

  • Hello, 

    Please find attached for requested data.

    am437x-evm login: root                                                          
    root@am437x-evm:~# cat /sys/kernel/debug/gpio                                   
    gpiochip0: GPIOs 0-31, parent: platform/44e07000.gpio, gpio-0-31:               
     gpio-6   (                    |cd                  ) in  lo IRQ ACTIVE LOW     
                                                                                    
    gpiochip1: GPIOs 32-63, parent: platform/4804c000.gpio, gpio-32-63:             
                                                                                    
    gpiochip2: GPIOs 64-95, parent: platform/481ae000.gpio, gpio-64-95:             
     gpio-65  (                    |load                ) out hi ACTIVE LOW         
                                                                                    
    gpiochip3: GPIOs 96-127, parent: platform/48320000.gpio, gpio-96-127:           
     gpio-98  (                    |power-button        ) in  lo IRQ ACTIVE LOW     
     gpio-116 (                    |reset               ) out hi ACTIVE LOW         
                                                                                    
    gpiochip4: GPIOs 128-159, parent: platform/48322000.gpio, gpio-128-159:         
                                                                                    
    gpiochip5: GPIOs 504-511, parent: spi/spi1.0, pisosr-gpio, can sleep:           
    root@am437x-evm:~# cd /sys/class/gpio                                           
    root@am437x-evm:/sys/class/gpio# ls                                             
    export       gpiochip128  gpiochip504  gpiochip96                               
    gpiochip0    gpiochip32   gpiochip64   unexport                                 
    root@am437x-evm:/sys/class/gpio# echo 104 > export                              
    root@am437x-evm:/sys/class/gpio# ls                                             
    export       gpiochip0    gpiochip32   gpiochip64   unexport                    
    gpio104      gpiochip128  gpiochip504  gpiochip96                               
    root@am437x-evm:/sys/class/gpio# cat /sys/kernel/debug/gpio                     
    gpiochip0: GPIOs 0-31, parent: platform/44e07000.gpio, gpio-0-31:               
     gpio-6   (                    |cd                  ) in  lo IRQ ACTIVE LOW     
                                                                                    
    gpiochip1: GPIOs 32-63, parent: platform/4804c000.gpio, gpio-32-63:             
                                                                                    
    gpiochip2: GPIOs 64-95, parent: platform/481ae000.gpio, gpio-64-95:             
     gpio-65  (                    |load                ) out hi ACTIVE LOW         
                                                                                    
    gpiochip3: GPIOs 96-127, parent: platform/48320000.gpio, gpio-96-127:           
     gpio-98  (                    |power-button        ) in  lo IRQ ACTIVE LOW     
     gpio-104 (                    |sysfs               ) in  lo                    
     gpio-116 (                    |reset               ) out hi ACTIVE LOW         
                                                                                    
    gpiochip4: GPIOs 128-159, parent: platform/48322000.gpio, gpio-128-159:         
                                                                                    
    gpiochip5: GPIOs 504-511, parent: spi/spi1.0, pisosr-gpio, can sleep:           
    root@am437x-evm:/sys/class/gpio# echo 136 > export                              
    root@am437x-evm:/sys/class/gpio# cat /sys/kernel/debug/gpio                     
    gpiochip0: GPIOs 0-31, parent: platform/44e07000.gpio, gpio-0-31:               
     gpio-6   (                    |cd                  ) in  lo IRQ ACTIVE LOW     
                                                                                    
    gpiochip1: GPIOs 32-63, parent: platform/4804c000.gpio, gpio-32-63:             
                                                                                    
    gpiochip2: GPIOs 64-95, parent: platform/481ae000.gpio, gpio-64-95:             
     gpio-65  (                    |load                ) out hi ACTIVE LOW         
                                                                                    
    gpiochip3: GPIOs 96-127, parent: platform/48320000.gpio, gpio-96-127:           
     gpio-98  (                    |power-button        ) in  lo IRQ ACTIVE LOW     
     gpio-104 (                    |sysfs               ) in  lo                    
     gpio-116 (                    |reset               ) out hi ACTIVE LOW         
                                                                                    
    gpiochip4: GPIOs 128-159, parent: platform/48322000.gpio, gpio-128-159:         
     gpio-136 (                    |sysfs               ) in  lo                    
                                                                                    
    gpiochip5: GPIOs 504-511, parent: spi/spi1.0, pisosr-gpio, can sleep:           
    root@am437x-evm:/sys/class/gpio# cd gpio104                                     
    root@am437x-evm:/sys/class/gpio/gpio104# echo "out" > direction                 
    root@am437x-evm:/sys/class/gpio/gpio104# cat /sys/kernel/debug/gpio             
    gpiochip0: GPIOs 0-31, parent: platform/44e07000.gpio, gpio-0-31:               
     gpio-6   (                    |cd                  ) in  lo IRQ ACTIVE LOW     
                                                                                    
    gpiochip1: GPIOs 32-63, parent: platform/4804c000.gpio, gpio-32-63:             
                                                                                    
    gpiochip2: GPIOs 64-95, parent: platform/481ae000.gpio, gpio-64-95:             
     gpio-65  (                    |load                ) out hi ACTIVE LOW         
                                                                                    
    gpiochip3: GPIOs 96-127, parent: platform/48320000.gpio, gpio-96-127:           
     gpio-98  (                    |power-button        ) in  lo IRQ ACTIVE LOW     
     gpio-104 (                    |sysfs               ) out lo                    
     gpio-116 (                    |reset               ) out hi ACTIVE LOW         
                                                                                    
    gpiochip4: GPIOs 128-159, parent: platform/48322000.gpio, gpio-128-159:         
     gpio-136 (                    |sysfs               ) in  lo                    
                                                                                    
    gpiochip5: GPIOs 504-511, parent: spi/spi1.0, pisosr-gpio, can sleep:           
    root@am437x-evm:/sys/class/gpio/gpio104#
    
    --w-------    1 root     root          4096 Jan  1 00:03 export
    lrwxrwxrwx    1 root     root             0 Jan  1 00:02 gpio104 -> ../../devices/platform/44000000.ocp/48000000.interconnect/48000000.interc4
    lrwxrwxrwx    1 root     root             0 Jan  1 00:06 gpio136 -> ../../devices/platform/44000000.ocp/48000000.interconnect/48000000.interc6
    lrwxrwxrwx    1 root     root             0 Jun  2  2022 gpiochip0 -> ../../devices/platform/44000000.ocp/44c00000.interconnect/44c00000.inte0
    lrwxrwxrwx    1 root     root             0 Jun  2  2022 gpiochip128 -> ../../devices/platform/44000000.ocp/48000000.interconnect/48000000.in8
    lrwxrwxrwx    1 root     root             0 Jun  2  2022 gpiochip32 -> ../../devices/platform/44000000.ocp/48000000.interconnect/48000000.int2
    lrwxrwxrwx    1 root     root             0 Jan  1 00:02 gpiochip504 -> ../../devices/platform/44000000.ocp/48000000.interconnect/48000000.in4
    lrwxrwxrwx    1 root     root             0 Jun  2  2022 gpiochip64 -> ../../devices/platform/44000000.ocp/48000000.interconnect/48000000.int4
    lrwxrwxrwx    1 root     root             0 Jun  2  2022 gpiochip96 -> ../../devices/platform/44000000.ocp/48000000.interconnect/48000000.int6
    --w-------    1 root     root          4096 Jun  2  2022 unexport
    
    
    
    
    *****************************************GPIOINFO*****************************gpiochip0 - 32 lines:
            line   0:      unnamed       unused   input  active-high
            line   1:      unnamed       unused   input  active-high
            line   2:      unnamed       unused   input  active-high
            line   3:      unnamed       unused   input  active-high
            line   4:      unnamed       unused   input  active-high
            line   5:      unnamed       unused   input  active-high
            line   6:      unnamed         "cd"   input   active-low [used]
            line   7:      unnamed       unused   input  active-high
            line   8:      unnamed       unused   input  active-high
            line   9:      unnamed       unused   input  active-high
            line  10:      unnamed       unused   input  active-high
            line  11:      unnamed       unused   input  active-high
            line  12:      unnamed       unused   input  active-high
            line  13:      unnamed       unused   input  active-high
            line  14:      unnamed       unused   input  active-high
            line  15:      unnamed       unused   input  active-high
            line  16:      unnamed       unused   input  active-high
            line  17:      unnamed       unused   input  active-high
            line  18:      unnamed       unused   input  active-high
            line  19:      unnamed       unused   input  active-high
            line  20:      unnamed       unused   input  active-high
            line  21:      unnamed       unused   input  active-high
            line  22:      unnamed       unused   input  active-high
            line  23:      unnamed       unused   input  active-high
            line  24:      unnamed       unused   input  active-high
            line  25:      unnamed       unused   input  active-high
            line  26:      unnamed       unused   input  active-high
            line  27:      unnamed       unused   input  active-high
            line  28:      unnamed       unused   input  active-high
            line  29:      unnamed       unused   input  active-high
            line  30:      unnamed       unused   input  active-high
            line  31:      unnamed       unused   input  active-high
    gpiochip1 - 32 lines:
            line   0:      unnamed       unused   input  active-high
            line   1:      unnamed       unused   input  active-high
            line   2:      unnamed       unused   input  active-high
            line   3:      unnamed       unused   input  active-high
            line   4:      unnamed       unused   input  active-high
            line   5:      unnamed       unused   input  active-high
            line   6:      unnamed       unused   input  active-high
            line   7:      unnamed       unused   input  active-high
            line   8:      unnamed       unused   input  active-high
            line   9:      unnamed       unused   input  active-high
            line  10:      unnamed       unused   input  active-high
            line  11:      unnamed       unused   input  active-high
            line  12:      unnamed       unused   input  active-high
            line  13:      unnamed       unused   input  active-high
            line  14:      unnamed       unused   input  active-high
            line  15:      unnamed       unused   input  active-high
            line  16:      unnamed       unused   input  active-high
            line  17:      unnamed       unused   input  active-high
            line  18:      unnamed       unused   input  active-high
            line  19:      unnamed       unused   input  active-high
            line  20:      unnamed       unused   input  active-high
            line  21:      unnamed       unused   input  active-high
            line  22:      unnamed       unused   input  active-high
            line  23:      unnamed       unused   input  active-high
            line  24:      unnamed       unused   input  active-high
            line  25:      unnamed       unused   input  active-high
            line  26:      unnamed       unused   input  active-high
            line  27:      unnamed       unused   input  active-high
            line  28:      unnamed       unused   input  active-high
            line  29:      unnamed       unused   input  active-high
            line  30:      unnamed       unused   input  active-high
            line  31:      unnamed       unused   input  active-high
    gpiochip2 - 32 lines:
            line   0:      unnamed       unused   input  active-high
            line   1:      unnamed       "load"  output   active-low [used]
            line   2:      unnamed       unused   input  active-high
            line   3:      unnamed       unused   input  active-high
            line   4:      unnamed       unused   input  active-high
            line   5:      unnamed       unused   input  active-high
            line   6:      unnamed       unused   input  active-high
            line   7:      unnamed       unused   input  active-high
            line   8:      unnamed       unused   input  active-high
            line   9:      unnamed       unused   input  active-high
            line  10:      unnamed       unused   input  active-high
            line  11:      unnamed       unused   input  active-high
            line  12:      unnamed       unused   input  active-high
            line  13:      unnamed       unused   input  active-high
            line  14:      unnamed       unused   input  active-high
            line  15:      unnamed       unused   input  active-high
            line  16:      unnamed       unused   input  active-high
            line  17:      unnamed       unused   input  active-high
            line  18:      unnamed       unused   input  active-high
            line  19:      unnamed       unused   input  active-high
            line  20:      unnamed       unused   input  active-high
            line  21:      unnamed       unused   input  active-high
            line  22:      unnamed       unused   input  active-high
            line  23:      unnamed       unused   input  active-high
            line  24:      unnamed       unused   input  active-high
            line  25:      unnamed       unused   input  active-high
            line  26:      unnamed       unused   input  active-high
            line  27:      unnamed       unused   input  active-high
            line  28:      unnamed       unused   input  active-high
            line  29:      unnamed       unused   input  active-high
            line  30:      unnamed       unused   input  active-high
            line  31:      unnamed       unused   input  active-high
    gpiochip3 - 32 lines:
            line   0:      unnamed       unused   input  active-high
            line   1:      unnamed       unused   input  active-high
            line   2:      unnamed "power-button" input active-low [used]
            line   3:      unnamed       unused   input  active-high
            line   4:      unnamed       unused   input  active-high
            line   5:      unnamed       unused   input  active-high
            line   6:      unnamed       unused   input  active-high
            line   7:      unnamed       unused   input  active-high
            line   8:      unnamed      "sysfs"  output  active-high [used]
            line   9:      unnamed       unused   input  active-high
            line  10:      unnamed       unused   input  active-high
            line  11:      unnamed       unused   input  active-high
            line  12:      unnamed       unused   input  active-high
            line  13:      unnamed       unused   input  active-high
            line  14:      unnamed       unused   input  active-high
            line  15:      unnamed       unused   input  active-high
            line  16:      unnamed       unused   input  active-high
            line  17:      unnamed       unused   input  active-high
            line  18:      unnamed       unused   input  active-high
            line  19:      unnamed       unused   input  active-high
            line  20:      unnamed      "reset"  output   active-low [used]
            line  21:      unnamed       unused   input  active-high
            line  22:      unnamed       unused   input  active-high
            line  23:      unnamed       unused   input  active-high
            line  24:      unnamed       unused   input  active-high
            line  25:      unnamed       unused   input  active-high
            line  26:      unnamed       unused   input  active-high
            line  27:      unnamed       unused   input  active-high
            line  28:      unnamed       unused   input  active-high
            line  29:      unnamed       unused   input  active-high
            line  30:      unnamed       unused   input  active-high
            line  31:      unnamed       unused   input  active-high
    gpiochip4 - 32 lines:
            line   0:      unnamed       unused   input  active-high
            line   1:      unnamed       unused   input  active-high
            line   2:      unnamed       unused   input  active-high
            line   3:      unnamed       unused   input  active-high
            line   4:      unnamed       unused   input  active-high
            line   5:      unnamed       unused   input  active-high
            line   6:      unnamed       unused   input  active-high
            line   7:      unnamed       unused   input  active-high
            line   8:      unnamed      "sysfs"   input  active-high [used]
            line   9:      unnamed       unused   input  active-high
            line  10:      unnamed       unused   input  active-high
            line  11:      unnamed       unused   input  active-high
            line  12:      unnamed       unused   input  active-high
            line  13:      unnamed       unused   input  active-high
            line  14:      unnamed       unused   input  active-high
            line  15:      unnamed       unused   input  active-high
            line  16:      unnamed       unused   input  active-high
            line  17:      unnamed       unused   input  active-high
            line  18:      unnamed       unused   input  active-high
            line  19:      unnamed       unused   input  active-high
            line  20:      unnamed       unused   input  active-high
            line  21:      unnamed       unused   input  active-high
            line  22:      unnamed       unused   input  active-high
            line  23:      unnamed       unused   input  active-high
            line  24:      unnamed       unused   input  active-high
            line  25:      unnamed       unused   input  active-high
            line  26:      unnamed       unused   input  active-high
            line  27:      unnamed       unused   input  active-high
            line  28:      unnamed       unused   input  active-high
            line  29:      unnamed       unused   input  active-high
            line  30:      unnamed       unused   input  active-high
            line  31:      unnamed       unused   input  active-high
    gpiochip5 - 8 lines:
            line   0:      unnamed       unused   input  active-high
            line   1:      unnamed       unused   input  active-high
            line   2:      unnamed       unused   input  active-high
            line   3:      unnamed       unused   input  active-high
            line   4:      unnamed       unused   input  active-high
            line   5:      unnamed       unused   input  active-high
            line   6:      unnamed       unused   input  active-high
            line   7:      unnamed       unused   input  active-high
    root@am437x-evm:/sys/class/gpio#
    

  • Hi Piyush,

    Your second log of /sys/class/gpio still misses the information towards the end. But fortunately you first log of /sys/kernel/debug/gpio provides the information we need. Here is how to calculate the GPIO pin id:

    For example GPIO0[23]:

    checked kernel source code arch/arm/boot/dts/am437x-l4.dtsi, search for gpio0, you will find its parent node is:

    target-module@7000 {                    /* 0x44e07000, ap 14 20.0 */

    which comment shows its base address is 0x44e07000. Searching this address in /sys/kernel/debug/gpio, you will get:

    gpiochip0: GPIOs 0-31, parent: platform/44e07000.gpio, gpio-0-31:

    which tells gpiochip0 is for GPIO0 bank, its start pin id is 0. So gpio0[23] pin id is 0+23=23.

    Using the same way for GPIO4[8]:

    GPIO4 has base address 0x48320000, its start pin id is 96, so gpio4[8] pin id is 96+8=104.

  • Thank you for giving explanation about pin number mapping calculation, now it is clear to me