static irqreturn_t int_handler(int irq, void *dev_id)
{
printk(KERN_INFO "------ gpio_to_irq(PG11) triggered! -----n");
printk(KERN_INFO "Disable irq ...n");
disable_irq_nosync(int_num); //--!!!Must NOT use disable_irq() anyway,it's cause deadloop and will crash the kernel
//----- irq handler low part -------
schedule_work(&int_wq);
return IRQ_HANDLED;
}
static int register_gpio_irq(void)
{
int int_result=0;
if(ret!= 0)
{
printk(KERN_EMERG "----- register_gpio_irq() failed! ----n");
return -1;
}
else
//---init wor-queue for irq-handler low part
INIT_WORK(&int_wq,enable_int_wq);
return 0;
}
static void __exit gpio_int_exit(void)
{
if(int_num > 0)
free_irq(int_num,(void *)&gpio_num); //---!!! void *dev_id MUST be presented,even no IRQF_SHARED flag in request_irq()
printk(KERN_EMERG "------ gpio interrupt test exit -----n");
static irqreturn_t int_handler(int irq, void *dev_id)
{
printk(KERN_INFO "------ gpio_to_irq(PG11) triggered! -----n");
printk(KERN_INFO "Disable irq ...n");
disable_irq_nosync(int_num); //--!!!Must NOT use disable_irq() anyway,it's cause deadloop and will crash the kernel
//----- irq handler low part -------
schedule_work(&int_wq);
return IRQ_HANDLED;
}
static int register_gpio_irq(void)
{
int int_result=0;
if(ret!= 0)
{
printk(KERN_EMERG "----- register_gpio_irq() failed! ----n");
return -1;
}
else
//---init wor-queue for irq-handler low part
INIT_WORK(&int_wq,enable_int_wq);
return 0;
}
static void __exit gpio_int_exit(void)
{
if(int_num > 0)
free_irq(int_num,(void *)&gpio_num); //---!!! void *dev_id MUST be presented,even no IRQF_SHARED flag in request_irq()
printk(KERN_EMERG "------ gpio interrupt test exit -----n");