移植 tiny210 的按键驱动
来源:互联网 发布:宜宾零距离网络 编辑:程序博客网 时间:2024/06/04 20:02
按键驱动比较简单,这里利用了tiny210的8个按键,上报A,B,C,D,L,S,shift ,enter 8个事件。
代码如下:
#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/sched.h>#include <linux/poll.h>#include <linux/irq.h>#include <asm/irq.h>#include <asm/io.h>#include <linux/interrupt.h>#include <asm/uaccess.h>#include <mach/hardware.h>#include <linux/platform_device.h>#include <linux/cdev.h>#include <linux/miscdevice.h>#include <linux/input.h>#include <plat/gpio-cfg.h> #include <mach/map.h>#include <mach/gpio.h>#include <mach/regs-clock.h>#include <mach/regs-gpio.h>#include <asm/gpio.h>static struct input_dev *s5p_buttons_dev;static struct timer_list s5p_buttons_timer;struct s5p_buttons_desc{int gpio;int value;char* name;};static struct s5p_buttons_desc s5p_buttons_desc[] = {{ S5PV210_GPH2(0), KEY_L, "KEY0" },{ S5PV210_GPH2(1), KEY_S, "KEY1" },{ S5PV210_GPH2(2), KEY_ENTER, "KEY2" },{ S5PV210_GPH2(3), KEY_LEFTSHIFT, "KEY3" },{ S5PV210_GPH3(0), KEY_A, "KEY4" },{ S5PV210_GPH3(1), KEY_B, "KEY5" },{ S5PV210_GPH3(2), KEY_C, "KEY6" },{ S5PV210_GPH3(3), KEY_D, "KEY7" },};static struct s5p_buttons_desc *tmp_button_desc;static void s5p_210_buttons_timer(unsigned long _data){int value;//tmp_button_desc = (struct s5p_buttons_desc *)_data; value = gpio_get_value(tmp_button_desc->gpio);/* active low */printk("KEY %s: %08x\n", tmp_button_desc->name,value);if(value){input_event(s5p_buttons_dev , EV_KEY , tmp_button_desc->value ,0); // 0表示按下 ,1 表示松开input_sync(s5p_buttons_dev);}else{input_event(s5p_buttons_dev , EV_KEY , tmp_button_desc->value ,1);input_sync(s5p_buttons_dev);}}static irqreturn_t s5p_button_interrupt(int irq, void *dev_id){tmp_button_desc = (struct s5p_buttons_desc *)dev_id; mod_timer(&s5p_buttons_timer, jiffies + msecs_to_jiffies(40));return IRQ_HANDLED;}static int __init s5p_button_dev_init(void){int i;/*1. 分配input_dev 结构体*/s5p_buttons_dev = input_allocate_device();/*2. 设置 input_dev 结构体 */set_bit(EV_KEY, s5p_buttons_dev->evbit); // 设置产生按键类事件set_bit(EV_REL, s5p_buttons_dev->evbit); // 设置产生相对位移类事件set_bit(KEY_L, s5p_buttons_dev->keybit); set_bit(KEY_S, s5p_buttons_dev->keybit); set_bit(KEY_ENTER, s5p_buttons_dev->keybit); set_bit(KEY_LEFTSHIFT, s5p_buttons_dev->keybit); set_bit(KEY_A, s5p_buttons_dev->keybit); set_bit(KEY_B, s5p_buttons_dev->keybit); set_bit(KEY_C, s5p_buttons_dev->keybit); set_bit(KEY_D, s5p_buttons_dev->keybit); /*3. 硬件操作 */// 加一个定时器init_timer(&s5p_buttons_timer);s5p_buttons_timer.function = s5p_210_buttons_timer;add_timer(&s5p_buttons_timer);for (i = 0; i < ARRAY_SIZE(s5p_buttons_desc); i++) {request_irq(gpio_to_irq(s5p_buttons_desc[i].gpio), s5p_button_interrupt, IRQ_TYPE_EDGE_BOTH, s5p_buttons_desc[i].name, (void *)&s5p_buttons_desc[i]); // 注册中断}/*4. 注册 input_dev */input_register_device(s5p_buttons_dev);return 0;}static void __exit s5p_button_dev_exit(void){int i;for (i = 0; i < ARRAY_SIZE(s5p_buttons_desc); i++){free_irq(gpio_to_irq(s5p_buttons_desc[i].gpio), (void *)&s5p_buttons_desc[i]);}del_timer(&s5p_buttons_timer);input_unregister_device(s5p_buttons_dev);input_free_device(s5p_buttons_dev);}module_init(s5p_button_dev_init);module_exit(s5p_button_dev_exit);MODULE_LICENSE("GPL");
测试:
在终端上执行 exec 0</dev/tty1
按下开发板上按键就可以看到相应按键的值。
0 0
- 移植 tiny210 的按键驱动
- 移植tiny210 的lcd驱动
- 移植tiny210的 触摸屏驱动
- tiny210触摸屏驱动移植问题
- 一步一步学习 Linux 驱动之 tiny210 按键驱动
- 4412按键驱动移植(按键对应Android系统的三个虚拟按键)
- 移植LED和按键驱动
- Qtopia4.2.5移植及按键驱动的调试总结
- tiny210 按键驱动程序
- 一步一步学习 Linux 驱动之 platform 机制(tiny210 按键驱动)
- Linux-2.6.32.2内核在mini2440上的移植(十六)---基于中断的按键驱动移植
- Linux-2.6.32.2内核在mini2440上的移植(十六)---基于中断的按键驱动移植
- Linux-2.6.32.2内核在mini2440上的移植(十六)---基于中断的按键驱动移植
- Linux-4.9.2内核在mini2440上的移植(十三)——按键驱动移植
- 基于tiny210v2的linux-3.9.6内核驱动移植2:按键驱动
- android系统移植之按键驱动篇
- android系统移植之按键驱动篇
- android系统移植之按键驱动篇
- 黑马程序员——01Java基本数据类型小知识点
- 获得CODE39检查码的几个步骤及特性综合说明
- 【iOS XMPP】使用XMPPFramewok(五):好友列表
- 【Android】 Android开发优化之——对界面UI的优化(2)
- VideoView大小屏幕切换的总结
- 移植 tiny210 的按键驱动
- window下工具访问linux下mysql出现 error no 2003 10061错误的解决办法
- C++资源管理————————在资源管理类中小心copying行为
- linux关于消息队列中消息的大小的限制
- 【Android】 Android开发优化之——对界面UI的优化(3)
- 深入分析:Android中app之间的交互(一,使用Action)
- mysql 登录报错:ERROR 1045 (28000)
- [Android]在App中使用相机
- Gabor学习笔记