123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- Kernel driver i2c-ocores
- Supported adapters:
- * OpenCores.org I2C controller by Richard Herveille (see datasheet link)
- Datasheet: http://www.opencores.org/projects.cgi/web/i2c/overview
- Author: Peter Korsgaard <jacmet@sunsite.dk>
- Description
- -----------
- i2c-ocores is an i2c bus driver for the OpenCores.org I2C controller
- IP core by Richard Herveille.
- Usage
- -----
- i2c-ocores uses the platform bus, so you need to provide a struct
- platform_device with the base address and interrupt number. The
- dev.platform_data of the device should also point to a struct
- ocores_i2c_platform_data (see linux/i2c-ocores.h) describing the
- distance between registers and the input clock speed.
- There is also a possibility to attach a list of i2c_board_info which
- the i2c-ocores driver will add to the bus upon creation.
- E.G. something like:
- 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,
- };
|