联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话:18888888888 QQ:-

15.6寸 GT9110H电容触摸 RK3566 android 调试记录

需求

在RK3566泰山派原本的android11 SDK基础下,调试出15.6寸LVDS屏 + 15.6寸GT9110H电容触摸。

关于 15.6寸LVDS屏 之前已经调过就不写怎么驱动了。本文主要讲 触摸调试。

硬件

图片#B #S #R #60% #auto
图片#B #S #R #60% #auto

驱动

驱动用是的 SDK 中默认自带的驱动,供应商提供的驱动没有用到,以及 cfg 文件也没有用到。

设备树

触摸I2C的设备树:

&i2c5 {
    status = "okay";
    pinctrl-0 = <&i2c5m0_xfer>;
    clock-frequency = <400000>;

    gt911: gt911@14 {
        compatible = "goodix,gt9xx";
        reg = <0x14>;
        status = "okay";

        tp-size = <9110>;
        max-x = <1920>;
        max-y = <1080>;
        pinctrl-0 = <&touch_gpio>;
        touch-gpio = <&gpio3 RK_PC1 IRQ_TYPE_EDGE_RISING>;
        pinctrl-names = "default";
        pinctrl-1 = <&reset_gpio>;
        reset-gpio = <&gpio3 RK_PC2 GPIO_ACTIVE_HIGH>;
    };
};

&pinctrl {

   ...(省略)
   
    gt911{
        touch_gpio: touch-gpio {
            rockchip,pins = <3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
        };
        reset_gpio: reset-gpio {
            rockchip,pins = <3 RK_PC2 RK_FUNC_GPIO &pcfg_pull_up>;
        };
    };
};

测试方法

进入系统的开发者选项。在设置找到 关于平板电脑 -> 版本号。连续点击版本号几次直到提示进入 开发者模式 为止。

进入开发者模式后,退回设置主页,找到 系统 -> 高级 -> 开发者选项 -> 指针位置 。将指针位置的选项打开,即可看到触摸点。

图片#B #S #R #60% #auto

调试记录

触摸范围不对

烧录上面的设备树后,发现X Y都镜像,触摸范围大小跟屏幕也不搭。

后面打开驱动源码的调试功能,看看具体啥问题。驱动源码位置:

<android SDK>\kernel\drivers\input\touchscreen\gt9xx

在 gt9xx.h 中找到 DEBUG_SWITCH 宏定义并设置为 1,即可打开DEBUG选项。
图片#B #S #R #60% #auto

完成后,编译内核烧录上电,通过 adb 调试查看日志发现在设备树中设置的像素并没有设置到屏幕里面,触摸范围是默认的1366,768。

查看日志命令:

dmesg | grep GTP-INFO

日志输出:
图片#B #S #R #60% #auto

可以看到它使用的触摸范围是默认的,而不是我们设置的,我的解决办法是直接写死触摸范围。
更新代码:
图片#B #S #R #60% #auto
主要是更新为以下代码:

input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0, ts->abs_x_max, 0, 0);
input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, 0, ts->abs_y_max, 0, 0);

ts->abs_x_max 和 ts->abs_y_max 就是我们输入的参数。
设置完成后编译烧录测试应该触摸范围正常了。

触摸XY镜像

后面了解到,在设备树中,配置tp-size 参数为 9110,而在驱动代码中,是根据这个 tp-size 来配置的是否镜像。

驱动源码中关于 tp-size 配置是否镜像的位置:

图片#B #S #R #60% #auto

三个关键参数:

gtp_change_x2y = FALSE; // x、y是否交换方向  TRUE开启   FALSE关闭
gtp_x_reverse = FALSE; //是否开启X反向  TRUE开启   FALSE关闭
gtp_y_reverse = FALSE;//是否开启Y反向  TRUE开启   FALSE关闭

这里我全部关闭就正常了。

 

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册