读一款TP驱动

最近工作中遇到的,这里只做技术分析,不分享相关代码了。

Core.c

----lib

----chips

代码大概是三个部分。

先看看Core吧

还是标准的内核module流程。

复制代码
late_initcall(xxx_ts_init);
// module_init(xxx_ts_init);
module_exit(xxx_ts_exit);

MODULE_AUTHOR("XXX Driver Team");
MODULE_DESCRIPTION("XXX Touchscreen Driver");
MODULE_LICENSE("GPL v2");

这个TP是根据I2C来进行处理的。

复制代码
#ifdef I2C_PORT

static const struct i2c_device_id hyn_id_table[] = {

    {.name = HYN_DRIVER_NAME, .driver_data = 0,},

    {},

};



static struct i2c_driver xxx_ts_driver = {

    .probe = xxx_ts_probe,

    .remove = xxx_ts_remove,

    .driver = {

        .name = xxx_DRIVER_NAME,

        .owner = THIS_MODULE,

        .of_match_table = xxx_of_match_table,

    },

    .id_table = xxx_id_table,

};

match是用来匹配设备树的,这里很重要的就是probe和remove两个函数。

probe比较复杂。

里面就是调用linux内核的I2C函数,比如i2c_check_functionality,然后开始poweron,这里主要是用pinctrl设置端口,然后regulator_set_voltage设置端口电压。

之后是根据设备树判断设备是否加载,之后开始处理中断。创建中断线程。

remove则相对比较简单。

待续。。。

相关推荐
时光の尘12 小时前
【STM32实战】ESP8266 通过 MQTT 协议对接 OneNET 云平台实现数据上传与下发(源码可直接移植)
stm32·mqtt·嵌入式·iot·esp8266
十年编程老舅12 小时前
读懂 MCU 启动:从上电到程序运行全链路
单片机·嵌入式硬件·mcu·嵌入式·cpu·嵌入式开发·ram
Qt程序员13 小时前
从上电到系统就绪:ARM+U-Boot 嵌入式 Linux 启动流程
linux·运维·c++·内核·设备树·嵌入式·ram
华清远见IT开放实验室18 小时前
华清远见亮相第64届高博会:聚焦具身智能,打造嵌入式/物联网/人工智能/机器人产教融合实践教学新生态
人工智能·物联网·机器人·嵌入式·实验室·具身智能·高校
爱学习的大牛12321 小时前
软考系统架构设计师嵌入式方向总结
系统架构·嵌入式
济6173 天前
ROS开发专栏---基于 IMU 实现机器人航向锁定实验---适配Ubuntu 22.04
嵌入式·ros2·机器人开发
断水客3 天前
8个Majorana量子比特:微软的“量子晶体管”时刻
嵌入式·量子计算
凉、介4 天前
深入理解 ARMv7-A|异常/中断处理
笔记·学习·嵌入式·arm
Embedded-Xin4 天前
ROS2进阶——消息服务质量QOS策略
linux·机器人·嵌入式
Embedded-Xin4 天前
ROS2进阶—ROS2生命周期节点
linux·机器人·自动驾驶·嵌入式