TP驱动调试过程的几个问题

  1. TP点击不能正常唤醒系统。

在TP休眠时,irq使用enable_irq_wake()方法,保证IRQ在休眠状态可以唤醒系统,在中断唤醒系统后在进行I2C读写操作。

  1. TP电量是不能正常上报POWER KEY。

在写上报点时,需要设置上报事件包括key

__set_bit(BTN_TOUCH, input_dev->keybit);

然后key里面包括power key。

input_set_capability(input_dev, EV_KEY, KEY_POWER);

这样在上报点时才能正常上报。

3.连续两次点击随机出现亮屏后息屏的情况。

以为当前没有组双击,只做了单击操作,两次点击是如果太快,可能才是两次power key,导致亮屏后立刻息屏。可以在第一次收到power key后,使用time_after做一个500ms不在上报power key的处理。

if (buf[0] == 1 && data->is_suspend == 1 && time_after(jiffies, data->current_time + msecs_to_jiffies(500)))
        {
            input_report_key(data->input_dev, KEY_POWER, 1);
        	input_sync(data->input_dev);
        	mdelay(1);
        	input_report_key(data->input_dev, KEY_POWER, 0);
        	input_sync(data->input_dev);
            data->current_time = jiffies;
            printk(KERN_INFO "[touch]%s:gesture wakeup\n", __func__);
        }
  1. I2C休眠过程中,中断无法打开休眠过程,导致I2C读写失败,此处电亮失败。

因为TP设备通过监听屏的亮灭来控制休眠与唤醒,没有键入到PM Core中,导致当TP中断到来,系统I2C等设备将跟随PM Core逐个唤醒设备。但是TP中断要立刻处理,I2C的没有唤醒导致TP中断处理异常。

在接收到中断,为读I2C之前,先持500s超时休眠锁,把整个系统唤醒。可以避免给问题。

if (!wake_lock_active(&data->wakelock)) {
        printk(KERN_INFO  "[touch] wake_lock_timeout");
        wake_lock_timeout(&data->wakelock,msecs_to_jiffies(500));
    }

5.画C操作偶然出现画一次C不亮。

发现在画C时,其实是识别到的,但是画C的按键还没有被应用处理到就系统休眠了。这个时候,也需要在上报C操作前,进行系统持锁,防止休眠。和4一样的操作。

  1. 屏选择问题

触摸屏使用哪一块屏在bootloader就做了判定,内核可以从cmdline中知道使用哪一块触摸屏。

static int __init poffmode_setup(char *str)
{
	if(!strncmp(str, "sec_", 4))
		g_xtc_tp_type = 5;
	else if(!strncmp(str, "cyttsp5_", 8))
		g_xtc_tp_type = 6;
	else if(!strncmp(str, "raydium_t", 9))
		g_xtc_tp_type = 7;
	else
		g_xtc_tp_type = -1;
	return 1;
}
("androidboot.xtc.touchid=", poffmode_setup);

上面函数来获得使用的屏,并把使用的屏写入到全局变量g_xtc_tp_type 。在赛普拉斯probe是g_xtc_tp_type = 2;在纪斯屏probe是g_xtc_tp_type = 1,在raydium屏proe时,设置g_xtc_tp_type = 3.在每个屏probe时先看看这个g_xtc_tp_type是不是自己,是自己就probe,不是自己直接退出probe。以此加快触摸屏加载速度。

其他问题基本都是和固件有关了,需要配合供应商,提供数据修改固件来调试。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是Android TP驱动学习文档: ## 1. 驱动代码原理 Android TP驱动主要涉及以下几个方面: ### 1.1 输入子系统 输入子系统是Android系统中用于处理和管理输入设备的一个子系统,包括设备驱动程序、输入事件的生成和处理、输入设备的注册和注销等功能。输入设备的驱动程序需要实现input_dev结构体中的各个方法,如probe、remove、open、close、ioctl、read、poll、event等。 ### 1.2 触摸屏控制器 触摸屏控制器是一个独立的芯片,通过I2C、SPI或USB等接口与主处理器相连,用于接收触摸屏的输入信号并将其转换成数字信号。触摸屏控制器的驱动程序需要实现input_dev结构体中的event方法,将触摸屏的输入事件发送到输入子系统中。 ### 1.3 触摸屏传感器 触摸屏传感器是一个透明的薄膜,在触摸屏上覆盖一层,用于检测用户的触摸输入,并将其转换成电信号。触摸屏传感器包括电阻式触摸屏、电容式触摸屏、表面声波式触摸屏等多种类型,不同类型的传感器需要不同的驱动程序来处理。 ### 1.4 Linux内核 Android系统基于Linux内核开发,因此TP驱动程序需要在Linux内核中实现。在内核中,可以使用工具链进行编译和调试,通过Kconfig和Makefile文件进行配置和构建。 ## 2. 驱动框图 Android TP驱动的框图如下所示: ``` +---------------------+ +---------------------+ | | | | | Touch Panel Sensor +---+ Touch Panel Control | | | | | +---------------------+ +---------------------+ | | | | v v +---------------------+ +---------------------+ | | | | | Input +---+ Kernel | | Subsystem | | | | | | | +---------------------+ +---------------------+ ``` 其中,输入子系统负责接收来自触摸屏控制器和传感器的输入事件,将其转换成标准的输入事件格式,并发送到内核中。内核负责处理输入事件,将其转发给应用程序或系统服务进行处理。 ## 3. 调试方法 Android TP驱动调试主要包括以下几个方面: ### 3.1 调试工具 在驱动开发过程中,可以使用一些调试工具来帮助定位问题,如printk、dmesg、strace、gdb等。printk可以输出调试信息到内核日志中,dmesg可以查看内核日志中的输出信息,strace可以跟踪应用程序的系统调用,gdb可以对内核进行调试。 ### 3.2 调试方法 在调试过程中,可以使用一些方法来定位问题,如插入断点、输出调试信息、分析内存泄漏、跟踪函数调用栈等。其中,插入断点可以暂停程序执行,输出调试信息可以查看程序的执行过程,分析内存泄漏可以检测程序中的内存问题,跟踪函数调用栈可以查看程序的执行路径。 ## 4. 常见问题解决思路 在TP驱动开发过程中,可能会遇到以下一些常见问题: ### 4.1 触摸屏输入不灵敏 触摸屏输入不灵敏可能是由于触摸屏传感器的灵敏度不足或者触摸屏控制器的配置参数不正确导致的。可以尝试调整控制器的配置参数,如增加采样率、调整滤波算法等,或者更换传感器来解决问题。 ### 4.2 触摸屏输入漂移 触摸屏输入漂移可能是由于传感器的灵敏度不足或者触摸屏控制器的噪声滤波算法不正确导致的。可以尝试调整控制器的噪声滤波算法或者更换传感器来解决问题。 ### 4.3 触摸屏输入失灵 触摸屏输入失灵可能是由于控制器与主处理器之间的通信故障或者控制器硬件故障导致的。可以尝试重新检查控制器与主处理器之间的连接,或者更换控制器硬件来解决问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值