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,
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…
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