Firefly Open Source Community

Title: GPIO manual control [Print This Page]

Author: valeriy.simakov    Time: 5/3/2022 01:24
Title: GPIO manual control
Last edited by valeriy.simakov In 5/4/2022 11:33 Editor

Hi !

I'm trying to control pins which are IC's reset pins.
LAN7800_1       RSTLAN                GPIO4_B4 (pin 265)    gpio140
LAN7800_2       RSTLAN                GPIO4_C2 (pin 235)    gpio146
FT4232              RSTFT4232H_1    GPIO4_B2 (pin 314)      gpio138
FT4232             RSTFT4232H_2     GPIO4_B3 (pin 313)      gpio139

I used instruction from wiki ( https://wiki.t-firefly.com/en/ROC-RK3568-PC/driver_gpio.html)
So I got this (via $cat /sys/kernel/debug/gpio):
gpiochip4: GPIOs 128-159, parent: platform/fe770000.gpio, gpio4:
gpio-138 (                    |sysfs               ) out hi
gpio-139 (                    |sysfs               ) out hi
gpio-140 (                    |sysfs               ) out hi
gpio-146 (                    |sysfs               ) out hi

But it doesn't take any effect. So maybe I need some additional magic
Could you please help me?

linux: ubuntu, rk3568, image was generated from SDK.

Author: 时间的蝴蝶    Time: 5/5/2022 15:26
The control method is as described in WIKI. Is the IO level unchanged? And is IO multiplexed?

```
When GPIO4_D5 pin is not reused by other peripherals, we can export this pin to use

:/ # ls /sys/class/gpio/
export     gpiochip128  gpiochip32   gpiochip64  unexport
gpiochip0  gpiochip255  gpiochip500  gpiochip96
:/ # echo 157 > /sys/class/gpio/export
:/ # ls /sys/class/gpio/
export   gpiochip0    gpiochip255  gpiochip500  gpiochip96
gpio157  gpiochip128  gpiochip32   gpiochip64   unexport
:/ # ls /sys/class/gpio/gpio157
active_low  device  direction  edge  power  subsystem  uevent  value
:/ # cat /sys/class/gpio/gpio157/direction
in
:/ # cat /sys/class/gpio/gpio157/value
0
```
Author: valeriy.simakov    Time: 5/8/2022 03:05
Last edited by valeriy.simakov In 5/8/2022 03:10 Editor

Actually, yes, I had found that one pin used by i2c bus, I disabled that bus and my pin config cause on pin front.

How can I check that the IO level is unchanged and IO is multiplexed?
Author: 时间的蝴蝶    Time: 5/9/2022 14:28
valeriy.simakov Posted at 5/8/2022 03:05
Actually, yes, I had found that one pin used by i2c bus, I disabled that bus and my pin config cause ...

Check the IO level status through commands or measure the actual value with a multimeter. `cat /sys/kernel/debug/gpio`

Check if IO is multiplexed, `cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins`
Author: valeriy.simakov    Time: 5/10/2022 21:49
Last edited by valeriy.simakov In 5/11/2022 16:25 Editor
时间的蝴蝶 Posted at 5/9/2022 14:28
Check the IO level status through commands or measure the actual value with a multimeter. `cat /sy ...

I added my pins to dts and checked:

cat /sys/kernel/debug/gpio:
gpiochip4: GPIOs 128-159, parent: platform/fe770000.gpio, gpio4:
gpio-138 (                    |RSTFT4232H_1        ) out hi
gpio-139 (                    |RSTFT4232H_2        ) out hi
gpio-140 (                    |lan7800_1           ) out hi
gpio-141 (                    |RSTUSB2251          ) out hi
gpio-146 (                    |lan7800_2           ) out hi
gpio-154 (                    |lan_hub             ) out hi

cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins:
pin 138 (gpio4-10): (MUX UNCLAIMED) gpio4:138
pin 139 (gpio4-11): (MUX UNCLAIMED) gpio4:139
pin 140 (gpio4-12): (MUX UNCLAIMED) gpio4:140
pin 141 (gpio4-13): (MUX UNCLAIMED) gpio4:141
pin 146 (gpio4-18): (MUX UNCLAIMED) gpio4:146
pin 154 (gpio4-26): (MUX UNCLAIMED) gpio4:154

But on the board they are 1.2v, only lan7800_2 is 3.4v

Author: valeriy.simakov    Time: 5/11/2022 00:53
Last edited by valeriy.simakov In 5/11/2022 16:09 Editor

I'm new to Linux, maybe I made mistakes...

// New pins:
RSTUSB2251   GPIO4_B5 gpio141     
lan_hub           GPIO4_D2 gpio154

// My dts modifications:
(rk3568-firefly-roc-pc.dtsi)
/ {
...

firefly_leds: leds {
...

                lan7800_1_reset: lan7800_1 {
                                default-state = "on";
                                gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_HIGH>;
                                pinctrl-names = "gpio";
                                pinctrl-1 = <&lan7800_1>;
                };

                lan7800_2_reset: lan7800_2 {
                                default-state = "on";
                                gpios = <&gpio4 RK_PC2 GPIO_ACTIVE_HIGH>;
                                pinctrl-names = "gpio";
                                pinctrl-1 = <&lan7800_2>;
                };

                lan_hub_reset: lan_hub {
                                default-state = "on";
                                gpios = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>;
                                pinctrl-names = "gpio";
                                pinctrl-1 = <&lan_hub>;
                };

                RSTFT4232H_1_reset: RSTFT4232H_1 {
                        default-state = "on";
                        gpios = <&gpio4 RK_PB2 GPIO_ACTIVE_HIGH>;
                        pinctrl-names = "gpio";
                        pinctrl-1 = <&RSTFT4232H_1>;
                };

                RSTFT4232H_2_reset: RSTFT4232H_2 {
                        default-state = "on";
                        gpios = <&gpio4 RK_PB3 GPIO_ACTIVE_HIGH>;
                        pinctrl-names = "gpio";
                        pinctrl-1 = <&RSTFT4232H_2>;
                };

                RSTUSB2251_reset: RSTUSB2251 {
                        default-state = "on";
                        gpios = <&gpio4 RK_PB5 GPIO_ACTIVE_HIGH>;
                        pinctrl-names = "gpio";
                        pinctrl-1 = <&RSTUSB2251>;
                };
};
...
};
&pinctrl {
...
        leds {
...
                lan7800_1: lan7800_1 {
                        rockchip,pins = <4 RK_PB4 RK_FUNC_GPIO &pcfg_pull_up>;
                };

                lan7800_2: lan7800_2 {
                        rockchip,pins = <4 RK_PC2 RK_FUNC_GPIO &pcfg_pull_up>;
                };

                lan_hub: lan_hub {
                        rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_up>;
                };

                RSTFT4232H_1: RSTFT4232H_1 {
                        rockchip,pins = <4 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up>;
                };

                RSTFT4232H_2: RSTFT4232H_2 {
                        rockchip,pins = <4 RK_PB3 RK_FUNC_GPIO &pcfg_pull_up>;
                };

                RSTUSB2251: RSTUSB2251 {
                        rockchip,pins = <4 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>;
                };
        };
};
rk3568-firefly-roc-pc.zip (1.69 KB, Down times: 2)



Author: 时间的蝴蝶    Time: 5/11/2022 16:16
valeriy.simakov Posted at 5/10/2022 21:49
I added my pins to dts and checked:

cat /sys/kernel/debug/gpio:

It seems that the control of the IO port is normal.
Maybe you should check the effect of the peripheral circuit on the voltage.
Author: valeriy.simakov    Time: 5/11/2022 16:30
时间的蝴蝶 Posted at 5/11/2022 16:16
It seems that the control of the IO port is normal.
Maybe you should check the effect of the peri ...

"But on the board they are 1.2v, only lan7800_2 is 3.4v"

Maybe I can adjust the voltage, because it is not the same for different pins? It's strange ;)




Welcome Firefly Open Source Community (https://bbs.t-firefly.com/) Powered by Discuz! X3.1