/* 中断IO描述结构体 */
struct irq_keydesc {
int gpio; /* gpio */
int irqnum; /* 中断号 */
unsigned char value; /* 按键对应的键值 */
char name[10]; /* 名字 */
irqreturn_t (*handler)(int, void *); /* 中断服务函数 */
};
struct irq_keydesc irqkeydesc;
#define KEY0VALUE 0X01
static irqreturn_t key0_handler(int irq, void *dev_id)
{
struct imx6uirq_dev * dev = (struct imx6uirq_dev *)dev_id;
return IRQ_RETVAL(IRQ_HANDLED);
}
void init()
{
irqkeydesc.gpio = of_get_named_gpio(device_node, "key-gpio", 0); // 如果是gpio0_io18 gpio的结果就是18
irqkeydesc.name = "KEY0";
gpio_request(imx6uirq.gpio, irqkeydesc.name);
gpio_direction_input(irqkeydesc.gpio);
irqkeydesc.irqnum = irq_of_parse_and_map(device_node, 0); // 获取中断号
irqkeydesc.handler = key0_handler;
irqkeydesc.value = KEY0VALUE;
request_irq(irqkeydesc.irqnum, irqkeydesc.handler, IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING, irqkeydesc.name, &imx6uirq);
}