RK3588 android12 适配 ilitek i2c接口TP

news2025/5/18 18:12:44

一,Ilitek 触摸屏简介

Ilitek 提供多种型号的触控屏控制器,如 ILI6480、ILI9341 等,采用 I2C 接口。
这些控制器能够支持多点触控,并具有优秀的灵敏度和响应速度。

Ilitek 的触摸屏控制器监测屏幕上的触摸事件。
当触摸发生时,控制器将触摸坐标(通常是 x 和 y 坐标)通过 I2C 总线发送给主机。


二,驱动移植

1. 设备树配置

查看原理图TP是挂在i2c5节点下:

&i2c5 {
        ilitek: ilitek@41 {
                compatible = "tchip,ilitek";
                reg = <0x41>;          //I2C设备地址
                pinctrl-names = "default";
                pinctrl-0 = <&ilitek_touch_gpio>;
                ilitek,irq-gpio = <&gpio3 RK_PC0 IRQ_TYPE_LEVEL_LOW>;   //使能引脚
                ilitek,reset-gpio = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;   //中断引脚
                status = "okay";
        };
};

&pinctrl {
        ilitek-touch {
                ilitek_touch_gpio: ilitek-touch-gpio {
                        rockchip,pins =
                                <3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>,
                                <3 RK_PC0 RK_FUNC_GPIO &pcfg_pull_up>;
                };
        };
};

注:一定要对应的I2C bus节点(硬件原理图上会有标注)。

2. 驱动文件配置

a. 拷贝驱动文件


各个文件说明如下:

ilitek_ts.h:驱动头文件,包含驱动中要用到的一些头文件以及宏和函数的声明等。
ilitek_platform_init.c:平台加载初始化需要的文件。
ilitek_main.c:驱动主文件,完成probe的具体实现,GPIO注册、读取TP信息、注册输入设备信息,报点,休眠唤醒处理等。
ilitek_update.c:驱动升级IC固件功能的具体实现。
ilitek_tool.c:用于支持TouchUtility apk 以及创建用命令升级固件、sensor test、查看固件版本的设备节点,以及一些调试命令的使用等等。
ilitek_protocol.c:共用的函数与ilitek protocol等。
ilitek_mp.c:用于sensor test功能。

驱动下载链接:https://download.csdn.net/download/weixin_45639314/90592022

将以上驱动文件( ilitek)拷贝到如下目录:

kernel-5.10/drivers/input/touchscreen/
b. 修改Makefile以及Kconfig
kernel-5.10/drivers/input/touchscreen/Makefile中添加:
obj-$(CONFIG_TOUCHSCREEN_ILITEK)     += ilitek/

-------------------------------------------------------
kernel-5.10/drivers/input/touchscreen/Kconfig中添加:
config TOUCHSCREEN_ILITEK
       tristate "ILITEK touchscreens matched with screen support for rockchip platform"
       depends on I2C && ARCH_ROCKCHIP
       help
         Say Y here if you have a touchscreen interface using the ILITEK
         touchscreen chip on Rockchip platform, and your board-specific
         initialization code includes that in its table of IIC devices.
         If unsure, say N.
c. 内核中加载驱动
kernel-5.10/arch/arm64/configs/rockchip_defconfig中添加:
CONFIG_TOUCHSCREEN_ILITEK=y

添加结束后单编内核即可。


三,部分驱动代码解析

int ilitek_power_on(bool status)
当定义了 ILITEK_ENABLE_REGULATOR_POWER_ON 宏时才有具体实现,对应的 ilitek_data->vdd ilitek_data->vdd_i2c 需在平台初始化代码中实现。若采用其他供电方式,需根据具体方式修改。

int ilitek_get_gpio_num(void)
用于获取 reset 和 irq GPIO 编号。若无需动态获取,需直接定义ILITEK_RESET_GPIOILITEK_IRQ_GPIO 为固定值。

int ilitek_request_gpio(void)
申请 GPIO 资源。若申请失败,会先释放再重试一次。成功后会将 reset 设置为输出高电平,irq 设置为输入模式。GPIO 操作需以具体平台接口为准。

复位函数(reset)
参数 delay 表示从拉低到拉高后的延时时间,需大于 IC 的初始化时间。

void ilitek_reset(int delay) {
    tp_log_info("delay = %d\n", delay);
    if (ilitek_data->reset_gpio > 0) {
        #if ILITEK_PLAT != ILITEK_PLAT_MTK
            gpio_direction_output(ilitek_data->reset_gpio, 1);
            mdelay(10);
            gpio_direction_output(ilitek_data->reset_gpio, 0);
            mdelay(10);
            gpio_direction_output(ilitek_data->reset_gpio, 1);
            mdelay(delay);
        #else
            tpd_gpio_output(ilitek_data->reset_gpio, 1);
            mdelay(10);
            tpd_gpio_output(ilitek_data->reset_gpio, 0);
            mdelay(10);
            tpd_gpio_output(ilitek_data->reset_gpio, 1);
            mdelay(delay);
        #endif
    } else {
        tp_log_err("reset pin is invalid\n");
    }
    return;
}

int ilitek_read_tp_info(void)

  1. 检测到 IC 型号为 ILI2511 时,会将 ilitek_repeat_start 置为 false。

  2. 对于大尺寸 IC,若通过 0xC0 命令读到数据 0x55(即 Bootloader 模式),会强制设置升级标志 ilitek_data->force_update

  3. 按键信息数组 keyinfo 默认大小为 10,若按键数超过 10,需在struct ilitek_ts_data中修改 keyinfo 的容量。

static int ilitek_request_irq(void)

#if ILITEK_PLAT != ILITEK_PLAT_MTK
    ilitek_data->client->irq = gpio_to_irq(ilitek_data->irq_gpio);
#else
    node = of_find_matching_node(NULL, touch_of_match);
    if (node) {
        ilitek_data->client->irq = irq_of_parse_and_map(node, 0);
    }
#endif

注意:中断号(IRQ)的获取方式需适配平台。若平台对 IRQ 有特殊配置,需修改此处以确保获取正确的中断号。


四,调试

a. 驱动无法进入 probe 函数

  1. 使用 board file 方式注册

检查 ILITEK_TS_NAME 与注册的 I2C 设备名称是否完全一致,必须匹配才能正确加载驱动。

  1. 使用 DTS(Device Tree)方式注册

检查 .of_match_table = ilitek_touch_match_table 中的 compatible 字符串是否与 DTS 中定义的 compatible 完全匹配,否则驱动无法正确绑定设备。

b. 通信不通

  1. 软件问题

确保 I2C 总线号和设备地址配置正确,这两项直接影响通信。
本文使用到的I2C总线号(I2C5)和设备地址(0x41),具体以实际硬件为主。

  1. 硬件问题

检查 IC **供电(VDD/VDD_I2C)**是否正常,确保电源稳定。
抓取 I2C 波形,确认是否符合通信协议(如 START/STOP 信号、ACK/NACK 响应)。
尝试移除同一 I2C 总线上的其他设备,排除总线冲突。

c. 报点问题

  1. 有触摸效果,但坐标映射错误

X、Y 轴需要交换
修改 ILITEK_ROTATE_FLAG 的值(0 ↔ 1)。

X/Y 轴需要镜像翻转(最大值变最小值)
调整 ILITEK_REVERT_X 或 ILITEK_REVERT_Y 的值(0 ↔ 1)。

使用显示屏分辨率
启用宏 #define ILITEK_USE_LCM_RESOLUTION,并正确设置 TOUCH_SCREEN_X_MAX 和 TOUCH_SCREEN_Y_MAX。

  1. 触摸无反应

中断问题

确认中断是否注册成功,检查 中断号 是否正确。

数据解析问题

通过日志确认触摸时是否有中断触发:
若有中断但无坐标,检查 ilitek_read_data_and_report_2120 或 ilitek_read_data_and_report_3XX 函数,打印原始数据确认是否有效。

硬件信号问题

抓取 INT 引脚波形,确认触摸时是否有正常的拉高/拉低动作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2332895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用安固软件实现电脑屏幕录像:四种实用方法分享

在日常工作中&#xff0c;有时我们需要录制电脑屏幕以进行教学演示、软件操作记录或重要会议的存档。安固软件终端安全管理系统提供了强大的屏幕录像功能&#xff0c;可以满足这些需求。 接下来&#xff0c;本文将介绍如何使用安固软件设置电脑实时画面录像&#xff0c;并分享…

[Effective C++]条款30:透彻了解inlining的里里外外

. 1、内联函数 inline内联函数的设计是为了消除函数调用的开销&#xff0c;在编译期间由编译器将函数体插入到每个调用点&#xff0c;来避免常规函数调用时的压栈、跳转和返回等操作&#xff0c;减少函数调用的时间开销。 1.1、内联函数作用 减少函数调用开销&#xff1a; 消…

这种情况是应为VScode的版本太新了,更新到1.86版本后要求远程连接服务器的内核版本不符合条件

这种情况是应为VScode的版本太新了&#xff0c;更新到1.86版本后要求远程连接服务器的内核版本不符合条件 解决方法 vscode降级&#xff0c;使用1.86以前的版本。亲测这种方法成功解决 首先关闭VSCode自动更新 Windows下载1.85版本链接&#xff1a;https://update.code.visua…

文件IO7(中文字库的原理与应用/目录检索原理与应用/并发编程的原理与应用)

中文字库的原理与应用 ⦁ 基本概念 一般在项目中都会显示汉字&#xff0c;都采用中文简体字符集&#xff0c;计算机早期只有ANSI组织设计的ANSII码&#xff0c;其实也属于字符集&#xff0c;这套字符集并未收录中文&#xff0c;只收录256个字符。 所以后期中国国家标准总局设…

基于SpringBoot的智慧社区管理系统(源码+数据库)

499基于SpringBoot的智慧社区管理系统&#xff0c;系统包含三种角色&#xff1a;管理员、用户主要功能如下。 【用户功能】 1. 首页&#xff1a;查看系统。 2. 超市商品&#xff1a;浏览超市中各类商品信息。 3. 动物信息&#xff1a;了解社区内的动物种类和相关信息。 4. 车位…

ICRA-2025 | 视觉预测助力机器人自主导航!NavigateDiff:视觉引导的零样本导航助理

论文&#xff1a;Yiran Qin 1 , 2 ^{1,2} 1,2, Ao Sun 2 ^{2} 2, Yuze Hong 2 ^{2} 2, Benyou Wang 2 ^{2} 2, Ruimao Zhang 1 ^{1} 1单位&#xff1a; 1 ^{1} 1中山大学&#xff0c; 2 ^{2} 2香港中文大学深圳校区论文标题&#xff1a;NavigateDiff: Visual Predictors are Ze…

【Linux】Orin NX编译 linux 内核及内核模块

1、下载交叉编译工具:gcc 1)下载地址:https://developer.nvidia.com/embedded/jetson-linux 选择TOOLS中的交叉编译工具:gcc 11.3 2)解压 将gcc编译器解压到指定目录中,如:/home/laoer/nvidia/gcc 3)配置环境变量 创建: ~/nvidia/gcc/env.sh添加: #!/bin/bash e…

【C++经典例题】字符串转整数(atoi)的实现与解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;C经典例题 期待您的关注 目录 一、问题描述 二、解题思路 三、代码实现 四、代码逻辑详解 1. 变量初始化 2. 忽略前导空格 …

数据库数据恢复——sql server数据库被加密怎么恢复数据?

SQL server数据库数据故障&#xff1a; SQL server数据库被加密&#xff0c;无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密&#xff0c;文件名字被篡改。 SQL server数据库数据恢复过程&#xff1a; 1、将所有数据库做完整只读备份。后续所有数据恢…

C# 组件的使用方法

类 Stopwatch 计算时间 Stopwatch sw new Stopwatch(); sw.Start(); // 要执行的代码块 Thread.Sleep(2000);sw.ElapsedMilliseconds // 消耗时间 Console.WriteLine(sw.ElapsedMilliseconds);组件 ListView 属性设置 外观 - View - Details 行为 - Columns -&#xff08;…

QCustomPlot频谱图

使用QCutomPlot做的读取txt文件显示频谱图的demo,帮助大家了解QCustomPlot的基本使用 1.运行结果 demo比较简单,用于文件读取,鼠标放大缩小,右键截图等基础功能. 2.绘图详解 绘图核心是将类提升为QCustomPlot之后进行重绘,重绘之前设计图表曲线,图标标题,坐标轴,坐标轴范围,背…

高并发的业务场景下,如何防止数据库事务死锁

一、 一致的锁定顺序 定义: 死锁的常见原因之一是不同的事务以不同的顺序获取锁。当多个事务获取了不同资源的锁,并且这些资源之间发生了互相依赖,就会形成死锁。 解决方法: 确保所有的事务在获取多个锁时,按照相同的顺序请求锁。例如,如果事务A需要锁定表A和表B,事务…

【Grok 大模型深度解析】第二期:架构探秘与训练哲学

在上一期的内容中,我们对 Grok 大模型从技术溯源的角度,了解了它从 Transformer 架构局限性出发,迈向混合架构创新的历程,同时也梳理了从 Grok - 1 到 Grok - 3 的版本迭代所带来的技术跃迁以及其独特的差异化优势。这一期,我们将深入到 Grok 大模型的架构内部,探究其精妙…

2025第四届大学生算法挑战赛(进阶训练1) A-E 题解报告

前言 这是第四届大学生算法挑战赛的练习赛系列&#xff0c;这个比赛是国家一级协会的。 这章是进阶训练1的A-E题&#xff0c;感觉还是蛮基础的。 题解 第四届大学生算法挑战赛 进阶训练1 A. 小理养鱼 思路: 博弈 斐波那契数组 省流描述: 经典的羊狼博弈&#xff0c;即1只…

P8668 [蓝桥杯 2018 省 B] 螺旋折线

题目 思路 一眼找规律题&#xff0c;都 1 0 9 10^9 109说明枚举必然超时&#xff0c;找规律&#xff0c;每个点找好像没有什么规律&#xff0c;尝试找一下特殊点&#xff0c;比如&#xff1a;对角线上的点 4 16 36(右上角&#xff09; 4k^2&#xff0c;看在第几层&#xff08;…

Matlab 三容水箱系统故障诊断算法研究

1、内容简介 Matlab 190-三容水箱系统故障诊断算法研究 可以交流、咨询、答疑 2、内容说明 略 其次&#xff0c;对 DTS200 三容水箱系统进行机理建模&#xff0c;可分为对象建模和故障 建模&#xff0c;搭建了水箱系统的 SIMULINK 模型并建立了基于 Taylor 展开及 T-…

查看容器内的eth0网卡对应宿主机上的哪块网卡

查看容器内的eth0网卡对应宿主机上的哪块网卡 问题描述解决办法1. 进入容器,查看网卡的iflink(接口链路索引)值方法1:方法2: 2. 从宿主机过滤查询到的iflink(接口链路索引)值3. 确定veth接口连接的网桥方法2: brctl查看连接到网桥的接口--推荐 4. 查看网桥连接的物理网卡 问题描…

RT-DETR-R18版本的ultralytics的yaml更改分享!!

0.前言 起因&#xff1a; 本人深度学习&#xff0c;无奈组内没有好的显卡&#xff0c;只有我自己拥有的一张4060卡跑CV&#xff0c;稍微大一点的模型跑不了&#xff0c;我的模型主打一个轻量化... 在找模型与我的模型进行比较的时候&#xff0c;看的RT-DETR-R18版本(GFLPOS也…