Kernel driver registration GPIO no response

I am currently using the UP2-Celeron processor
The kernel successfully registers the GPIO interrupt, but when the GPIO external signal changes, the interrupt function is not triggered and the number of corresponding interrupts counted by /proc/interrupts is always 0
My test code:
define IMU_TDK_42688_IRQ_NUM 430
static irqreturn_t irq_handler(int irq, void *dev_id)
{
printk("Interrupt in ");
return IRQ_HANDLED;
}
int init_irq_gpio_num(int gpio_num)
{
int irq_num = 0 ;
int ret = 0;
if(gpio_num <= 0)
{
pr_err("%s:Get gpio num error...",FUNCTION);
return -1;
}
if(gpio_request_one(gpio_num, GPIOF_IN, "MCU_sel") < 0) {
printk(KERN_ALERT "GPIO %d cannot be used\n", IMU_TDK_42688_IRQ_NUM);
return -EBUSY;
}
irq_num = gpio_to_irq(gpio_num);//GPIO to IRQ NUM
if(irq_num < 0)
{
pr_err("%s:gpio_to_irq error",FUNCTION);
return -5;
}
// ret = request_irq(irq_num,irq_handler , IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING, "my_test_interrupt", NULL); ret = request_irq(irq_num,irq_handler , IRQF_TRIGGER_HIGH, "my_test_interrupt", NULL); //IRQF_TRIGGER_HIGH if(ret != 0) { printk(KERN_ERR "can not get irq\n"); return ret; } printk("%s:Get imu irq succsess(irq_num=%d,gpio_num=%d)...",__FUNCTION__,irq_num,gpio_num); ret = enable_irq_wake(irq_num); printk("the enable_irq_wake result is: %d\n", ret); return irq_num;
}
static int __init test_interrupt_init(void)
{
printk("Start test_interrupt_init");
irq_num_test = init_irq_gpio_num(IMU_TDK_42688_IRQ_NUM);
if(irq_num_test < 0){
printk("test_interrupt_init failed!!");
return irq_num_test;
}
else{
printk("requist irq num =%d\r\n",irq_num_test);
return 0;
}
}
static void __exit test_interrupt_exit(void)
{
if(irq_num_test >0) free_irq(irq_num_test,irq_handler); else printk("Skip free_irq irq_num=%d",irq_num_test); gpio_free(IMU_TDK_42688_IRQ_NUM); printk("Exit test_interrupt_exit");
}
Answers
-
My email address is [email protected], I hope to get a reply
Tagged
Categories
- All Categories
- 105 Announcements & News
- 57 Product News - New Product/Product Change Notice/ End-of-life
- 186 Welcome Developers!
- 55 Unboxing & Project Sharing
- 50 Tech Updates
- 693 UP Products
- 11 UP 7000
- 1 UP Squared i12
- 10 UP Xtreme i12
- 11 UP Squared Pro 7000
- 1 UP Element i12 Edge
- 19 UP Squared V2
- 59 UP 4000
- 24 UP Xtreme i11
- 35 UP Squared 6000
- 60 UP Squared Pro
- 143 UP Xtreme
- 837 UP Squared
- 1.4K UP Board
- 89 UP Core Plus
- 222 UP Core
- 3 UP Xtreme Lite
- 44 UP AI Edge
- 216 Starter Kits & Peripheral