Android MTK TP Driver 触屏驱动

——— 触屏驱动小结
智能手机驱动在LCD调试OK后,紧接着就是要将TP搞定了。此篇简单介绍了在MTK 6765(Android9.0 / kernel-4.9)环境下的调试focaltech的驱动小结。


目录

  • Android MTK TP Driver 触屏驱动
    • 一、TP启动过程及驱动概述
    • 二、修改驱动文件
      • 1、添加内核驱动文件
        • (1)驱动文件移植到指定目录
        • (2)修改Kconfig 文件
        • (3)修改Makefile 文件
        • (4)修改内核主文件
        • (5)修改内核驱动配置文件
      • 2、DTS设备树配置
      • 3、DWS文件配置
      • 4、用户文件配置
    • 三、小结

一、TP启动过程及驱动概述

Mtk Touch driver 驱动包括:Mtkplatform 虚拟平台设备驱动、Module touch IC 驱动、Inputsubsystem。
(1)Module touch IC 驱动就是我们要添加的主要内容。
(2)Mtk platform 设备驱动是mtk为了兼容多个touch IC驱动而设计出来的虚拟驱动,它会去遍历每一个touch IC驱动,直到其中一个初始化成功。
(3)Linux input_subsystem是linux的输入子系统,我们的输入设备都要通过这个子系统进行上报事件以及设置事件的类型。

下面这段就是驱动代码中最重要的接口主体部分:

static struct tpd_driver_t tpd_device_driver = {.tpd_device_name = "FT5x0x",.tpd_local_init = tpd_local_init,       //tp初始化,主要是注册iic、设置电压、注册中断等.suspend = tpd_suspend,               //休眠.resume = tpd_resume,                  //唤醒.attrs = {.attr = ft5x0x_attrs,.num  = ARRAY_SIZE(ft5x0x_attrs),},
};

二、修改驱动文件

在这里我们以实例的方式描述增加有一款TP的驱动。

首先,我们要了解原理图,规格书。了解驱动是什么芯片,规格书上了解相关硬件属性通讯方式,然后再一步一步添加文件和验证。缺少的找供应商索要。

当前我要添加的TP芯片属性如下表:

项目 内容
芯片名称 FT5436
品牌 focaltech
I2C地址 0x28
分辨率 720*1280
触摸按键 带3个触屏按键

1、添加内核驱动文件

(1)驱动文件移植到指定目录

将驱动文件打包到 focaltech_touch文件夹, 并将focaltech_touch驱动文件夹复制到内核触屏的目录下,有的驱动文件分散文件就多,有的比较集中文件就少。

kernel-4.9/drivers/input/touchscreen/mediatek

(2)修改Kconfig 文件

修改 mediatek 目录下的 Kconfig 文件,在这个文件增加如下一行,添加编译配置项目:

config TOUCHSCREEN_MTK_FOCALTECH_TSbool "FOCALTECH_TS for Mediatek package"default nhelpSay Y here if you have focaltech_touch touch panel.If unsure, say N.To compile this dirver as a module, choose M here: themodule will be called.source "drivers/input/touchscreen/mediatek/focaltech_touch/Kconfig"

(3)修改Makefile 文件

修改 mediatek 目录下的 Makefile 文件,在这个文件的末尾增加如下一行,添加编译路径:

 obj-$(CONFIG_TOUCHSCREEN_MTK_FOCALTECH_TS)  +=  focaltech_touch/

(4)修改内核主文件

内核主文件位置:

kernel-4.9\drivers\input\touchscreen\mediatek\focaltech_touch\focaduiyltech_core.c

修改I2C对应关键内容:

#define FTS_DRIVER_NAME                     "FT5436"//驱动名称定义
#define INTERVAL_READ_REG                   100  /* interval time per read reg unit:ms */
#define TIMEOUT_READ_REG                    1000 /* timeout of read reg unit:ms */
#define FTS_I2C_SLAVE_ADDR                  0x38//对比的I2C地址
....../*****************************************************************************
* Focaltech ts i2c driver configuration
*****************************************************************************/
static const struct i2c_device_id fts_tpd_id[] = {{FTS_DRIVER_NAME, 0}, {} };
static const struct of_device_id fts_dt_match[] = {{.compatible = "mediatek,cap_touch"},//I2C设备树匹配项{},
};
MODULE_DEVICE_TABLE(of, fts_dt_match);static struct i2c_driver tpd_i2c_driver = {.driver = {.name = FTS_DRIVER_NAME,.of_match_table = of_match_ptr(fts_dt_match),},.probe = tpd_probe,.remove = tpd_remove,.id_table = fts_tpd_id,.detect = tpd_i2c_detect,
};
......//初始化
static int __init tpd_driver_init(void)
{FTS_FUNC_ENTER();FTS_INFO("FocalTech Touchscreen [FT5436] Driver version: %s", FTS_DRIVER_VERSION);//打印logo排查问题tpd_get_dts_info();//这里获取设备树touch节点位置的值if (tpd_dts_data.touch_max_num < 2)tpd_dts_data.touch_max_num = 2;else if (tpd_dts_data.touch_max_num > FTS_MAX_POINTS_SUPPORT)tpd_dts_data.touch_max_num = FTS_MAX_POINTS_SUPPORT;//FTS_INFO("[FT5436]use_tpd_button = %d, tpd_key_num = %d, tpd_key_local = %d %d %d, tpd_dts_data.tpd_key_dim_local=%d",tpd_dts_data.use_tpd_button,tpd_dts_data.tpd_key_num,tpd_dts_data.tpd_key_local[0],tpd_dts_data.tpd_key_local[1],tpd_dts_data.tpd_key_local[2],*tpd_dts_data.tpd_key_dim_local);FTS_INFO("[FT5436]tpd max touch num:%d", tpd_dts_data.touch_max_num);#if FTS_PSENSOR_ENfts_proximity_init();
#endifif (tpd_driver_add(&tpd_device_driver) < 0) {FTS_ERROR("[TPD]: Add FTS Touch driver failed!!");}FTS_FUNC_EXIT();return 0;
}

(5)修改内核驱动配置文件

根据项目修改内核配置文件对应项目的宏。
文件路径:

kernel-4.9\drivers\input\touchscreen\mediatek\focaltech_touch\focaltech_config.h

以下几项是关键项,我将他们打开:

/** choose your ic chip type of focaltech //设置芯片类型 */
#define FTS_CHIP_TYPE   _FT5436
......
/** show debug log info* enable it for debug, disable it for release //打开DEBUG*/
#define FTS_DEBUG_EN                            1/** Customer power enable* enable it when customer need control TP power //打开2,8V系统供电* default: disable*/
#define FTS_POWER_SOURCE_CUST_EN                1

2、DTS设备树配置

设备树位置:

kernel-4.9\arch\arm64\boot\dts\mediatek\k65v1_64_bsp.dts

调用DTS驱动路径:

kernel-4.9/drivers/input/touchscreen/mediatek/mtk_ypd.c
添加或修改内容:

/* TOUCH start */
&touch {tpd-resolution = <720 1280>;// 分辨率use-tpd-button = <1>;       // 是否有按键tpd-key-num = <3>;           // 按键数量// 按键值, 按键对应的值: KEY_MENU, KEY_HOMEPAGE,KEY_BACK  // 定义位于 dts/include/dt-bindings/input/input.htpd-key-local = <139 172 158 0>;//触屏按键编号// 按键对应的矩形区域(中心点x, 中心点y, 宽度,高度)二维矩阵tpd-key-dim-local = <120 1350 40 20 360 1350 40 20 600 1350 40 20 0 0 0 0>;tpd-max-touch-num = <5>;// 最大触点个数tpd-filter-enable = <1>;// 是否开启防抖tpd-filter-pixel-density = <146>;// 防抖像素密度tpd-filter-custom-prameters = <0 0 0 0 0 0 0 0 0 0 0 0>;tpd-filter-custom-speed = <0 0 0>;pinctrl-names = "default", "state_eint_as_int", "state_eint_output0","state_eint_output1", "state_rst_output0", "state_rst_output1";pinctrl-0 = <&ctp_pins_default>;pinctrl-1 = <&ctp_pins_eint_as_int>;// 设为INTpinctrl-2 = <&ctp_pins_eint_output0>;// INT输出低pinctrl-3 = <&ctp_pins_eint_output1>; // INT输出高pinctrl-4 = <&ctp_pins_rst_output0>;// RST输出低pinctrl-5 = <&ctp_pins_rst_output1>;// RST输出高status = "okay";
};
&pio {ctp_pins_default: eint0default {};ctp_pins_eint_as_int: eint@0 {pins_cmd_dat {pinmux = <PINMUX_GPIO0__FUNC_GPIO0>;// 中断IOslew-rate = <0>;bias-disable;};};ctp_pins_eint_output0: eintoutput0 { // INT输出低pins_cmd_dat {pinmux = <PINMUX_GPIO0__FUNC_GPIO0>;slew-rate = <1>;output-low;};};ctp_pins_eint_output1: eintoutput1 { // INT输出高pins_cmd_dat {pinmux = <PINMUX_GPIO0__FUNC_GPIO0>;slew-rate = <1>;output-high;};};ctp_pins_rst_output0: rstoutput0 {// RST输出低pins_cmd_dat {pinmux = <PINMUX_GPIO90__FUNC_GPIO90>;// 复位IOslew-rate = <1>;output-low;};};ctp_pins_rst_output1: rstoutput1 {// RST输出高pins_cmd_dat {pinmux = <PINMUX_GPIO90__FUNC_GPIO90>;slew-rate = <1>;output-high;};};
};
/* TOUCH end */

3、DWS文件配置

修改DWS文件的目的是为了配置系统的中断号、设备树I2C地址和对应的名称等。
使用DrvGen.exe工具,配置vendor和kernel目录下的dws文件,
工具路径:

vendor\mediatek\proprietary\scripts\dct\DrvGen.exe)

配置文件路径如下:

vendor:vendor\mediatek\proprietary\bootable\bootloader\lk\target\k65v1_64_bsp\dct\dct\codegen.dws
kernel:kernel-4.9\drivers\misc\mediatek\dws\mt6765\k65v1_64_bsp.dws


如图所示为:中断0;延时0;上升沿触发

如图所示为:I2C名称 CAP_TOUCH; I2C地址:0x38,I2C硬件编号:I2C-0

4、用户文件配置

配置文件路径:

\kernel-4.9\arch\arm64\configs\k65v1_64_bsp_debug_defconfig
\kernel-4.9\arch\arm64\configs\k65v1_64_bsp_defconfig
debug 对应debug版本,如果不嫌麻烦,建议一起更改掉。

对应修改的文件内容:

CONFIG_TOUCHSCREEN_MTK_FOCALTECH_TS=y//打开配置
CONFIG_TOUCHSCREEN_MTK_GT1151 is not set//关闭配置
#CONFIG_TOUCHSCREEN_MTK_FT5X0X is not set//关闭配置

三、小结

1、TP驱动没有动到MTK的系统配置,这一点我认为修改效率还是相对较好的,不用我们上来就要全编译。

2、配置触屏按键的参数是由系统接口来实现获取设备树节点数据的,要如果触屏按键功能不行,可以通过debug,查看正确获取设备树数据。

Android MTK TP Driver 触屏驱动相关推荐

  1. Android MTK LCM Driver 屏驱动

    Android MTK LCM Driver 屏驱动 ---- 屏驱动小结 手机驱动调试第一就是LCM,也就是我们说的LCD屏,因此要求驱动第一时间将确认和点亮.此篇就简单描述了在MTK 6765(A ...

  2. android 使用shell模拟触屏_Appium常用操作之「微信滑屏、触屏操作」

    坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 目录 一.滑屏操作 1.访问之后,马上就滑屏可以吗? 2.连续实现 2 次滑屏 3.代码 二.模拟触屏 ...

  3. Android 中Touch(触屏)事件传递机制

    版本:2.0 日期:2014.3.21 2014.3.29 版权:© 2014 kince 转载注明出处 一.基本概念 在实际开发中,经常会遇到与触屏事件有关的问题,最典型的一个就是滑动冲突.比如在使 ...

  4. 酷比魔方knote5 青春版触屏驱动问题

    前些日子为了方便,买了一个二手的酷比魔方knote5青春版.但是可能因为是屏幕的厂商太小众了,驱动软件上没有相应的驱动.导致我换完系统后触屏功能用不了,所以我从原厂的固件里,把驱动提出来.有需要的朋友 ...

  5. android gps 轨迹记录仪,触屏轨迹定位记录仪 惠普F800G道路实测

    1触屏轨迹记录仪出现 对于具有"视频车险"的行车记录仪来说,高端产品往往更能得到的用户的信赖和青睐,因为高端的产品具有更加稳定的品质和丰富功能,能够为车主带来更为全面的行车记录保护 ...

  6. Linux触屏驱动Windows,linux 触摸屏驱动编写

    这篇文章主要介绍了linux 触摸屏驱动编写,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 早在诺基亚手机还比较流行的时候,那时候触摸屏用的还不多.但是随着触摸屏手机.即 ...

  7. android 使用shell模拟触屏_android命令行模拟输入事件(文字、按键、触摸等)

    前言 通过adb shell input可以模拟android各种输入事件,比如文字.按键.触摸等等. adb shell input Usage: input [] [...] The source ...

  8. android怎样实现手机触屏,Android触屏过程详解和实现view随手指移动而移动功能

    一.前言 在Android开发中,大家可能会遇到控件会随着点击或者滑动而改变,控件的滑动和大小改变上一章的animation动画效果已经讲过了,那么如何实现控件随着手势的移动而移动呢? 二.概述 1. ...

  9. android 使用shell模拟触屏_Android随笔之——用shell脚本模拟用户按键、触摸操作...

    之前写过两篇关于Android中模拟用户操作的博客(其实用一篇是转载的),现在就来讲讲用shell脚本来模拟用户按键操作.本次的目标是用shell脚本打开微信并在其搜索框中搜索相关内容. 本文的模拟功 ...

  10. WIN7/WIN10/WIN11系统下触屏软键盘无法跟随跳出,桌面模式无法自动弹出(随动键盘)

    1.开启自动弹出软键盘的功能. 按组合键 "Win+I" 进入Windows设置,选择设备 > 输入,勾上 "不处于平板电脑模式且未连接键盘时显示触摸键盘" ...

最新文章

  1. (转)线程安全的CopyOnWriteArrayList介绍
  2. 读源码Apache-commons-lang3-3.1(三)
  3. ETCD-节点挂掉会怎样?
  4. Linux目录规范和含义(转)
  5. 十六进制编码_十六进制色值的那些秘密
  6. 幅度调制信号 matlab,《利用MATLAB实现信号的幅度调制与解调.doc
  7. 完全二叉树的JAVA实现(以及非递归遍历方法)
  8. 电量计在手持设备中的实现
  9. mysql随机查询多条记录表_MySQL 随机查询表中N条记录
  10. 基于KMeans的指数择时策略
  11. python创建二维空列表_python创建与遍历List二维列表的方法
  12. Delphi XE 操作sqlite数据库
  13. R语言学习之R程序包安装
  14. 字母冒泡法排序c语言,C语言冒泡排序法的实现(升序排序法)
  15. CS系统设计与开发——人事档案管理系统的设计与实现
  16. Django教程(自强学堂)
  17. 使用pycharm和python遇到的一些问题
  18. 模型和算法,有什么区别
  19. 【UVM基础】uvm_resource_db 使用介绍
  20. Sign签名生成与校验

热门文章

  1. 账龄分析表excel模板_华为财务EXCEL内训手册(共131套模板,带公式).xls
  2. 荐书丨《哥德尔、艾舍尔、巴赫书:集异璧之大成》:机器人与音乐的次元壁破了
  3. L1-046 整除光棍 (20 分)
  4. java实现带logo的二维码
  5. 金山词霸2005开启后导致桌面刷新的问题
  6. 高速公路坐标高程计算软件3.1版发布
  7. 备考数据库系统工程师的那些时光,程序员的梦想依然发烫。
  8. app逆向 安卓开发环境搭建
  9. 安卓开发-开发环境搭建
  10. Unity中使用VideoPlayer控制播放暂停进度条