GT9xx触摸屏驱动总结 您所在的位置:网站首页 gt1151 GT9xx触摸屏驱动总结

GT9xx触摸屏驱动总结

2023-08-19 03:54| 来源: 网络整理| 查看: 265

GT9xx触摸屏驱动总结 一:GT9xx触摸屏驱动移植过程出现的问题 1:GT9xx触摸屏驱动的模块加载函数没有执行到。

具体情况:

现象:.ko文件已经是最新的,烧进去之后,或者使用adb工具push进去之后,

打印出来的log信息中发现没有执行GT9xx触摸屏驱动的加载模块函数。

原因:修改后期加载模块文件错误

错误的做法:

修改了A13\android\out\target\product\nuclear-evb045-jiaweiet616_xc3\root目录下的init.sun5i.rc

正确的做法:

修改:A13\android\device\softwinner\nuclear-evb045-jiaweiet616_xc3目录下的init.sun5i.rc

 

2:GT9xx触摸屏驱动程序的“名字”和“IIC地址”已经匹配,

但是还没有调用GT9xx触摸屏驱动的proble函数,并且模块

加载的detect函数也没有执行。

 

原因:没有填充i2c_driver结构体的.class和address_list成员。

推测:

   i2c设备层的代码注册 i2c_device 时使用了 i2c_register_board_info 

注册;probe函数不是名字对上就能调用,还需要它探测到设备真实存在都会调用;

使用 i2c_register_board_info 注册的设备,其探测时机是在适配器驱动安装

时候就执行了,后期安装不会调用probe。因此使用 i2c_register_board_info 注册的,

要提供detect接口,而且i2c_driver结构体要填充.class和address_list成员。

   

3:注册中断

1)注意中断号

2)注意注册中断的触发方式

如果注册为独占中断,则会出现IRQ handler type mismatch for IRQ 0错误。

ctp_ops.set_irq_mode("ctp_para","ctp_int_port", CTP_IRQ_MODE); ts->client->irq = SW_INT_IRQNO_PIO; ret = request_irq(ts->client->irq, goodix_ts_irq_handler, IRQF_TRIGGER_RISING | IRQF_SHARED, ts->client->name, ts); printk("======gtp_request_irq======%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);

 

4:修改驱动的reset和init脚为A13CTP专用的,方便使用A13CTP提供的相关函数

 

二:移植脚本步骤 1:修改系统配置文件sys_config1.fex

文件所在目录:

A13\lichee\tools\pack\chips\sun5i\configs\android\a13-evb045-jiaweiet616_xc3

 

1)把触摸屏的名字改为我们这款触摸屏的名字

ctp_name                 = "Goodix-TS"

如下图

2)把IIC地址修改为这款触摸屏对应的IIC地址

ctp_twi_addr             = 0x5d

如下图

2:添加A13相关操作代码

也就是把ctp_ops的成员的实现搬过来

struct ctp_platform_ops ctp_ops = { .get_pendown_state = ctp_get_pendown_state, .clear_penirq = ctp_clear_penirq, .set_irq_mode = ctp_set_irq_mode, .set_gpio_mode = ctp_set_gpio_mode, .judge_int_occur = ctp_judge_int_occur, .init_platform_resource = ctp_init_platform_resource, .free_platform_resource = ctp_free_platform_resource, .fetch_sysconfig_para = ctp_fetch_sysconfig_para, .ts_reset = ctp_reset, .ts_wakeup = ctp_wakeup, .ts_detect = ctp_detect, };

 

3:修改源码程序是reset和init脚为A13CTP专用的

 

4:仿造其他的驱动程序编写A13平台特定的模块加载函数

主要的步骤是:

1) 获取系统配置信息

2) 进行物理地址到虚拟地址的映射,GPIO的申请

3) 调用ctp_ops的detect ,进行设备的推测

 

5:填充i2c_driver goodix_ts_driver结构体的 class和address_list 成员

   说明:如果没有填充address_list地址表这个成员,即使

是设备和驱动的名字和IIC地址对应上了,proble函数也不会被调用到。

 

6:注释掉TP固件升级的相关代码

 

 

7:修改中断申请函数

1)修改中断号

 ts->client->irq = SW_INT_IRQNO_PIO;

2)设置中断模式

ctp_ops.set_irq_mode("ctp_para","ctp_int_port", CTP_IRQ_MODE);

3)注意修改中断的触发方式,申请方式。

ret = request_irq(ts->client->irq, goodix_ts_irq_handler, /*IRQF_TRIGGER_RISING | IRQF_SHARED,*/ irq_table[ts->int_trigger_type], ts->client->name, ts);

irq_table定义如下:它是用一个宏来初始化

 const u8 irq_table[] = GTP_IRQ_TAB;

 

GTP_IRQ_TAB宏的定义:

#define GTP_IRQ_TAB {IRQ_TYPE_EDGE_RISING, IRQ_TYPE_EDGE_FALLING, IRQ_TYPE_LEVEL_LOW, IRQ_TYPE_LEVEL_HIGH }

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有