VIM3 GPIO Access and DT Overlay

Hello
Im using Vim3 with latest Linux Khadas 4.9.232 0.9.3 Ubuntu Image.
And here is the problem. I need 4 Gpio Pins for 4 external leds.

uenv.txt -> overlays= (nothing activated)

With the following commands, i can control 3 gpio ports.
PIN37 GPIOH_4
echo 431 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio431/direction
echo 1 > /sys/class/gpio/gpio431/value

PIN15 GPIOH_6
echo 433 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio433/direction
echo 1 > /sys/class/gpio/gpio433/value

PIN16 GPIOH_7
echo 434 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio434/direction
echo 1 > /sys/class/gpio/gpio434/value

But I have a problem with the 4. gpio.
Test 1:
PIN35 GPIOH_5
echo 432 > /sys/class/gpio/export
write error: Invalid argument

Test 2:
PIN25-PIN26 GPIOAO_2-GPIOAO_3
echo 498 > /sys/class/gpio/export
write error: Invalid argument
echo 499 > /sys/class/gpio/export
write error: Invalid argument

Test 3:
PIN22-PIN23 GPIOA_14-GPIOA_15
echo 474 > /sys/class/gpio/export
write error: Invalid argument
echo 475 > /sys/class/gpio/export
write error: Invalid argument

Test 4:
PIN 29-PIN34 GPIOA_0-GPIOA_4
echo 460 > /sys/class/gpio/export
write error: Invalid argument
echo 461 > /sys/class/gpio/export
write error: Invalid argument
echo 462 > /sys/class/gpio/export
write error: Invalid argument
echo 463 > /sys/class/gpio/export
write error: Invalid argument
echo 464 > /sys/class/gpio/export
write error: Invalid argument

Test 5:
PIN39 GPIODZ_15
echo 426 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio426/direction
echo 1 > /sys/class/gpio/gpio426/value

This pin first looks like its ok, but the led doesnt work on this port.

Could you please help me, which gpios i should use.

Thank You
Best regards, Andreas

@odibox GPIOZ_15 is a OD Pin , You can’t use it ro control LED . About other error pins , already occupied by other functions . You should check it in dts .

Have you disable the i2c and pwm_f in configiure file /boot/env.txt?

I have tried many overlays configuration.
This is default
overlays=uart3 pwm_f i2c3 os08a10
I have changed it to
overlays=os08a10
or
overlays=
Then i think all functions (uart3 pwm_f i2c3) should be disabled.

Should it be possible to use the following pins for my led function if (uart3 pwm_f i2c3 spi1) are correct disabled?
PIN22 & PIN23 & PIN15 & PIN16 & PIN35 & PIN37

@odibox Did you reboot system ?

:slight_smile: More than one time.

@odibox run this command cat /sys/kernel/debug/gpio and faceback there

root@Khadas:~# cat /sys/kernel/debug/gpio
gpiochip2: GPIOs 402-409, parent: i2c/4-0020, tca6408, can sleep:
gpio-405 ( |RESET ) out hi
gpio-407 ( |? ) out lo

gpiochip1: GPIOs 410-495, parent: platform/pinctrl@ff634480, periphs-banks:
gpio-445 ( |amlsd ) out hi
gpio-458 ( |amlsd ) in lo
gpio-466 ( |ffe09000.usb2phy ) out hi
gpio-482 ( |sdio_wifi ) out hi
gpio-483 ( |sdio_wifi ) in hi
gpio-493 ( |bt_rfkill ) out hi
gpio-495 ( |bt_rfkill ) out hi

gpiochip0: GPIOs 496-511, parent: platform/pinctrl@ff800014, aobus-banks:
gpio-500 ( |? ) out lo
gpio-503 ( |key ) in hi

cat /sys/kernel/debug/pinctrl/pinctrl@ff634480/gpio-ranges
GPIO ranges handled:
0: periphs-banks GPIOS [410 - 495] PINS [0 - 85]

cat /sys/kernel/debug/pinctrl/pinctrl@ff634480/pins
registered pins: 86
pin 0 (GPIOV_0) pinctrl@ff634480
pin 1 (GPIOZ_0) pinctrl@ff634480
pin 2 (GPIOZ_1) pinctrl@ff634480
pin 3 (GPIOZ_2) pinctrl@ff634480
pin 4 (GPIOZ_3) pinctrl@ff634480
pin 5 (GPIOZ_4) pinctrl@ff634480
pin 6 (GPIOZ_5) pinctrl@ff634480
pin 7 (GPIOZ_6) pinctrl@ff634480
pin 8 (GPIOZ_7) pinctrl@ff634480
pin 9 (GPIOZ_8) pinctrl@ff634480
pin 10 (GPIOZ_9) pinctrl@ff634480
pin 11 (GPIOZ_10) pinctrl@ff634480
pin 12 (GPIOZ_11) pinctrl@ff634480
pin 13 (GPIOZ_12) pinctrl@ff634480
pin 14 (GPIOZ_13) pinctrl@ff634480
pin 15 (GPIOZ_14) pinctrl@ff634480
pin 16 (GPIOZ_15) pinctrl@ff634480
pin 17 (GPIOH_0) pinctrl@ff634480
pin 18 (GPIOH_1) pinctrl@ff634480
pin 19 (GPIOH_2) pinctrl@ff634480
pin 20 (GPIOH_3) pinctrl@ff634480
pin 21 (GPIOH_4) pinctrl@ff634480
pin 22 (GPIOH_5) pinctrl@ff634480
pin 23 (GPIOH_6) pinctrl@ff634480
pin 24 (GPIOH_7) pinctrl@ff634480
pin 25 (GPIOH_8) pinctrl@ff634480
pin 26 (BOOT_0) pinctrl@ff634480
pin 27 (BOOT_1) pinctrl@ff634480
pin 28 (BOOT_2) pinctrl@ff634480
pin 29 (BOOT_3) pinctrl@ff634480
pin 30 (BOOT_4) pinctrl@ff634480
pin 31 (BOOT_5) pinctrl@ff634480
pin 32 (BOOT_6) pinctrl@ff634480
pin 33 (BOOT_7) pinctrl@ff634480
pin 34 (BOOT_8) pinctrl@ff634480
pin 35 (BOOT_9) pinctrl@ff634480
pin 36 (BOOT_10) pinctrl@ff634480
pin 37 (BOOT_11) pinctrl@ff634480
pin 38 (BOOT_12) pinctrl@ff634480
pin 39 (BOOT_13) pinctrl@ff634480
pin 40 (BOOT_14) pinctrl@ff634480
pin 41 (BOOT_15) pinctrl@ff634480
pin 42 (GPIOC_0) pinctrl@ff634480
pin 43 (GPIOC_1) pinctrl@ff634480
pin 44 (GPIOC_2) pinctrl@ff634480
pin 45 (GPIOC_3) pinctrl@ff634480
pin 46 (GPIOC_4) pinctrl@ff634480
pin 47 (GPIOC_5) pinctrl@ff634480
pin 48 (GPIOC_6) pinctrl@ff634480
pin 49 (GPIOC_7) pinctrl@ff634480
pin 50 (GPIOA_0) pinctrl@ff634480
pin 51 (GPIOA_1) pinctrl@ff634480
pin 52 (GPIOA_2) pinctrl@ff634480
pin 53 (GPIOA_3) pinctrl@ff634480
pin 54 (GPIOA_4) pinctrl@ff634480
pin 55 (GPIOA_5) pinctrl@ff634480
pin 56 (GPIOA_6) pinctrl@ff634480
pin 57 (GPIOA_7) pinctrl@ff634480
pin 58 (GPIOA_8) pinctrl@ff634480
pin 59 (GPIOA_9) pinctrl@ff634480
pin 60 (GPIOA_10) pinctrl@ff634480
pin 61 (GPIOA_11) pinctrl@ff634480
pin 62 (GPIOA_12) pinctrl@ff634480
pin 63 (GPIOA_13) pinctrl@ff634480
pin 64 (GPIOA_14) pinctrl@ff634480
pin 65 (GPIOA_15) pinctrl@ff634480
pin 66 (GPIOX_0) pinctrl@ff634480
pin 67 (GPIOX_1) pinctrl@ff634480
pin 68 (GPIOX_2) pinctrl@ff634480
pin 69 (GPIOX_3) pinctrl@ff634480
pin 70 (GPIOX_4) pinctrl@ff634480
pin 71 (GPIOX_5) pinctrl@ff634480
pin 72 (GPIOX_6) pinctrl@ff634480
pin 73 (GPIOX_7) pinctrl@ff634480
pin 74 (GPIOX_8) pinctrl@ff634480
pin 75 (GPIOX_9) pinctrl@ff634480
pin 76 (GPIOX_10) pinctrl@ff634480
pin 77 (GPIOX_11) pinctrl@ff634480
pin 78 (GPIOX_12) pinctrl@ff634480
pin 79 (GPIOX_13) pinctrl@ff634480
pin 80 (GPIOX_14) pinctrl@ff634480
pin 81 (GPIOX_15) pinctrl@ff634480
pin 82 (GPIOX_16) pinctrl@ff634480
pin 83 (GPIOX_17) pinctrl@ff634480
pin 84 (GPIOX_18) pinctrl@ff634480
pin 85 (GPIOX_19) pinctrl@ff634480

cat /sys/kernel/debug/pinctrl/pinctrl@ff800014/gpio-ranges
GPIO ranges handled:
0: aobus-banks GPIOS [496 - 511] PINS [0 - 15]

cat /sys/kernel/debug/pinctrl/pinctrl@ff800014/pins
registered pins: 16
pin 0 (GPIOAO_0) pinctrl@ff800014
pin 1 (GPIOAO_1) pinctrl@ff800014
pin 2 (GPIOAO_2) pinctrl@ff800014
pin 3 (GPIOAO_3) pinctrl@ff800014
pin 4 (GPIOAO_4) pinctrl@ff800014
pin 5 (GPIOAO_5) pinctrl@ff800014
pin 6 (GPIOAO_6) pinctrl@ff800014
pin 7 (GPIOAO_7) pinctrl@ff800014
pin 8 (GPIOAO_8) pinctrl@ff800014
pin 9 (GPIOAO_9) pinctrl@ff800014
pin 10 (GPIOAO_10) pinctrl@ff800014
pin 11 (GPIOAO_11) pinctrl@ff800014
pin 12 (GPIOE_0) pinctrl@ff800014
pin 13 (GPIOE_1) pinctrl@ff800014
pin 14 (GPIOE_2) pinctrl@ff800014
pin 15 (GPIO_TEST_N) pinctrl@ff800014

Hello
I have found the problem. :slight_smile:

I have updated the board like this:

khadas@Khadas:~$ sudo apt update
khadas@Khadas:~$ sudo apt full-upgrade
khadas@Khadas:~$ sudo do-fenix-full-upgrade
khadas@Khadas:~$ sync
khadas@Khadas:~$ sudo reboot

Now the /boot/dtb/kvim3_linux.dtb was updated.

But in u-boot, the file dtb.img is loaded.

And this dtb.img file is older than the kvim3_linux.dtb.
So i copied the kvim3_linux.dtb to dtb.img and now it works.

I have decompiled both dtb’s.

Old One
i2c@1c000 {
compatible = “amlogic,meson-g12b-i2c”;
status = “okay”;

New One
i2c@1c000 {
compatible = “amlogic,meson-g12b-i2c”;
status = “disabled”;

How could it happen, that the dtb.img was not updated?

Should the device tree Overlay also working in mainline linux with mainline kernel?

VIM3_Debian-server-buster_Linux-5.9-rc2_arm64_SD-USB_V0.9.3