分享

i2c struct i2c

 卓奇虫虫 2014-02-24
 1  struct i2c_adapter {
 2     struct module *owner;
 3     unsigned int id;
 4     unsigned int class// 适配器支持的类型,如传感器,eeprom等        
 5     const struct i2c_algorithm *algo;        //该适配器的通信函数    
 6     void *algo_data;
 7     /* data fields that are valid for all devices    */
 8     struct rt_mutex bus_lock;
 9     int timeout;                             //超时时间限定
10     int retries;                             //通信重复次数限定
11     /* 
12      * 内嵌的标准device,其中dev->type标识该设备
13      * 是个adapter,其值为i2c_adapter_type
14 */
15     struct device dev;        
17     int nr;                                  //适配器编号也是bus编号,第几条i2c总线
18     char name[48];                           //名字
19     struct completion dev_released;
20     struct mutex userspace_clients_lock;
21     struct list_head userspace_clients;
22 };


 1  struct i2c_client {
2 unsigned short flags; //设备的标志,如唤醒标志等等 3
4 /* chip address - NOTE: 7bit */
5 /* addresses are stored in the */
6 /* _LOWER_ 7 bits */
7 unsigned short addr; //设备的地址 8 char name[I2C_NAME_SIZE]; //设备的名字 9 struct i2c_adapter *adapter; //设备所属的适配器 10 struct i2c_driver *driver; //设备的driver
12 /* 13 * 内嵌的标准device模型,其中dev->type标识该设备 14 * 是个client,其值为i2c_client_type 15 */
16 struct device dev; /* the device structure */
17 int irq; //中断号 18 struct list_head detected; //挂接点,挂接在adapter 19 };

 1   struct i2c_driver {
 2     unsigned int class;                                   //支持的类型,与adapter的class相对
10     /* Standard driver model interfaces */
11     int (*probe)(struct i2c_client *, const struct i2c_device_id *);
12     int (*remove)(struct i2c_client *);
15     int (*suspend)(struct i2c_client *, pm_message_t mesg);
16     int (*resume)(struct i2c_client *);
31     struct device_driver driver; 
33     const struct i2c_device_id *id_table;                            //支持的client信息表
36     int (*detect)(struct i2c_client *, struct i2c_board_info *);     //探测函数
37     const unsigned short *address_list;                              //driver支持的client地址
38     struct list_head clients;                                        //挂接其探测到的支持的设备
39 };

三、i2c_add_driver分析

    驱动端的统一接口为i2c_add_driver:

static inline int i2c_add_driver(struct i2c_driver *driver)
{
    /*
     *注册i2c driver,可能是adapter的,也可能是client的
     */
    return i2c_register_driver(THIS_MODULE, driver);
}
int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
{

}
    /*
     * 如果i2c_driver->id_table存在,也就是支持的设备信息表
     * 存在,那么利用这个表进行匹配
     */










    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多