linux i2c子系统代码分析4 ---操作函数i2c_add_driver i2c_register_driver介绍

下面介绍 i2c 驱动相关操作函数

i2c_add_driver

kernel/include/linux/i2c.h

static inline int i2c_add_driver(struct i2c_driver *driver)

{
return i2c_register_driver(THIS_MODULE, driver);

}

 i2c_add_driver   添加一个i2c驱动,其就是封装了i2c_register_driver函数


kernel/driver/linux/i2c/i2c-core.c

/*
 * An i2c_driver is used with one or more i2c_client (device) nodes to access
 * i2c slave chips, on a bus instance associated with some i2c_adapter.
 */


int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
{
int res;


/* Can't register until after driver model init */
if (unlikely(WARN_ON(!i2c_bus_type.p)))
return -EAGAIN;


/* add the driver to the list of i2c drivers in the driver core */
driver->driver.owner = owner;
driver->driver.bus = &i2c_bus_type;


/* When registration returns, the driver core
* will have called probe() for all matching-but-unbound devices.
*/
res = driver_register(&driver->driver);
if (res)
return res;


/* Drivers should switch to dev_pm_ops instead. */
if (driver->suspend)
pr_warn("i2c-core: driver [%s] using legacy suspend method\n",
driver->driver.name);
if (driver->resume)
pr_warn("i2c-core: driver [%s] using legacy resume method\n",
driver->driver.name);


pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);


INIT_LIST_HEAD(&driver->clients);
/* Walk the adapters that are already present */
i2c_for_each_dev(driver, __process_new_driver);


return 0;
}

i2c_register_driver  i2c驱动注册函数,i2c驱动和i2c适配器关联


 if (unlikely(WARN_ON(!i2c_bus_type.p)))   检查驱动设备模型是否初始化好

driver->driver.owner = owner;
driver->driver.bus = &i2c_bus_type;      i2c驱动的驱动模型赋值


 driver_register(&driver->driver);           设备驱动模型驱动注册,建立设备驱动模型

INIT_LIST_HEAD(&driver->clients);     初始化驱动的i2c设备链表

i2c_for_each_dev(driver, __process_new_driver);   遍历i2c总线适配器,动态添加i2c设备


kernel/driver/linux/i2c/i2c-core.c

int i2c_for_each_dev(void *data, int (*fn)(struct device *, void *))
{
int res;


mutex_lock(&core_lock);
res = bus_for_each_dev

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值