读一款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则相对比较简单。

待续。。。

相关推荐
fanged1 天前
Linux下的ADSP(TODO)
嵌入式
winddevil2 天前
[rCore学习笔记 027]地址空间
rust·嵌入式·rcore
宇努力学习3 天前
C语言编译原理
c语言·开发语言·嵌入式
玄奕子4 天前
使用vscode上传git远程仓库流程(Gitee)
vscode·gitee·嵌入式·git仓库
—你的鼬先生4 天前
基于树莓派ubuntu20.04的ros-noetic小车
python·嵌入式·ros·树莓派项目
倒霉熊dd4 天前
Cortex-M3架构学习:异常
学习·嵌入式·cortex-m3架构
玄奕子4 天前
GPT对话知识库——串口通信的数据的组成?起始位是高电平还是低电平?如何用代码在 FreeRTOS 中实现串口通信吗?如何处理串口通信中的数据帧校验吗?
stm32·gpt·嵌入式·串口通信·串口数据
正点原子4 天前
[XILINX] 正点原子ZYNQ7015开发板!ZYNQ 7000系列、双核ARM、PCIe2.0、SFPX2,性能强悍,资料丰富!
嵌入式
FreakStudio5 天前
全网最适合入门的面向对象编程教程:49 Python函数方法与接口-函数与方法的区别和lamda匿名函数
python·嵌入式·面向对象·电子diy
winddevil5 天前
[rCore学习笔记 026]第三章作业
rust·嵌入式·rcore