添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
悲伤的数据线  ·  v-input-trim - npm ...·  10 小时前    · 
爱笑的汉堡包  ·  Android蓝牙——HID开发·  23 小时前    · 
大力的跑步机  ·  Creating forms on ...·  1 周前    · 
长情的电池  ·  Ethan | 博客·  1 周前    · 
风度翩翩的黑框眼镜  ·  Get Started — ...·  3 周前    · 
俊逸的仙人球  ·  Dru for mac Dru ...·  2 月前    · 
讲道义的罐头  ·  twinn-ml-interface · PyPI·  3 月前    · 

相比 RTP 电阻触摸屏, CTP 电容触摸屏的调试稍微繁琐一点,CTP 驱动一般由触摸屏原厂提供,经过移植添加到 SDK 中编译和使用 本章节以 GT911 为例来说明一款新的 CTP 的调试和移植过程。

驱动存放路径:source/linux-5.10/drivers/input/touchscreen/gt911

其中 source/linux-5.10/drivers/input/touchscreen/Makefile 修改添加如下:

diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
index 75924acd8..4be057598 100644
--- a/drivers/input/touchscreen/Makefile
+++ b/drivers/input/touchscreen/Makefile
@@ -116,3 +116,6 @@ obj-$(CONFIG_TOUCHSCREEN_ROHM_BU21023)      += rohm_bu21023.o
 obj-$(CONFIG_TOUCHSCREEN_RASPBERRYPI_FW)       += raspberrypi-ts.o
 obj-$(CONFIG_TOUCHSCREEN_IQS5XX)       += iqs5xx.o
 obj-$(CONFIG_TOUCHSCREEN_ZINITIX)      += zinitix.o
+obj-$(CONFIG_INPUT_TOUCHSCREEN)   += gt911/
            

其中 source/linux-5.10/drivers/input/touchscreen/Kconfig 修改添加如下:

diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
index a8d18a679..6acdc3b63 100644
--- a/drivers/input/touchscreen/Kconfig
+++ b/drivers/input/touchscreen/Kconfig
@@ -1344,5 +1344,7 @@ config TOUCHSCREEN_ZINITIX
          To compile this driver as a module, choose M here: the
          module will be called zinitix.
+source "drivers/input/touchscreen/gt911/Kconfig"
注: 请从触摸屏供应商处获取和内核版本匹配的驱动程序,如果版本不匹配则可能编译出错,需要自行适配。

在 luban 根目录下执行 make km (make kernel-menuconfig),进入 kernel 的功能配置,按如下选择:

Linux
    Device Drivers
        Input device support
            [*] Touchscreens
                <M> gt911 based touchscreens
            

驱动以 ko 的方式编译后,系统启动后在启动脚本 mdev 自动加载,如下:

start(){echo-n"Starting $DAEMON... "start-stop-daemon-S-b-m-p$PIDFILE-x/sbin/mdev---df[$?-eq0]&&echo"OK"||echo"ERROR"# coldplug modulesfind/sys/-namemodalias-print0| \
         xargs-0sort-u| \
         tr'\n''\0'| \
         xargs-0modprobe-abq}

如果不需要自动加载,可注释掉所示代码,仿照其他启动服务自定义加载服务。

DTS 参数配置

board.dts 中要添加的参数选项需要查看驱动代码中所要解析的 dts 参数而添加,示例如下:

GT911 驱动程序中所要解析的 dts 参数

intinput_sensor_startup(enuminput_sensor_type*ctp_type){intret=-1;structctp_config_info*data=container_of(ctp_type,structctp_config_info,input_type);structdevice_node*np=NULL;np=of_find_node_by_name(NULL,"ctp");if(!np){pr_err("ERROR! get ctp_para failed, func:%s, line:%d\n",__func__,__LINE__);gotodevicetree_get_item_err;}if(!of_device_is_available(np)){pr_err("%s: ctp is not used\n",__func__);gotodevicetree_get_item_err;}elsedata->ctp_used=1;ret=of_property_read_u32(np,"ctp_twi_id",&data->twi_id);if(ret){pr_err("get twi_id is fail, %d\n",ret);gotodevicetree_get_item_err;}printk("ctp_twi_id is %d\r\n",data->twi_id);data->wakeup_gpio=of_get_named_gpio(np,"ctp_wakeup",0);printk("wavkeup_gpio %d\r\n",data->wakeup_gpio);data->irq_gpio=of_get_named_gpio(np,"ctp_int_port",0);printk("ctp_int_port %d\r\n",data->irq_gpio);ret=of_property_read_u32(np,"ctp_screen_max_x",&data->screen_max_x);if(ret)pr_err("get ctp_screen_max_x is fail, %d\n",ret);ret=of_property_read_u32(np,"ctp_screen_max_y",&data->screen_max_y);if(ret)pr_err("get screen_max_y is fail, %d\n",ret);ret=of_property_read_u32(np,"ctp_revert_x_flag",&data->revert_x_flag);if(ret)pr_err("get revert_x_flag is fail, %d\n",ret);ret=of_property_read_u32(np,"ctp_revert_y_flag",&data->revert_y_flag);if(ret)pr_err("get revert_y_flag is fail, %d\n",ret);ret=of_property_read_u32(np,"ctp_exchange_x_y_flag",&data->exchange_x_y_flag);if(ret)pr_err("get ctp_exchange_x_y_flag is fail, %d\n",ret);ret=of_property_read_u32(np,"ctp_abs_max_x",&data->abs_max_x);if(ret)pr_err("get ctp_abs_max_x is fail, %d\n",ret);ret=of_property_read_u32(np,"ctp_abs_max_y",&data->abs_max_y);if(ret)pr_err("get ctp_abs_max_y is fail, %d\n",ret);ret=of_property_read_u32(np,"ctp_convert_reslution",&data->convert_reslution);if(ret)pr_err("get convert_reslution is fail, %d\n",ret);printk("screen %d %d %d %d %d abs_x %d abs_y %d convert %d\r\n",data->screen_max_x,data->screen_max_y,data->revert_x_flag,data->revert_y_flag,data->exchange_x_y_flag,data->abs_max_x,data->abs_max_y,data->convert_reslution);return0;devicetree_get_item_err:pr_notice("=========script_get_item_err============\n");returnret;}

board.dts 中所添加的参数项

&twi2 {
    pinctrl-names = "default";
    pinctrl-0 = <&twi2_pins_a>;
    status = "okay";
    ctp {
        reg = <0x5d>;                                   //CTP 设备地址,可以从规格书中获取
        device_type = "ctp";                            //默认
        status = "okay";                                //使能标志
        ctp_twi_id = <0x2>;                             //所挂在的 twi 总线 id
        ctp_twi_addr = <0x5d>;                          //CTP 设备地址,可以从规格书中获取
        ctp_screen_max_x = <0x500>;                     //CTP x 轴的范围
        ctp_screen_max_y = <0x320>;                     //CTP y 轴范围
        ctp_revert_x_flag = <0x0>;                      //CTP x 轴是否翻转
        ctp_revert_y_flag = <0x0>;                      //CTP y 轴是否翻转
        ctp_exchange_x_y_flag = <0x0>;                  //CTP x 轴和 y 轴是否互换
        ctp_int_port = <&gpio_a 9 GPIO_ACTIVE_HIGH>;    //CTP 中断引脚
        ctp_wakeup = <&gpio_a 8 GPIO_ACTIVE_HIGH>;      //CTP reset 引脚
                    

CTP 设备地址获取:

从规格书中可以看出 GT911 根据初始化时序的不同支持两种设备地址,默认时序的读写地址为 0xBA/0xBB,读写地址去掉最后一位读写位就是设备地址,即:0x5d

    硬件接线示例图如下:

    请务必确保 dts 所配置的参数和引脚与硬件原理图一致

    测量硬件通路

    测量硬件通路是否正常,测量电压信号是否正常

    查看打印信息

    在 dts 中修改 bootargs,增加“loglevel=8” 调高打印级别,系统启动时或 insmod 驱动模块时看是否有异常打印

    获取坐标信息

    如果系统有编译 getevent 工具,触摸屏有触摸时进行坐标的打印

    # getevent

    获取设备信息

    # cat /proc/bus/input/devices
    例如:(以 xx 为例)
    I: Bus=0018Vendor=dead Product=beef Version=28bb
    N: Name="goodix-ts"
    P: Phys=input/ts
    S: Sysfs=/devices/virtual/input/input0
    U: Uniq=
    H: Handlers=event0
    B: PROP=2
    B: EV=b
    B: KEY=1c00 00000
    B: ABS=6e1800000000000