(开发记录)海思gt911触摸屏幕移植 (安卓驱动->DV300)

SONG 2020-08-27 10:20:57 7104
声明:因为在开发过程中不同设备会搭载同一芯片,不同设备会有各种不同的硬件设备,因此本文移植的gt911驱动也是以动态加载的方式载入内核的。

gt9xx是一款很常用的触摸屏ic,网上对它在安卓和stm32平台上的使用调试教程较多,但是在海思平台的调试教程较少,下面记录一些我自己移植gt9xx安卓驱动碰到的问题。

开始调试时给到的资料有一份gt9xx的安卓驱动代码,一份移植说明书,一份gt9xx的数据手册(网上都有)。

浏览下代码,使用i2c_add_driver函数添加一个i2c驱动,通过probe函数初始化屏幕,中断,工作队列等等,但是probe函数需要在设备和驱动名字匹配时才会调用,通过查阅驱动移植说明书:
移植说明书
因为我没有改动kernel的代码,所以这边是通过i2c_new_device函数添加i2c设备,注意设备名称要和驱动一样。

#ifdef CONFIG_ARCH_HISI
static struct i2c_board_info hi_info = {
    I2C_BOARD_INFO("Goodix-TS", 0x5d),
};
static struct i2c_client *gt_client;
#endif
...
#ifdef CONFIG_ARCH_HISI
    struct i2c_adapter *adapter;

    adapter = i2c_get_adapter(tp_param[2]);
    if (!adapter) {
        GTP_ERROR("%s : can't get i2c adapter %d\n", __func__, __LINE__);
    }

    gt_client = i2c_new_device(adapter, &hi_info);                               
    if (!gt_client) {
        GTP_ERROR("%s : i2c_new_device failed!\n", __func__);
    }
    gt_client->irq = 45;

    i2c_put_adapter(adapter);                                                    
#endif                                                                           
    ret = i2c_add_driver(&goodix_ts_driver);                                     

如果运气好的话,添加完上面的内容,根据硬件选择正确的复位、中断,i2c控制器(这些可以直接在gt9xx.h文件中配置,注意管脚复用),触摸屏应该就可以正常使用了。

然而,我在调试的时候遇到各种问题,下面做个记录,如果有人和我一样碰到这些问题,希望下面的内容能有帮助。

1.<linux/earlysuspend.h>头文件找不到,这个去网上查了好像是安卓的一种降低功耗的模块,直接用删掉,或者为了代码的美观用宏控制去掉,其他和该模块相关的地方都可以直接去掉。

#ifdef CONFIG_HAS_EARLYSUSPEND
#include <linux/earlysuspend.h>
#endif

2.各种没有见过的宏

安卓驱动的宏
这里按照#define定义的名称,结合代码看就是普通的定义复位、中断管脚序号,配置gpio口状态的操作,我这里把下面三个框的内容全删除,把第一个框内按照硬件原理图直接写上gpio口的序号。

3.gt9xx.h里面的CTP_CFG_GROUP配置,造成的问题:

  1)屏幕时而有中断,时而没有。

  2)屏幕只能点击一部分,点击左边和上边区域没有中断。

仔细阅读代码,在probe函数中有个gtp_init_panel(ts)函数,会从ic内部读取信息,打开GTP_DEBUG_ON就可以看到读取的硬件信息了,驱动会根据读取到的sensor_ID 号去选择对应的CTP_CFG_GROUP配置。

但是gt9xx有个固化配置,就是只有发送的配置信息大于芯片中保存的配置时才会使用你发送的CTP_CFG_GROUP配置(不是很懂为什么,但是真的很k eng)。所以这里要注意如果厂家给的CTP_CFG_GROUP配置信息的版本号小于芯片中保存的配置版本,那么CTP_CFG_GROUP配置就不会生效,就会产生各种问题,贴个图说明下:

CTP_CFG_GROUP配置

第一个就是配置版本号了(根据调试信息得出的),第二个和第三个框的是分辨率,我这边是800*1280,十六进制就是 0x320和0x500,可以直接在这里改,用来适配tslib。

在调试的时候就是因为ic中的配置版本比这个0x42大,一直有问题,总是点不到屏幕的左边和上边区域,后来把这个0x42改成0x65(好像比这个大就行),最后终于正常了.

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
SONG
红包 3 2 评论 打赏
评论
1个
内容存在敏感词
手气红包
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
SONG
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区