Linux 如何将arm spi中断设置为IRQ_类型_边缘_

Linux 如何将arm spi中断设置为IRQ_类型_边缘_,linux,linux-kernel,arm,embedded-linux,interrupt,Linux,Linux Kernel,Arm,Embedded Linux,Interrupt,作为本主题的新手,我尝试将光纤端口的dts更改为IRQ_类型_EDGE_,以捕获端口堵塞(EDGE_上升)或移除(EDGE_下降)时的事件。但是,内核在将irq mode设置为irq_TYPE_EDGE_两者时都会出现问题,即(irq_TYPE_EDGE_上升| irq_TYPE_EDGE_下降): 在简要查看irq gic.c文件后,它说: /* SPIs have restrictions on the supported types */ if (gicirq >= 32 &

作为本主题的新手,我尝试将光纤端口的dts更改为IRQ_类型_EDGE_,以捕获端口堵塞(EDGE_上升)或移除(EDGE_下降)时的事件。但是,内核在将irq mode设置为irq_TYPE_EDGE_两者时都会出现问题,即(irq_TYPE_EDGE_上升| irq_TYPE_EDGE_下降):

在简要查看irq gic.c文件后,它说:

  /* SPIs have restrictions on the supported types */
  if (gicirq >= 32 && type != IRQ_TYPE_LEVEL_HIGH &&
          type != IRQ_TYPE_EDGE_RISING)
    return -EINVAL;

是否要将中断同时设置为IRQ_类型_边缘_?我们的arm是armv7ahf neon 32位。

您可以使用state来解决此问题-在添加或删除插头id后,交换您要查找的事件。不是很好,但应该是功能性的,特别是如果您有另一个端口,它会告诉您是否连接了某些东西。@MichaelOrganger,您的意思是我使用状态变量来缓存和比较事件是否改变了状态?问题在于,它只允许高电平或边缘上升,这可以用于port plug事件,但不适用于port remove事件。我说的对吗?一旦插上电源,就把中断换成边缘下降。如果出现任何错误,它可能会失去同步(例如,通电后已插入),因此会询问是否有第二种方法可以查看是否插入了某些内容。@MichaelDorgan,抱歉,但如何在运行时将中断替换为边缘下降?你能详细说明一下吗?(dts的触发模式是可变的吗?是否允许边缘下降?)我不知道-我只是从高水平的工程角度来看这一点。我假设您可以在运行时修改系统正在查看的中断向量或掩码。一些简单的东西,如
*myIRQPort^=IRQ\u TYPE\u EDGE\u两者(假设端口已设置为上升或下降较早…)如果这不可能,那么我将等待更深入的专家:)您可能可以使用状态解决它-在添加或删除插头id后,交换您正在查找的事件。不是很好,但应该是功能性的,特别是如果您有另一个端口,它会告诉您是否连接了某些东西。@MichaelOrganger,您的意思是我使用状态变量来缓存和比较事件是否改变了状态?问题在于,它只允许高电平或边缘上升,这可以用于port plug事件,但不适用于port remove事件。我说的对吗?一旦插上电源,就把中断换成边缘下降。如果出现任何错误,它可能会失去同步(例如,通电后已插入),因此会询问是否有第二种方法可以查看是否插入了某些内容。@MichaelDorgan,抱歉,但如何在运行时将中断替换为边缘下降?你能详细说明一下吗?(dts的触发模式是可变的吗?是否允许边缘下降?)我不知道-我只是从高水平的工程角度来看这一点。我假设您可以在运行时修改系统正在查看的中断向量或掩码。一些简单的东西,如
*myIRQPort^=IRQ\u TYPE\u EDGE\u两者(假设端口已被设置为提前上升或下降…)如果这不可能,那么我将等待更深入的专家:)
  /* SPIs have restrictions on the supported types */
  if (gicirq >= 32 && type != IRQ_TYPE_LEVEL_HIGH &&
          type != IRQ_TYPE_EDGE_RISING)
    return -EINVAL;