最近有一个项目需要在HI3516DV300平台调通GT911触摸屏,调试前同事已经给了一份能正常跑起来的驱动,虽说能读到相关坐标信息,但是由于没有接入标准的linux输入设备接口,所以在应用时有困难。本来打算移植到标准接口,偶然发现kernel中竟然有该触摸屏的驱动代码,文件名为drivers/input/touchscreen/goodix.c,那就直接用这个啦!

先配置

x     -> Device Drivers                                                                                       x  
  x       -> Input device support                                                                               x  
  x         -> Generic input layer (needed for keyboard, mouse, ...) (INPUT [=y])                               x  
  x           -> Touchscreens (INPUT_TOUCHSCREEN [=y])

然后设置设备树,我接的I2C7,修改 arch/arm/boot/dts/hi3516dv300-demb.dts文件

&i2c_bus7 {
    status = "okay";
    clock-frequency = <100000>;
    gt911@14 {
        compatible = "goodix,gt911";
        reg = <0x14>;
        interrupt-parent = <&gpio_chip3>;
        interrupts = <1 4>;
        touchscreen-inverted-x;
        touchscreen-inverted-y;
        irq-gpios = <&gpio_chip3 1 0>;
        reset-gpios = <&gpio_chip0 3 0>;
    };
};
touchscreen-inverted-x和 touchscreen-inverted-y是因为后面发现读的坐标是反的,所以加了这两句,具体规则参考

Documentation/devicetree/bindings/input/touchscreen/goodix.txt文件

编译后加载发现错误

Goodix-TS 7-0014: Direct firmware load for goodix_911_cfg.bin failed with error -2

这个错误大概是需要加载一个固件,但是我也没有,对比同事给驱动发现,固件有可能就是那个配置数组。所以修改drivers/input/touchscreen/goodix.c文件,在goodix_ts_probe函数中有一段

     error = request_firmware_nowait(THIS_MODULE, true, ts->cfg_name,&client->dev, GFP_KERNEL, ts,goodix_config_cb);if (error) {dev_err(&client->dev,"Failed to invoke firmware loader: %d\n",error);return error;}

这个应该就是加载固件的函数,读到固件后调用goodix_config_cb函数写入配置

static void goodix_config_cb(const struct firmware *cfg, void *ctx)
{struct goodix_ts_data *ts = ctx;int error;if (cfg) {/* send device configuration to the firmware */error = goodix_send_cfg(ts, cfg);if (error)goto err_release_cfg;}goodix_configure_dev(ts);err_release_cfg:release_firmware(cfg);complete_all(&ts->firmware_loading_complete);
}

然后进入goodix_send_cfg函数

static int goodix_send_cfg(struct goodix_ts_data *ts,const struct firmware *cfg)
{int error;error = goodix_check_cfg(ts, cfg);if (error)return error;error = goodix_i2c_write(ts->client, GOODIX_REG_CONFIG_DATA, cfg->data,cfg->size);if (error) {dev_err(&ts->client->dev, "Failed to write config data: %d",error);return error;}dev_dbg(&ts->client->dev, "Config sent successfully.");/* Let the firmware reconfigure itself, so sleep for 10ms */usleep_range(10000, 11000);return 0;
}

很明显最后调用goodix_i2c_write函数将数据写入,那我们将这个加载固件函数注释掉,直接用goodix_i2c_write将数组数据写入。

对于Goodix-TS 7-0014: request IRQ failed: -22 错误,应该是设备树中断配置不对,但是我尝试修改后还是会有错误。这时又参考了那份旧驱动,发现旧驱动没有用中断,直接用的轮询的方式读取坐标。那就直接将中断改为轮询吧!

关于中断配置在goodix_configure_dev函数中调用,中断响应函数为goodix_ts_irq_handler,我们注释掉goodix_configure_dev

中关于中断的部分,然后创建一个线程调用goodix_ts_irq_handler函数就可以了。

修改后重新编译测试成功!

修改后的goodix.c文件下载地址https://download.csdn.net/download/weixin_41231656/12576530

基于HI3516DV300平台GT911触摸屏调试相关推荐

  1. 基于imx6的gt911触摸屏驱动移植

    参考:https://blog.csdn.net/zhuyuming/article/details/52652525?locationNum=3 实验平台:TQ_iMX6Q 其实在Linux内核官网 ...

  2. eclipse 输入提示插件_【STM32】搭建基于Eclipse平台的STM32调试环境

    以NuttX工程为例,硬件平台STM32F103C8. 1 导入工程 File->Import 选择Existing Code as Makefie Project,点击next 输入工程名字( ...

  3. tinker board 2s开发板 gt911 触摸屏调试记录

    内核配置 : CONFIG_TOUCHSCREEN_GT9XX 默认是开启的. 设备树如下: gt9xx: gt9xx@14 {compatible = "goodix,gt9xx" ...

  4. [RK3568 Android12] GT911触摸屏调试

    屏幕规格书 需要主要硬件通信电压为:1.8V或者3.3V I2C通信的地址:0x5D 和0x40 系统上电时序:不同的地址,稍微有些差异 对应代码中如下:

  5. [RK3568 Android11] 开发之GT911触摸屏调试

    目录 前言 一.config打开GT9XX配置 二.配置设备树dts 三.中断GPIO申请失败

  6. 基于瑞芯微RV1109 Linux触摸屏GT911驱动调试心得(二)-设备树刷厂商给的触摸屏固件...

    之前调试触摸屏的文章如下: 基于瑞芯微RV1109 Linux触摸屏GT911驱动调试心得_Bruce.yang的嵌入式之旅-CSDN博客 由于之前调触摸屏一直都对不上点,然后厂商又给了我新的驱动代码 ...

  7. 基于Qt的Windows平台桌面蓝牙调试器软件

    基于Qt的Windows平台桌面蓝牙调试器软件 在进行嵌入式的调试时,我们经常需要下位机给主机打印数据来观察数据变化.绘制波形等进行调试.一般的做法可以是直接通过串口与PC进行数据通信(USB to ...

  8. 基于RK3288 平台 Simple card声卡添加及调试

        基于RK3288 平台 Simple card声卡添加及调试 Simple card即简单通用的machine driver, 如果simple-card框架足够满足需求,建议优先使用simp ...

  9. 基于Hi3516DV300的嵌入式入门演练(上)

    基于Hi3516DV300的嵌入式入门演练(上) 基于Hi3516DV300的嵌入式入门演练(下) 文章目录 信息 前言 勉励 1 开始之前 1.1 操作系统与开发准备 1.2 推荐的书籍 1.3 书 ...

最新文章

  1. [ZT]如何取得客户端的Windows登录用户名?
  2. 软件测试人员用python_【答知友问】软件测试人员能用python做哪些事情?
  3. SAP复合角色更改后扩展到派生节点
  4. python下采样_python + opencv 如何在上采样下采样之后导出图片?
  5. 武汉疫情之后,中国即将发生的10大变化!(强烈推荐)
  6. leetcode 189. 旋转数组
  7. hrg哈工大机器人集团好吗_哈工大机器人集团(HRG)
  8. mysql 64位 安装1045_MySql 安装时的1045错误
  9. Windows Win7建立wifi热点,手机共享WIFI上网
  10. 漫画:互联网大佬都是这样聊天的
  11. visual assist x_可能是最美溜背,大众探岳X能否重新定义轿跑SUV?
  12. dhclient命令 – 动态获取或释放IP地址
  13. 创蓝253短信验证码接口接入常见问题
  14. Zookeeper、Curator
  15. 起诉传音,华为为何会对一张壁纸要价2000万?
  16. pdf怎么编辑连续页码
  17. android地鼠游戏,非常地鼠手游
  18. 泛型擦除,教你怎么用可乐瓶装鸡蛋
  19. 不同粒径大小的金纳米粒子|球形金纳米粒子|单分散金纳米颗粒Glucose modified Gold Nanoparticles(粒径5nm)
  20. thrift IDL

热门文章

  1. 高等代数_证明_对称矩阵一定能够相似对角化
  2. 打分系统 php,jquery做出评分系统
  3. c语言鼠标键盘操作教程,c语言 怎样模拟鼠标键盘操作?
  4. 痞子衡嵌入式:MCUXpresso IDE下工程链接文件配置管理与自动生成机制
  5. 区块链改革(链改)行动第二次联席会议在京召开
  6. 程序人生丨想学编程,大学什么样的专业能成为一名真正的程序员?
  7. 光流测速和视觉里程计
  8. A、B、H、S、N股 各是什么意思
  9. 【绘制】HTML5 Canvas坐标变换——坐标系的平移(translate)、缩放(scale)、旋转(rotate)、镜像。(图文、代码)
  10. 动手学深度学习——矩阵求导之矩阵的迹和微分