今天在rockchip的rk3066平台上的声卡驱动中想加一个中断用来进行耳机插拔检测,在使用request_irq()时,在flags中设置为上下边沿触发,结果竟然返回失败,大体检查了一下代码,发现问题出在平台相关代码的GPIO IRQ中,主要是代码不支持同时设置上下边沿触发,只能设置为上边沿或者下边沿触发模式。由于我们freescale iMX6平台没有这个问题,而且也能正确的触发,所以我回来后想看看关于gpio irq这块的内容;
几个重要的结构:
struct irq_chip hardware interrupt chip descriptor;可以理解为管理某类中断集合,比如,我们所有的gpio irq;
它的功能函数比较全面比如 ack/set type/mask等,也就是说,当你需要对某个中断进行操作时,要用到这里的函数;
struct irq_desc interrupt descriptor;中断描述符,用来全面描述一个具体的中断;
struct gpio_chip abstract a GPIO controller;顾名思义,gpio控制器呗,类似struct irq_chip;但是抽象出来的,一般用来表示一个gpio集合;比如GPIOA;
它的功能也是比较全面的,比如设置一个gpio的方向,请求gpio,get/set gpio,gpio_to_irq等;除了方法,还有关于这个GPIO集合的信息,比如有多少各GPIO,这个gpio集合的起始编号等;
看到这,也许能猜到,应该还有一个描述某个gpio的结构,对,下个就是:
struct gpio_desc 用来描述一个gpio,结构很简单,感觉也没啥用,最重要的就是chip指针指向的struct g