1======================== 2Kernel driver i2c-ocores 3======================== 4 5Supported adapters: 6 * OpenCores.org I2C controller by Richard Herveille (see datasheet link) 7 https://opencores.org/project/i2c/overview 8 9Author: Peter Korsgaard <peter@korsgaard.com> 10 11Description 12----------- 13 14i2c-ocores is an i2c bus driver for the OpenCores.org I2C controller 15IP core by Richard Herveille. 16 17Usage 18----- 19 20i2c-ocores uses the platform bus, so you need to provide a struct 21platform_device with the base address and interrupt number. The 22dev.platform_data of the device should also point to a struct 23ocores_i2c_platform_data (see linux/platform_data/i2c-ocores.h) describing the 24distance between registers and the input clock speed. 25There is also a possibility to attach a list of i2c_board_info which 26the i2c-ocores driver will add to the bus upon creation. 27 28E.G. something like:: 29 30 static struct resource ocores_resources[] = { 31 [0] = { 32 .start = MYI2C_BASEADDR, 33 .end = MYI2C_BASEADDR + 8, 34 .flags = IORESOURCE_MEM, 35 }, 36 [1] = { 37 .start = MYI2C_IRQ, 38 .end = MYI2C_IRQ, 39 .flags = IORESOURCE_IRQ, 40 }, 41 }; 42 43 /* optional board info */ 44 struct i2c_board_info ocores_i2c_board_info[] = { 45 { 46 I2C_BOARD_INFO("tsc2003", 0x48), 47 .platform_data = &tsc2003_platform_data, 48 .irq = TSC_IRQ 49 }, 50 { 51 I2C_BOARD_INFO("adv7180", 0x42 >> 1), 52 .irq = ADV_IRQ 53 } 54 }; 55 56 static struct ocores_i2c_platform_data myi2c_data = { 57 .regstep = 2, /* two bytes between registers */ 58 .clock_khz = 50000, /* input clock of 50MHz */ 59 .devices = ocores_i2c_board_info, /* optional table of devices */ 60 .num_devices = ARRAY_SIZE(ocores_i2c_board_info), /* table size */ 61 }; 62 63 static struct platform_device myi2c = { 64 .name = "ocores-i2c", 65 .dev = { 66 .platform_data = &myi2c_data, 67 }, 68 .num_resources = ARRAY_SIZE(ocores_resources), 69 .resource = ocores_resources, 70 }; 71