跳转至

17.触摸屏驱动

使用的是正点原子的触摸屏,主要使用的就是一个I2C读取屏幕数据然后上报,直接使用他写好的驱动,未作过多处理。只是需要进行一些设置。

正点原子的RGB电容触摸屏触摸芯片系列:

4.3 寸屏 480x272分辨率 使用的触摸芯片是gt9xx系列

4.3寸屏 800x480分辨率 使用的触摸芯片是gt9xx系列

7寸屏 800x480分辨率 使用的是edt-ft5x06系列

7寸屏1024x600分辨率 使用的是edt-ft5x06系列

10.1寸屏 1280x800分辨率使用的是gt9xx系列

设备树处理

添加屏幕驱动芯片节点,在&i2c2后面添加就可以了。

&i2c2 {
    clock_frequency = <100000>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_i2c2>;
    status = "okay";

    codec: wm8960@1a {
        compatible = "wlf,wm8960";
        reg = <0x1a>;
        clocks = <&clks IMX6UL_CLK_SAI2>;
        clock-names = "mclk";
        wlf,shared-lrclk;
    };

    ov5640: ov5640@3c {
        compatible = "ovti,ov5640";
        reg = <0x3c>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_csi1>;
        clocks = <&clks IMX6UL_CLK_CSI>;
        clock-names = "csi_mclk";
        pwn-gpios = <&gpio_spi 6 1>;
        rst-gpios = <&gpio_spi 5 0>;
        csi_id = <0>;
        mclk = <24000000>;
        mclk_source = <0>;
        status = "okay";
        port {
            ov5640_ep: endpoint {
                remote-endpoint = <&csi1_ep>;
            };
        };
    };

    ft5426: ft5426@38 {
        compatible = "edt,edt-ft5426","edt,edt-ft5406";
        reg = <0x38>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_tsc
                    &pinctrl_tsc_reset >; 
        interrupt-parent = <&gpio1>; 
        interrupts = <9 0>; 
        reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;  
        interrupt-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; 
        status = "disable";
    };

    gt9147:gt9147@14 {
        compatible = "goodix,gt9147", "goodix,gt9xx";
        reg = <0x14>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_tsc
                    &pinctrl_tsc_reset >; 
        interrupt-parent = <&gpio1>; 
        interrupts = <9 0>; 
        reset-gpios  = <&gpio5 9 GPIO_ACTIVE_LOW>;
        interrupt-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; 
        status = "okay";  /* 如果需要改为okay */
    };
};

然后需要修改pinctrl相关,iic引脚默认即可

pinctrl_tsc: tscgrp {
    fsl,pins = <
        /* FT5426 */
        /* MX6UL_PAD_GPIO1_IO09__GPIO1_IO09 0xF080  */  /* TSC_INT */

        /* GT9147 */
        MX6UL_PAD_GPIO1_IO09__GPIO1_IO09    0x10B0      /* TSC_INT */
    >;
};

pinctrl_tsc_reset: tsc_reset {
    fsl,pins = <
        MX6ULL_PAD_SNVS_TAMPER9__GPIO5_IO09 0x10B0
    >;
};

编译设备树即可

驱动相关

直接复制正点原子的驱动文件,生成ft5x06.ko gt9147.ko,然后加载。

加载完成后,看/dev/input/新加的event是什么,就可以使用hexdump /dev/input/event1来读取相关信息了。