linux驱动之TouchPanel驱动

触摸屏驱动调试过程
第一步: 移植驱动,确保Touch功能ok
第二步: 测量工作电压,i2c速率;测量上下电时序
第三步:固件升级
1) 模组ID、固件版本号确认,确认升级需求,修改逻辑
2) 首先确认模组是否一致,确认FW版本号,擦除升级。注意:升级中断电情况需要考虑
注意: 固件升级根据实际情况做处理,包括多模组兼容、版本向上升级、升级过程失败后故障确认。

常见故障
问题1——误报点,跳点,断线等主观情况

  1. 触摸屏硬件通道损坏。 触摸部分区域,其周围区域有反应
    ——通道损坏后,触摸此区域会造成周围区域的不稳定报点,出现误报点现象
  2. 触摸屏固件版本太低。 灵敏度问题,坐标定位问题
    ——固件起始坐标需要和driver起始坐标定义一致,需要匹配屏幕分辨率,需要调至适应灵敏度
  3. 触摸屏工作电压异常。 HW处理,可能引发各类问题
    ——工作电压不稳可能会造成各类问题
  4. 射频干扰。 在通话时降低灵敏度,完成后恢复灵敏度

问题2——功能报点错误

  1. 固件上报错误–驱动上报错误–驱动与framework映射配置不一致
    ——当getevent确认键值无误时,framework映射配置有误;否则需要修改driver程序
    问题3——鬼点问题
    确认屏幕是自容屏还是互容屏,支持报点数等方面具体有很大优势,而自容屏体,受限于硬件设计和成本,只能支持假两点的方式,并且在限制区域会出现报鬼点等现象,且无法优化。

问题4——特殊键值功能定义。需要framework映射匹配一致
双击、特殊字母、特殊的划线等
问题5——光感效果。 提高灵敏度,区域性的操作。
通话时,区域性监测,上报休眠键值;通话完成后恢复

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Linux Touch Panel驱动的demo: ```c #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/input.h> #include <linux/i2c.h> #include <linux/delay.h> #define DEVICE_NAME "touchpanel" static struct i2c_device_id touchpanel_id_table[] = { {DEVICE_NAME, 0}, {} }; MODULE_DEVICE_TABLE(i2c, touchpanel_id_table); static int touchpanel_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct input_dev *input; int error = 0; input = input_allocate_device(); if (!input) { dev_err(&client->dev, "input_allocate_device failed\n"); error = -ENOMEM; goto err_free_mem; } input->name = "Touch Panel"; input->id.bustype = BUS_I2C; input->dev.parent = &client->dev; input_set_capability(input, EV_KEY, BTN_TOUCH); error = input_register_device(input); if (error) { dev_err(&client->dev, "input_register_device failed\n"); goto err_free_mem; } return 0; err_free_mem: input_free_device(input); return error; } static int touchpanel_remove(struct i2c_client *client) { struct input_dev *input = i2c_get_clientdata(client); input_unregister_device(input); input_free_device(input); return 0; } static const struct of_device_id touchpanel_of_match[] = { { .compatible = "linux,touchpanel", }, {} }; MODULE_DEVICE_TABLE(of, touchpanel_of_match); static struct i2c_driver touchpanel_driver = { .probe = touchpanel_probe, .remove = touchpanel_remove, .id_table = touchpanel_id_table, .driver = { .name = DEVICE_NAME, .of_match_table = touchpanel_of_match, }, }; module_i2c_driver(touchpanel_driver); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("Touch Panel Driver"); MODULE_LICENSE("GPL"); ``` 这个驱动程序使用I2C总线与触摸屏进行通信,并向输入子系统注册输入设备。在`probe`函数,它分配了一个新的输入设备并配置其名称、总线类型和父设备。它还设置了该设备支持BTN_TOUCH事件。在`remove`函数,它注销了输入设备并释放了分配的内存。这个驱动程序还包含了一些必要的Linux模块元数据,如作者、描述和许可证信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值