内核驱动 i2c-ocores¶
- 支持的适配器
Richard Herveille 的 OpenCores.org I2C 控制器(请参阅数据手册链接)https://opencores.org/project/i2c/overview
作者:Peter Korsgaard <peter@korsgaard.com>
描述¶
i2c-ocores 是 Richard Herveille 的 OpenCores.org I2C 控制器 IP 核的 i2c 总线驱动程序。
用法¶
i2c-ocores 使用平台总线,因此您需要提供一个带有基地址和中断号的 struct platform_device。设备的 dev.platform_data 还应指向一个 struct ocores_i2c_platform_data(请参阅 linux/platform_data/i2c-ocores.h),其中描述了寄存器之间的距离和输入时钟速度。还可以附加一个 i2c_board_info 列表,i2c-ocores 驱动程序将在创建时将其添加到总线。
例如类似
static struct resource ocores_resources[] = {
[0] = {
.start = MYI2C_BASEADDR,
.end = MYI2C_BASEADDR + 8,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = MYI2C_IRQ,
.end = MYI2C_IRQ,
.flags = IORESOURCE_IRQ,
},
};
/* optional board info */
struct i2c_board_info ocores_i2c_board_info[] = {
{
I2C_BOARD_INFO("tsc2003", 0x48),
.platform_data = &tsc2003_platform_data,
.irq = TSC_IRQ
},
{
I2C_BOARD_INFO("adv7180", 0x42 >> 1),
.irq = ADV_IRQ
}
};
static struct ocores_i2c_platform_data myi2c_data = {
.regstep = 2, /* two bytes between registers */
.clock_khz = 50000, /* input clock of 50MHz */
.devices = ocores_i2c_board_info, /* optional table of devices */
.num_devices = ARRAY_SIZE(ocores_i2c_board_info), /* table size */
};
static struct platform_device myi2c = {
.name = "ocores-i2c",
.dev = {
.platform_data = &myi2c_data,
},
.num_resources = ARRAY_SIZE(ocores_resources),
.resource = ocores_resources,
};