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

待续。。。

相关推荐
PinoLio4 小时前
鲁班猫烧录镜像win10平台
嵌入式·鲁班猫
不脱发的程序猿10 小时前
使用Python高效对比多个相似的CAN DBC数据
python·单片机·嵌入式硬件·嵌入式
皮蛋sol周10 小时前
嵌入式学习数据结构(二)双向链表 内核链表
linux·数据结构·学习·嵌入式·arm·双向链表
cui__OaO1 天前
Linux驱动--基于驱动设备分离的按键中断驱动
linux·运维·服务器·嵌入式
Hello_Embed1 天前
RS485 双串口通信 + LCD 实时显示(DMA+IDLE 空闲中断版)
笔记·单片机·学习·操作系统·嵌入式·freertos
Hello_Embed1 天前
RS485 双串口通信 + LCD 实时显示(中断版)
c语言·笔记·单片机·学习·操作系统·嵌入式
要做朋鱼燕2 天前
【AES加密专题】3.工具函数的编写(1)
笔记·密码学·嵌入式·aes
风痕天际2 天前
ESP32-S3开发教程三:蜂鸣器与FreeRTOS多任务协同
单片机·嵌入式·freertos·esp32s3
自激振荡器3 天前
第二天:IIC总线协议
单片机·嵌入式·通信协议·iic总线协议
一枝小雨3 天前
【OTA专题】 20 上电立即跳转:加快MCU启动速度
stm32·单片机·嵌入式·ota·bootloader·加速启动