工具与软件:
您好!
我们将 TSC2004用于4线电阻式触摸屏 以及 AUX 上的光传感器。 我们观察到、在启动设备后、触摸屏随机无响应。 可以从主机访问 TSC2004、但使用意外标志38:00c9进行应答。 重启电源不能解决此问题。 几次重新启动(5-10次)后、触摸屏再次工作。 首先、我们认为 AUX 上的光传感器可能是问题所在。 然后、我们了解一下特殊的测试模式。 您能告诉我们更多有关这种特殊测试模式的信息吗?或者您是否知道我们在哪种条件下运行以及如何解决此问题?
提前感谢。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
您好!
我们将 TSC2004用于4线电阻式触摸屏 以及 AUX 上的光传感器。 我们观察到、在启动设备后、触摸屏随机无响应。 可以从主机访问 TSC2004、但使用意外标志38:00c9进行应答。 重启电源不能解决此问题。 几次重新启动(5-10次)后、触摸屏再次工作。 首先、我们认为 AUX 上的光传感器可能是问题所在。 然后、我们了解一下特殊的测试模式。 您能告诉我们更多有关这种特殊测试模式的信息吗?或者您是否知道我们在哪种条件下运行以及如何解决此问题?
提前感谢。
问题很难重现、并且很少发生、但通常足够我们需要找到解决方案。
典型的寄存器转储如果触摸正常工作(Linux 驱动程序:`cat /sys/kernel/debug/regmap/1-0048/registers`)、38为状态寄存器:
00: 01dd 08: 01e2 10: 016b 18: 0c52 20: 01f9 28: 0000 30: 0000 38: 0084 40: 0fff 48: 0000 50: 0fff 58: 0000 60: 7494 68: 0004 70: 381c 78: 0000
STATUS 寄存器中的确切值(所有数据值变为0时、与提到的状态值0x00c9一起出现2次)。
如果触摸不起作用、则转储寄存器。 尝试读取 AUX 或触摸显示屏时没有任何更改。
00: 0000 08: 0000 10: 0000 18: 0000 20: 0000 28: 0000 30: 0000 38: 00c9 40: 0fff 48: 0000 50: 0fff 58: 0000 60: 7494 68: 0004 70: 381c 78: 0001
应用软件复位修复(启动时使用添加的软件复位命令重新加载新驱动器)。
注意:
-当前使用的驱动程序版本不会发出硬件重置或软件重置。
-上游驱动程序仅解决硬件重置问题。
-我们的硬件重置和电源是全球接线/不能通过 GPIO 控制。
-在 SNSVDD 达到规格后、复位时的电压足够晚。
以下是实现的软件复位的修复方法:
drivers/input/touchels/tsc200x-core.c | 16 ++++++++++++++++
1个文件已更改、16个插入(+)
diff -- git a/drivers/input/touchel/tsc200x-core.c b/drivers/input/tsc200x-core.c
索引837f0eae5b961..ba612084931ad 100644
--驱动程序/输入/触摸屏/tsc200x-core.c.
++ b/drivers/input/touchel/tsc200x-core.c
@@-343、6 +343、22 @@μ s static void tsc200x_reset (struct tsc200x ts)
gpiod_set_value_cansleep (ts、1);
usleep_range (100,500);/*只需10us */
gpiod_set_value_cansleep (ts、0);
+} else {
+ int 错误;
+ unsigned int status;
+
+/*如果出现错误,只需记录它*/
+ ERROR = ts -> tsc200x_cmd (TSC200x_>dev、ts 200X_CMD_RESET);
+ if (错误){
+ Dev_err (ts ->开发、"SW reset failed\n");
+}
+ error = regmap_read (ts TSC200X_REG_STATUS、&status);
+ if (错误){
+ dev_err (ts ->开发、"SW 复位失败后的读取状态\n");
+} else if (状态!= 0x4){
+ dev_err (ts ->开发、"SW 复位后未接收的状态:0x%04x\n"、STATUS);
+}
}
}
——
您能否回顾一下该代码? 我们不确定它是否得到了正确实施。 谢谢