注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

LINUX驱动之IIC子系统之五I2C的适配器注册之legacy  

2012-11-21 21:59:07|  分类: LINUX内核驱动 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

LINUX驱动之IIC子系统之五I2C的适配器注册之legacy

因为这种方式是老式的,现在新的内核基本不再支持了,所以这里主要是讲一下,让大家明白看别人的驱动时别一时晕了。所以这里不会展开讲。

legacy风格的驱动需要自己创建i2c_client,并且需要驱动作者知道i2c设备的地址。New style的驱动不需要自己创建i2c_client,但是需要填写支持的设备列表或者支持设备的地址列表。说白了,主要在于设备注册和驱动注册的不同。对于Legacy的设备注册是在驱动运行的时候动态的创建,而新式的new-style则是采用静态定义的方式。

 

Legacy形式的adapter注册代码片段如下:

static struct i2c_driver pca953x_driver = {

 

                .driver = {

                                    .name= "pca953x", //名称

                                },

                .id= ID_PCA9555,//id 号

                .attach_adapter= pca953x_attach_adapter, // 调用适配器连接设备 ,注意这儿,是通过attach来实现的。

                .detach_client= pca953x_detach_client,// 让设备脱离适配器

 

主要的代码如下:

    dummy = bus_for_each_drv(&i2c_bus_type, NULL, adap, i2c_do_add_adapter);

这段代码遍历挂在i2c_bus_type上的驱动,然后对每一个驱动和adapter调用i2c_do_add_adapter().

代码如下:

static int i2c_do_add_adapter(struct device_driver *d, void *data)

{

    struct i2c_driver *driver = to_i2c_driver(d);

    struct i2c_adapter *adap = data;

     /* Detect supported devices on that bus, and instantiate them */

    i2c_detect(adap, driver);

    if (driver->attach_adapter) {

        /* We ignore the return code; if it fails, too bad */

        driver->attach_adapter(adap);

    }

    return 0;

}

该函数很简单,就是调用driver的attach_adapter()接口.

到此为止,adapter的注册已经分析完了.手头上没有老的LINUX代码,回头下一个,再详细的补充一下。

缺少内核,回头下几个。

  评论这张
 
阅读(711)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017