Device tree overlay not changing pin Values.

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!

I am also after enabling UART5 pins, but failed except for TXD which comes up as slow. Kernel 6.12+ introduce a GPIO base offset, changing the GPIO numbers while maintaining the same chip/line hardware organization. There seems to be recovery activity at least to get the standard overlays back running. If you go here and look at the files that were changed later than one year ago, it is probably whats updated. BeagleBoard-DeviceTrees/src/arm/overlays at v6.18.x · beagleboard/BeagleBoard-DeviceTrees · GitHub

What I find strange anyway is that the CPU hardware pin and function descriptor assignments (hex numbers) do not work, as these should not be related to mapping changes. Confusing.

You can stop this stuff.

can you run the full “sudo beagle-version” output… if the pinmux isn’t being set… i want to see what that script dumps at the end..

Regards,