CPU : RK3288
系统: Android 5.1
触摸 IC : GT911
1 、在 menuconfig 或者 rockchip_defconfig 中支持触摸屏。具体用哪种方式需要结合编译方法。
按照瑞芯微提供的编译方式,则修改 rockchip_defconfig ,这种方式在 make 前,需要执行 make rockchip_defconfig ,生成 .config 文件。
path : kernel/arch/arm/configs/rockchip_defconfig
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_GT9XX=y
只执行 make 的话,就要在 make menuconfig 中修改,保存后生成 .config 文件。
Device Drivers --->
Input device support --->
[*] Touchscreens --->
<*> Goodix touch screen gt9xx support for rockchip based platform
2 、修改触摸屏分辨率。
path : kernel/drivers/input/touchscreen/gt9xx/gt9xx.h
// 下面有两种定义分辨率的方式,任选一种
#define GTP_CUSTOM_CFG 1
... ...
#define GTP_1024X768
... ...
#if GTP_CUSTOM_CFG
#ifdef GTP_1024X768
#define GTP_MAX_HEIGHT 768
#define GTP_MAX_WIDTH 1024
#else
#define GTP_MAX_HEIGHT 320
#define GTP_MAX_WIDTH 480
#endif
// 触摸屏中断触发信号
#define GTP_INT_TRIGGER 0 // 0: Rising 1: Falling
#else
#define GTP_MAX_HEIGHT 4096
#define GTP_MAX_WIDTH 4096
#define GTP_INT_TRIGGER 1
#endif
3 、确认触摸屏 Sensor-ID ,有下面两种方式
(1) 根据硬件配置,需要咨询供应商。
//*************************** PART2:TODO define **********************************
// STEP_1(REQUIRED): Define Configuration Information Group(s)
// Sensor_ID Map:
/* sensor_opt1 sensor_opt2 Sensor_ID
GND GND 0
VDDIO GND 1
NC GND 2
GND NC/300K 3
VDDIO NC/300K 4
NC NC/300K 5
*/
(2) 内核运行时的 log 可以看出来
// 获取 sensor_id
ret = gtp_i2c_read_dbl_check(ts->client, GTP_REG_SENSOR_ID, &sensor_id, 1 );
if (SUCCESS == ret) // 获取 sensor_id 成功
{
// sensor_id 超出范围
if (sensor_id >= 0x06 )
{
GTP_ERROR( "Invalid sensor_id(0x%02X), No Config Sent!" , sensor_id);
ts->pnl_init_error = 1 ;
return - 1 ;
}
}
else // 获取 sensor_id 失败
{
GTP_ERROR( "Failed to get sensor_id, No config sent!" );
ts->pnl_init_error = 1 ;
return - 1 ;
}
// 成功后打印 sensor_id
GTP_INFO( "Sensor_ID: %d" , sensor_id);
4 、在 dts 文件中,修改触摸屏的硬件参数。
// i2c 接口
&i2c4 {
// 使能
status = "okay" ;
// 设备地址(记得除二)
ts@5d{
compatible = "goodix,gt9xx" ;
reg = < 0x5d >;
// 复位 IO
goodix,rst-gpio = <&gpio7 GPIO_B2 GPIO_ACTIVE_HIGH>;
// 中断 IO
goodix,irq-gpio = <&gpio7 GPIO_B1 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default" ;
// 中断 IO 默认上拉
pinctrl- 0 = <&gpio7_b1>;
// 触摸屏配置参数,需要供应商提供, group0-group5 ,根据 Sensor-ID 决定,若 ID=4 ,则使用 goodix,cfg-group4
goodix,cfg-group0 = [
63 40 01 E0 01 05 35 00 01 08 28 05 50 32 03 05 00 00 00 00
00 00 00 14 16 18 10 8C 20 08 17 15 31 0D 00 00 02 9A 04 24
00 00 00 00 00 03 64 32 00 00 00 0F 94 94 45 02 07 00 00 04
8D 13 00 5C 1E 00 3C 30 00 28 4C 00 1D 78 00 1D 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 02 04 06 08 0A 0C 0E 10
FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 02 04 06 08 0A 0C 0F 10 12 13 14 FF FF FF FF FF FF
FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 C9 01 ];
};
};
此时已配置完毕
若出现触摸方向 x 、 y 反了,可以联系供应商改配置文件,也可以在头文件中打开交换 x 、 y 坐标的宏
宏生效后,会在触摸按下的函数 gtp_touch_down 中,交换 x 、 y 坐标
#define GTP_CHANGE_X2Y 1 //swap x y
#if GTP_CHANGE_X2Y
GTP_SWAP(x, y);
#endif
若出现触摸方向 x 、 y 镜像了,可以联系供应商改配置文件,也可以在触摸按下的函数 gtp_touch_down 中,修改 x 、 y 坐标
// abs_x_max abs_y_max 分别是 x y 方向的最大值
// x 方向镜像
x = ts->abs_x_max - x;
// y 方向镜像
y = ts->abs_y_max - y;
若出现触摸不准,,触摸跳点等问题,则需要联系供应商查看硬件或者修改配置参数。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69948385/viewspace-2675453/ ,如需转载,请注明出处,否则将追究法律责任。