diff options
author | Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | 2012-11-01 16:07:21 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-11-15 20:20:29 +0100 |
commit | 28caf418499dc137f5c946ce23b7a1ba7630151d (patch) | |
tree | 3a37bb1f0e0e0f3e678c4f266168f3dec710b893 /arch/arm/mach-at91/at91sam9x5_devices.c | |
parent | 6c7aebadf2dbdbe8a410a2d8f04986cfa8d8845c (diff) | |
download | barebox-28caf418499dc137f5c946ce23b7a1ba7630151d.tar.gz barebox-28caf418499dc137f5c946ce23b7a1ba7630151d.tar.xz |
at91sam9x5: add i2c support
use i2c-gpio until we add the hw drivers
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-at91/at91sam9x5_devices.c')
-rw-r--r-- | arch/arm/mach-at91/at91sam9x5_devices.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/arch/arm/mach-at91/at91sam9x5_devices.c b/arch/arm/mach-at91/at91sam9x5_devices.c index 26a380d2ce..5a24325ca1 100644 --- a/arch/arm/mach-at91/at91sam9x5_devices.c +++ b/arch/arm/mach-at91/at91sam9x5_devices.c @@ -19,6 +19,7 @@ #include <mach/gpio.h> #include <mach/io.h> #include <mach/cpu.h> +#include <i2c/i2c-gpio.h> #include "generic.h" @@ -169,6 +170,63 @@ void __init at91_add_device_nand(struct atmel_nand_data *data) void __init at91_add_device_nand(struct atmel_nand_data *data) {} #endif +#if defined(CONFIG_I2C_GPIO) +static struct i2c_gpio_platform_data pdata_i2c0 = { + .sda_pin = AT91_PIN_PA30, + .sda_is_open_drain = 1, + .scl_pin = AT91_PIN_PA31, + .scl_is_open_drain = 1, + .udelay = 5, /* ~100 kHz */ +}; + +static struct i2c_gpio_platform_data pdata_i2c1 = { + .sda_pin = AT91_PIN_PC0, + .sda_is_open_drain = 1, + .scl_pin = AT91_PIN_PC1, + .scl_is_open_drain = 1, + .udelay = 5, /* ~100 kHz */ +}; + +static struct i2c_gpio_platform_data pdata_i2c2 = { + .sda_pin = AT91_PIN_PB4, + .sda_is_open_drain = 1, + .scl_pin = AT91_PIN_PB5, + .scl_is_open_drain = 1, + .udelay = 5, /* ~100 kHz */ +}; + +void at91_add_device_i2c(short i2c_id, struct i2c_board_info *devices, int nr_devices) +{ + struct i2c_gpio_platform_data *pdata; + + i2c_register_board_info(i2c_id, devices, nr_devices); + + switch (i2c_id) { + case 0: + pdata = &pdata_i2c0; + break; + case 1: + pdata = &pdata_i2c1; + break; + case 2: + pdata = &pdata_i2c2; + break; + default: + return; + } + + at91_set_GPIO_periph(pdata->sda_pin, 1); /* TWD (SDA) */ + at91_set_multi_drive(pdata->sda_pin, 1); + + at91_set_GPIO_periph(pdata->scl_pin, 1); /* TWCK (SCL) */ + at91_set_multi_drive(pdata->scl_pin, 1); + + add_generic_device_res("i2c-gpio", i2c_id, NULL, 0, pdata); +} +#else +void at91_add_device_i2c(short i2c_id, struct i2c_board_info *devices, int nr_devices) {} +#endif + /* -------------------------------------------------------------------- * UART * -------------------------------------------------------------------- */ |