diff options
Diffstat (limited to 'arch/arm/mach-ux500/board-u5500.c')
-rwxr-xr-x[-rw-r--r--] | arch/arm/mach-ux500/board-u5500.c | 88 |
1 files changed, 30 insertions, 58 deletions
diff --git a/arch/arm/mach-ux500/board-u5500.c b/arch/arm/mach-ux500/board-u5500.c index 2620be0f6a1..85b9f36c9be 100644..100755 --- a/arch/arm/mach-ux500/board-u5500.c +++ b/arch/arm/mach-ux500/board-u5500.c @@ -14,7 +14,7 @@ #include <asm/mach/arch.h> #include <asm/mach-types.h> -#include <mach/i2c-stm.h> +#include <mach/i2c.h> #include <mach/devices.h> #include <mach/setup.h> @@ -74,62 +74,34 @@ static struct gpio_altfun_data gpio_altfun_table[] = { * I2C */ -static struct i2c_platform_data u8500_i2c1_data = { - .gpio_alt_func = GPIO_ALT_I2C_1, - .name = "i2c1", - .own_addr = I2C1_LP_OWNADDR, - .mode = I2C_FREQ_MODE_STANDARD, - .clk_freq = 100000, - .slave_addressing_mode = I2C_7_BIT_ADDRESS, - .digital_filter_control = I2C_DIGITAL_FILTERS_OFF, - .dma_sync_logic_control = I2C_DISABLED, - .start_byte_procedure = I2C_DISABLED, - .slave_data_setup_time = 0xE, - .bus_control_mode = I2C_BUS_MASTER_MODE, - .i2c_loopback_mode = I2C_DISABLED, - .xfer_mode = I2C_TRANSFER_MODE_INTERRUPT, - .high_speed_master_code = 0, - .i2c_tx_int_threshold = 1, - .i2c_rx_int_threshold = 1 -}; +#define U8500_I2C_CONTROLLER(id, _slsu, _tft, _rft, clk, _sm) \ +static struct nmk_i2c_controller u8500_i2c_##id = { \ + /* \ + * slave data setup time, which is \ + * 250 ns,100ns,10ns which is 14,6,2 \ + * respectively for a 48 Mhz \ + * i2c clock \ + */ \ + .slsu = _slsu, \ + /* Tx FIFO threshold */ \ + .tft = _tft, \ + /* Rx FIFO threshold */ \ + .rft = _rft, \ + /* std. mode operation */ \ + .clk_freq = clk, \ + .sm = _sm, \ +} -static struct i2c_platform_data u8500_i2c2_data = { - .gpio_alt_func = GPIO_ALT_I2C_2, - .name = "i2c2", - .own_addr = I2C2_LP_OWNADDR, - .mode = I2C_FREQ_MODE_STANDARD, - .clk_freq = 100000, - .slave_addressing_mode = I2C_7_BIT_ADDRESS, - .digital_filter_control = I2C_DIGITAL_FILTERS_OFF, - .dma_sync_logic_control = I2C_DISABLED, - .start_byte_procedure = I2C_DISABLED, - .slave_data_setup_time = 0xE, - .bus_control_mode = I2C_BUS_MASTER_MODE, - .i2c_loopback_mode = I2C_DISABLED, - .xfer_mode = I2C_TRANSFER_MODE_INTERRUPT, - .high_speed_master_code = 0, - .i2c_tx_int_threshold = 1, - .i2c_rx_int_threshold = 1 -}; +/* + * The board uses 3 i2c controllers, initialize all of + * them with slave data setup time of 250 ns, + * Tx & Rx FIFO threshold values as 1 and standard + * mode of operation + */ -static struct i2c_platform_data u8500_i2c3_data = { - .gpio_alt_func = GPIO_ALT_I2C_3, - .name = "i2c3", - .own_addr = I2C3_LP_OWNADDR, - .mode = I2C_FREQ_MODE_STANDARD, - .clk_freq = 100000, - .slave_addressing_mode = I2C_7_BIT_ADDRESS, - .digital_filter_control = I2C_DIGITAL_FILTERS_OFF, - .dma_sync_logic_control = I2C_DISABLED, - .start_byte_procedure = I2C_DISABLED, - .slave_data_setup_time = 0xE, - .bus_control_mode = I2C_BUS_MASTER_MODE, - .i2c_loopback_mode = I2C_DISABLED, - .xfer_mode = I2C_TRANSFER_MODE_INTERRUPT, - .high_speed_master_code = 0, - .i2c_tx_int_threshold = 1, - .i2c_rx_int_threshold = 1 -}; +U8500_I2C_CONTROLLER(1, 0xe, 1, 1, 400000, I2C_FREQ_MODE_FAST); +U8500_I2C_CONTROLLER(2, 0xe, 1, 1, 400000, I2C_FREQ_MODE_FAST); +U8500_I2C_CONTROLLER(3, 0xe, 1, 1, 400000, I2C_FREQ_MODE_FAST); static struct amba_device *amba_board_devs[] __initdata = { &ux500_uart0_device, @@ -146,9 +118,9 @@ static void __init u5500_init_machine(void) amba_add_devices(amba_board_devs, ARRAY_SIZE(amba_board_devs)); - u8500_register_device(&ux500_i2c1_device, &u8500_i2c1_data); - u8500_register_device(&ux500_i2c2_device, &u8500_i2c2_data); - u8500_register_device(&ux500_i2c3_device, &u8500_i2c3_data); + u8500_register_device(&ux500_i2c_controller1, &u8500_i2c_1); + u8500_register_device(&ux500_i2c_controller2, &u8500_i2c_2); + u8500_register_device(&ux500_i2c_controller3, &u8500_i2c_3); } MACHINE_START(NOMADIK, "ST-Ericsson U5500 Platform") |