Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1039080
  • 博文数量: 836
  • 博客积分: 43880
  • 博客等级: 大将
  • 技术积分: 5485
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-20 17:36
文章分类

全部博文(836)

文章存档

2011年(1)

2008年(835)

我的朋友

分类: LINUX

2008-08-20 18:26:40


最近因为工作需要涉及到了I2C总线。虽然我过去用过I2c,但看了Linuxkernel后才发现,一个layer能被做到这样完善。 1.Linux的I2C驱动架 Linux中I2C总线的驱动分为两个部分,总线驱动(BUS)和设备驱动(DEVICE)。其中总线驱动的职责,是为系统中每个I2C总线增加相应的读写方法。但是总线驱动本身并不会进行任何的通讯,它只是存在在那里,等待设备驱动调用其函数。 设备驱动则是与挂在I2C总线上的具体的设备通讯的驱动。通过I2C总线驱动提供的函数,设备驱动可以忽略不同总线控制器的差异,不考虑其实现细节地与硬件设备通讯。 1.1.总线驱动 在系统开机时,首先装载的是I2C总线驱动。一个总线驱动用于支持一条特定的I2C总线的读写。一个总线驱动通常需要两个模块,一个structi2c_adapter和一个structi2c_algorithm来描述:
staticstructi2c_adapterpb1550_board_adapter=

{

name:"pb1550adapter",

id:I2C_HW_AU1550_PSC,

algo:NULL,

algo_data:&pb1550_i2c_info,

inc_use:pb1550_inc_use,

dec_use:pb1550_dec_use,

client_register:pb1550_reg,

client_unregister:pb1550_unreg,

client_count:0,

};
这个样例挂接了一个叫做“pb1550adapter”的驱动。但这个模块并未提供读写函数,具体的读写方法由第二个模块,structi2c_algorithm提供。
staticstructi2c_algorithmau1550_algo=

{

 .name="Au1550algorithm",

 .id=I2C_ALGO_AU1550,

 .master_xfer=au1550_xfer,

 .functionality=au1550_func,

};


i2c_adap->algo=&au1550_algo;
这个样例给上述总线驱动增加了读写“算法”。通常情况下每个I2C总线驱动都定义一个自己的读写算法,但鉴于有些总线使用相同的算法,因而可以共用同一套读写函数。本例中的驱动定义了自己的读写算法模块,起名叫“Au1550algorithm”。 全部填妥后,通过调用:
i2c_add_adapter(i2c_adap);
将这两个模块注册到操作系统里,总线驱动就算装上了。对于AMDau1550,这部分已经由AMD提供了。 1 2 下一页>>


下载本文示例代码
阅读(272) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-01-05 14:51:37

就是啊 太无耻了 一看就是抄的

chinaunix网友2009-01-05 14:50:24

又是抄袭之作