RK3399 系列 GPIO & pinctrl 控制 (key read)

Board : Nanopi M4 

流程

1)寫設備樹

驅動的compatible 與設備樹的compatible對應,再用GPIO API(devm_get_gpiod_from_child)擷取設備樹pin

2)驅動是現成的pio_keys_polled.c     gpiod_get_value

   編譯kernel後燒錄

3)user space用api做read(fd, &ev, sizeof(struct input_event)

設備樹

gpio-keys {
    compatible = "gpio-keys-polled";
    poll-interval = <100>; //轮训间隔设置100ms
    status = "okay";

    pinctrl-names = "default";
    pinctrl-0 = <&key_0 &key_1 &key_2 &key_3>;

    user_k1 {
        label = "User Push Button K1";
        linux,code = <KEY_RED>;
        gpios = <&gpio4 RK_PC0 GPIO_ACTIVE_HIGH>;  //PC0 = K1  red
    };

&pinctrl {
    btn {
        key_0: key_0 {
            rockchip,pins = <4 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>;
        };

key poll驅動

/kernel-rockchip/drivers/input/keyboard/gpio_keys_polled.c   

compatible = "gpio-keys-polled";

gpio_keys_polled_poll()

gpio_keys_polled_probe(){

devm_gpio_request_one()

input_register_polled_device(poll_dev);

}

=>gpio_keys_polled_check_state(){

gpiod_get_value()

}

----------------------------------------------------------------------------------

定義

kernel-rockchip$ vim include/dt-bindings/pinctrl/rockchip.h

#define RK_GPIO0        0
#define RK_GPIO1        1
#define RK_GPIO2        2
#define RK_GPIO3        3
#define RK_GPIO4        4
#define RK_GPIO6        6

#define RK_PA0          0
#define RK_PA1          1
#define RK_PA2          2
#define RK_PA3          3
#define RK_PA4          4
#define RK_PA5          5
#define RK_PA6          6
#define RK_PA7          7
#define RK_PB0          8
#define RK_PB1          9
#define RK_PB2          10
#define RK_PB3          11
#define RK_PB4          12
#define RK_PB5          13
#define RK_PB6          14
#define RK_PB7          15
#define RK_PC0          16
#define RK_PC1          17
#define RK_PC2          18
#define RK_PC3          19
#define RK_PC4          20
#define RK_PC5          21
#define RK_PC6          22
#define RK_PC7          23
#define RK_PD0          24
#define RK_PD1          25
#define RK_PD2          26
#define RK_PD3          27
#define RK_PD4          28
#define RK_PD5          29
#define RK_PD6          30
#define RK_PD7          31
 

#define RK_FUNC_GPIO    0
#define RK_FUNC_1       1
#define RK_FUNC_2       2
#define RK_FUNC_3       3
#define RK_FUNC_4       4
#define RK_FUNC_5       5
#define RK_FUNC_6       6
#define RK_FUNC_7       7

pcfg_pull_down 下拉

pcfg_pull_up 上拉

pcfg_pull_none 不操作

---------------------------------------------------------------------------------

gpio子系统常用函数

  gpio子系统对于驱动层的API位于“/kernel/include/linux/gpio.h”中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值