日期:2014-05-16  浏览次数:20707 次

LinuxI2C子系统之一实例化IC2设备(Client)的四种方法(三、四)

终于翻译完了,有不准确的地方,还请大家多多指教。

上接博文:LinuxI2C子系统之一实例化IC2设备(Client)的四种方法(一、二)

 原文件位置:linux源码目录\Documentation\i2c\instantiating-devices                      

                      ===========================================

                                                    怎么实例化I2C设备

                      ===========================================

     与PCI与USB总线不同,I2C总线不能在硬件层就将挂在其上的设备枚举出来。相反地,软件必须清楚哪个设备挂在哪个I2C总线上及各个设备的地址ID。所以,内核驱动代码必须显式地“手动”实例化I2C设备。针对不同设备操作的复杂度及项目及其他需要,目前有四种实例化I2C设备的方法:

第三:为特定的设备枚举I2C总线

   有些时候我们无法获取足够的I2C设备信息,怎么调用i2c_new_probed_device()则更是无从谈起。一个典型的例子是为数众多的主板以及其上的多种显示芯片,这里有几十种搭配方式并且每种的地址就可能有25种(这句理解地不好,请多多指教)。即使给定这些数目巨大的主板信息,也几乎不可能建立起一个完整的可用显示芯片列表,幸运地是可以使用这类显示芯片都有制造商和设备ID寄存器,对其进行枚举并唯一地标示它们。

     这种情况下,I2C设备既不能提前定义然后注册又不能显式地实例化。相反地,i2c-core核心驱动将会在它们的驱动程序加载时尽可能快地枚举它们,如果枚举成功,那么这些I2C设备将会被自动地实例化。为了避免这种机制的副作用,必须保证以下两点:

(1)I2C设备驱动程序必须实现detect()函数,该方法用来读取设备专用寄存器以标示特定设备。

(2)只有可能存在挂载设备和允许被枚举的I2C总线才会被枚举。例如,在TV适配器枚举显示芯片,这是不允许的。

举例: