DM6446 GPIO 组 0 request_irq returns -22
DM6446 GPIO Bank 0 request_irq returns -22
我正在尝试在我的驱动程序中为 DM6446 GPIO BANK 0 interrupt.But request_irq returns -22.I 知道中断号数据 sheet 中的 GPIO BANK-0 表明它是 56.Following 是我 code.I 中的 GPIO 设置,想在 GPIO-10 上获得中断。
while((REG_VAL(PTSTAT) & 0x1) != 0); // Wait for power state transtion to finish
REG_VAL(MDCTL26) = 0x00000203; //To enable GPIO module and EMURSITE BIT as stated in sprue14 for state transition
REG_VAL(PTCMD) = 0x1; // Start power state transition for ALWAYSON
while((REG_VAL(PTSTAT) & 0x1) != 0); // Wait for power state transtion to finish
REG_VAL(PINMUX0) = REG_VAL(PINMUX0) & 0x80000000; //Disbale other Functionlaity on BANK 0 pins
printk(KERN_DEBUG "I2C: PINMUX0 = %x\n",REG_VAL(PINMUX0));
REG_VAL(DIR01) = REG_VAL(DIR01) | 0xFFFFFFFF; //Set direction as input for GPIO 0 and 10
REG_VAL(BINTEN) = REG_VAL(BINTEN) | 0x00000001; //Enable Interrupt for GPIO Bank 0
REG_VAL(SET_RIS_TRIG01) = REG_VAL(SET_RIS_TRIG01) | 0x00000401; // Enable rising edge interrupt of GPIO BANK 0 PIN 0 PIN 10
REG_VAL(CLR_FAL_TRIG01) = REG_VAL(CLR_FAL_TRIG01) | 0x00000401; // Disable falling edge interrupt of Bank 0
Result = request_irq(56,Gpio_Interrupt_Handler,0,"gpio",I2C_MAJOR);
if(Result < 0)
{
printk(KERN_ALERT "UNABLE TO REQUEST GPIO IRQ %d ",Result);
}
不胜感激。
谢谢。
我也尝试过 gpio_to_irq BANK-0 的 PIN-10 但它 returns irq no 是 72 但 DM6446 的中断号只有 63 只在数据 sheet.
我明白了。如果我使用 gpio_to_irq,它将 return 一个有效的 IRQ 号,但不同于数据中指定的中断号(我猜也称为 IRQ 号)sheet 的 Processor.If 我看到 /proc/interrupts,它将有一个 IRQ returned 形式的条目 gpio_to_irq 但在 GPIO 类型下不是处理器的中断控制器,在我的情况下,ARM 应该是 AINTC.All 其他中断是 AINTC 类型。
此外,即使request_irq成功,数据sheet中指定的中断号,/proc/stat也会报告中断在两个 IRQ 号,即 AINTC 和 GPIO 类型。
我正在尝试在我的驱动程序中为 DM6446 GPIO BANK 0 interrupt.But request_irq returns -22.I 知道中断号数据 sheet 中的 GPIO BANK-0 表明它是 56.Following 是我 code.I 中的 GPIO 设置,想在 GPIO-10 上获得中断。
while((REG_VAL(PTSTAT) & 0x1) != 0); // Wait for power state transtion to finish
REG_VAL(MDCTL26) = 0x00000203; //To enable GPIO module and EMURSITE BIT as stated in sprue14 for state transition
REG_VAL(PTCMD) = 0x1; // Start power state transition for ALWAYSON
while((REG_VAL(PTSTAT) & 0x1) != 0); // Wait for power state transtion to finish
REG_VAL(PINMUX0) = REG_VAL(PINMUX0) & 0x80000000; //Disbale other Functionlaity on BANK 0 pins
printk(KERN_DEBUG "I2C: PINMUX0 = %x\n",REG_VAL(PINMUX0));
REG_VAL(DIR01) = REG_VAL(DIR01) | 0xFFFFFFFF; //Set direction as input for GPIO 0 and 10
REG_VAL(BINTEN) = REG_VAL(BINTEN) | 0x00000001; //Enable Interrupt for GPIO Bank 0
REG_VAL(SET_RIS_TRIG01) = REG_VAL(SET_RIS_TRIG01) | 0x00000401; // Enable rising edge interrupt of GPIO BANK 0 PIN 0 PIN 10
REG_VAL(CLR_FAL_TRIG01) = REG_VAL(CLR_FAL_TRIG01) | 0x00000401; // Disable falling edge interrupt of Bank 0
Result = request_irq(56,Gpio_Interrupt_Handler,0,"gpio",I2C_MAJOR);
if(Result < 0)
{
printk(KERN_ALERT "UNABLE TO REQUEST GPIO IRQ %d ",Result);
}
不胜感激。 谢谢。
我也尝试过 gpio_to_irq BANK-0 的 PIN-10 但它 returns irq no 是 72 但 DM6446 的中断号只有 63 只在数据 sheet.
我明白了。如果我使用 gpio_to_irq,它将 return 一个有效的 IRQ 号,但不同于数据中指定的中断号(我猜也称为 IRQ 号)sheet 的 Processor.If 我看到 /proc/interrupts,它将有一个 IRQ returned 形式的条目 gpio_to_irq 但在 GPIO 类型下不是处理器的中断控制器,在我的情况下,ARM 应该是 AINTC.All 其他中断是 AINTC 类型。 此外,即使request_irq成功,数据sheet中指定的中断号,/proc/stat也会报告中断在两个 IRQ 号,即 AINTC 和 GPIO 类型。