内核input_dev.c驱动程序
#include <linux/init.h>
#include <linux/module.h>
#include <linux/input.h>
#include <linux/interrupt.h>
#include <mach/gpio.h>
#include <asm/gpio.h>
#include <asm/io.h>
#define GPBASE_ADDR 0X11000000 //K1按键对应的GP寄存器基地址
#define GPX3CON GPBASE_ADDR + 0X0C60 //K1按键对应的控制寄存器物理地址
void *gpx3con = NULL; //存放K1按键对应的虚拟地址
int irqnum; //K1按键对应的中断号码
struct input_dev *wx_inputdev; //输入子系统对应的结构体(描述输入设备信息)
/*中断处理函数
irqnum:中断号码
buf:注册中断时最后一个参数
*/
irqreturn_t keyfun_handler(int irqnum, void *buf)
{
printk("-----------%s-----------\n", __FUNCTION__);
//gpx3con + 4为K1按键对应的数据寄存器(判断相应的位是0还是1得到按键抬起还是落下)
if((readl(gpx3con + 4) & (1<<2)) != 0){
input_event(wx_inputdev, EV_KEY, KEY_POWER, 0);//由输入子系统向用户层传输标志或数据
input_sync(wx_inputdev);
}else if(0 == (readl(gpx3con + 4) & (1<<2))){
input_event(wx_i