核心驅動 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,
};