您好,
这是客户板,TP IRQ (GPIO6_11) 触发级别设置为"IRQ_TYPE_LEVEL_LOW", 在 Android 启动 完成后无法正常触发。
但 IRQ 可在以下 操作中触发 :
1.内核启动完成后,在 zygote 服务启动之前 ,此时,触摸 TP 面板时可以触发 IRQ。
2. zygote 服务启动后,始终将数据发送到控制台(UART 用于调试)。 触摸 TP 面板时将触发 IRQ。
3.在 zygote 服务启动后,轻触 TP 面板,确认 GPIO6_11已从示波器中下降。 此时,IRQ 未被触发。
但在 ADB shell 中键入"cat /d/gpio 后,IRQ 被触发。 并且 GPIO6_11 从命令"cat /d/gpio 的结果中变为低电平。
以下是有关 TP IRQ (GPIO6_11)的配置:
DTS:
978 Atmel_mxt_ts@4a{
979 兼容=" Atmel、maxtouch ";
980 reg =<0x4a>;
981 interrupt-parent =<&GPIO6>;
982 个中断=<11 IRQ_TYPE_LEVEL_LOW_>;
983.
触摸屏使用的984 /*引脚*
985 pinctrl-names ="PMX_ts_active"、"PMX_ts_suspend"、"PMX_ts_release";
986 pinctrl-0 =<&ts_pines>;
987 pinctrl-1 =<&ts_suspend>;
988 pinctrl-2 =<&ts_release>;
989 Atmel、RESET-GPIO =<&GPIO6 10 0>;
990 //Atmel、POWER-GPIO =<&GPIO5 17 0>;
991 Atmel、IRQ-GPIO =<&GPIO6 11 IRQ_TYPE_LEVEL_LOL>;
99
994 Atmel、display-coords =<0 0 1920 1080/>;
995 Atmel、panel-cods =<0 0 1920 1080/>;
996/*Atmel ,i2c-pull-up;*/
997 Atmel,无强制更新;
998 };
请求 IRQ 的驱动程序:
request_threaded_IRQ (data->client->IRQ、NULL、
2118 mxt_interrupt、
2119 IRQ_TYPE_LEVEL_LOW | IRQF_OneShot、
2120 data->client->name、data);
下面是我们对此问题的分析:
1.检查交叉开关配置 ,GPIO6_IRQ_1已经映射到 MPU。 有关详细信息、请参阅附件 e2e.ti.com/.../crossbar.txt。
| 137 | 0x4A002B4A | 29 | GPIO6_IRQ_1 | GPIO6 | GPIO6 中断 1
2.检查成功中由 J6、GPIO6_IRQ 寄存器注册的中断。
root@jacinto6evm:/ # cat /proc/interrupts
CAT /proc/interrupts
CPU0 CPU1
…………
202: 348 0 CBAR 29 电平 4805d000.GPIO
214: 348 0 4805d000.GPIO 11 电平 maxtouch
…………
3.检查 用作 GPIO6_11的 PAD (AB4)的模式,它已设置为输入模式 和下拉。
127|root@jacinto6evm:/ # omapconf 读取 0x4a003778
omapconf 读取 0x4a003778
0004000E
4. Kerenel 日志如下所示,Pls 参考附件.e2e.ti.com/.../kernel_5F00_log_5F00_for_5F00_GPIO6_5F00_11_5F00_IRQ_5F00_exception.txt
[20.749966] IPv6:ADDRCONF (NETDEV_UP):ETH1:链路未就绪
[21.808446] OMAP-IMU 55082000.MMU:55082000.MMU:2.1版
[23.590722] [baker][HDMI] OMAP-connector_get_modes
[23.595678] [baker] hdmibe_check_timings 170 --
[25.393383] init:服务'bootanim'(pid 229)以状态0退出
[27.358660] [baker] mxt_interrupt --
[27.364895] [baker] mxt_interrupt --end
[27.479665] [baker] mxt_interrupt --
[27.485915] [baker] mxt_interrupt --end
[31.233672] [baker] mxt_interrupt --
[31.239893] [baker] mxt_interrupt --end
[31.362664] [baker] mxt_interrupt --
[31.368851] [baker] mxt_interrupt --end
[36.01384] [baker] mxt_interrupt --
[36.021809] [baker] mxt_interrupt --end
[84.144215] [baker] mxt_interrupt --
[84.150714] [baker] mxt_interrupt --end
[93.590972] [baker] mxt_interrupt --
[93.598936] [baker] mxt_interrupt --end
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
Shell@jacinto6evm:/$
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Android 引导完成后,IRQ 不会被触发。
此时,我触按面板,GPIO6_11会下降,但 IRQ 不会触发。
我使用此控制台键入了键盘,它按如下方式触发。
Shell@jacinto6evm:/$[ 106.533830][baker] mxt_interrupt --
J[106.544266] [baker] mxt_interrupt --end
我们曾尝试设置 PAD AB4的“Enable Wakeup”(启用唤醒)位(1<<24),但无法设置。 寄存器的值始终为0x0004000E,而不是0x0104000E。
我们尝试使用其他 GPIO IRQ ,例如 GPIO8_0/GPIO2_1,结果相同。
我们猜 CPU 可能会在触摸 TP 面板时休眠。 请给我们一些意见来解决这个问题。
谢谢。
// Baker