FT触屏驱动调试

以前调过一些驱动是基于kernel 2.6的,imx的kernel是3.0的,在驱动分布的代码有了非常大的变化,以前我们在做驱动设备匹配的时候回修改一些arch/arm/plat-xxx和arch/arm/mach-xxx中的代码,而现在kernel3.0,这些文件都没有了,取而代之的是设备数(dts),这带来的问题是dts对我来说比较陌生,所以先来了解下dts的语法,

这里推荐看这个https://wenku.baidu.com/view/9ac0c94d376baf1ffc4fad84.html  。
操作系统:android 7.1

开发板:imx6 solox

TP:敦泰FT5426

首先我做的是让屏幕亮起来,编译安卓并设置下uboot参数

setenv bootcmd boota mmc2

setenv bootargs console=ttymxc0,115200 init=/init androidboot.console=ttymxc0 consoleblank=0 androidboot.hardware=freescale vmalloc=128M cma=448M androidboot.selinux=permissive androidboot.dm_verity=disable video=mxcfb3:dev=ldb,if=RGB24

saveenv

因为我看到我们lvds数据线有4组,所以修改dtsi中的参数data-width = 24,分辨率我们的1024*600

结果花屏了,于是找了下硬件的兄弟核实下,结果4组只用了其中的三组,所以把数据宽度设置成data-width = 18

这里写图片描述

就这样屏幕顺利的亮了。我到uboot中吧启动时打印的屏幕信息也修改了一下,这样屏幕显示就没问题了,下面就是触摸的问题了。

拿到触屏的驱动时,驱动分别提供了高通, MTK,展讯三家的仔细比对之后发现这三家驱动主要还是针对kernel 2.6的,移植文档也是移植在修改arch/arm/plat-xxx和arch/arm/mach-xxx中的代码,高通提供的的驱动兼容性好一些,最后提到了dts,所以我果断选择了高通的代码,修修改改编译过去就ok啦(这里我说一下个人观点,对于移植,我觉得对于需要移植的代码如果需要你修改的代码太多,说明这个东西可移植性很差,或者说基本不能移植),我的这分代码可移植性还算不错,没有花多少工夫就编译过了。

然后在dts添加设备节点信息,我的tp模块使用的i2c通讯,所以在i2c总线下添加子设备,最初的时候我只添加了下图最上面7行,并且将status设为okay,但是我最初的时候没有很好地理解@之后的地址的意思(切记这里的地址不是你I2C总线的基地址,而是和你通讯的设备的地址)。

这里写图片描述

地址设置错了,驱动和设备没有正确匹配,导致我加的打印信息,没有出现,然后有尝试了其他的地址(我根本就没有在TP资料中找到这个地址),有的地址竟然匹配成功了,在这个过程中我把高通驱动提供的其他的dts设置修改一些也放上去了,因为不放的话驱动中在of_property_read_bool等这一类函数读取dts中属性的时候会报错。但是i2c无法正确通讯。然后学习使用示波器看了下i2c通讯的波形,发现只发了开始位,所以怀疑还是地址有问题,终于找到了这个地址,I2C通讯正常,打印下触摸坐标。TIM图片20170523161223

然后欢乐的去测试一下,纳尼,尽然不灵,我指东他打西,进过多个点的触摸找规律,发现xy轴好像反了,我知道安卓机有时要横屏,但是我的这分代码中没有我在网上看到的代码那样有xy互换的宏定义。所以最后我把代码上报时x y对调上报,并把dts中display-coords和panel-coords属性最后的两个参数都对调后,触屏完全可以了。

下面还有一个问题,就是屏幕的亮度太低,我已经修改了这里的default-level,却变化很小,然后尝试使用echo 100 >/sys/class/backligt/brightness,亮度变化还是很小,并且使用安卓上的亮度调节变化基本没有。然后使用示波器测量pwm那个背光线,发现频率是20k HZ,我们手册上的额定频率是600-1000HZ,于是调节pwm频率到额定范围,

这里写图片描述

发现安卓上可以控制亮度了,但是亮度还是不够,于是换了小一点的电阻,到此,屏幕完全可以了。

猜你喜欢

转载自blog.csdn.net/bin_zhang1/article/details/80708477
今日推荐