RK平台TP驱动移植(FT6336U)并将竖屏触摸改成横屏触摸

RK平台TP驱动移植(FT6336U)并将竖屏触摸改成横屏触摸

最近要移植一个TP驱动,找了一个TP厂商拿了样品,TP厂商给了一个FT6336U的驱动,里面还有一个高通平台的移植文档,但高通平台dts格式和RK平台dts格式有点不一样,所以将其修改成自己dts的格式,移植步骤如下:

  1. 将TP驱动整个目录放入kernel目录下,比如TP厂商给我的TP目录是focaltech_touch,把整个目录放入drivers/input/touchscreen/

  2. 修改drivers/input/touchscreen/下的Kconfig,把刚刚加进去的驱动目录加入编译规则,在最后增加一行

    source “drivers/input/touchscreen/focaltech_touch/Kconfig”
    
  3. 修改drivers/input/touchscreen/下的Makefile

    obj-$(CONFIG_TOUCHSCREEN_FTS)           += focaltech_touch/
    
  4. 修改makemenuconfig,将驱动目录编进内核,选择 Device Drivers -> Input Device Support ->Touchscreens -> Focaltech Touchscreen
    RK平台TP驱动移植(FT6336U)并将竖屏触摸改成横屏触摸_第1张图片

  5. dts增加节点,注意需要挂载相应的I2C总线

    focaltech@38{ 
    	status = "okay";
    	compatible = "focaltech,fts";	
    	reg = <0x38>;  					
    	interrupt-parent = <&gpio0>;				
    	interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
    	focaltech,reset-gpio = <&gpio0 12 GPIO_ACTIVE_LOW>; 
    	focaltech,irq-gpio = <&gpio0 11 IRQ_TYPE_LEVEL_LOW>; 
    
    	focaltech,max-touch-number = <10>;			
    	focaltech,display-coords =  <0 0 720 1280>;      //分辨率
    
    	/*focaltech,have-key;             //是否有按键
    	focaltech,key-number = <3>;	
    	focaltech,keys = <139 102 158>; 	
    	focaltech,key-y-coord = <2000>; 
    	focaltech,key-x-coords = <200 600 800>;*/
    };
    
  6. 编译烧录,查看是否有设备节点
    adb root
    adb remount
    adb shell
    cd /sys/bus/i2c/devices/*-0038,*代表使用到的 I2C 编号
    如果能看到一下节点,驱动一般是成功注册,并且可用,也可以通过查看log,当触摸的时候是否有点按下或者上报
    RK平台TP驱动移植(FT6336U)并将竖屏触摸改成横屏触摸_第2张图片

很幸运,在做完上面操作之后,我的TP已经成功可以用了,但由于FT6336U这个驱动是一款手机TP的驱动,是竖屏触摸,而我们的产品是需要横屏触摸,所以就有需求将竖屏触摸改成横屏触摸.

起初没有一点思路,不知到该如何下手,网上到处查资料,各种去论坛询问,都没有类似这样的资料,到最后自己也就死心了,就打算静下心来从驱动文件开始,一点一点研究一下他的触摸采点和上报流程.
首先看他的采点函数fts_read_touchdata
RK平台TP驱动移植(FT6336U)并将竖屏触摸改成横屏触摸_第3张图片
采完点之后是上报,fts_input_report_b,上报函数中有一个很重要的也很关键的步骤就是上报x和y的坐标
在这里插入图片描述
这个input_report_abs函数其内部就是我们最为核心,也是最想看到的一个事件上报函数
在这里插入图片描述
经过这个函数将x和y的坐标上报上去之后触摸生效,因此,我马上想到把x和y交换一下不就是横屏触摸了吗,果断将上报时的x坐标和y坐标调换一下
在这里插入图片描述
编译烧录发现是可以横着触摸了,但是触摸,但是有些地方触摸无效,突然想到,我设置的分辨率是720*1280,意味着当我竖着屏触摸时可以正常,因为我屏竖着的时候屏的x是720,y的坐标最大是1280,但是现在我将屏横过来了,以前的x就变成了现在的y,y就变成了x,自然分辨率需要调换一下,所以,修改dts将分辨率调换

	focaltech,display-coords =  <0 0 1280 720>;

编译烧录之后发现,确实有效,但是又有一个问题,就是触摸的时候,可以点击到屏幕图标,但就是左右反了,即你点左边的图标,右边的图标应用打开了,既然只是左右触摸反了,那好办把x坐标反一下就行了
在这里插入图片描述
编译烧录之后,触摸一切正常,成功将竖屏显示改成横屏显示.

虽然在本文将的是FT6336U驱动,但是无论是那个平台的驱动,思路是一样的,如果你想将竖屏触摸改成横屏触摸,可以试着在驱动里找到上报点的地方,将x和y反过来试试,可能不会一次成功,但肯定是会有一定效果.

将x和y调换过来的方法只适用与默认横屏和默认横屏触摸的场合,如果你的设备有gsensor,这样做肯定不符,因为需要根据gsensor的角度调整横竖屏触摸.

你可能感兴趣的:(Android,&,Linux底层驱动)