关于i2c_register_board_info()函数
来源:互联网 发布:网络监视窥探隐私 编辑:程序博客网 时间:2024/06/05 15:00
i2c_register_board_info()函数用于往__i2c_board_list这条链表添加一条i2c设备信息,在i2c adapter注册的时候,会扫描__i2c_board_list链表,然后调用i2c_new_device()函数来注册i2c设备,注意,要先于i2c adapter注册之前就添加好i2c设备信息,否则会出现调用了i2c_register_board_info()函数,而设备不能注册的情况。
i2c_register_board_info()函数如下:
i2c_add_numbered_adapter()->i2c_register_adapter()
在i2c_register_adapter()函数中调用了i2c_scan_static_board_info()函数,代码如下:
i2c_register_board_info()函数如下:
int __initi2c_register_board_info(int busnum,struct i2c_board_info const *info, unsigned len){int status;down_write(&__i2c_board_lock);/* dynamic bus numbers will be assigned after the last static one */if (busnum >= __i2c_first_dynamic_bus_num)__i2c_first_dynamic_bus_num = busnum + 1;for (status = 0; len; len--, info++) {struct i2c_devinfo*devinfo;devinfo = kzalloc(sizeof(*devinfo), GFP_KERNEL);if (!devinfo) {pr_debug("i2c-core: can't register boardinfo!\n");status = -ENOMEM;break;}devinfo->busnum = busnum;devinfo->board_info = *info;list_add_tail(&devinfo->list, &__i2c_board_list);}up_write(&__i2c_board_lock);return status;}注册i2c总线流程如下:
i2c_add_numbered_adapter()->i2c_register_adapter()
在i2c_register_adapter()函数中调用了i2c_scan_static_board_info()函数,代码如下:
static void i2c_scan_static_board_info(struct i2c_adapter *adapter){struct i2c_devinfo*devinfo;down_read(&__i2c_board_lock);list_for_each_entry(devinfo, &__i2c_board_list, list) {if (devinfo->busnum == adapter->nr&& !i2c_new_device(adapter,&devinfo->board_info))dev_err(&adapter->dev,"Can't create device at 0x%02x\n",devinfo->board_info.addr);}up_read(&__i2c_board_lock);}
i2c_scan_static_board_info()函数先扫描__i2c_board_list,然后调用i2c_new_device()函数来注册i2c设备。这就是静态注册i2c设备的方法,一般在板级的初始化函数中调用i2c_register_board_info()函数来完成i2c设备信息的添加。
除了这种方法外,Linux还提供了另外的方法来注册i2c设备。例如:
static const unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END };static int __devinit usb_hcd_pnx4008_probe(struct platform_device *pdev){(...)struct i2c_adapter *i2c_adap;struct i2c_board_info i2c_info;(...)i2c_adap = i2c_get_adapter(2);memset(&i2c_info, 0, sizeof(struct i2c_board_info));strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE);isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info, normal_i2c);i2c_put_adapter(i2c_adap);(...)}来自Documentation/i2c/instantiating-devices。
0 0
- 关于i2c_register_board_info()函数
- linux i2c子系统代码分析5 ---操作函数i2c_new_device i2c_new_probed_device i2c_register_board_info介绍
- I2C_BOARD_INFO{} / i2c_register_board_info() / i2c_match_id() / probe()
- i2c_register_board_info没有EXPORT_SYMBOL_GPL导出的解决方法
- I2C设备驱动编写,struct i2c_device_id,struct i2c_driver,i2c_add_driver,i2c_register_board_info
- I2C设备驱动编写,struct i2c_device_id,struct i2c_driver,i2c_add_driver,i2c_register_board_info
- I2C设备驱动编写,struct i2c_device_id,struct i2c_driver,i2c_add_driver,i2c_register_board_info
- I2C设备驱动编写,struct i2c_device_id,struct i2c_driver,i2c_add_driver,i2c_register_board_info
- I2C设备驱动编写,struct i2c_device_id,struct i2c_driver,i2c_add_driver,i2c_register_board_info
- I2C设备驱动编写,struct i2c_device_id,struct i2c_driver,i2c_add_driver,i2c_register_board_info
- 关于函数
- 关于函数
- 关于函数
- 关于函数
- 关于函数
- 关于函数
- 函数-关于javascript函数
- 关于随机函数
- VS---“重新生成解决方案”和"生成解决方案"的学习
- Codeforces 665A - Buses Between Cities
- 《Nodejs开发加密货币》之三:Nodejs让您的前端开发像子弹飞一样
- [POJ 2886] Who Gets the Most Candies? (Joseph环问题 + 树状数组)
- HTML5培训第10节课堂笔记(盒子模型、行内与块级、float、定位、html5布局)
- 关于i2c_register_board_info()函数
- Oracle简单易用的表结构导出方法
- nodejs包高效升级插件npm-check-updates
- bestcoder#82回顾
- 基于用户投票的排名算法:威尔逊区间
- [数据结构]Radix_sort(MSD)
- 写题时常犯错误归纳总结 = = 持续更新
- day55-hive实战:
- MOOC的Python笔记(四)元组与列表