赛普拉斯触摸驱动修改办法(imx6 Linux)

小发光项目硬件部分遗留的嵌入式触摸调试笔记,记录飞凌 imx6 平台(USB2IIC_CTP_CONTROL 方案)赛普拉斯电容触摸屏的一个驱动修复方法。

适用背景

  • 平台:飞凌 OKMX6Q-C / OKMX6DL-C 核心板,Linux 内核
  • 触摸方案:赛普拉斯(Cypress)电容触摸,通过 USB2IIC 桥接,内核走 usb2iic_ctp_control 路径
  • 问题症状:多点触摸事件不上报/事件序列不闭合(隐含,从修改点推断)

修改步骤

  1. 先打上官方补丁 dont_register_mousedev_for_USB2IIC_CTP_CONTROL.patch(禁止为 USB2IIC 触摸注册 mousedev,避免事件被 mousedev 截走)

  2. 编辑内核源码 drivers/hid/hid-multitouch.c

  3. 找到 static void mt_emit_event(struct mt_device *td, struct input_dev *input) 函数

  4. 在函数体倒数第二行 input_sync(input); 之前插入一行:

    input_mt_sync(input);
  5. 重新编译内核,生成镜像烧写

原理要点

input_mt_sync() 上报 MT_SYNPT 同步标记,声明”这一组触摸点属于同一帧”。缺少它时,内核 input 子系统无法正确分帧多点数据,用户态(如 Android 的 InputReader)可能丢点或粘连。input_sync() 只是帧结束标记,两者不能互相替代。

关联