Hello,
OS Version: BeagleBone Black Debian 13.2 2025-11-18 IoT
Kernel Version: 6.17.8-bone16
I have been trying to get the hang of configuring the pins on my BBB industrial. The first thing I was attempting to do was pick any pin that supports gpio and set it to either a pull-up or pull-down configuration, but this is where I am running into some issues. I am still pretty new to attempting to make my own device tree overlay so that could possibly be the problem. Also, I will state I have all of my overlays apply from the info on my cape, but I don’t believe that should change how the pins are configured.
I have attempted to change quite a few pins and noticed a few weird behaviors. The first strange behavior is that when I attempt to change a pins mode and resistor configuration, I only ever seem to be able to adjust the mode and the resistor configuration never seems to follow what I set it to. For example, if I want to set P8_12 to be in a pull up GPIO pin. It by default is set to:
pin 12 (PIN12) 12:gpio-0-31 44e10830 00000027 pinctrl-single
And if I apply the DTO:
/dts-v1/;
/plugin/;
#include "../include/dt-bindings/pinctrl/am33xx.h"
/ {
compatible = "ti,am335x-bone-black", "ti,am335x-bone";
part-number = "MYORG_P8_12_LED";
version = "00A0";
exclusive-use =
"P8_12"; /* GPIO1_12, offset 0x030 */
};
&{/chosen} {
overlays {
MYORG_P8_12_LED-00A0 = __TIMESTAMP__;
};
};
&am33xx_pinmux {
myorg_p8_12_pins: myorg_p8_12_pins {
pinctrl-single,pins = <
0x030 0x17 /* P8_12: GPIO1_12, mode7 GPIO, output + pull-up */
>;
};
};
&ocp {
myorg_leds_p8_12 {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&myorg_p8_12_pins>;
p8_12_led {
label = "myorg:p8_12";
gpios = <&gpio1 12 0>; /* controller &gpio1, line 12, active-high */
default-state = "on"; /* drive high at boot */
};
};
};
This is just an example of one of the DTS files that I have tried. In this case the when it applies which I see here: debian@BeagleBone:~$ ls /proc/device-tree/chosen/overlays
BB-ADC-00A0.kernel BB-BONE-eMMC1-01-00A0.kernel MYORG_P8_12_LED-00A0 name
No Change actually occurs to the pin: pin 12 (PIN12) 12:gpio-0-31 44e10830 00000027 pinctrl-single
In other cases it would change the higher register but not to what I changed it to, for example a pin would start being set as 0x37 and I attempted to set it to 0x07 but after the fact it would be 0x77.
The other odd issue I am noticing is if I have an overlay that changes multiple pins for example this overlay where I am trying to set the Uart4 pins to be in their UART mode( mode 6):
/dts-v1/;
/plugin/;
#include "../include/dt-bindings/pinctrl/am33xx.h"
/ {
compatible = "ti,am335x-bone-black", "ti,am335x-bone";
part-number = "MYORG_PROTO";
version = "00A0";
exclusive-use =
"P9_11", /* uart4_rxd */
"P9_13", /* uart4_txd */
"uart4";
};
&{/} {
chosen {
overlays {
MYORG_UART4-00A0 = __TIMESTAMP__;
};
};
};
&ocp {
P9_11_pinmux { status = "disabled"; }; /* P9_11: gpmc_wait0 / uart4_rxd */
P9_13_pinmux { status = "disabled"; }; /* P9_13: gpmc_wpn / uart4_txd */
};
&am33xx_pinmux {
myorg_uart4_pins: myorg_uart4_pins {
pinctrl-single,pins = <
0x070 0x26 /* P9_11: uart4_rxd, MODE6 */
0x074 0x06 /* P9_13: uart4_txd, MODE6 */
>;
};
};
&uart4 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&myorg_uart4_pins>;
};
Before setting the overlay both pins were set to 0x37 and after the fact only the first pin P9_11 will update to:
pin 28 (PIN28) 30:gpio-96-127 44e10870 00000076 pinctrl-single
pin 29 (PIN29) 31:gpio-96-127 44e10874 00000037 pinctrl-single
So, it seems to only ever take the first pin attempted to be set. And it still does match what I set in the high bit section.
Any help with either of these issues would be greatly appreciated!