全志A64触摸屏驱动调试

一、前言

     linux的触摸屏驱动一般要经历一下几个步骤(以4412为例):1.移植驱动到linux源码“driver/input/touchscreen/”目录下,在Kconfig里面增加这款触摸屏驱动的菜单。

 

#add by long 20170207
config TOUCHSCREEN_GT9XX
                tristate "GT9XX based touchscreens"
                depends on I2C
                help
                  Say Y here if you have a GT9XX based touchscreen
                  controller.

                  If unsure, say N.

                  To compile this driver as a module, choose M here: the
                  module will be called GT9XX.
#end add


 

 

2.在“driver/input/touchscreen/Makefile"文件里增加编译条件,控制触摸屏驱动是否编译。

 

obj-$(CONFIG_TOUCHSCREEN_GT9XX) += gt9xx_module.o
gt9xx_module-objs := gt9xx.o gt9xx_update.o goodix_tool.o

 

3.增加板载驱动信息。修改方法,,在“arch/arm/mach-exynos/mach-itop4412.c“增加

 

#if defined(CONFIG_TOUCHSCREEN_GT9XX)
{
         //I2C_BOARD_INFO("Goodix-TS", 0x5d),
     I2C_BOARD_INFO("Goodix-TS", 0x14),
},
#endif

 

二、全志平台触摸屏驱动移植

1.简介

      全志平台对于input设备有专门的模块程序进行管理,无需添加专门的初始化信息或者insmod驱动,这个模块就是“sw-device.c”,所在位 置“drivers/input/sw-device.c”。安卓系统初始化的时候只需要安装sw-device.ko即可

 

“ insmod /system/vendor/modules/sw-device.ko”

sw-device所支持的设备有


 

2.移植gt928触摸屏驱动的步骤1:修改sys_config.fex

若 sys_config.fex 文件中不存在 ctp_list 配置项时,请添加该配置项,且将不使用的存在冲突的设备设置为 0,即将其剔除出扫描列表。已支持的设备不存在冲突情况,但是为了减少检测时间,也可以将不使用的模组剔除出扫描列表。将 gt82x 系列剔除出扫描列表,

sys_config.fex 文件中关系到自动 ctp 自动检测功能的为 “ctp”以及“ ctp_list”
两块参数。如下所示:
[ctp]
compatible       = "allwinner,sun50i-ctp-para"
ctp_used        = 1
ctp_name        = "gt9xxf_ts"
ctp_twi_id       = 1
ctp_twi_addr      = 0x14
ctp_screen_max_x    = 1280
ctp_screen_max_y    = 800
ctp_revert_x_flag    = 0
ctp_revert_y_flag    = 0
ctp_exchange_x_y_flag  = 1

ctp_int_port      = port:PH10<6><default><default><default>
ctp_wakeup       = port:PH11<1><default><default><1>
ctp_power_ldo      = "vcc-ctp"
ctp_power_ldo_vol    = 3300
ctp_power_io        =
;-----------------------------------------------------------------------
如果ctp_used 设置为0 ,表示不使用ctp,则将不继续ctp的自动检测。
;------------------------------------------------------------------------
[ctp_list]
ctp_list_used = 1 //设置为 1 时,启动自动检测,设置为 0 时,不检测
ft5x_ts   = 1 //设置为 1,添加该型号 TP 到自动扫描列表
gt82x     = 0 //设置为 0,不添加该型号 TP 到自动扫描列表
gslX680   = 0 //gslX680 旧量产工具 TP,和 gslX680new 不能同时为 1
gslX680 new = 0 //gslX680 新量产工具 TP,和 gslX680 不能同时为 1
gt9xx_ts  = 0
gt9xxf_ts = 1
gt811     = 0
zet622x   = 0
ctp_list列表中的名称顺序必须与 sw-device.c中ctps的名称顺序一一对应。
当ctp_list_used 设置为1时,启用自动检测,将设置为0时,退出自动检测。模块
的名称后面写 1表示添加到自动检测扫描列表,写0表示剔除自动检测扫描列表

3.移植gt928触摸屏驱动的步骤2:修改menuconfig

 

在编译服务器上,目录为\lichee\linux-3.10 上,输入以下命令:make ARCH=arm64 menuconfig进入目录 Device Drivers\Input device support\ i2c device detect support 目录下可以看到 device 模块是编译为模块、编译进内核、不编译。 device 驱动默认编译为模块

Symbol: TOUCHSCREEN_GT9XXF_TS [=m]                                                                          
 Type  : tristate                                                                                        
 Prompt: gt9XXF touchscreen driver                                                                      
Location:                                                                                            
-> Device Drivers                                                                                  
-> Input device support                                                                          
> Generic input layer (needed for keyboard, mouse, ...) (INPUT [=y])                            
-> Touchscreens (INPUT_TOUCHSCREEN [=y])                                                      
Defined at drivers/input/touchscreen/gt9xxf/Kconfig:5                                                 
Depends on: !UML && INPUT_TOUCHSCREEN [=y] && INPUT [=y] && I2C [=y]   

 

4.移植gt928触摸屏驱动的步骤3:修改sw_device

 

sw-device.c 中的修改主要为增加设备的描述信息,将相关的描述信息增加到相应的 sw_device_info 中的变量中即可。结构体 sw_device_info 用于存放设备的相关信息,该结构体的相关变量如下列表所示:注意:当有两个或者以上的设备地址相同,且存在两个设备没有 chip id 值时,将按照顺序检测,返回第一个检测到的设备,可能造成错误,因此当存在两个设备没有 chip id 时,为了确保无误,请将不使用的设备剔除掉。CTP 设备的 sw_device_info 结构体变量为 ctps,如果增加的设备为 ctp 设备,只需要按照 sw_device_info 中的格式,添加相关的信息放置到 ctps 变量中即可。Gsensor 设备的 sw_device_info 结构体变量为 gsensors,如果增加的设备为gsensor 设备,只需要按照 sw_device_info 中的格式,添加相关的信息放置到 gsensors变量中即可。以下针对 sw_device_info 中相关的设置进行相关的说明。( 1)进行 chip id 值检测ctp 中需要增加 gt811 这个设备到自动检测中,编译之后的模块驱动名称为:“gt811”, I2C 地址可以设置为 0x5d; chip id 寄存器为 0x715; chip id 值为 0x11。描述信息如下所示:

 

static struct sw_device_info ctps[] = {
{ "ft5x_ts", { 0x38}, 0xa3, {0x0a,0x55,0x06,0x08,0x02,0xa3}, 0},
{ "gt82x", { 0x5d}, 0xf7d, {0x13,0x27,0x28 }, 0},
{ "gslX680", { 0x40}, 0x00, {0x00 }, 1},
{"gslX680new", { 0x40}, 0x00, {0x00 }, 1},
{"gt9xx_ts", { 0x14,0x5d}, 0x8140, {0x39 }, 0},
{"gt9xxf_ts",{ 0x14,0x5d}, 0x00, {0x00 }, 1},
{ "gt811", { 0x5d}, 0x715, {0x11 }, 0},
{"gt818_ts", { 0x5d}, 0x715, {0xc3 }, 0},
{"aw5306_ts",{ 0x38}, 0x01, {0xA8 }, 0},
{ "zet622x", { 0x76}, 0x00, {0x00 }, 0},}


 

( 2)不进行 chip id 值检测当设备没有 chip id 值时,可以不进行 chip id 的检测,此时 chip_id_reg 以及id_value 都必须设置为 0x00,否者将可能造成错误。这些设备都只检测 i2c 通信而不进行 chip id 值的判断,当所支持的设备中,没有产生地址冲突的情况时,也可以将chip_id_reg 以及 id_value 设置为 0x00 而不检测 chip id。zet622x ctp 设备没有 chip id 如下所示: 

 

static struct sw_device_info ctps[] = {
{ "ft5x_ts", { 0x38}, 0xa3, {0x0a,0x55,0x06,0x08,0x02,0xa3}, 0},
{ "gt82x", { 0x5d}, 0xf7d, {0x13,0x27,0x28 }, 0},
{ "gslX680", { 0x40}, 0x00, {0x00 }, 1},
{"gslX680new", { 0x40}, 0x00, {0x00 }, 1},
{"gt9xx_ts", { 0x14,0x5d}, 0x8140, {0x39 }, 0},
{"gt9xxf_ts",{ 0x14,0x5d}, 0x00, {0x00 }, 1},
{ "gt811", { 0x5d}, 0x715, {0x11 }, 0},
{"gt818_ts", { 0x5d}, 0x715, {0xc3 }, 0},
{"aw5306_ts",{ 0x38}, 0x01, {0xA8 }, 0},
{ "zet622x", { 0x76}, 0x00, {0x00 }, 0},}

( 3) same_flagsame_flag 为当支持的设备中有两个或者以上的设备地址相同,当有一个以上设备是没有 chip id 时,需要写 1 进行标识。当有两个设备以上地址相同且没有 chip id,则将按照顺序进行检测,且返回检测到的第一个设备。为避免错误,当两个以上设备地址相同且没有 chip id 值时,请将方案中不需要的设备剔除掉。剔除的方法为sys_config.fex 中相应的模组名称后写 0。

注意:当增加一个设备时,除了在 sw-device.c 中添加 sw-device_info 结构体设备的配置信息外,sys_config.fex 文件中也需要在设备的列表中增加该设备,增加检测的可选性。ctp 中的设备列表为“ [ctp_list]”, gsensor 中的设备列表为“[gsensor_list]”。如在 sw_device.c 中的 ctps 增加了“ gt9xx”,在“ ctp_list”中需要增加相应的配置项,否则将默认添加到扫描列表中。Xxx_list 中设备的名称需要跟 sw_device_info 中设备的名称顺序对应,且名称必须一致,否则将无法正确解析,默认将所有的都添加到扫描列表中。

示例如下:

sys_config.fex文件的ctp_list如下图所示

sw_device.c的设备列表如下:

5.移植gt928触摸屏驱动的步骤4:驱动的拷贝

 

编译过程中使用的命令: $extract-bsp ,将把驱动拷贝到指定的目录中备用。编译后的目录: out\ target\product\...\system\vendor\modules,省略的部分为lunch 时选择选择的配置文件夹名称。机器中对应的目录为: /system/vendor/modules

6.移植gt928触摸屏驱动的步骤5:测试触摸屏驱动

重新打包安卓的镜像烧录到开发板,开机后读取驱动的信息。默认情况下驱动的信息是不显示的,需要更改sw_device.c的调试等级才会显示。

调试信息如下

shell@tulip-t1:/ # dmesg |grep gt9   
<4>[   22.205895] get_detect_list name = gt9xxf_ts
<4>[   22.205901] number 6, module_name:gt9xxf_ts  is_support:1
<4>[   22.205905] get_detect_list name = gt9xxnew_ts
<4>[   22.205911] number 5, module_name:gt9xxnew_ts  is_support:0
<4>[   22.205916] get_detect_list name = gt9xx_ts
<4>[   22.205921] number 4, module_name:gt9xx_ts  is_support:0
<4>[   22.304202] sw_device_response_test: name = gt9xxf_ts, addr = 0x14
<4>[   22.402562] sw_device_response_test: name = gt9xxf_ts, addr = 0x5d
<4>[   22.403183] from copy name:gt9xxf_ts, strlen(name):0
<4>[   22.403306] write info:ctp_module_name="gt9xxf_ts"
<4>[  102.924129] i2c-core: driver [gt9xxf_ts] using legacy suspend method
<4>[  102.924142] i2c-core: driver [gt9xxf_ts] using legacy resume method
<6>[  103.032128] input: gt9xxf_ts as /devices/virtual/input/input5

 

7.官方关于sw_device的使用说明

CTP 使用步骤

( 1)自动检测支持的模组

FT 系列: ft5202, ft5204, ft5316, ft5x06(共用一个驱动, ft5x_ts.ko);驱动源文件目录: \lichee\linux-3.10\drivers\input\touchscreen\ft5x

Goodix 系 列 : gt813,gt827,gt828(gt82x.ko) , 驱 动 源 文 件 目 录 :\lichee\linux-3.10\drivers\input\touchscreen

gt9xx 系列(gt9xx_ts.ko),可以 gt9xx 系列中带 flash的触摸 IC 可以在此驱动中添加支持,驱动源文件目录: \lichee\linux-3.10\drivers\input\touchscreen\gt9xx;

gt9xxf 系列(gt9xxf_ts.ko),可以 gt9xx 系列中不带 flash的触摸 IC 可以在此驱动中添加支持;驱动源文件目录: \lichee\linux-3.10\drivers\input\touchscreen\gt9xxf

GSL 系列: gsl1680,gsl2681,gsl1688,gsl1680e(gslX680.ko),驱动源文件目录:\lichee\linux-3.10\drivers\input\touchscreen\gslx680;

GSL 系 列 (gslX680new.ko), 驱 动 源 文 件 目 录 :\lichee\linux-3.10\drivers\input\touchscreen\gslx680new,此驱动用于支持 GSL系列中,新量产工具生成的 firmware 的触摸 IC;

AW 系列, aw5206,aw5306(aw5306_ts.ko);驱动源文件目录: \lichee\linux-3.10\drivers\input\touchscreen\aw5x06。

 

( 2)驱动的拷贝编译过程中使用的命令:

$extract-bsp ,将把驱动拷贝到指定的目录中备用。编译后的目录: out\ target\product\...\system\vendor\modules,省略的部分为lunch 时选择选择的配置文件夹名称。机器中对应的目录为: /system/vendor/modules

( 3) sys_config.fex 文件的修改

若 sys_config.fex 文件中不存在 ctp_list 配置项时,请添加该配置项,且将不使用的存在冲突的设备设置为 0,即将其剔除出扫描列表。已支持的设备不存在冲突情况,但是为了减少检测时间,也可以将不使用的模组剔除出扫描列表。将 gt82x 系列剔除出扫描列表,如下所示。

[ctp_list]
ctp_list_used = 1
ft5x_ts = 1
gt82x = 0
gslX680 = 1
gslX680new = 0
gt818 = 1
zet622x = 1
aw5306_ts = 1

 

( 4)驱动的加载使用自动检测功能时,只需要加载 sw-device.ko 即可。

在 android\device\softwinner\polaris-xxx\init.xxx.rc 中添加驱动加载的模块,为了快速的检测到设备,此语句应该放置在模块加载的最前面,如下所示:

on fs
……
#csi module
insmod /system/vendor/modules/videobuf-core.ko
insmod /system/vendor/modules/videobuf-dma-contig.ko
#insmod tp and keyboard gsensor
insmod /system/vendor/modules/sw-device.ko
insmod /system/vendor/modules/sunxi-keyboard.ko
#insmod usb ethernet
insmod /system/vendor/modules/asix.ko
insmod /system/vendor/modules/qf9700.ko

......如果 Gsensor 使用而 CTP 不想使用时,只需要修改 sys_config.fex 中 的“ctp_list”主键下的 “ctp_list_used”子键值,将其设置为 0 即可,而不需要将加载语句删除掉,这样 ctp 驱动就不会被自动检测和加载。

(5) IDC 文件使用

adb shell getevent 命令,或者设备的名称为“ gslX680”,“ gt82x”,“ ft5x_ts”,“sunxi-ts”,“gt818_ts”,“gt811_ts”,“gt9xx”,“sw-ts”时,使用的 idc 名字均为 tp.idc。 idc 文件放置的目录为:system/usr/idc ,则在配置文件为 polaris_xx.mk拷贝语句如下所示:

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值