[BeagleBone Black] How to set gpio pin when booting

Hi
I want to set gpio pin when booting on Beaglebone black.
I made a shell script as below.

modemgpio.sh

#!/bin/bash

echo "set modem control pin ------------------"
sudo echo 115 > /sys/class/gpio/export
sudo echo out > /sys/class/gpio/gpio115/direction
sudo echo 1 > /sys/class/gpio/gpio115/value

When I execute the shell script, it worked well.
I registered it on service because I want to set GPIO_115(GPIO3_19) to high when Beaglebone black is powered on
But after Beaglebone black booted, GPIO_115 pin had been low.

I want to know why the pin was low and how to be high when after booting.
please, help me.

Regards.

@taek8461, I’d do it this way:

Create file /usr/bin/enable-gpio-pins.sh

sudo nano /usr/bin/enable-gpio-pins.sh

#!/bin/bash

echo 115 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio115/direction
echo 1 > /sys/class/gpio/gpio115/value

sudo chmod 755 /usr/bin/enable-gpio-pins.sh

Create file /lib/systemd/system/enable-gpio-pins.service

sudo nano /lib/systemd/system/enable-gpio-pins.service

[Unit]
Description=Enable GPIO pins
After=generic-board-startup.service

[Service]
Type=simple
ExecStart=/usr/bin/enable-gpio-pins.sh

[Install]
WantedBy=multi-user.target

Enable the new systemd service

sudo systemctl daemon-reload
sudo systemctl enable enable-gpio-pins.service

Reboot and test

sudo systemctl status enable-gpio-pins.service

Regards,

2 Likes

Hi
I did according to your explanation but it didnot work.

Below is the shell script I made
image

The following is related to the service.
image

GPIO115 pin was still low. what’s wrong with it?

If I run the shell script with root account after logging in, the gpio pin works high

My questions as below

  1. How to make gpio pin work high on service
  2. Why can’t I control gpio pin using sudo in debian account?

Please, help me…

Regards

@taek8461, looks like we are dealing with a race condition on the export, by waiting for generic-board-startup.service that should have let you get access.

Let’s just do it by having the device-tree control GPIO 115 (P9_27)

I created an example for you:

So on the BeagleBone Black, just do:

git clone https://github.com/beagleboard/bb.org-overlays
cd ./bb.org-overlays/
make
sudo make install

Then, in /boot/uEnv.txt add the new overlay:

uboot_overlay_addr4=/lib/firmware/BB-P9_27-LED-00A0.dtbo

Reboot and verify it loaded:

debian@bbb-pwr01-ser09:~$ sudo /opt/scripts/tools/version.sh | grep UBOOT
UBOOT: Booted Device-Tree:[am335x-boneblack-uboot-univ.dts]
UBOOT: Loaded Overlay:[AM335X-PRU-RPROC-4-14-TI-00A0]
UBOOT: Loaded Overlay:[BB-ADC-00A0]
UBOOT: Loaded Overlay:[BB-BONE-eMMC1-01-00A0]
UBOOT: Loaded Overlay:[BB-HDMI-TDA998x-00A0]
UBOOT: Loaded Overlay:[BB-P9_27-LED-00A0]          < --- P9_27 Overlay

Now let’s see if the pin showed up:

debian@bbb-pwr01-ser09:~$ cat /sys/class/leds/P9_27/brightness 
0

You can turn it high via:

debian@bbb-pwr01-ser09:~$ echo 1 > /sys/class/leds/P9_27/brightness 
debian@bbb-pwr01-ser09:~$ cat /sys/class/leds/P9_27/brightness 
1

Regards,

Hi.
I downloaded bb.org-overlays
I installed ‘make’ as below

sudo apt-get install make

command ‘make’ and ‘sudo make install’ make errors as below

There is not BB-P9_27-LED-00A0.dtbo in /lib/firmware/ directory

How can I resolve it?
Please, help me.

Regards

@taek8461, you need a few more dependices…

sudo apt update
sudo apt install build-essential device-tree-compiler

Regards,

Thank you for your help.
I want to ask you one more.
I want to control GPIO3_18 additionally.

I defined ‘#define BONE_P114 0x1A0’ in am335x-bb3-bbb-base.h
and I made the file as below

BB-P114-LED-00A0.dts

/dts-v1/;
/plugin/;

#include <dt-bindings/board/am335x-bbw-bbb-base.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/am33xx.h>

/ {
    /*
     * Helper to show loaded overlays under: /proc/device-tree/chosen/overlays/
     */
    fragment@0 {
	    target-path="/";
	    __overlay__ {

		    chosen {
			    overlays {
				    BB-P114-LED-00A0 = __TIMESTAMP__;
			    };
		    };
	    };
    };

    /*
     * Free up the pins used by the cape from the pinmux helpers.
     */
    fragment@1 {
	    target = <&ocp>;
	    __overlay__ {
		    P114_pinmux { status = "disabled"; };	/* P114: mcasp0_fsr.gpio3_18 */
	    };
    };

    fragment@2 {
	    target = <&am33xx_pinmux>;
	    __overlay__ {

		    bb_gpio_led_pins: pinmux_bb_gpio_led_pins {
			    pinctrl-single,pins = <
				BONE_P114 (PIN_OUTPUT_PULLDOWN | MUX_MODE7)	/* P114: mcasp0_fsr.gpio3_18 */
			>;
		    };
	    };
    };

    fragment@3 {
	    target-path="/";
	    __overlay__ {

		    leds {
			    pinctrl-names = "default";
			    pinctrl-0 = <&bb_gpio_led_pins>;

			    compatible = "gpio-leds";

			    P114 {
				    label = "P114";
				    gpios = <&gpio3 18 GPIO_ACTIVE_HIGH>;
				    default-state = "off";
			    };
		    };
	    };
    };
};

I did ‘make’ and ‘sudo make install’
and then I added ‘uboot-overlay_addr5=/lib/firmware/BB-P114-LED-00A0.dtbo’ in uEnv.txt

but there is no /sys/class/leds/P114.
I don’t know how to control P3_18(P114)
Could you help me?

Regards.

@taek8461, just combine them into one file:

P114_pinmux { status = "disabled"; };	/* P114: mcasp0_fsr.gpio3_18 */

This ^ isn’t needed for non-header pins…

Regards,

Hi
I made the file ( BB-P9_27-LED-00A0.dts ) as your instruction.
The following is content of BB-P9_27-LED-00A0.dts.

/*
 * Copyright (C) 2020 Robert Nelson <robertcnelson@gmail.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

/dts-v1/;
/plugin/;

#include <dt-bindings/board/am335x-bbw-bbb-base.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/am33xx.h>

/ {
        /*
         * Helper to show loaded overlays under: /proc/device-tree/chosen/overlays/
         */
        fragment@0 {
                target-path="/";
                __overlay__ {

                        chosen {
                                overlays {
                                        BB-P9_27-LED-00A0 = __TIMESTAMP__;
                                };
                        };
                };
        };

        /*
         * Free up the pins used by the cape from the pinmux helpers.
         */
        fragment@1 {
                target = <&ocp>;
                __overlay__ {
                        P9_27_pinmux { status = "disabled"; };  /* P9_27: mcasp0_fsr.gpio3_19 */
                };
        };

        fragment@2 {
                target = <&am33xx_pinmux>;
                __overlay__ {

                        bb_gpio_led_pins: pinmux_bb_gpio_led_pins {
                                pinctrl-single,pins = <
                                        BONE_P9_27 (PIN_OUTPUT_PULLDOWN | MUX_MODE7)  /* P9_27: mcasp0_fsr.gpio3_19 */
                                        AM33XX_IOPAD(0x9a0, PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* (B12) mcasp0_aclkr.gpio3[18] */
                                >;
                        };
                };
        };

        fragment@3 {
                target-path="/";
                __overlay__ {

                        leds {
                                pinctrl-names = "default";
                                pinctrl-0 = <&bb_gpio_led_pins>;

                                compatible = "gpio-leds";

                                P9_27 {
                                        label = "P9_27";
                                        gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
                                        default-state = "off";
                                };

                                P114 {
                                        label = "P114";
                                        gpios = <&gpio3 18 GPIO_ACTIVE_HIGH>;
                                        default-state = "off";
                                };
                        };
                };
        };
};

The following is uEnv.txt
image

The following is version.sh | grep uboot

I think two directory would be created

  1. /sys/class/leds/P9_27
  2. /sys/class/leds/P114

but there is any directory in /sys/class/leds directory.
What’s wrong with that?
The following is the content of directory of leds
image

Please, let me know how to fix it and how to control P114 (P3_18) pin

Regards.

Hi @taek8461, please run, to validate overlay loaded:

sudo /opt/scripts/tools/version.sh

Edit, please run the full “version.sh” script, i’m wondering if we get a pinmux error at the bottom…

Regards,

Hi.
I run ‘sudo /opt/scripts/tools/version.sh’ and the message is as below

I didnot modify version.sh
There is still no directory in ‘/sys/class/leds’ directory
My linux version is 4.19.31-bone-rt-r31

Please, help me.

Hi @taek8461, there’s a conflict with P9_92_pinmux add it the disabled list:

P9_92_pinmux { status = "disabled"; };

See:

Regards,

HI
I resolved it.
Thank you so much~

Regards.

Robert,
I added my question to this topic instead of creating a new topic. I also want to configure gpio pins in the device tree (DT).
I studied the above BB-P9_27-LED-00A0.dts example. I understand what fragment0, 1 and 2 are doing but I won’t need those fragments because my DT does not include P9_27_pinmux helper.
If I understand correctly, fragment3 uses gpio-leds. I don’t have a ‘led’ node in my DT. The only lines that have meaning to me are

label = "P9_27";
gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
default-state = "off";

I am using an OSD3358 on a custom board. I have a working DT but my input lines (gpio1_12, 13 14 and 15) are inverted and all my outputs (gpio1_23, 24, 25) are OFF. (Note I have removed the LED related code so that I can use 23 and 24 for my own purpose)

I have read the gpio dt-bindings.
I understand to configure an input line ACTIVE_LOW that I need to insert something like this…
enable-gpios = <&gpio1 12 GPIO_ACTIVE_LOW>
or
data-gpios = <&gpio1 12 GPIO_ACTIVE_LOW>

I understand to configure an output line’s default value that I need to insert something like this…
default_state = OFF

I also want to change gpio1_12 input line name from ‘GPMC_AD12’ to ‘SW_0_IN’.
I also want to change gpio1_23 output line name from ‘GPMC_A7’ to ‘LED_G_OUT’.

Here is snippet from my DT

/ {
	compatible = "ti,am33xx";
	interrupt-parent = <&intc>;
	#address-cells = <1>;
	#size-cells = <1>;
	chosen { };

[...]
	ocp: ocp {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;
		ti,hwmods = "l3_main";
[...]
		gpio1: gpio@4804c000 {
			compatible = "ti,omap4-gpio";
			ti,hwmods = "gpio2";
			gpio-controller;
			#gpio-cells = <2>;
			interrupt-controller;
			#interrupt-cells = <2>;
			reg = <0x4804c000 0x1000>;
			interrupts = <98>;
			gpio-line-names =
				"GPMC_AD0",	// 0
				"GPMC_AD1",	// 1
				"GPMC_AD2",	// 2
				"GPMC_AD3",	// 3
				"GPMC_AD4",	// 4
				"GPMC_AD5",	// 5
				"GPMC_AD6",	// 6
				"GPMC_AD7",	// 7
				"UART0_CTSN",	// 8
				"UART0_RTSN",	// 9
				"UART0_RXD",	// 10
				"UART0_TXD",	// 11
				"GPMC_AD12",	// 12
				"GPMC_AD13",	// 13
				"GPMC_AD14",	// 14
				"GPMC_AD15",	// 15
				"GPMC_A0",	// 16
				"GPMC_A1",	// 17
				"GPMC_A2",	// 18
				"GPMC_A3",	// 19
				"GPMC_A4",	// 20
				"GPMC_A5",	// 21
				"GPMC_A6",	// 22
				"GPMC_A7",	// 23
				"GPMC_A8",	// 24
				"GPMC_A9",	// 25
				"GPMC_A10",	// 26
				"GPMC_A11",	// 27
				"GPMC_BE1N",	// 28
				"GPMC_CSN0",	// 29
				"GPMC_CSN1",	// 30
				"GPMC_CSN2";	// 31
		}; // end of gpio1: gpio@4804c000
[...]
	}; // end of ocp: ocp
[...]
}; // end of '/'

&am33xx_pinmux {
	pinctrl-names = "default"";
	pinctrl-0 = <&gpio1_pins_default>;
[...]
	gpio1_pins_default: pinmux_gpio1_pins {
		pinctrl-single,pins = <
			AM33XX_IOPAD(0x830, PIN_INPUT_PULLUP | MUX_MODE7)
			AM33XX_IOPAD(0x834, PIN_INPUT_PULLUP | MUX_MODE7)
			AM33XX_IOPAD(0x838, PIN_INPUT_PULLUP | MUX_MODE7)
			AM33XX_IOPAD(0x83c, PIN_INPUT_PULLUP | MUX_MODE7)
			AM33XX_IOPAD(0x844, PIN_INPUT_PULLUP | MUX_MODE7)
			AM33XX_IOPAD(0x848, PIN_INPUT_PULLUP | MUX_MODE7)
			AM33XX_IOPAD(0x84c, PIN_INPUT_PULLUP | MUX_MODE7)
			AM33XX_IOPAD(0x858, PIN_INPUT_PULLUP | MUX_MODE7)
			AM33XX_IOPAD(0x85c, PIN_OUTPUT_PULLUP | MUX_MODE7)
			AM33XX_IOPAD(0x860, PIN_OUTPUT_PULLUP | MUX_MODE7)
			AM33XX_IOPAD(0x864, PIN_OUTPUT_PULLUP | MUX_MODE7)
		>;
	};
[...]
}; // end of &am33xx_pinmux

Q. What is the difference between ‘enable-gpios’ and ‘data-gpios’?
Q. What is the correct syntax for the above changes?
Q. Where is the code inserted?

Thank you,

Hi @jakthree, strange I’ve never utilized the ‘data-gpios’ syntax:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/gpio/gpio.txt

It looks like we have never used it in the TI/omap world:

voodoo@hestia:~/linux-src$ grep -R "data-gpios" ./* | grep dts
./arch/arm/boot/dts/imx7d-sdb-sht11.dts:		data-gpios = <&gpio4 13 0>;
./arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts:		data-gpios = <&gpio ASPEED_GPIO(J, 1) GPIO_ACTIVE_HIGH>;
./arch/arm/boot/dts/aspeed-bmc-opp-nicole.dts:		data-gpios = <&gpio ASPEED_GPIO(AA, 2) GPIO_ACTIVE_HIGH>;
./arch/arm/boot/dts/aspeed-bmc-opp-zaius.dts:		data-gpios = <&gpio ASPEED_GPIO(G, 1) GPIO_ACTIVE_HIGH>;
./arch/arm/boot/dts/armada-370-netgear-rn104.dts:		data-gpios = <&gpio1 25 GPIO_ACTIVE_HIGH>,
./arch/arm/boot/dts/aspeed-bmc-opp-romulus.dts:		data-gpios = <&gpio ASPEED_GPIO(AA, 2) GPIO_ACTIVE_HIGH>;
./arch/arm/boot/dts/aspeed-bmc-opp-mihawk.dts:		data-gpios = <&gpio ASPEED_GPIO(E, 7) GPIO_ACTIVE_HIGH>;
./arch/arm/boot/dts/aspeed-bmc-inspur-fp5280g2.dts:		data-gpios = <&gpio ASPEED_GPIO(AA, 2) GPIO_ACTIVE_HIGH>;
./arch/arm/boot/dts/aspeed-bmc-opp-swift.dts:		data-gpios = <&gpio ASPEED_GPIO(P, 2) GPIO_ACTIVE_HIGH>;
./arch/arm/boot/dts/kirkwood-netgear_readynas_nv+_v2.dts:		data-gpios = <&gpio0 17 GPIO_ACTIVE_HIGH>,
./arch/arm/boot/dts/kirkwood-nsa320.dts:		data-gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>;
./arch/arm/boot/dts/aspeed-bmc-opp-palmetto.dts:		data-gpios = <&gpio ASPEED_GPIO(A, 5) GPIO_ACTIVE_HIGH>;
./arch/arm/boot/dts/mmp2-olpc-xo-1-75.dts:				data-gpios = <&gpio 72 GPIO_ACTIVE_HIGH>;
./arch/arm/boot/dts/aspeed-bmc-opp-witherspoon.dts:		data-gpios = <&gpio ASPEED_GPIO(E, 0) GPIO_ACTIVE_HIGH>;
./arch/arm/boot/dts/kirkwood-netxbig.dtsi:		data-gpios = <&gpio1 12 GPIO_ACTIVE_HIGH
./scripts/dtc/include-prefixes/arm/imx7d-sdb-sht11.dts:		data-gpios = <&gpio4 13 0>;
./scripts/dtc/include-prefixes/arm/aspeed-bmc-opp-lanyang.dts:		data-gpios = <&gpio ASPEED_GPIO(J, 1) GPIO_ACTIVE_HIGH>;
./scripts/dtc/include-prefixes/arm/aspeed-bmc-opp-nicole.dts:		data-gpios = <&gpio ASPEED_GPIO(AA, 2) GPIO_ACTIVE_HIGH>;
./scripts/dtc/include-prefixes/arm/aspeed-bmc-opp-zaius.dts:		data-gpios = <&gpio ASPEED_GPIO(G, 1) GPIO_ACTIVE_HIGH>;
./scripts/dtc/include-prefixes/arm/armada-370-netgear-rn104.dts:		data-gpios = <&gpio1 25 GPIO_ACTIVE_HIGH>,
./scripts/dtc/include-prefixes/arm/aspeed-bmc-opp-romulus.dts:		data-gpios = <&gpio ASPEED_GPIO(AA, 2) GPIO_ACTIVE_HIGH>;
./scripts/dtc/include-prefixes/arm/aspeed-bmc-opp-mihawk.dts:		data-gpios = <&gpio ASPEED_GPIO(E, 7) GPIO_ACTIVE_HIGH>;
./scripts/dtc/include-prefixes/arm/aspeed-bmc-inspur-fp5280g2.dts:		data-gpios = <&gpio ASPEED_GPIO(AA, 2) GPIO_ACTIVE_HIGH>;
./scripts/dtc/include-prefixes/arm/aspeed-bmc-opp-swift.dts:		data-gpios = <&gpio ASPEED_GPIO(P, 2) GPIO_ACTIVE_HIGH>;
./scripts/dtc/include-prefixes/arm/kirkwood-netgear_readynas_nv+_v2.dts:		data-gpios = <&gpio0 17 GPIO_ACTIVE_HIGH>,
./scripts/dtc/include-prefixes/arm/kirkwood-nsa320.dts:		data-gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>;
./scripts/dtc/include-prefixes/arm/aspeed-bmc-opp-palmetto.dts:		data-gpios = <&gpio ASPEED_GPIO(A, 5) GPIO_ACTIVE_HIGH>;
./scripts/dtc/include-prefixes/arm/mmp2-olpc-xo-1-75.dts:				data-gpios = <&gpio 72 GPIO_ACTIVE_HIGH>;
./scripts/dtc/include-prefixes/arm/aspeed-bmc-opp-witherspoon.dts:		data-gpios = <&gpio ASPEED_GPIO(E, 0) GPIO_ACTIVE_HIGH>;
./scripts/dtc/include-prefixes/arm/kirkwood-netxbig.dtsi:		data-gpios = <&gpio1 12 GPIO_ACTIVE_HIGH

Drew at BeagleBoard has been working on a couple things similar to what you are trying to do, but it should give you a good idea of where to do things…

Pin-muxing, this is enough for the userspace gpiod tool to utilze the pins:

https://www.spinics.net/lists/linux-omap/msg155263.html

and then the default gpio-naming, which you can do in your base *.dts file:

https://www.spinics.net/lists/linux-omap/msg155155.html

Regards,

Hi Robert,
changing the default gpio-naming. I understand better how to use &gpio1 to change the name of the lines.
setting input line to active_low and output line to OFF or ON.
I don’t know anything about the pocketBeagle but Drew refers to pads on the AM33xx being connected to a P1, P2 header. He is using AM33XX_PADCONF() to set the pinmux so the ‘unused’ pins are inputs with soft pullups. I don’t see any place where he is setting the input line as GPIO_ACTIVE_LOW or setting the state of the output line to OFF/ON.

The gpio dt-binding shows an example of setting the input using enable-gpios placed inside of a ‘node’.

Example of a node using GPIOs:

node {
	enable-gpios = <&qe_pio_e 18 GPIO_ACTIVE_HIGH>;
};

I think this is the code I want to use

enable-gpios = <&gpio2 12 GPIO_ACTIVE_LOW &gpio2 13 GPIO_ACTIVE_LOW &gpio2 14 GPIO_ACTIVE_LOW &gpio2 15 GPIO_ACTIVE_LOW>

Is the syntax correct?
Which ‘node’ in my DT do I insert the code into?

Instead of doing the above code, the dt-binding also shows example of ‘gpio-hog’.

Example of two SOC GPIO banks defined as gpio-controller nodes:

qe_pio_a: gpio-controller@1400 {
	compatible = "fsl,qe-pario-bank-a", "fsl,qe-pario-bank";
	reg = <0x1400 0x18>;
	gpio-controller;
	#gpio-cells = <2>;

	line_b {
		gpio-hog;
		gpios = <6 0>;
		output-low;
		line-name = "foo-bar-gpio";
	};
};

If i understand correctly, gpio-hog also does what I want if I add this to my DT,

&gpio1
	my_gpio1_12 {
		gpio-hog;
		gpios = <12 GPIO_ACTIVE_LOW>;
		input;
		line-name = "SW_0_IN";
	};
	my_gpio1_23 {
		gpio-hog;
		gpios = <23 0>;
		output-low; // or output-high
		line-name = "LED_Y_OUT";
	};
};

I have not inserted the above in my DT in fear of not knowing what it will do.
Have you used gpio-hog?
Can I give ‘line_b’ any name I want?

Thank you again for your patience,

Hi @jakthree, first a little detail of gpio-hog, this should only be used as a last resort. Think of it has a board/pcb design issue, “fix”… For when your design missed a pull-up or pull-down resistor. Once a pin is tied to gpio-hog, nothing in kernel userland is allow to change it.

For output pin’s that you want to change, use a gpio-led, then use the “brightness” parameter to toggle high/low… gpio-keys, can be used for input, but sometimes it’s just better to use the old sys interface, or libgpiod for input.

You are correct, in the PADCONF, there is no active_low/active_high, that must be either in gpio-led, or gpio-keys.

for enable-gpios, i don’t see any reference beyond 1 gpio.

Regards,

Is ‘gpio-leds’ and ‘gpio-keys’ part of the old sysfs (/sys/class/…)?

I am confused, I thought sysfs was being removed from the kernel and being replaced by chardev libgpiod (/dev/gpiochipN).

Why was gpio-leds named ‘gpio-leds’ instead of ‘gpio-outputs’?
If gpio-keys is for inputs then why wasn’t it named ‘gpio-inputs’?

What is the difference between gpio-line-names and label?

Thank you,

There is nothing wrong with “/sys/class/”, it’s “/sys/class/gpio/” that’s tagged for removal.

There are still a few issues with the new chardev interface, so i don’t really see /sys/class/gpio really being deleted anytime soon…

Device Tree’s are suppose to be descriptive… You don’t turn-on/off an output or input…

Label’s show up under /sys/

voodoo@x1-am57xx-beagle-x15-2gb:~$ ls /sys/class/leds/
beagle-x15:usr0  beagle-x15:usr1  beagle-x15:usr2  beagle-x15:usr3  mmc0::  mmc1::

The gpio-line-names show up under “gpioinfo”…

Regards,

Hi @jakthree, just a heads up, this was posted on the device-tree mailing list today as an RFC. Hopefully it get’s some traction from the DT maintainers.

[RFC] GPIO lines [was: GPIO User I/O]

As it does exactly what we want instead of hacking up gpio-led and gpio-keypad!

Regards,