核心驅動 i2c-ocores

支援的介面卡

作者: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,
};