gpio_to_irq 返回-6的错误 这个函数为什么能出错,,,

枫叶会再红吗 2017-07-13 07:27:42
平台是amlogic,amlogic平台将gpio口转换中断口有点不同,有平台专属的函数,但是我用这个gpio_to_irq为什么能出错了,gpio_request都报错,说明管脚没有被占用。
开发板上预留的几个gpio口全试过了都是返回-6的错误。内核报-6 意思 /* No such device or address */ 。求教大家,,,
...全文
817 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklinux 2017-07-20
  • 打赏
  • 举报
回复
有够坑的了…………不过按键有些人喜欢用定时轮询,避免抖动问题
枫叶会再红吗 2017-07-20
  • 打赏
  • 举报
回复
引用 6 楼 jklinux 的回复:
[quote=引用 5 楼 zxc18076752045 的回复:] [quote=引用 4 楼 jklinux 的回复:] [quote=引用 3 楼 zxc18076752045 的回复:] [quote=引用 2 楼 jklinux 的回复:] 我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。 gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。 不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。[/quote] 在设备树里看是那么平台设备是怎样传中断号的[/quote] 哎 看不懂 找到份amlogic平台中断相关文档 但是照那样做也没什么用 感觉就是那中断号一直不对。下面是我找到的资料,, configure gpio irq 默认用FILTER_NUM7,设置GPIO触发模式为下降沿。 通过amlogic自定义的函数接口gpio_for_irq()注册并设置该GPIO IRQ。 实际内核标准的接口是gpio_to_irq()。 unsigned int irqflag = AML_GPIO_IRQ(pdata->gpioirq, FILTER_NUM7, GPIO_IRQ_FALLING) gpio_for_irq(pdata->gpio, irqflag); request irq 最后就是正常的注册中断处理函数。 如果没有配置interrupts属性,需要在驱动里手动加上一个中断号的偏移值。目前这个偏移值是96。 比如配置的gpioirq=2,则传给request_irq的中断号参数是2+96=98. #define INT_GPIO_0 96 ret = request_irq(pdata->gpioirq + INT_GPIO_0, yourmodule_isr, IRQF_DISABLED, "gpioirqdemo", pdata)) 如果配置了interrupts属性,并且该属性配置正确,也即interrtups属性与gpio irq的值是一一对应的,那么就可以直接在驱动里使用interrupts参数值: ret = request_irq(pdata->irq, gpioriq_demo_isr, IRQF_DISABLED, "gpioriqdemo", pdata) [/quote] 只能查看平台设备的"pdata->irq "是怎样提供了[/quote] 追开发板上power按键,去内核找他的代码,发现根本就没用中断,用的是轮询,他用一个宏隔开中断和轮询,我打开这宏,使用中断方式,发现power键失灵了,没用了,真是坑死人,难怪我之前怎么弄中断就是没反应,卖着开发板的自己都不用中断。 害的我tp还要去改用轮询方式
jklinux 2017-07-19
  • 打赏
  • 举报
回复
引用 5 楼 zxc18076752045 的回复:
[quote=引用 4 楼 jklinux 的回复:] [quote=引用 3 楼 zxc18076752045 的回复:] [quote=引用 2 楼 jklinux 的回复:] 我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。 gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。 不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。[/quote] 在设备树里看是那么平台设备是怎样传中断号的[/quote] 哎 看不懂 找到份amlogic平台中断相关文档 但是照那样做也没什么用 感觉就是那中断号一直不对。下面是我找到的资料,, configure gpio irq 默认用FILTER_NUM7,设置GPIO触发模式为下降沿。 通过amlogic自定义的函数接口gpio_for_irq()注册并设置该GPIO IRQ。 实际内核标准的接口是gpio_to_irq()。 unsigned int irqflag = AML_GPIO_IRQ(pdata->gpioirq, FILTER_NUM7, GPIO_IRQ_FALLING) gpio_for_irq(pdata->gpio, irqflag); request irq 最后就是正常的注册中断处理函数。 如果没有配置interrupts属性,需要在驱动里手动加上一个中断号的偏移值。目前这个偏移值是96。 比如配置的gpioirq=2,则传给request_irq的中断号参数是2+96=98. #define INT_GPIO_0 96 ret = request_irq(pdata->gpioirq + INT_GPIO_0, yourmodule_isr, IRQF_DISABLED, "gpioirqdemo", pdata)) 如果配置了interrupts属性,并且该属性配置正确,也即interrtups属性与gpio irq的值是一一对应的,那么就可以直接在驱动里使用interrupts参数值: ret = request_irq(pdata->irq, gpioriq_demo_isr, IRQF_DISABLED, "gpioriqdemo", pdata) [/quote] 只能查看平台设备的"pdata->irq "是怎样提供了
枫叶会再红吗 2017-07-18
  • 打赏
  • 举报
回复
引用 4 楼 jklinux 的回复:
[quote=引用 3 楼 zxc18076752045 的回复:] [quote=引用 2 楼 jklinux 的回复:] 我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。 gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。 不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。[/quote] 在设备树里看是那么平台设备是怎样传中断号的[/quote] 哎 看不懂 找到份amlogic平台中断相关文档 但是照那样做也没什么用 感觉就是那中断号一直不对。下面是我找到的资料,, configure gpio irq 默认用FILTER_NUM7,设置GPIO触发模式为下降沿。 通过amlogic自定义的函数接口gpio_for_irq()注册并设置该GPIO IRQ。 实际内核标准的接口是gpio_to_irq()。 unsigned int irqflag = AML_GPIO_IRQ(pdata->gpioirq, FILTER_NUM7, GPIO_IRQ_FALLING) gpio_for_irq(pdata->gpio, irqflag); request irq 最后就是正常的注册中断处理函数。 如果没有配置interrupts属性,需要在驱动里手动加上一个中断号的偏移值。目前这个偏移值是96。 比如配置的gpioirq=2,则传给request_irq的中断号参数是2+96=98. #define INT_GPIO_0 96 ret = request_irq(pdata->gpioirq + INT_GPIO_0, yourmodule_isr, IRQF_DISABLED, "gpioirqdemo", pdata)) 如果配置了interrupts属性,并且该属性配置正确,也即interrtups属性与gpio irq的值是一一对应的,那么就可以直接在驱动里使用interrupts参数值: ret = request_irq(pdata->irq, gpioriq_demo_isr, IRQF_DISABLED, "gpioriqdemo", pdata)
jklinux 2017-07-14
  • 打赏
  • 举报
回复
引用 3 楼 zxc18076752045 的回复:
[quote=引用 2 楼 jklinux 的回复:] 我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。 gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。 不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。[/quote] 在设备树里看是那么平台设备是怎样传中断号的
枫叶会再红吗 2017-07-14
  • 打赏
  • 举报
回复
引用 2 楼 jklinux 的回复:
我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。 gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。 不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
arch/arm/下没有对应平台的mach-xxx文件夹,这个平台内核走dts,我在他的dts文件里找到他用到的头文件,就在include/dt-bindings/下找到对gpio管脚号的宏定义,找不到中断相关的。
jklinux 2017-07-13
  • 打赏
  • 举报
回复
我估计有可能是芯片厂商并没有实现好这个gpio_to_irq的接口功能。 gpio_to_irq是linux内核里提供给驱动人员调用使用,但具体的功能还是由芯片厂商具体来实现的。 不能通过gpio查找相应的中断号的话,可以去arch/arm/mach-xxx/include/mach/irqs.h头文件里查看是否有提供中断号的宏
枫叶会再红吗 2017-07-13
  • 打赏
  • 举报
回复
gpio_request都没报错, 上面打错了,,,,,

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧