0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

I2C注册/注销函数方法

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-22 15:17 次阅读

/kernel-5.10/drivers/i2c/i2c-core-base.c 是 I2C 的核心部分,I2C 核心提供了一些与具体硬件无关的 API 函数

1、i2c_adapter 注册/注销函数

int i2c_add_adapter(struct i2c_adapter *adapter)//自动分配 adapter ID
int i2c_add_numbered_adapter(struct i2c_adapter *adap)//指定 ID
void i2c_del_adapter(struct i2c_adapter * adap)

2、i2c_driver 注册/注销函数

int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
int i2c_add_driver(struct i2c_driver *driver)
void i2c_del_driver(struct i2c_driver *driver)

上述 API 一般需要在 init/exit 或者 probe/remove 函数中成对使用。

设备和驱动的匹配过程也是由 I2C 总线完成的,I2C 总线的数据结构为 i2c_bus_type,定义在 /kernel-5.10/drivers/i2c/i2c-core-base.c 文件,i2c_bus_type 内容如下:

struct bus_type i2c_bus_type = {
  .name = "i2c",
  .match = i2c_device_match,
  .probe = i2c_device_probe,
  .remove = i2c_device_remove,
  .shutdown = i2c_device_shutdown,
};

.match 就是 I2C 总线的设备和驱动匹配函数,在这里就是 i2c_device_match 这个函数,此函数内容如下:

static int i2c_device_match(struct device *dev, struct device_driver *drv)
{
 struct i2c_client *client = i2c_verify_client(dev);
 struct i2c_driver *driver;

 if (!client)
 return 0;

 /* Attempt an OF style match */
 if (of_driver_match_device(dev, drv))
 return 1;

 /* Then ACPI style match */
 if (acpi_driver_match_device(dev, drv))
 return 1;

 driver = to_i2c_driver(drv);
 /* match on an id table if there is one */
 if (driver- >id_table)
 return i2c_match_id(driver- >id_table, client) != NULL;

 return 0;
}

of_driver_match_device 函数用于完成设备树设备和驱动匹配。比较 I2C 设备节点的 compatible 属性和 of_device_id 中的 compatible 属性是否相等,如果相当的话就表示 I2C 设备和驱动匹配。

acpi_driver_match_device 函数用于 ACPI 形式的匹配。

i2c_match_id 函数用于传统的、无设备树的 I2C 设备和驱动匹配过程。比较 I2C 设备名字和 i2c_device_id 的 name 字段是否相等,相等的话就说明 I2C 设备和驱动匹配。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1348

    浏览量

    120881
  • 函数
    +关注

    关注

    3

    文章

    3911

    浏览量

    61313
收藏 人收藏

    评论

    相关推荐

    I2C规范,I2C总线原理

    I2C规范,I2C总线原理1 序言
    发表于 04-09 18:34

    6657 i2c 中断函数

    I2C以nand启动允许有中断函数吗?如果不行,该用什么方式启动才可以允许中断函数
    发表于 06-21 09:32

    pyboardCN V2 使用I2C接口驱动I2C外设DS3231

    ,I2C.MASTER)#新建一个I2C类的对象i2c,调用类的构造函数,设置I2C2接口的模式为Master即主机模式,接口类型为Mast
    发表于 08-17 16:53

    VS-RK3399板卡简单的I2C功能介绍

    _add_driver函数注册 I2C 驱动。i2c_add_driver(&gsl_ts_driver);在调用 i2c_add_driv
    发表于 09-25 11:06

    I2c函数该怎么改进?

    你好,是关于Harmony 1.07.01的版本。我发现了。是关于I2C通信功能的内部结构。如果你不在意,有可能产生严重的bug。比如DRV_I2C_Transmitfunction是执行通信的函数
    发表于 08-19 12:27

    i2c函数发送奇怪的数据

    _MasterWrite(&pData,1,SLV_adrs,&status);或者有任何标准方法来使用MCC构建的i2c函数?谢谢你的帮助,Nobuaki。
    发表于 04-16 10:50

    如何用普通C51实现I2C基本电平模拟函数和通用函数

    用普通C51实现的I2C基本电平模拟函数和通用函数
    发表于 04-25 07:02

    硬件I2C的说明

    使用硬件I2C的说明STM32F0使用硬件I2C作为master,与外设通信,code步骤如下:配置GPIO引脚功能初始化I2C外设调用I2C的外设库
    发表于 08-04 07:03

    AT32 I2C 2.0版新库使用分享(一)

    的demo,很容易上手,因为我要用到I2C,所以仔细的研究了一下,特此给大家分享一下库函数使用方法void i2c_reset(i2c_ty
    发表于 11-20 11:11

    I2C总线驱动和设备驱动

    为400kbit/s常见iic设备eeprom触摸芯片温湿度传感器mpu6050(姿态传感器)…框架图I2C核心提供I2C总线驱动和设备驱动的注册方法
    发表于 12-13 06:18

    通过i2c_new_device函数添加I2C设备

    嵌入式LINUX驱动学习之15 i2c代码举例(三轴加速度传感器MMA8653)方式二一、代码举例二、用户空间程序(参考方式一)本实例是通过i2c_new_device函数添加I2C
    发表于 12-17 06:57

    使用i2c设备的方法

    导言:最近在使用多个i2c设备时,读写出现冲突,我决定使用多个i2c接口,我把摄像头关闭后,使用3B+上的两个i2c同时进行读写操作,两个i2c同时读写。一、raspi-config配
    发表于 01-05 06:54

    I2C读写与使用

    下面直接上代码:I2CI2C读使用I2C和LCD时,对应的while前的初始化函数和必要的参数设置。over!...
    发表于 01-11 07:12

    I2C NVIC函数未创建怎么解决?

    我尝试在 STM32F401 上进行 I2C 环回测试。我添加了两个 I2C 端口并检查了 NVIC 设置。按照一些教程,下面的函数是自动创建的。但是当我生成代码时,这个函数没有被创建
    发表于 01-10 09:06

    I2C时钟设置计算方法

    I2C时钟设置计算方法I²C时钟设置计算方法
    发表于 10-20 08:17