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来读取相关信息了。