linux I2C 驱动之----i2c_client 的注册

来源:互联网 发布:智邦国际软件 编辑:程序博客网 时间:2024/05/22 05:24

 


分类: 驱动 linux2012-04-1923:24 535人阅读 评论(0) 收藏 举报

      我们知道,linux的设备模型将设备分成了driverdevice两大部分,driver即是设备的驱动,device即是硬件设备的具体描述,比如说:设备所拥有的中断,地址等,这里分析一下I2C驱动中device,也即i2c_client的注册。

      (注:这里所说明的是linux系统i2c设备新采用的方法。)

       在注册i2c驱动的时候,会去linux系统中的全局变量_i2c_board_list链表中去匹配i2c_client,匹配的条件是:名字和i2c的地址。所以,在注册i2c设备驱动的时候要先注册好i2c设备。注册的方法如下:

       首先,定义一个 i2c_board_info的变量,i2c_board_infoi2c系统定义的一个结构体,其定义如下:(include\linux\i2c.h

                      struct i2c_board_info {
                               char  type[I2C_NAME_SIZE];
                               unsigned short flags;
                               unsigned short addr;
                               void  *platform_data;
                               struct dev_archdata *archdata;
                               struct device_node *of_node;
                               int  irq;
                      };

其中最重要是typeaddr,前者是名字,后者是地址,至于其他的不需要的话可以不用管他,给一个例子:struct i2c_board_info __initdataxxx_ls_cm3212 =
                             {
                                     I2C_BOARD_INFO("cm3212",0x90), 

                            // I2C_BOARD_INFO是个简单的宏:.type="cm3212",.addr=0x90.
                             };

       然后,在板级系统初始化的时候注册:

   i2c_register_board_info(intbusnum,struct i2c_board_info const *info, unsigned len)

其中busnum表示你对应系统的那个 i2c控制(adapter),len表示你注册的info的个数。

       这样,系统中就存在了一个名字为type,地址为addri2c_client,当注册对应的驱动时,就会匹配成功,从而调用驱动的probe函数

 

原创粉丝点击