DART-SD410 Debian GPIO

From Variscite Wiki
DART-SD410 - Using GPIO

User LED4 (D15) connected to GPIO2 of the PMIC. The LED4 is not in the apq8016-var-dt410.dtsi file under gpio-leds section.
This allow user acces to this LED as GPIO device. To change the state of the LED via serial console type:

# cd /sys/class/gpio
# echo 509 > export
This line creates a new directory gpio509
The number 509 calculated as 1 + 508. 1 is the GPIO number, 508 is static offset for PMIC gpio.
So changing any other PMIC GPIO will lead to 508 + GPIO number.
# cd gpio509
# echo out > direction
# echo 1 > value
The led will turn on
#echo 0 > value
The led will turn off

To read the current state type:

# cat value
The output will be 0

You can change active state to active low.

# echo 1 > active_low
# echo 0 > value
The led is active low, writing 0 will turn on the led.
# echo 1 > value
The led is active low, writing 1 will turn off the led.

The Boot Select switch (SW3) connected to CPU GPIO81 the gpio offset for CPU is 0. to read its value use:

# cd /sys/class/gpio
# echo 81 > export
# cd gpio81
# cat value
If the switch is in OFF position the output is 0.
If the switch is in ON position the output is 1.

To see all allocated GPIOs in the system type:

# cat /sys/kernel/debug/gpio
The output will be:
gpiochip0: GPIOs 0-121, parent: platform/1000000.pinctrl, 1000000.pinctrl:
 gpio0   : in  2 16mA no pull
 gpio1   : in  2 16mA no pull
 gpio2   : in  2 16mA no pull
 gpio3   : in  2 16mA no pull
 gpio4   : out 2 16mA no pull
 gpio5   : out 2 16mA no pull
 gpio6   : in  3 16mA no pull
 gpio7   : in  3 16mA no pull
 gpio8   : in  1 12mA no pull
 gpio9   : in  1 12mA no pull
 gpio10  : out 0 16mA no pull
 gpio11  : in  1 12mA no pull
 gpio12  : out 0 2mA pull down
 gpio13  : in  0 2mA pull down
 gpio14  : in  2 16mA no pull
 gpio15  : in  2 16mA no pull
 gpio16  : in  1 12mA no pull
 gpio17  : in  1 12mA no pull
 gpio18  : out 0 16mA no pull
 gpio19  : in  1 12mA no pull
 gpio20  : in  0 2mA pull down
 gpio21  : out 0 2mA pull down
 gpio22  : in  2 16mA no pull
 gpio23  : in  2 16mA no pull
 gpio24  : in  0 2mA pull down
 gpio25  : in  0 2mA pull down
 gpio26  : in  0 2mA pull down
 gpio27  : in  1 16mA no pull
 gpio28  : out 0 16mA no pull
 gpio29  : in  1 16mA no pull
 gpio30  : in  1 16mA no pull
 gpio31  : in  0 2mA pull down
 gpio32  : out 0 16mA no pull
 gpio33  : out 0 16mA no pull
 gpio34  : in  0 2mA pull down
 gpio35  : in  0 2mA pull down
 gpio36  : in  0 2mA pull down
 gpio37  : in  0 2mA pull down
 gpio38  : in  0 2mA pull up
 gpio39  : in  0 2mA pull down
 gpio40  : in  1 6mA pull down
 gpio41  : in  1 6mA pull down
 gpio42  : in  1 6mA pull down
 gpio43  : in  1 6mA pull down
 gpio44  : in  1 6mA pull down
 gpio45  : in  0 2mA pull down
 gpio46  : in  0 2mA pull down
 gpio47  : in  0 2mA pull down
 gpio48  : in  0 2mA pull down
 gpio49  : in  0 2mA pull down
 gpio50  : in  0 2mA pull down
 gpio51  : in  0 2mA pull down
 gpio52  : in  0 2mA pull down
 gpio53  : in  0 2mA pull down
 gpio54  : in  0 2mA pull down
 gpio55  : in  0 2mA pull down
 gpio56  : in  0 2mA pull down
 gpio57  : in  0 2mA pull down
 gpio58  : in  0 2mA pull down
 gpio59  : in  0 2mA pull down
 gpio60  : in  0 2mA pull down
 gpio61  : in  0 2mA pull down
 gpio62  : in  0 2mA pull down
 gpio63  : in  1 8mA pull down
 gpio64  : in  1 8mA pull down
 gpio65  : in  1 8mA pull down
 gpio66  : in  1 8mA pull down
 gpio67  : in  1 8mA pull down
 gpio68  : in  1 8mA pull down
 gpio69  : in  0 2mA pull down
 gpio70  : in  0 2mA pull down
 gpio71  : in  0 2mA pull down
 gpio72  : in  0 2mA pull down
 gpio73  : in  0 2mA pull down
 gpio74  : in  0 2mA pull down
 gpio75  : in  0 2mA pull down
 gpio76  : in  0 2mA pull down
 gpio77  : in  0 2mA pull down
 gpio78  : in  0 2mA pull down
 gpio79  : in  0 2mA pull down
 gpio80  : in  0 2mA pull down
 gpio81  : in  0 2mA pull down
 gpio82  : in  0 2mA pull down
 gpio83  : in  0 2mA pull down
 gpio84  : in  0 2mA pull down
 gpio85  : in  0 2mA pull down
 gpio86  : in  0 2mA pull down
 gpio87  : in  0 2mA pull down
 gpio88  : in  0 2mA pull down
 gpio89  : in  0 2mA pull down
 gpio90  : in  0 2mA pull down
 gpio91  : in  0 2mA pull down
 gpio92  : in  0 2mA pull down
 gpio93  : in  0 2mA pull down
 gpio94  : in  0 2mA pull down
 gpio95  : in  0 2mA pull down
 gpio96  : out 0 2mA pull down
 gpio97  : in  0 2mA pull down
 gpio98  : in  0 2mA pull down
 gpio99  : in  0 2mA pull down
 gpio100 : in  0 2mA pull down
 gpio101 : in  0 2mA pull down
 gpio102 : in  0 2mA pull down
 gpio103 : in  0 2mA pull down
 gpio104 : in  0 2mA pull down
 gpio105 : in  0 2mA pull down
 gpio106 : in  0 2mA pull down
 gpio107 : in  0 8mA pull up
 gpio108 : in  0 2mA pull down
 gpio109 : in  0 2mA pull down
 gpio110 : in  0 2mA pull down
 gpio111 : in  0 2mA pull down
 gpio112 : in  1 8mA pull down
 gpio113 : in  0 2mA pull down
 gpio114 : in  0 2mA pull down
 gpio115 : in  0 2mA pull down
 gpio116 : in  1 8mA pull down
 gpio117 : in  1 8mA pull down
 gpio118 : in  1 8mA pull down
 gpio119 : in  1 8mA pull down
 gpio120 : out 0 2mA pull down
 gpio121 : in  0 8mA pull up

gpiochip2: GPIOs 504-507, parent: platform/200f000.spmi:pm8916@0:mpps@a000, 200f000.spmi:pm8916@0:mpps@a000:
 mpp1 : out  analog  vin-2 0 high
 mpp2 : out  digital vin-0 0 low
 mpp3 : out  digital vin-0 0 high
 mpp4 : out  digital vin-3 0 low
gpiochip1: GPIOs 508-511, parent: platform/200f000.spmi:pm8916@0:gpios@c000, 200f000.spmi:pm8916@0:gpios@c000:
 gpio1 : out  normal  vin-0 pull-down 10uA              push-pull  high high
 gpio2 : out  normal  vin-0 pull-down 10uA              push-pull  low  high
 gpio3 : out  normal  vin-0 pull-down 10uA              push-pull  high high
 gpio4 : out  normal  vin-0 pull-down 10uA              push-pull  high high

From this table you can see that offsets are:

  • CPU gpio is 0
  • PMIC gpio is 508
  • PMIC mpp is 504