SSD_触控驱动集成参考


1. 驱动配置

1.1. 概述

SSD平台目前实现的触控IC驱动,都是通过I2C通讯的,到这里拿公版Goodix的驱动示例,实际情况请依据驱动方建议为准。


1.2. 驱动集成

触控驱动请触控IC厂家提供linux版本的驱动,触控驱动属于input子系统,驱动运行加载成功后,会生成设备节点/dev/input/eventX(一般如无其他input子系统存在,会生成的是event0)

  1. 将IC厂家提供的linux驱动添加到 kernel/drivers/input/touchscreen/ 目录下,如下图,在kernel/drivers/input/touchscreen/Makefile中添加驱动文件链接,并用一个配置CONFIG_TOUCHSCREEN_GOODIX控制

  2. 如下图,在kernel/drivers/input/touchscreen/Kconfig中添加CONFIG_TOUCHSCREEN_GOODIX,以便在kernel config中增加make menuconfig 配置开关

  3. 项目使用阶段,通过make menuconfig配置打开对应config,确保驱动Build in到kernel即可


2. DTS配置

2.1. DTS配置

查看硬件原理图,参考驱动源码,找到项目在用的*.dtsi文件,添加对应的设备树节点,以配置供驱动使用,配置流程如下:

  1. 根据驱动使用的name配置设备树节点的compatible name

  2. 触控IC的i2c slave addr

  3. 触控IC跟主芯片连接的RST/Interrupts pin脚


2.2. DTS配置示例

这里使用SSD20X平台的配置示例,除对应使用的*.dts文件需要自行根据使用的文件配置外,配置流程是通用的。

示例使用: kernel/arch/arm/boot/dts/infinity2m-ssc011a-s01a-display.dtsi (实际使用过程中请添加到项目使用到的dtsi中)

  1. 查看驱动源码,找到.of_match_table,并在dtsi中创建以该名字命名的设备节点

    查看驱动源码:

    配置的设备节点

  2. 根据触控IC厂家提供的I2C slave addr,配置好reg属性,这里goodix的I2C slave addr地址为0x5D (需要IC厂家确认)

  3. 设备树节点根据硬件连接,配置好goodix_rst/goodix_int 两个属性对应的pin脚(属性名字需要匹配驱动PAD_GPIO1/PAD_GPIO13 (需跟硬件实际匹配),reg配置的是触控I2C的

注意:触控设备最好不要有重复,如项目上新增了其他触控设备,请在config中关闭公版Default的Goodix驱动


3. STR配置

STR: Suspend To Ram

如需要支持STR,需要跟触控IC的FAE确认触控驱动中已经实现suspend/resume接口,否则STR后触控可能无法恢复导致失效

如需触控唤醒STR功能,则驱动code需在suspend之前先将触控对应中断enable成wake source:


4. 常见FAQ

  1. 驱动是否加载成功?

    \rightarrow 确认对应的触控设备生成的设备节点(eg:/dev/input/eventX)

  2. 触控无反应,如何确认通讯是否成功?

    \rightarrow 查看log有无对应I2C组通讯报错,有报错则可能跟触控IC通讯失败

    \rightarrow 示波器抓I2C波形,看有无数据交互

  3. 如何查看触控版本信息?

    \rightarrow 使用附件提供Demo:./Evtest /dev/input/eventX 2

  4. 触控不准确,会有什么原因?

    \rightarrow 确保UI绘制的size跟触控的分辨率是匹配的

    \rightarrow 使用附件提供Demo查看上报的坐标是否准确: ./Evtest /dev/input/eventX 0

    \rightarrow 使用附件提供Demo模拟输入坐标,触发对应点击: ./Evtest /dev/input/eventX 1 X_position Y_position


5. Demo

  • Demo_Bin

    Evtest

  • Src_Code

    编译方法: gcc evtest.c -o Evtest

    evtest.c

  • 使用说明

    1. 读坐标:

    ./evtest /dev/input/event0 0 //设备节点选择的试 event0 后面一个0是读cmd

    2. 写坐标:

    ./evtest /dev/input/event0 1 90 90 //设备节点选择的试 event0 后面一个1是写cmd,写cmd要带x,y坐标

    3. dump dev info:

    ./evtest /dev/input/event0 2 //设备节点选择的试 event0 后面一个2是Dump Dev相关信息