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”中。

被折叠的 条评论
为什么被折叠?



