Firefly Open Source Community

   Login   |   Register   |
New_Topic
Print Previous Topic Next Topic

[Linux] GPIO manual control

67

Credits

0

Prestige

0

Contribution

registered members

Rank: 2

Credits
67

【Linux】 GPIO manual control

Posted at 5/3/2022 01:24:07      View:5837 | Replies:8        Print      Only Author   [Copy Link] 1#
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.
Reply

Use props Report

486

Credits

20

Prestige

15

Contribution

intermediate

Rank: 3Rank: 3

Credits
486
Posted at 5/5/2022 15:26:11        Only Author  2#
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
```
Reply

Use props Report

67

Credits

0

Prestige

0

Contribution

registered members

Rank: 2

Credits
67
Posted at 5/8/2022 03:05:39        Only Author  3#
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?
Reply

Use props Report

486

Credits

20

Prestige

15

Contribution

intermediate

Rank: 3Rank: 3

Credits
486
Posted at 5/9/2022 14:28:52        Only Author  4#
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`
Reply

Use props Report

67

Credits

0

Prestige

0

Contribution

registered members

Rank: 2

Credits
67
Posted at 5/10/2022 21:49:35        Only Author  5#
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
Reply

Use props Report

67

Credits

0

Prestige

0

Contribution

registered members

Rank: 2

Credits
67
Posted at 5/11/2022 00:53:13        Only Author  6#
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)


Reply

Use props Report

486

Credits

20

Prestige

15

Contribution

intermediate

Rank: 3Rank: 3

Credits
486
Posted at 5/11/2022 16:16:56        Only Author  7#
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.
Reply

Use props Report

67

Credits

0

Prestige

0

Contribution

registered members

Rank: 2

Credits
67
Posted at 5/11/2022 16:30:32        Only Author  8#
时间的蝴蝶 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 ;)
Reply

Use props Report

129

Credits

0

Prestige

0

Contribution

registered members

Rank: 2

Credits
129
Posted at yesterday 21:42        Only Author  9#
Your article was so impressive, I’m deeply thankful. Here's the 1Y0-342 latest exam preparation test that played a part in my promotion and salary increase, and it's free for you today! Wishing you all the best in your career!
Reply

Use props Report

You need to log in before you can reply Login | Register

This forum Credits Rules

Quick Reply Back to top Back to list