Linux下I2C驱动client注册的方法

来源:互联网 发布:cydia微信软件源 编辑:程序博客网 时间:2024/06/05 07:50
可参考linux-3.4/Documents/i2c/instantiating-devices文档


第一种方法:
定义一个i2c_board_info,里面有名字,地址
然后i2c_register_board_info(busnum,……)(把他们放入链表)
list_add_tail(&devinfo->list, &__i2c_board_list);
链表何时使用
i2c_register_adapter->i2c_scan_static_board_info(struct i2c_adapter *adapter)>i2c_new_device
使用限制:必须i2c_register_adapter之前i2c_register_board_info
所以不适合我们动态加载insmod。


第二种方法:
1.2直接i2c_new_device,i2c_new_probe_device
1.2.1 i2c_new_device :认为设备肯定存在
1.2.2 i2c_new_probed_device :对于“已经识别出来的设备”probed__device”,才会(new)
probe(adap, addr_list[i] //确定设备是否真的存在
info->addr = addr_list[i];
return i2c_new_device(adap, info);


第三种方法:

1.3从用户空间创建设备
创建设备
echo at24c02 0x50 > /sys/class/i2c-adapter/i2c-7/new_device
删除设备
echo 0x50 > /sys/class/i2c-adapter/i2c-7/new_device
导致i2c_unregister_device

第四种方法:
通过i2c_detect函数。
i2c_detect函数执行过程:
    i2c_add_driver
        i2c_register_driver
             __process_new_driver
                i2c_do_add_adapter
                      i2c_detect
                         i2c_detect_address


其中在i2c_detect_address中做了两件很重要的事情:
1、err = driver->detect(temp_client, &info); //调用执行driver中的detect函数
2、client = i2c_new_device(adapter, &info);//根据driver->detect函数的Info参数创建一个client并且注册。

      

原创粉丝点击