Firefly开源社区

标题: 《如何移植一款新的触摸IC驱动到firefly-rk3288或3128,以FT5X0X为例》 [打印本页]

作者: carlinluo    时间: 2015-8-25 11:58
标题: 《如何移植一款新的触摸IC驱动到firefly-rk3288或3128,以FT5X0X为例》
本帖最后由 carlinluo 于 2015-8-25 17:10 编辑

1.触摸屏驱动一般都可以从供应商得到驱动的DEMO

这些就是我们从供应商那得到的代码,要移植一款驱动,就必须先看懂原来的驱动,不要求完全看懂,能看个大概就可以,判断下驱动需要修改哪里。有的IC会提供移植文档,但是有的没有,以为电容触摸屏的驱动原理都差不多,所以驱动程序架构也相差不大。其中ft5x06x_ts.c是这个驱动的核心文件,文件的结构如下:


以上箭头所指的函数是驱动非常关键的函数, 分别是驱动的入口函数和驱动退出函数。 probe函数也非常重要即驱动的探测函数,
中断处理函数。


2.复制驱动文件到 kernel/drivers/input/touchscreen
注意,在touchscreen下面新建了个文件夹ft5x0x放驱动文件



3.编写Makefile Kconfig,让系统编译到我们放进去的驱动文件。
先在touchsrceen目录下修改MakefileKconfig


Kconfig的修改,添加红框的内容


Makefile的修改,添加红框的内容


然后进入ft5x0x目录,再添加一个Makefile文件




4.kernel 目录下敲make menuconfig 然后回车。
然后找到 > Device Drivers > Input device support > Touchscreens当前路径

       --- Touchscreens                                                   
       <*>   zet62xx touchscreen driver                                    
       < >   gslX680 touchscreen driver for firefly                        
       <*>   ft5x0x touchscreen driver for firefly                        
       <*>   Goodix touch screen gt801X2 support for rockchip based plat   
       < >   CT36X touchscreens support                                    
       <*>   VTL touchscreens support                                      
       < >   ADS7846/TSC2046/AD7873 and AD(S)7843 based touchscreens      
       < >   AD7877 based touchscreens                                    
       < >   Analog Devices AD7879-1/AD7889-1 touchscreen interface

选择ft5x0x touchscreen driver for firefly ,前面*号代表已经被选择,会编译到内核。


选择后保存退出,然后编译,出现各种错误。为什么会有那么多错误呢,因为驱动DEMO编写的时候不是在rk3288上写的,而且基于的内核2.6或者3.0比较旧,而rk3288使用的内核是3.10,采用的是dts,这就要我们去修改。
修改步骤:
①根据编译错误,或者找不到的头文件屏蔽了,在平台找到对应的头文件补上。
②根据错误提示继续修改,无非就是一些宏定义没有,或者结构体没有。
小技巧:打开firefly默认使用已经移植好的驱动,大概看下,就知道怎么改了。


5.编译通过后,让驱动跑起来,由于之前的驱动没有DTS,所以加入DTSGPIO 、中断等参数从dts获取。
①在ft5x0x_ts.cprobe函数加入以下代码,当然还得添加头文件,一些变量等


②在firefly-rk3288.dts中加入dts配置
如果你的IC是挂载I2C1就在里面加,如果是2就到i2c2里面加



6.接下来就是细节慢慢调试了。

RK3228移植触摸屏常遇到的问题:
1.I2C不通,检测下硬件,电源是否有电,检测设备的地址是否对。上电时序是否按规格书来,比如要求复位脚拉高等..
2.触摸屏分辨率和方向不对,驱动配置是否正确,如果配置对,可以从驱动里的固件修改,驱动固件一般找驱动ICFAE(技术支持工程师)来调试。

驱动调试工具可以用串口,ADB

touchscreen移植文档和驱动文件.zip

262.24 KB, 下载次数: 624, 下载积分: 灯泡 -1 , 经验 -1


作者: qiyei2009    时间: 2015-8-25 13:11
顶!!很需要
作者: zhansb    时间: 2015-8-25 14:12
必须顶:lol
作者: 暴走的阿Sai    时间: 2015-8-25 14:13
支持一个
作者: carlinluo    时间: 2015-8-25 17:11
:lol比较暴力粗糙(我很懒),驱动只是差不多了,具体还要修改,也没有实物调试,就这样了有问题,在群里沟通
作者: 胡杨    时间: 2015-11-12 10:41
版主,我看你在3288上移植了gslX680的驱动,这个驱动文件能分享一份吗?
作者: victor1215    时间: 2016-4-12 09:52
感謝!!!很需要

作者: yl586526    时间: 2016-4-26 11:27
支持
作者: ljj3166    时间: 2016-6-27 00:55
非常感谢楼主分享
作者: gyj82117    时间: 2016-6-27 18:13
支持一个
作者: zzyzjdy    时间: 2016-6-29 09:58
avavsvs
作者: laierqian    时间: 2016-7-6 13:48
学习!
作者: xiaofei    时间: 2016-7-26 10:26
谢谢,非常的有营养!
作者: Physicist    时间: 2016-8-10 10:12
早没看到啊。白白浪费时间折腾那么久,唉
作者: lam007    时间: 2016-8-10 14:19
非常不错,感谢楼主

作者: firefly_king    时间: 2016-8-11 16:26
支持 谢谢分享
作者: yly123ycyn    时间: 2016-8-11 17:53
已经移植成功

作者: __牧羊人    时间: 2016-12-17 15:46
不错.........................
作者: jackdan01    时间: 2017-2-6 14:13
请问楼主查看程序的软件叫什么?是在Linux运行环境下面吗?
作者: matt_chou    时间: 2017-3-13 09:55
支持一个 感謝!
作者: werren    时间: 2017-3-23 17:39
跟着做,但是摸屏幕后SDA SCL有波形了,但是屏幕没有反应。
求解
作者: werren    时间: 2017-3-23 17:40
yly123ycyn 发表于 2016-8-11 17:53
已经移植成功

我也移植focal家的屏幕,现在IIC有波形,地址我问了FAE,理论上没问题,但是就是不能滑动屏幕,我要怎么debug
作者: xueyuking    时间: 2017-3-23 20:01
你要加trace看有没有中断,有没有上报数据,一般来说和report有关。
作者: werren    时间: 2017-3-25 22:55
hi,你附件的FT5x06_ts.c文件是不是有错误?
我编译后点起来 发现touch坐标是不对的 ,我是FHD屏幕,有相应改了里面的参数。
有没有更新的文件可以share给我下,不胜感激!
作者: werren    时间: 2017-3-25 23:04
carlinluo 发表于 2015-8-25 17:11
:lol比较暴力粗糙(我很懒),驱动只是差不多了,具体还要修改,也没有实物调试,就这样了有问题,在群里沟通

求进展
作者: werren    时间: 2017-3-25 23:05
yly123ycyn 发表于 2016-8-11 17:53
已经移植成功

有需要在修改什么,我可以动作了,但是位置不大对
作者: werren    时间: 2017-3-25 23:10
xueyuking 发表于 2017-3-23 20:01
你要加trace看有没有中断,有没有上报数据,一般来说和report有关。

有中断,也有数据。
我觉得跟中断事件或者坐标转换有关,可能楼主给的ts.c中哪里还需要转换,我还不得要领。
ps. 要两点触控屏幕才能正常超控(两根手指下去)
作者: werren    时间: 2017-3-25 23:53
[    21322] Read the Ethernet MAC address from IDB:00:00:00:00:00:00
[   17.527693] eth0: device MAC address 1e:82:e1:b1:c2:d4
l 8 su.536361] libphy: stmmac: probed
[   17.539706] eth0: No PHY found
Sysctl 11 s39] wifi_driver_write: wifi driver already rmmod
rv_clk.676492] acc_open
[   17.678656] acc_release
   8.7.310954] FAT-fs (mmcblk0p14): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[   18.341061] avc:  denied  { set } for property=sys.vold.hasAsec scontext=u:r:vold:s0 _discext=u:object_r:system_prop:s0 tclass=property_service
[   18.354310] init: sys_prop: permission denied uid:0  name:sys.vold.hasAsec
[   18.361492] init: no such service 'fuse_internal_sd'
(31): ca61788] init: sys_prop: permission denied uid:10012  name:sys.gmali.version
camsy.715005] init: sys_prop: permi[    8denied uid:10039  name:sys.gmali.version
amsys_marv784] init: sys_prop: permission denied uid:1003  name:service.bootanim.exit
msys_mar93146] f28c7234,f28c7234,f28c7234
.775259] 5437] type=1400 audit(86411.870:4): avc:  denied  { execute } for  pid=1114 comm="Thread-68" name="libestool2.so" dev="mmcblk0p12" ino=519 scontext=u:r:untrusted_app:s0 tcontext=u:object_rev(devata_file:s0 tclass=file permissive=1
[   21.726689] type=1400 audit(86411.890:5): ain_cb(enied  { execute_no_trans } for  pid=1114 comm="Thread-68" path="/data/data/com.estrongs.android.pop/files/libestool2.so" dev="mmcblk0p12" ino=519 scontexsp_Sofuntrusted_app:s0 tcontext=u:object_r:app_data_file:s0 tclass=file permissive=1
te: 24.500849] ==ft5x0x_t[    8rrupt =
[   28.504332] ==ft5x0x_ts_pen_work =
[   28.510448] ==ft5x0x_ts_interrupt =
[   28.513964] ==ft5x0x_ts_pen_work =
tl 8 f.519535] ==ft5x0x_ts_interrupt =
[   28.522974] ==ft5x0x_ts_pen_work =
[   28.528943] ==ft5x0x_ts_interrupt =
[   28.532400] ==ft5x0x_ts_pen_work =
[   28.538061] ==ft5x0xailed!terrupt =
[   28.541497] ==ft5x0x_ts_pen_work =
[   28.547412] ==ft5x0x_ts_interrupt =
[   28.550847] ==ft5x0x_ts_pen_work =
Sysct.556590] ==ft5x0x_ts_interrupt =
[   28.560053] ==ft5x0x_ts_pen_work =
[   28.565957] ==ft5x0x_ts_interrupt =
[   28.569451] ==ft5x0x_ts_pen_worv_clk[   28.575102] ==ft5x0x_ts_interrupt =
[   28.578551] ==ft5x0x_ts_pen_work =
[   28.584443] ==ft5x0x_ts_interrt turn
[   28.587909] ==ft5x0x_ts_pen_work =
[   28.593612] ==ft5x0x_ts_interrupt =
[   28.597072] ==ft5x0x_ts_pen_work =
[   28.602irq_di=ft5x0x_ts_interrupt =
[   28.606433] ==ft5x0x_ts_pen_work =
[   28.612118] ==ft5x0x_ts_interrupt =
[   28.615558] ==ft5x0x_ts_pen_work =
turn o.621459] ==ft5x0x_ts_interrupt =
[   28.624899] ==ft5x0x_ts_pen_work =
[   28.630617] ==ft5x0x_ts_interrupt =
[   28.634(741):=ft5x0x_ts_pen_work =
[   28.639956] ==ft5x0x_ts_interrupt =
[   28.643395] ==ft5x0x_ts_pen_work =
s.gmal.649129] ==ft5x0x_ts_interrupt =
[   28.652575] ==ft5x0x_ts_pen_work =
[   28.658057] ==ft5x0x_ts_in18656]t =
[   28.661491] ==ft5x0x_ts_pen_work =

[   .1.3987] ==ft5x0x_ts_interrupt =
[   39.712594] ==ft5x0x_ts_pen_work =
[   39.718555] ==ft5x0x_ts_interrupt =
[   39.722104] ==ftnterrus_pen_work =
[   39.727715] ==ft5x0x_ts_interrupt =
[   39.731149] ==ft5x0x_ts_pen_work =
[   39.736887] ==ft5x0x_ts_interrupt =
[   39.740******=ft5x0x_ts_pen_work =
[   39.746242] ==ft5x0x_ts_interrupt =
[   39.749684] ==ft5x0x_ts_pen_work =
[   39.755408] ==ft5x0xCTED
nterrupt =
[   39.758848] ==ft5x0x_ts_pen_work =
[   39.764753] ==ft5x0x_ts_interrupt =
[   39.768189] ==ft5x0x_ts_pen_work =
[   39.773924] ==ft5x0x_battererrupt =
[   39.777405] ==ft5x0x_ts_pen_work =
[   39.783239] ==ft5x0x_ts_interrupt =
[   39.786711] ==ft5x0x_ts_p   17.k =
[   39.792441] ==ft5x0x_ts_interrupt =
[   39.795913] ==ft5x0x_ts_pen_work =
[   39.801800] ==ft5xcore_ainterrupt =
[   39.805260] ==ft5x0x_ts_pen_work =
[   39.810949] ==ft5x0x_ts_interrupt =
[   39.814445] adj 3 0x_ts_pen_work =
[   39.820306] ==ft5x0x_ts_interrupt =
[   39.823761] ==ft5x0x_ts_pen_work =
[   39.829489] ==ft5xoom_a_interrupt =
[   39.832947] ==ft5x0x_ts_pen_work =
[   39.838826] ==ft5x0x_ts_interrupt =
[   39.842259] ==ft5x0x_ts_pen_work00:00   39.847992] ==ft5x0x_ts_interrupt =
[   39.851452] ==ft5x0x_ts_pen_work =
[   39.857340] ==ft5x0x_ts_in
[   t =
[   39.860774] ==ft5x0x_ts_pen_work =
[   39.866504] ==ft5x0x_ts_interrupt =
[   39.869960] ==ft5x0x_ts_pen_work =
.67865.875849] ==ft5x0x_ts_interrupt =
[   39.879280] ==ft5x0x_ts_pen_work =
[   39.885006] ==ftdata ms_interrupt =
[   39.888448] ==ft5x0x_ts_pen_work =
[   39.894364] ==ft5x0x_ts_interrupt =
[   39.897798] ==r:vold_ts_pen_work =
[   39.903525] ==ft5x0x_ts_interrupt =
[   39.906983] ==ft5x0x_ts_pen_work =
[   39.9on den ==ft5x0x_ts_interrupt =
[   39.916304] ==ft5x0x_ts_pen_work =
[   39.922038] ==ft5x0x_ts_interrupt =
[   39.925488]p: perx0x_ts_pen_work =
[   39.931390] ==ft5x0x_ts_interrupt =
[   39.934850] ==ft5x0x_ts_pen_work =
uid:1.940564] ==ft5x0x_ts_interrupt =
[   39.944028] ==ft5x0x_ts_pen_work =
[   39.949883] ==ft5x0x_ts_interrupt =
[   39  20.30] ==ft5x0x_ts_pen_work =
[   39.959048] ==ft5x0x_ts_interrupt =
[   39.962499] ==ft5x0x_ts_pen_work =
[   39.968403] ==ft5x0x_ts_interrupt =
[ tool2.71857] ==ft5x0x_ts_pen_work =
[   39.977550] ==ft5x0x_ts_interrupt =
[   39.980995] ==ft5x0x_ts_pen_work =
rmissi.986893] ==ft5x0x_ts_interrupt =
[   39.990323] ==ft5x0x_ts_pen_work =
[   39.996082] ==ft5x0x_ts_interrupt =
[   39.999517ta/dat5x0x_ts_pen_work =
[   40.005423] ==ft5x0x_ts_interrupt =
[   40.008852] ==ft5x0x_ts_pen_work =
:s0 tc.014599] ==ft5x0x_ts_interrupt =
[   40.018033] ==ft5x0x_ts_pen_work =
[   40.023906] ==ft5x0x_ts_interrupt =
[] ==ft027335] ==ft5x0x_ts_pen_work =
[   40.033101] ==ft5x0x_ts_interrupt =
[   40.036538] ==ft5x0x_ts_pen_work =
[   40.042425s_inte5x0x_ts_interrupt =
[   40.045853] ==ft5x0x_ts_pen_work =
[   40.051617] ==ft5x0x_ts_interrupt =
[   40.055052] ==ft5x0x_=
[ n_work =
[   40.060953] ==ft5x0x_ts_interrupt =
[   40.064380] ==ft5x0x_ts_pen_work =
[   40.070107s_inte5x0x_ts_interrupt =
[   40.073541] ==ft5x0x_ts_pen_work =
[   40.079430] ==ft5x0x_ts_interrupt =
[   40.082857]_pen_wx0x_ts_pen_work =
[   40.088598] ==ft5x0x_ts_interrupt =
[   40.092050] ==ft5x0x_ts_pen_work =
[   40.097957s_inte5x0x_ts_interrupt =
[   40.101393] ==ft5x0x_ts_pen_work =
[   40.107121] ==ft5x0x_ts_interrupt =
[   40.110569] ==ft5x0x_ts_pen 28.5 =
[   40.116466] ==ft5x0x_ts_interrupt =
[   40.119907] ==ft5x0x_ts_pen_work =
6] ==f.125614] ==ft5x0x_ts_interrupt =
[   40.129063] ==ft5x0x_ts_pen_work =
[   40.134965] ==ft5x0x_ts_interrupt =
[   40.138400] ==ft5x0x_ts_pen_work =
9] ==f.144121] ==ft5x0x_ts_interrupt =
[   40.147547] ==ft5x0x_ts_pen_work =
[   40.153446] interr0x_ts_interrupt =
[   40.156874] ==ft5x0x_ts_pen_work =
[   40.161992] ==ft5x0x_ts_interrupt =
[   40.165430] ==ft5x0x_ts_pen_work =
9] ==f.202002] healthd: battery l=50 v=3 ] ==fth=2 st=3 chg=au
=
[  
作者: xueyuking    时间: 2017-3-28 11:36
werren 发表于 2017-3-25 23:10
有中断,也有数据。
我觉得跟中断事件或者坐标转换有关,可能楼主给的ts.c中哪里还需要转换,我还不得要 ...

在probe里上__set_bit(INPUT_PROP_DIRECT, ft5x0x_ts->input_dev->propbit);这个是改一指点无效的。
作者: werren    时间: 2017-3-28 17:33
xueyuking 发表于 2017-3-28 11:36
在probe里上__set_bit(INPUT_PROP_DIRECT, ft5x0x_ts->input_dev->propbit);这个是改一指点无效的。

感谢回复,已解决!
作者: abrhai    时间: 2017-4-29 20:49
非常感谢楼主分享
作者: liusk    时间: 2017-5-12 16:56
不错
作者: gyj82117    时间: 2017-5-12 18:36

非常感谢楼主分享
作者: z3j6w9    时间: 2017-5-12 20:28
支持分享
作者: zygcs    时间: 2017-6-7 14:04
{:4_183:}
作者: 2881026363    时间: 2017-6-9 15:31
学习,正好需要用到,谢谢楼主
作者: liancl    时间: 2017-6-12 18:01
可以可以,很棒的分享!
作者: kevin6861    时间: 2017-6-13 09:13
我编译后点起来 发现touch坐标是不对的,我是FT5406ee8 最大resolution 1792 x 1024,屏幕是1366 x768,有改了里面的相应参数。
ft5x0x_ts->x_max = 1366;
ft5x0x_ts->y_max = 768;
但touch坐标是不对,不知还有没有哪边还需要修改的,不胜感激!

作者: liancl    时间: 2017-6-13 22:31
很棒的干货!
作者: luoqindong    时间: 2017-6-18 10:33
很实用,谢谢
作者: erain    时间: 2017-6-26 16:17
谢谢
作者: a2373392    时间: 2017-7-12 14:29
正好需要, 謝謝~
作者: y2000yt    时间: 2017-8-3 15:47
谢谢分享
作者: kevin2017    时间: 2017-9-17 22:16
xueyuking 发表于 2017-3-28 11:36
在probe里上__set_bit(INPUT_PROP_DIRECT, ft5x0x_ts->input_dev->propbit);这个是改一指点无效的。

楼主 发的 代码 里面  没有   ,这个 段代码   set_bit(INPUT_PROP_DIRECT, ft5x0x_ts->input_dev->propbit) ,要加在那里   我 现在 也是 出现 圆圈  位置 不多 ,单指触摸 无效
作者: wuzongqiang193    时间: 2017-9-24 22:00
谢谢分享!非常宝贵

作者: wuzongqiang193    时间: 2017-9-24 22:00
谢谢分享!非常宝贵
作者: liaohui198821    时间: 2017-9-28 20:37
顶顶顶
作者: 小默jiang    时间: 2017-10-10 14:37
楼主, gsl3673 的触控驱动 有移植过吗
现在是无法捕捉到触点坐标

作者: shenzhen666    时间: 2017-10-10 23:51
怎么下载呢?
作者: matt_chou    时间: 2017-11-24 18:01

顶!!很需要
作者: zouxin2010    时间: 2017-11-29 14:38
好样的
作者: zouxin2010    时间: 2017-11-29 14:39
好样的好样的好样的好样的好样的好样的
作者: jinyiyexingg    时间: 2018-1-23 13:38
支持一个
作者: drydiy    时间: 2018-2-1 23:55
好文 强烈支持
作者: hch246    时间: 2018-2-22 18:30
好样的
作者: hch246    时间: 2018-2-28 20:14
触摸时有小圈圈,触摸没反应,位置也偏,是什么原因呢?
作者: yl586526    时间: 2018-4-19 20:07
支持
作者: Aimer_fire    时间: 2018-4-23 13:22
刚好有需要,希望能派上作用,谢谢!
作者: cdworld    时间: 2018-4-23 14:13
支持一下
作者: Aimer_fire    时间: 2018-4-23 20:45
kevin2017 发表于 2017-9-17 22:16
楼主 发的 代码 里面  没有   ,这个 段代码   set_bit(INPUT_PROP_DIRECT, ft5x0x_ts->input_dev->prop ...

您好,请问您解决了这个问题了吗?我在移植中也出现了这个问题
作者: 真心朋友    时间: 2018-6-4 19:33
Aimer_fire 发表于 2018-4-23 20:45
您好,请问您解决了这个问题了吗?我在移植中也出现了这个问题

请问您解决了吗,我也出现这样的问题
作者: fkx117080495    时间: 2018-6-13 10:39
帮助很大,感谢!
作者: 13760400890    时间: 2018-8-26 00:03
内容很好!顶一下
作者: 腾龙    时间: 2018-9-10 10:04
{:4_97:}
作者: linuxfor    时间: 2018-10-15 16:47
支持,学习了
作者: ?_S9mm1    时间: 2018-11-6 11:52
很好的资料  找了很久了
作者: dream    时间: 2018-12-13 08:55
顶一个  
作者: bo123456    时间: 2018-12-25 14:50
支持支持
作者: pig0045    时间: 2019-3-1 16:07
支持一下
作者: zuqisong    时间: 2019-4-15 14:56
好东西 看看
作者: zhangjy46    时间: 2019-5-5 13:38
停止触摸后20s左右需要点击好几次才能唤醒触摸,请问大家是如何解决的?
作者: air837389401    时间: 2019-6-15 09:03
支持!
作者: luoye0801    时间: 2019-7-11 17:12
这个很好
作者: tanglei1224    时间: 2019-8-21 15:43
支持,参考一下
作者: tanglei1224    时间: 2019-9-26 16:31
使用这个驱动,修改了部分代码,成功使用了ft7511。。。。
作者: Leo_Huang    时间: 2019-10-10 12:37
非常需要,感谢楼主分享
作者: qq543716996    时间: 2019-11-1 18:24
正有此需求,就来看看,果然有   。先取取经
作者: qq543716996    时间: 2019-12-16 16:36
可以可以用,可以用
作者: z2flood    时间: 2019-12-26 13:56
支持一个,多谢分享
作者: chen1233    时间: 2020-3-17 16:05
有没有FT5606移植成功的,10.1寸
作者: z2flood    时间: 2020-4-9 22:02
支持,学习一下。
作者: qingchengruoyu    时间: 2020-5-17 15:26
不错
作者: yyy2065    时间: 2020-10-12 20:01
为何我在的组无法下载
作者: g6190746    时间: 2021-3-12 11:54
可以可以用,可以用
作者: libsong    时间: 2021-3-30 22:44

作者: cxy_3288    时间: 2021-7-14 14:07
感谢博主  !!!!
作者: ZJS33    时间: 2021-10-26 10:15
支持一个
作者: chaojidaotuguai    时间: 2021-11-18 09:28
沙发
作者: heidongguang    时间: 2023-9-14 16:38
顶!!很需要




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1