1>将驱动code加入源码kernel目录,touch driver是drivers/input/touchscreen

可以直接放到这里,也可以新建个目录放进去,看自己喜好~我是建了个目录,会清晰一些

用的是cypress的touch,根据产品名称建了目录,把driver code都放进去

2>下一步就是把driver code加入编译了

cyttsp6目录拥有自己的Makefile和Kconfig文件,但是我们先要把cyttsp6目录加入编译,他自己的makefile才会被调到

①修改drivers/input/touchscreen的Makefile,加入编译条件CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6

注意这里编译条件名字不能随便起,要根据cyttsp6的Makefile内容一致,这是cyttsp6的Makefile:

obj-$(CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6)       += cyttsp6.o

编译条件CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6,保持一致(/touchscreen的Makefile修改)

obj-$(CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6)    += cyttsp6/

②修改drivers/input/touchscreen的Kconfig,引入cyttsp6的Kconfig文件

source "drivers/input/touchscreen/cyttsp6/Kconfig"

③cyttsp6中的Makefile和Kconfig也需要适当修改,把不存在文件的编译条件去掉,缺少的文件编译加上

总之哪里报错或者发现哪个必要文件没有编译进去,就检查Makefile和Kconfig就可以了

④在config开关文件中把以上涉及到的CONFIG条件都打开,这里用的是arch/arm64/configs/msm_defconfig

CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6=y
CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6_MT_A=y
CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6_I2C=y
CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6_BUTTON=y
CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6_PROXIMITY=y
CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6_DEVICETREE_SUPPORT=y
CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6_LOADER=y
CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6_DEVICE_ACCESS=y
CONFIG_TOUCHSCREEN_CYPRESS_CYTTSP6_DEBUG_MDL=y

⑤在out对应目录检查是否生成对应的.o文件

3>修改dtsi文件,添加driver节点

①将TP的示例dtsi文件中驱动节点添加到对应i2c下,例如我这是i2c3,具体值根据原理图即可

②这里TP节点名称是tsc@24,地址是0x24,需要在其上级节点修改ranges值(地址转换表),即这里添加的<0x24 0x24>,

至于tsc节点里面的属性值都代表什么意思,可以参考其hardware register guide,在驱动code里也有表现,如cy,mt下的cy,flags表示touch的方向

③还需要根据原理图来修改节点的interrupt pin,reset pin等

&soc {i2c_3: i2c@7577000 { /* BLSP1 QUP3 */compatible = "qcom,i2c-msm-v2";#address-cells = <1>;#size-cells = <0>;reg = <0x7577000  0x1000>;reg-names = "qup_phys_addr";interrupt-names = "qup_irq";interrupts = <0 97 0>;......disp_ser_1:serializer@0c {compatible = "ti,ds90ub947q";reg = <0x0c>;#address-cells = <1>;#size-cells = <0>;ranges = <0x2c 0x2c>,<0x24 0x24>;disp_des_1: deserializer@2c {compatible = "ti,ds90ub948q";reg = <0x2c>;slave-mode;};tsc@24 {compatible = "cy,cyttsp6_i2c_adapter";reg = <0x24>;/* GPIO 38, high-to-low edge triggered */interrupts = <22 0>;interrupt-parent = <&tlmm>;cy,core {cy,irq_gpio = <22>;/*cy,rst_gpio = <48>;*//*cy,err_gpio = <49>;*//* Enable cy,max_xfer_len to limit max I2C/SPI transfer length */cy,max_xfer_len = <64>;cy,btn_keys = <172 /* KEY_HOMEPAGE *//* previously was KEY_HOME, new Android versions use KEY_HOMEPAGE */139 /* KEY_MENU */158 /* KEY_BACK */217 /* KEY_SEARCH */114 /* KEY_VOLUMEDOWN */115 /* KEY_VOLUMEUP */212 /* KEY_CAMERA */116>; /* KEY_POWER */cy,btn_keys-tag = <0>;cy,mt {cy,inp_dev_name = "cyttsp6_mt";/* CY_MT_FLAG_FLIP | CY_MT_FLAG_INV_X | CY_MT_FLAG_INV_Y */cy,flags = <0x18>;cy,abs =/* ABS_MT_POSITION_X, CY_ABS_MIN_X, CY_ABS_MAX_X, 0, 0 */<0x35 0 1526 0 0/* ABS_MT_POSITION_Y, CY_ABS_MIN_Y, CY_ABS_MAX_Y, 0, 0 */0x36 0 768 0 0/* ABS_MT_PRESSURE, CY_ABS_MIN_P, CY_ABS_MAX_P, 0, 0 */0x3a 0 255 0 0/* CY_IGNORE_VALUE, CY_ABS_MIN_W, CY_ABS_MAX_W, 0, 0 */0xffff 0 255 0 0/* ABS_MT_TRACKING_ID, CY_ABS_MIN_T, CY_ABS_MAX_T, 0, 0 */0x39 0 15 0 0/* ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0 */0x30 0 255 0 0/* ABS_MT_TOUCH_MINOR, 0, 255, 0, 0 */0x31 0 255 0 0/* ABS_MT_ORIENTATION, -127, 127, 0, 0 */0x34 0xffffff81 127 0 0/* ABS_MT_TOOL_TYPE, 0, MT_TOOL_MAX, 0, 0 */0x37 0 1 0 0/* ABS_DISTANCE, 0, 255, 0, 0 */0x19 0 255 0 0>;cy,vkeys_x = <1366>;cy,vkeys_y = <768>;cy,virtual_keys = /* KeyCode CenterX CenterY Width Height *//* KEY_BACK */<158 1360 90 160 180/* KEY_MENU */139 1360 270 160 180/* KEY_HOMEPAGE */172 1360 450 160 180/* KEY SEARCH */217 1360 630 160 180>;};cy,btn {cy,inp_dev_name = "cyttsp6_btn";};cy,proximity {cy,inp_dev_name = "cyttsp6_proximity";cy,abs =/* ABS_DISTANCE, CY_PROXIMITY_MIN_VAL, CY_PROXIMITY_MAX_VAL, 0, 0 */<0x19 0 1 0 0>;};};};

④最后需要把上步修改的interrupt pin设置成gpio function(pinctrl.dtsi中)

     setb_9: setb_9 {mux {pins = "gpio22";function = "gpio";};config {pins = "gpio22";drive-strength = <16>;bias-disable;};};

理论上做完这些,编译boot.img烧入,touch应该至少能动了

4>添加idc配置文件,配置TP的类型、方向等

PRODUCT_COPY_FILES += device/qcom/msm8996/cyttsp6_mt.idc:system/usr/idc/cyttsp6_mt.idc

这是idc文件内容

touch.deviceType = touchScreen
touch.orientationAware = 1keyboard.orientationAware = 1
keyboard.builtIn = 1cursor.mode = navigation
cursor.orientationAware = 1

remount后直接push进去,或者编译system烧入,即可

Touch driver porting相关推荐

  1. I.MX6 Goodix GT9xx touchscreen driver porting

    /************************************************************************* I.MX6 Goodix GT9xx touchs ...

  2. AliOS Things 硬件抽象层(HAL)对接系列2 — SPI driver porting

    HAL层(Hardware abstraction layer) 的目的是为了屏蔽底层不同芯片平台的差异,从而使驱动层上面的软件不会随芯片平台而改变.AliOS Things定义了全面的HAL抽象层, ...

  3. Touch Driver介绍

    Touch Driver介绍 一.相关知识介绍 1.Touch Driver的加载过程 GWES到[HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/TOUCH]的" ...

  4. ILITEK touch driver

    流水帐式的记录一下调试过程: 大致需要修改的文件及目录: a: msm8960-perf_OT310-eth-cdrom-fuse_defconfig: +# CONFIG_TOUCHSCREEN_I ...

  5. Qt + 觸控 移植 – Qt and Touch Screen Porting to SBC6446 with LEOs for DaVinci

    完成了 Qt 接下來就是要讓觸控面板的功能也起來 因為之前有兩篇教學了 所以這篇照片可能會跳的比較快 不懂的話可以回去看看前兩篇的設定 [達文西] 建置開發環境 – Based on EDK6446 ...

  6. android4 触摸屏驱动,android中如何设计触摸屏驱动touch screen driver

    以下内容是来自android官方的文档,详细说明了android上层关心的event事件,如果要做一个好的TP驱动,这些信息是必须清楚的,另外现在的android2.3已经完全支持了virtualke ...

  7. MTK 驱动(64)---Mtk touch panel驱动/TP驱动详解

    Mtk touch panel驱动/TP驱动详解 TP还算是比LCM好理解的多. 在启动过程中,先注册/mediatek/custom/command/kernel/touchpanel目录下的具体驱 ...

  8. Mtk Ft6306 touch 驱动

    http://blog.csdn.net/sunweizhong1024/article/details/8572121 Linux Tt6306 Touch 驱动 1.    MTk Touch 驱 ...

  9. 高通Q+A Virtio hypervisor touch框架介绍(share-device)

    背景 大家都知道现在高通芯片在汽车行业的座舱域运用比较热门,但是这种现象不是突然冒出来的,高通最早在2015年左右就开始推广他们的第一代座舱芯片820A.而在2018年左右开始推广他们的第二代产品(6 ...

最新文章

  1. 机器学习研究者必知的八个神经网络架构
  2. wince 修改dns_如何修改wince的网络配置
  3. Docker学习笔记【一】
  4. webpack开发配置
  5. CSS Reset(css的初始化)
  6. Ubuntu系统下载地址(Ubuntu、ISO、Ubuntu下载)
  7. ctfshow-网络迷踪-初学乍练( 离谱! 一张图判断飞机的目的地?)
  8. SQL Server数据库技术大全——08讲 PD的使用
  9. 门户网站CDN实战优化教学案例分享
  10. python 导出为csv_批量导出SolidWorks模型点坐标值
  11. SpringBoot上传文件到后端服务器
  12. html自动写对联,html+css纯代码给自己的网站添加对联广告位
  13. Ricequant 平台入门--第一个量化交易策略
  14. 如何在计算机管理设置开机密码,电脑怎么设置开机密码 开机密码设置步骤
  15. python老鼠书和蛇鼠_哪种编程语言更好?抓到‘老鼠’就是‘好猫’
  16. python不定积分教学_python 求定积分和不定积分示例
  17. Win32Forth初学者指导-前言
  18. chm 乱码 掌阅_CHM乱码解决
  19. apache ab linux 下载,linux 下ab压力测试
  20. 免费主机 虚拟主机 香港虚拟主机

热门文章

  1. kotlin list总结
  2. 关于java语言的发展前景
  3. 2021年山东省安全员A证考试题库及山东省安全员A证考试技巧
  4. 那些优雅灵性的JS代码片段
  5. NTP反射放大攻击(三)ntp.conf配置文件详解
  6. 装箱问题(20 分)
  7. Fluentd学习笔记
  8. 15_ue4进阶末日生存游戏开发[设置和初始化属性]
  9. laradock安装
  10. Android Canvas.drawRect绘制矩形