config-pin/pin muxing on Beaglebone Black on Bookworm

What is the recommended way to do pin muxing on Bookworm on the Beaglebone Black? I always used config-pin, but don’t see it on my system and am unsure how to get it.

i’m moving things to libgpiod. you can use the old config-pin with v5.10.x but 6.1.x+ and later has a lot of gpio changes…

Regards,

1 Like

I don’t understand how to use libgpiod to change the direction of a pin or set it to use i2c, etc. Are there examples of that?

i only changes input/output, high or low… everything else will need an overlay…

1 Like

It also looks like the gpiochip numbers have all changed since I last checked (years). I have a Buster image using 4.19.94-ti-rt-r57 and a Bookworm image using 6.6.74-bone-rt-r22. The gpioinfo is all below. Is the order not guaranteed? It looks like they were remapped:

Buster Bookworm
gpiochip0 gpiochip3
gpiochip1 gpiochip0
gpiochip2 gpiochip1
gpiochip3 gpiochip2

Buster 4.19.94-ti-rt-r57:

gpiochip0 - 32 lines:
	line   0:  "MDIO_DATA"       unused   input  active-high 
	line   1:   "MDIO_CLK"       unused   input  active-high 
	line   2:  "SPI0_SCLK"      "P9_22"   input  active-high [used]
	line   3:    "SPI0_D0"      "P9_21"   input  active-high [used]
	line   4:    "SPI0_D1"      "P9_18"   input  active-high [used]
	line   5:   "SPI0_CS0"      "P9_17"   input  active-high [used]
	line   6:   "SPI0_CS1"         "cd"   input   active-low [used]
	line   7: "ECAP0_IN_PWM0_OUT" "P9_42" input active-high [used]
	line   8: "LCD_DATA12"      "P8_35"   input  active-high [used]
	line   9: "LCD_DATA13"      "P8_33"   input  active-high [used]
	line  10: "LCD_DATA14"      "P8_31"   input  active-high [used]
	line  11: "LCD_DATA15"      "P8_32"   input  active-high [used]
	line  12: "UART1_CTSN"      "P9_20"   input  active-high [used]
	line  13: "UART1_RTSN"      "P9_19"   input  active-high [used]
	line  14:  "UART1_RXD"      "P9_26"   input  active-high [used]
	line  15:  "UART1_TXD"      "P9_24"   input  active-high [used]
	line  16: "GMII1_TXD3"       unused   input  active-high 
	line  17: "GMII1_TXD2"       unused   input  active-high 
	line  18: "USB0_DRVVBUS" unused input active-high 
	line  19: "XDMA_EVENT_INTR0" "A15" input active-high [used]
	line  20: "XDMA_EVENT_INTR1" "P9_41" input active-high [used]
	line  21: "GMII1_TXD1"       unused   input  active-high 
	line  22:   "GPMC_AD8"      "P8_19"   input  active-high [used]
	line  23:   "GPMC_AD9"      "P8_13"   input  active-high [used]
	line  24:         "NC"       unused   input  active-high 
	line  25:         "NC"       unused   input  active-high 
	line  26:  "GPMC_AD10"      "P8_14"   input  active-high [used]
	line  27:  "GPMC_AD11"      "P8_17"   input  active-high [used]
	line  28: "GMII1_TXD0"       unused   input  active-high 
	line  29: "RMII1_REFCLK" unused input active-high 
	line  30: "GPMC_WAIT0"      "P9_11"   input  active-high [used]
	line  31:   "GPMC_WPN"      "P9_13"   input  active-high [used]
gpiochip1 - 32 lines:
	line   0:   "GPMC_AD0"      "P8_25"   input  active-high [used]
	line   1:   "GPMC_AD1"      "P8_24"   input  active-high [used]
	line   2:   "GPMC_AD2"      "P8_05"   input  active-high [used]
	line   3:   "GPMC_AD3"      "P8_06"   input  active-high [used]
	line   4:   "GPMC_AD4"      "P8_23"   input  active-high [used]
	line   5:   "GPMC_AD5"      "P8_22"   input  active-high [used]
	line   6:   "GPMC_AD6"      "P8_03"   input  active-high [used]
	line   7:   "GPMC_AD7"      "P8_04"   input  active-high [used]
	line   8: "UART0_CTSN"       unused   input  active-high 
	line   9: "UART0_RTSN"       unused   input  active-high 
	line  10:  "UART0_RXD"       unused   input  active-high 
	line  11:  "UART0_TXD"       unused   input  active-high 
	line  12:  "GPMC_AD12"      "P8_12"   input  active-high [used]
	line  13:  "GPMC_AD13"      "P8_11"   input  active-high [used]
	line  14:  "GPMC_AD14"      "P8_16"   input  active-high [used]
	line  15:  "GPMC_AD15"      "P8_15"   input  active-high [used]
	line  16:    "GPMC_A0"      "P9_15"   input  active-high [used]
	line  17:    "GPMC_A1"      "P9_23"   input  active-high [used]
	line  18:    "GPMC_A2"      "P9_14"   input  active-high [used]
	line  19:    "GPMC_A3"      "P9_16"   input  active-high [used]
	line  20:    "GPMC_A4"       unused   input  active-high 
	line  21:    "GPMC_A5" "beaglebone:green:usr0" output active-high [used]
	line  22:    "GPMC_A6" "beaglebone:green:usr1" output active-high [used]
	line  23:    "GPMC_A7" "beaglebone:green:usr2" output active-high [used]
	line  24:    "GPMC_A8" "beaglebone:green:usr3" output active-high [used]
	line  25:    "GPMC_A9"       unused   input  active-high 
	line  26:   "GPMC_A10"       unused   input  active-high 
	line  27:   "GPMC_A11"     "enable"  output  active-high [used]
	line  28:  "GPMC_BE1N"      "P9_12"   input  active-high [used]
	line  29:  "GPMC_CSN0"      "P8_26"   input  active-high [used]
	line  30:  "GPMC_CSN1"      "P8_21"   input  active-high [used]
	line  31:  "GPMC_CSN2"      "P8_20"   input  active-high [used]
gpiochip2 - 32 lines:
	line   0:  "GPMC_CSN3"       unused   input  active-high 
	line   1:   "GPMC_CLK"      "P8_18"   input  active-high [used]
	line   2: "GPMC_ADVN_ALE" "P8_07" input active-high [used]
	line   3: "GPMC_OEN_REN" "P8_08" input active-high [used]
	line   4:   "GPMC_WEN"      "P8_10"   input  active-high [used]
	line   5: "GPMC_BE0N_CLE" "P8_09" input active-high [used]
	line   6:  "LCD_DATA0"      "P8_45"   input  active-high [used]
	line   7:  "LCD_DATA1"      "P8_46"   input  active-high [used]
	line   8:  "LCD_DATA2"      "P8_43"   input  active-high [used]
	line   9:  "LCD_DATA3"      "P8_44"   input  active-high [used]
	line  10:  "LCD_DATA4"      "P8_41"   input  active-high [used]
	line  11:  "LCD_DATA5"      "P8_42"   input  active-high [used]
	line  12:  "LCD_DATA6"      "P8_39"   input  active-high [used]
	line  13:  "LCD_DATA7"      "P8_40"   input  active-high [used]
	line  14:  "LCD_DATA8"      "P8_37"   input  active-high [used]
	line  15:  "LCD_DATA9"      "P8_38"   input  active-high [used]
	line  16: "LCD_DATA10"      "P8_36"   input  active-high [used]
	line  17: "LCD_DATA11"      "P8_34"   input  active-high [used]
	line  18: "GMII1_RXD3"       unused   input  active-high 
	line  19: "GMII1_RXD2"       unused   input  active-high 
	line  20: "GMII1_RXD1"       unused   input  active-high 
	line  21: "GMII1_RXD0"       unused   input  active-high 
	line  22:  "LCD_VSYNC"      "P8_27"   input  active-high [used]
	line  23:  "LCD_HSYNC"      "P8_29"   input  active-high [used]
	line  24:   "LCD_PCLK"      "P8_28"   input  active-high [used]
	line  25: "LCD_AC_BIAS_EN" "P8_30" input active-high [used]
	line  26:  "MMC0_DAT3"       unused   input  active-high 
	line  27:  "MMC0_DAT2"       unused   input  active-high 
	line  28:  "MMC0_DAT1"       unused   input  active-high 
	line  29:  "MMC0_DAT0"       unused   input  active-high 
	line  30:   "MMC0_CLK"       unused   input  active-high 
	line  31:   "MMC0_CMD"       unused   input  active-high 
gpiochip3 - 32 lines:
	line   0:  "GMII1_COL"       unused   input  active-high 
	line   1:  "GMII1_CRS"       unused   input  active-high 
	line   2: "GMII1_RXER"       unused   input  active-high 
	line   3: "GMII1_TXEN"       unused   input  active-high 
	line   4: "GMII1_RXDV"       unused   input  active-high 
	line   5:   "I2C0_SDA"       unused   input  active-high 
	line   6:   "I2C0_SCL"       unused   input  active-high 
	line   7:       "EMU0"       unused   input  active-high 
	line   8:       "EMU1"       unused   input  active-high 
	line   9: "GMII1_TXCLK" unused input active-high 
	line  10: "GMII1_RXCLK" unused input active-high 
	line  11:         "NC"       unused   input  active-high 
	line  12:         "NC"       unused   input  active-high 
	line  13: "USB1_DRVVBUS" unused input active-high 
	line  14: "MCASP0_ACLKX" "P9_31" input active-high [used]
	line  15: "MCASP0_FSX"      "P9_29"   input  active-high [used]
	line  16: "MCASP0_AXR0" "P9_30" input active-high [used]
	line  17: "MCASP0_AHCLKR" "P9_28" input active-high [used]
	line  18: "MCASP0_ACLKR" "P9_92" input active-high [used]
	line  19: "MCASP0_FSR"      "P9_27"   input  active-high [used]
	line  20: "MCASP0_AXR1" "P9_91" input active-high [used]
	line  21: "MCASP0_AHCLKX" "P9_25" input active-high [used]
	line  22:         "NC"       unused   input  active-high 
	line  23:         "NC"       unused   input  active-high 
	line  24:         "NC"       unused   input  active-high 
	line  25:         "NC"       unused   input  active-high 
	line  26:         "NC"       unused   input  active-high 
	line  27:         "NC"       unused   input  active-high 
	line  28:         "NC"       unused   input  active-high 
	line  29:         "NC"       unused   input  active-high 
	line  30:         "NC"       unused   input  active-high 
	line  31:         "NC"       unused   input  active-high 

Bookworm 6.6.74-bone-rt-r22:

gpiochip0 - 32 lines:
	line   0: "P8_25 [mmc1_dat0]" unused input active-high 
	line   1: "[mmc1_dat1]" unused input active-high 
	line   2: "P8_5 [mmc1_dat2]" unused input active-high 
	line   3: "P8_6 [mmc1_dat3]" unused input active-high 
	line   4: "P8_23 [mmc1_dat4]" unused input active-high 
	line   5: "P8_22 [mmc1_dat5]" unused input active-high 
	line   6: "P8_3 [mmc1_dat6]" unused input active-high 
	line   7: "P8_4 [mmc1_dat7]" unused input active-high 
	line   8:         "NC"  "PHY reset"  output   active-low [used]
	line   9:         "NC"       unused   input  active-high 
	line  10:         "NC"       unused   input  active-high 
	line  11:         "NC"       unused   input  active-high 
	line  12:      "P8_12"       unused   input  active-high 
	line  13:      "P8_11"       unused   input  active-high 
	line  14:      "P8_16"       unused   input  active-high 
	line  15:      "P8_15"       unused   input  active-high 
	line  16:     "P9_15A"       unused   input  active-high 
	line  17:      "P9_23"       unused   input  active-high 
	line  18: "P9_14 [ehrpwm1a]" unused input active-high 
	line  19: "P9_16 [ehrpwm1b]" unused input active-high 
	line  20: "[emmc rst]"       unused   input  active-high 
	line  21: "[usr0 led]" "beaglebone:green:usr0" output active-high [used]
	line  22: "[usr1 led]" "beaglebone:green:usr1" output active-high [used]
	line  23: "[usr2 led]" "beaglebone:green:usr2" output active-high [used]
	line  24: "[usr3 led]" "beaglebone:green:usr3" output active-high [used]
	line  25: "[hdmi irq]"       unused   input  active-high 
	line  26: "[usb vbus oc]" "bb_gpio" input active-high [used]
	line  27: "[hdmi audio]" "bb_gpio" output active-high [used]
	line  28:      "P9_12"       unused   input  active-high 
	line  29:      "P8_26"       unused   input  active-high 
	line  30: "P8_21 [emmc]" unused input active-high 
	line  31: "P8_20 [emmc]" unused input active-high 
gpiochip1 - 32 lines:
	line   0:     "P9_15B"       unused   input  active-high 
	line   1:      "P8_18"       unused   input  active-high 
	line   2:       "P8_7"       unused   input  active-high 
	line   3:       "P8_8"       unused   input  active-high 
	line   4:      "P8_10"       unused   input  active-high 
	line   5:       "P8_9"       unused   input  active-high 
	line   6: "P8_45 [hdmi]" unused input active-high 
	line   7: "P8_46 [hdmi]" unused input active-high 
	line   8: "P8_43 [hdmi]" unused input active-high 
	line   9: "P8_44 [hdmi]" unused input active-high 
	line  10: "P8_41 [hdmi]" unused input active-high 
	line  11: "P8_42 [hdmi]" unused input active-high 
	line  12: "P8_39 [hdmi]" unused input active-high 
	line  13: "P8_40 [hdmi]" unused input active-high 
	line  14: "P8_37 [hdmi]" unused input active-high 
	line  15: "P8_38 [hdmi]" unused input active-high 
	line  16: "P8_36 [hdmi]" unused input active-high 
	line  17: "P8_34 [hdmi]" unused input active-high 
	line  18: "[rmii1_rxd3]" unused input active-high 
	line  19: "[rmii1_rxd2]" unused input active-high 
	line  20: "[rmii1_rxd1]" unused input active-high 
	line  21: "[rmii1_rxd0]" unused input active-high 
	line  22: "P8_27 [hdmi]" unused input active-high 
	line  23: "P8_29 [hdmi]" unused input active-high 
	line  24: "P8_28 [hdmi]" unused input active-high 
	line  25: "P8_30 [hdmi]" unused input active-high 
	line  26: "[mmc0_dat3]" unused input active-high 
	line  27: "[mmc0_dat2]" unused input active-high 
	line  28: "[mmc0_dat1]" unused input active-high 
	line  29: "[mmc0_dat0]" unused input active-high 
	line  30: "[mmc0_clk]"       unused   input  active-high 
	line  31: "[mmc0_cmd]"       unused   input  active-high 
gpiochip2 - 32 lines:
	line   0:  "[mii col]"       unused   input  active-high 
	line   1:  "[mii crs]"       unused   input  active-high 
	line   2: "[mii rx err]" unused input active-high 
	line   3: "[mii tx en]" unused input active-high 
	line   4: "[mii rx dv]" unused input active-high 
	line   5: "[i2c0 sda]"       unused   input  active-high 
	line   6: "[i2c0 scl]"       unused   input  active-high 
	line   7: "[jtag emu0]" unused input active-high 
	line   8: "[jtag emu1]" unused input active-high 
	line   9: "[mii tx clk]" unused input active-high 
	line  10: "[mii rx clk]" unused input active-high 
	line  11:         "NC"       unused   input  active-high 
	line  12:         "NC"       unused   input  active-high 
	line  13: "[usb vbus en]" unused input active-high 
	line  14: "P9_31 [spi1_sclk]" unused input active-high 
	line  15: "P9_29 [spi1_d0]" unused input active-high 
	line  16: "P9_30 [spi1_d1]" unused input active-high 
	line  17: "P9_28 [spi1_cs0]" unused input active-high 
	line  18: "P9_42B [ecappwm0]" unused input active-high 
	line  19:      "P9_27"       unused   input  active-high 
	line  20:     "P9_41A"       unused   input  active-high 
	line  21:      "P9_25"       unused   input  active-high 
	line  22:         "NC"       unused   input  active-high 
	line  23:         "NC"       unused   input  active-high 
	line  24:         "NC"       unused   input  active-high 
	line  25:         "NC"       unused   input  active-high 
	line  26:         "NC"       unused   input  active-high 
	line  27:         "NC"       unused   input  active-high 
	line  28:         "NC"       unused   input  active-high 
	line  29:         "NC"       unused   input  active-high 
	line  30:         "NC"       unused   input  active-high 
	line  31:         "NC"       unused   input  active-high 
gpiochip3 - 32 lines:
	line   0: "[mdio_data]" unused input active-high 
	line   1: "[mdio_clk]"       unused   input  active-high 
	line   2: "P9_22 [spi0_sclk]" unused input active-high 
	line   3: "P9_21 [spi0_d0]" unused input active-high 
	line   4: "P9_18 [spi0_d1]" unused input active-high 
	line   5: "P9_17 [spi0_cs0]" unused input active-high 
	line   6:  "[mmc0_cd]"         "cd"   input   active-low [used]
	line   7: "P9_42A [ecappwm0]" unused input active-high 
	line   8: "P8_35 [lcd d12]" unused input active-high 
	line   9: "P8_33 [lcd d13]" unused input active-high 
	line  10: "P8_31 [lcd d14]" unused input active-high 
	line  11: "P8_32 [lcd d15]" unused input active-high 
	line  12: "P9_20 [i2c2_sda]" unused input active-high 
	line  13: "P9_19 [i2c2_scl]" unused input active-high 
	line  14: "P9_26 [uart1_rxd]" unused input active-high 
	line  15: "P9_24 [uart1_txd]" unused input active-high 
	line  16: "[rmii1_txd3]" unused input active-high 
	line  17: "[rmii1_txd2]" unused input active-high 
	line  18: "[usb0_drvvbus]" unused input active-high 
	line  19: "[hdmi cec]"       unused   input  active-high 
	line  20:     "P9_41B"       unused   input  active-high 
	line  21: "[rmii1_txd1]" unused input active-high 
	line  22: "P8_19 [ehrpwm2a]" unused input active-high 
	line  23: "P8_13 [ehrpwm2b]" unused input active-high 
	line  24:         "NC"       unused   input  active-high 
	line  25:         "NC"       unused   input  active-high 
	line  26:      "P8_14"       unused   input  active-high 
	line  27:      "P8_17"       unused   input  active-high 
	line  28: "[rmii1_txd0]" unused input active-high 
	line  29: "[rmii1_refclk]" unused input active-high 
	line  30: "P9_11 [uart4_rxd]" unused input active-high 
	line  31: "P9_13 [uart4_txd]" unused input active-high 

Correct, after v6.1.x~ish, they are probed in parallel…

use gpiofind…

gpioset $(gpiofind P8_12)=1

Thanks for the help, Robert!

Is there a way to know which gpiochip is associated with which GPIO port from the System Manual? They used to be the same. It seems like gpiofind requires the name to be an exact match, so pin 8.43 for example is listed as P8_43 [hdmi], so gpiofind P8_43 doesn’t come up with anything.

i only changes input/output, high or low… everything else will need an overlay…

So to set the pinmux to enable PRU I/O pins, a device-tree overlay (dtbo) file is needed, correct?

…and with your images installing overlay files is generally handled by U-Boot, not the kernel, right?

You need the full string…

Correct, u-boot only, there are a few examples in the overlay repo.

I understand you need the full string, it just doesn’t seem very user friendly to have to know what that full string is. That was one of the nice things about config-pin, is it was easy to use and was consistent and simple with naming. P8.24, for example, isn’t even listed, only [mmc1_dat1]. I guess I’m saying I would be in favor of simplifying the naming of the main device tree if libgpiod is going to become the main way to get/set GPIO pins.

Yeah it sucks as those have been in mainline since 5.x… I’ll patch them out…

It also affects what I did on pocketbeagle 2…

First day of vacation, I’ll be back next Wednesday

Thanks for all the help, Robert! Enjoy your vacation!

If your on discord I’m keeping track of my notes there

@RobertCNelson do you have an example of a device tree overlay for the Beaglebone Black that can configure the direction and pull up state for GPIO pins (on Bookworm with kernel 6.6)?

I’ll be back on Wednesday

Hi All,
I have the same (new) problem (missing the config-pin utility) on the PB after I’ve upgraded to the am335x-debian-12.2-iot-armhf-2023-10-07-4gb.img image. I’ll wait for Robert to return from vacation and see if he can help. Thank you.

As long as it’s 5.10 you can install the old config-pin

Hi Robert, it’s 5.10.168-ti-r72. How do I install the old config-pin?
Thank you,
Ilan