我遇到了 gpio 中断问题。根据 ep93xx 端口 A、B、F 的文档,可以配置为生成中断。引用:
19 条 GPIO 线中的任何一条都可以配置为生成中断
然而,arch/arm/march-ep93xx/gpio.c 只处理来自端口 A 的中断。并且不对端口 B 和 F 做出反应。
static void ep93xx_gpio_ab_irq_handler(unsigned int irq, struct irq_desc *desc)
{
unsigned char status;
int i;
printk(KERN_INFO "ep93xx_gpio_ab_irq_handler: irq=%u", irq);
我知道 printk 在 irq_handlers 中很糟糕。
我正在通过 sysfs 配置 iterrupts。
如果发布很重要,GPIO 0,8 与端口 F 连接。此外,在未配置端口 A 的情况下在端口 B 上启用中断时,我会收到以下警告:
------------[ cut here ]------------
WARNING: at drivers/gpio/gpiolib.c:103 gpio_ensure_requested+0x54/0x118()
autorequest GPIO-1
Modules linked in:
[<c002696c>] (unwind_backtrace+0x0/0xf0) from [<c00399d4>] (warn_slowpath_fmt+0x54/0x78)
[<c00399d4>] (warn_slowpath_fmt+0x54/0x78) from [<c019dd90>] (gpio_ensure_requested+0x54/0x118)
[<c019dd90>] (gpio_ensure_requested+0x54/0x118) from [<c019e05c>] (gpio_direction_input+0xb0/0x150)
[<c019e05c>] (gpio_direction_input+0xb0/0x150) from [<c002c9a8>] (ep93xx_gpio_irq_type+0x3c/0x1d8)
[<c002c9a8>] (ep93xx_gpio_irq_type+0x3c/0x1d8) from [<c0066ad8>] (__irq_set_trigger+0x38/0x9c)
[<c0066ad8>] (__irq_set_trigger+0x38/0x9c) from [<c0066e14>] (__setup_irq+0x2d8/0x354)
[<c0066e14>] (__setup_irq+0x2d8/0x354) from [<c0066f38>] (request_threaded_irq+0xa8/0x140)
[<c0066f38>] (request_threaded_irq+0xa8/0x140) from [<c019e784>] (gpio_setup_irq+0x14c/0x260)
[<c019e784>] (gpio_setup_irq+0x14c/0x260) from [<c019ec1c>] (gpio_edge_store+0x90/0xac)
[<c019ec1c>] (gpio_edge_store+0x90/0xac) from [<c01be8fc>] (dev_attr_store+0x1c/0x28)
[<c01be8fc>] (dev_attr_store+0x1c/0x28) from [<c00e8b2c>] (sysfs_write_file+0x168/0x19c)
[<c00e8b2c>] (sysfs_write_file+0x168/0x19c) from [<c009a3d4>] (vfs_write+0xa4/0x160)
[<c009a3d4>] (vfs_write+0xa4/0x160) from [<c009a6a4>] (sys_write+0x3c/0x7c)
[<c009a6a4>] (sys_write+0x3c/0x7c) from [<c0020e40>] (ret_fast_syscall+0x0/0x2c)
---[ end trace ff56c09a294dbe68 ]---
我正在使用带有 linux-2.6.34-ts7200_matt-6.tar.gz 补丁的内核版本 2.6.34.14(但是它似乎不包含 gpio.c 或 gpiolib.c 的补丁)交叉版本:
binutils-2.23.1
gcc-4.7.3
glibc-2.17
我还浏览了 gpio.c 和 gpiolib.c 的更改历史记录,但没有找到与此问题相关的任何内容。
有人可以就这个问题给我和建议吗?我想要所有端口(A,B,F)的中断,而不仅仅是 A。