I2C linux驱动程序

时间:2011-07-23 08:44:41

标签: device-driver linux-device-driver embedded-linux i2c

我需要为我的少数控制器编写自己的驱动程序 chipset.I使用SDK工作在SoC上,不提供“linux i2c” 兼容的“驱动程序。它有简单的i2c字符驱动程序。我想 使用一些标准的i2c RTC驱动程序。

  • 我假设我需要将文件添加到/ busses文件夹中 实现标准接口。就这样。这个文件应该 与i2c-core和i2c-dev合作?

  • 哪种驱动程序最好?我有~9个32位寄存器 跟...共事。从第一眼看,i2c-ibm_iic.c对我来说相当 友好。

I2C是此SoC的SPI和USB小工具驱动程序之前的预热。 你知道这些任务的原始人/小时估计吗?

我将不胜感激。

BR Bartlomiej Grzeskowiak

2 个答案:

答案 0 :(得分:3)

第一项业务是查找您的IC驱动程序是否已在Linux内核或第三方中实现。您可能会发现您需要的驱动程序已经实现。尝试询问您的SoC供应商是否可以告诉哪家公司制造了I2C宏单元,因为您正在寻找替代驱动程序。同样,您可能会发现您需要的驱动程序已经存在。

你正在寻找合适的地方。该文件应该进入总线并且应该实现并注册驱动程序接口。您还需要注册平台设备,以便内核像往常一样连接驱动程序 - 设备对。其他SoC有很多例子,如果你没有。我认为您不会发现需要与i2c-core和i2c-dev进行交互。

我会寻找一个小文件大小和最近修改过的驱动程序,如果我必须选择一个作为基线。

SPI将花费与I2C相同的工作量。 USB小工具将会相当多 - 是其他两项任务所需工作量的几倍,具体取决于需要多少实施工作。我不愿意为任何一个任务写一个数字。如果幸运的话,并不是所有的功能都需要(例如,你是否关心低功耗待机?)并且你可能会偷工减料。

答案 1 :(得分:0)

您正在谈论I2C总线(适配器)驱动程序。 这是大大简化的wiev:

您必须定义自己的I2C platform_driver结构并将其注册为platform_driver。 在probe()函数中,驱动程序与I2C设备绑定。

您必须定义自己的I2C设备结构,其中包含i2c_adapter初始化其成员,以及i2c_algorithm结构,用于定义挂钩(callbcaks)

static const struct i2c_algorithm xxx_i2c_algo = { .master_xfer = xxxxx()

然后将i2c_adapter添加到内核I2C层,以便i2c-corei2c-dev能够使用您的总线驱动程序。

SPI总线设备注册遵循类似的原理。