1、 修改kernel-3.18\arch\arm64\configs\len6797_6m_n_debug_defconfig、6797_6m_n_defconfig
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_MTK=y
#CONFIG_TOUCHSCREEN_MTK_FT6X36=y
CONFIG_TOUCHSCREEN_MTK_GT1151=y //打开指定的tp,关闭其他的
#CONFIG_TOUCHSCREEN_MTK_GSLX680=y
2、device\ivvi\ivvi6797_6m_n
修改device\XXX\ProjectConfig.mk
CUSTOM_KERNEL_TOUCHPANEL = GT1XX //修改为指定tp
3、把厂家的代码放到kernel-3.18\drivers\input\touchscreen\mediatek\
4、kernel-3.18\drivers\input\touchscreen\mediatek\Kconfig 添加:
if INPUT_TOUCHSCREEN
config TOUCHSCREEN_MTK
tristate "MediaTek Touch Panel Driver"
default n
help
Say Y here if you have MediaTek touch panel.
If unsure, say N.
To compile this dirver as a module, choose M here: the
module will be called.
source "drivers/input/touchscreen/mediatek/GT1151/Kconfig"
5、 在kernel-3.18\drivers\input\touchscreen\mediatek\Makefile 添加:
obj-$(CONFIG_TOUCHSCREEN_MTK) += GT1151/
6、tp常用调试方法:
1. adb查看tp型号: -- 从log中查看
2. 查看tp报点
2.1 驱动中有打印的话:
cat /proc/kmsg | grep "tpd"
cat /proc/kmsg | grep -i "key|power|backlight"
2.2 可以直接从input设备节点/dev/input/event读取
getevent -i
getevent -t /dev/input/event5 (event?,用[getevent -i] 查看)
-- 查看到的是原始数据,看不出坐标点,只能看出有无上报
2.3 查看hal层收到的数据
3. 在tp还不通的时候/frameworks/base/include/ui/KeycodeLabels.h中定义了很多keyevent
inut keyevent 3 //home
inut keyevent 4 //back
inut keyevent 26 //power
4 检查硬件
用万用表测量6个引脚的电压:
正常工作电压 休眠电压
INT 1.8V 0V
RST 1.8V 1.8V
VDD 2.8V 2.8V
SDA 1.8V 1.8V
SCL 1.8V 1.8V
GND 0V 0V
通过[万用表]查看中断脚有无中断 - 实测可以
通过[万用表]查看TP的GND是否与主板的GND导通
通过[示波器]查看sda有无数据波形
二、如何使能tp的log
1 GT5668 默认打开 GTP_DEBUG() 由宏控制
#define GTP_DEBUG_ON 1 // enable log printed by GTP_DEBUG(...)
2 ft6xx6_ges 默认关闭 TPD_DEBUG()
-- 暂时没找到哪边开关
三、虚拟按键
1 虚拟按键坐标通常写在dts中,也可能写死在驱动,具体看驱动
&touch {
tpd-resolution = <720 1280>; // 分辨率 - 不用这里的,而是用defconfig中的lcm宽与高
use-tpd-button = <1>; // 虚拟按键使能
tpd-key-num = <3>; // 虚拟按键个数
tpd-key-local= <139 172 158 0>; // 虚拟按键坐标 - 兑换139 与158的位置可以按键对换
tpd-key-dim-local = <90 883 100 40 230 883 100 40 370 883 100 40 0 0 0 0>;
2 通过sys节点读取
cat /sys/board_properties/virtualkeys.mtk-tpd // 获取软件中虚拟按键坐标
2.1 读取底层TP虚拟安静键值
cat proc/kmsg | grep "tpd"
2.2 读取上层TP虚拟安静键值
logcat | grep "keyCode"
3 从input设备节点/dev/input/event?读取
getevent -i
getevent -t /dev/input/event5 // 获取tp在内核中通过input上报的数据
-----虚拟按键跟tp供用一个input设备
四、tp翻转180度
kernel-3.18\drivers\input\touchscreen\mediatek\ft6x36\focaltech_core.c 打开宏:
#define CONFIG_TPD_ROTATE_180
驱动中有:(没有可以自己实现)
#if defined(CONFIG_TPD_ROTATE_90) || defined(CONFIG_TPD_ROTATE_270) || defined(CONFIG_TPD_ROTATE_180)
static void tpd_rotate_180(int *x, int *y)
{
*y = TPD_RES_Y + 1 - *y; // TPD_RES_Y -- mtk_tpd.c从defconfig的CONFIG_LCM_HEIGT获得
*x = TPD_RES_X + 1 - *x;
}
#endif
static void tpd_down(int x, int y, int p, int id)
{
#if defined(CONFIG_TPD_ROTATE_180)
tpd_rotate_180(&x, &y);
#endif
...
input_report_abs(tpd->dev, ABS_MT_POSITION_X, x);
}
五、相同ic的tp模组做兼容 - 根据读寄存器OxB8,