I am writing GPIO Device Driver for linux 3.14 on Beagleboard XM (RevB). I have done with simple ON/OFF LED blinking. But stuck at interrupt handler implementation. BB XM has GPIO_7 pin connected to user button. Following is code sample I have implemented. But it is not working. I am able to insert module using insmod. Interrupt is also registered in /proc/interrupts. But handler is not getting invoked.
Am I on right track?
`
#include <linux/gpio.h>
#include <linux/interrupt.h>
#define GPIO 7
int var;
static irqreturn_t irq_handler(int irq, void *dev_id)
{
var++;
printk(“In the Interrupt handler, Count: %d\n”, var);
return IRQ_HANDLED;
}
static int __init hello_init(void)
{
int errno, irq_line;
if((errno = gpio_direction_input(GPIO)) !=0)
{
printk(KERN_INFO “Can’t set GPIO direction, error %i\n”, errno);
gpio_free(GPIO);
return -EINVAL;
}
irq_line = gpio_to_irq(GPIO);
printk (“IRQ Line is %d \n”,irq_line);
errno = request_irq( irq_line, (irq_handler_t)irq_handler, IRQF_TRIGGER_FALLING, “Interrupt123”, NULL );
if(errno<0)
{
printk(KERN_INFO “Problem requesting IRQ, error %i\n”, errno);
}
return 0;
}
static void __exit hello_exit(void)
{
int irq_line;
printk (“Unloading my module.\n”);
irq_line = gpio_to_irq(GPIO);
free_irq(irq_line,NULL);
printk(“Hello Example Exit\n”);
return;
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR(“TheInventor”);
MODULE_DESCRIPTION(“Interrupt Module”);
MODULE_LICENSE(“GPL”);
`