一、前言
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。描述信息如下所示: