Linux设备驱动的分层设计思想
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-19
动作发生的时候,报告事件.代码清单9列出了GPIO按键中断发生时的事件
报告代码.
代码清单9 GPIO按键中断发生时的事件报告
1 static void gpio_keys_report_event(struct gpio_button_data *bdata)
2 {
3 struct gpio_keys_button *button = bdata->button;
4 struct input_dev *input = bdata->input;
5 unsigned int type = button->type ?: EV_KEY;
6 int state = (gpio_get_value(button->gpio) ? 1 : 0) ^
button->active_low;
7
8 input_event(input, type, button->code, !!state);
9 input_sync(input);
10 }
11
12 static irqreturn_t gpio_keys_isr(int irq, void *dev_id)
13 {
14 struct gpio_button_data *bdata = dev_id;
15 struct gpio_keys_button *button = bdata->button;
16
17 BUG_ON(irq != gpio_to_irq(button->gpio));
18
19 if (button->debounce_interval)
20 mod_timer(&bdata->timer,
21 jiffies msecs_to_jiffies(button->debounce_interval));
22 else
23 gpio_keys_report_event(bdata);
24
25 return IRQ_HANDLED;
26 }
第8行是报告键值,而第9行是1个同步事件,暗示前面报告的消息属于1个消息组.譬如用户在报告完X坐标后,又报告Y坐标,之后报告1个同步事件,
应用程序即可知道前面报告的X、Y这2个事件属于1组,它会将2者联合起来形成1个(X,Y)的坐标.
代码清单8第2行获取platform_data,而platform_data实际上是定义GPIO按键硬件信息的数组,第31行的for循环工
具这些信息申请GPIO并初始化中断,对于LDD6140电路板而言,这些信息如代码清单10.
代码清单10 LDD6410开发板GPIO按键的platform_data
1 static struct gpio_keys_button ldd6410_buttons[] = {
2 {
3 .gpio = S3C64XX_GPN(0),
4 .code = KEY_DOWN,
5 .desc = "Down",
6 .active_low = 1,
7 },
8 {
9 .gpio = S3C64XX_GPN(1),
10 .code = KEY_ENTER,
11 .desc = "Enter",
12 .active_low = 1,
13 .wakeup = 1,
14 },
15 {
16 .gpio = S3C64XX_GPN(2),
17 .code = KEY_HOME,
18 .desc = "Home",
19 .active_low = 1,
20 },
21 {
22 .gpio = S3C64XX_GPN(3),
23 .code = KEY_POWER,
24 .desc = "Power",
25 .active_low = 1,
26 .wakeup = 1,
27 },
28 {
29 .gpio = S3C64XX_GPN(4),
30 .code = KEY_TAB,
31 .desc = "Tab",
32 .active_low = 1,
33 },
34 {
35 .gpio = S3C64XX_GPN(5),
36 .code = KEY_MENU,
37 .desc = "Menu",
38 .active_low = 1,
39 },
40 };
41
42 static struct gpio_keys_platform_data ldd6410_button_data = {
43 .buttons = ldd6410_buttons,
44 .nbuttons = ARRAY_SIZE(ldd6410_buttons),
45 };
46
47 static struct platform_device ldd6410_device_button = {
48 .name = "gpio-keys",
49 .id = -1,
50 .dev = {
51 .platform_data = &ldd6410_button_data,
52 }
53 };
|
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: Linux模拟超级终端minicom下一篇: linux下打印宽字符
关于Linux设备驱动的分层设计思想的所有评论