mirror of https://gitee.com/openkylin/linux.git
ARM: 5913/1: ARM U8500: add I2C platform configurations
This adds platform configurations to support four i2c controllers found on early MOP500 platform This depends on the patch 5908/1 for build to succeed. Signed-off-by: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
e208c447bd
commit
d48a41c181
|
@ -22,6 +22,7 @@
|
|||
#include <asm/mach/arch.h>
|
||||
|
||||
#include <plat/mtu.h>
|
||||
#include <plat/i2c.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/setup.h>
|
||||
|
@ -120,6 +121,70 @@ static struct amba_device pl031_device = {
|
|||
.irq = {IRQ_RTC_RTT, NO_IRQ},
|
||||
};
|
||||
|
||||
#define U8500_I2C_RESOURCES(id, size) \
|
||||
static struct resource u8500_i2c_resources_##id[] = { \
|
||||
[0] = { \
|
||||
.start = U8500_I2C##id##_BASE, \
|
||||
.end = U8500_I2C##id##_BASE + size - 1, \
|
||||
.flags = IORESOURCE_MEM, \
|
||||
}, \
|
||||
[1] = { \
|
||||
.start = IRQ_I2C##id, \
|
||||
.end = IRQ_I2C##id, \
|
||||
.flags = IORESOURCE_IRQ \
|
||||
} \
|
||||
}
|
||||
|
||||
U8500_I2C_RESOURCES(0, SZ_4K);
|
||||
U8500_I2C_RESOURCES(1, SZ_4K);
|
||||
U8500_I2C_RESOURCES(2, SZ_4K);
|
||||
U8500_I2C_RESOURCES(3, SZ_4K);
|
||||
|
||||
#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, \
|
||||
}
|
||||
|
||||
/*
|
||||
* The board uses 4 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
|
||||
*/
|
||||
U8500_I2C_CONTROLLER(0, 0xe, 1, 1, 100000, I2C_FREQ_MODE_STANDARD);
|
||||
U8500_I2C_CONTROLLER(1, 0xe, 1, 1, 100000, I2C_FREQ_MODE_STANDARD);
|
||||
U8500_I2C_CONTROLLER(2, 0xe, 1, 1, 100000, I2C_FREQ_MODE_STANDARD);
|
||||
U8500_I2C_CONTROLLER(3, 0xe, 1, 1, 100000, I2C_FREQ_MODE_STANDARD);
|
||||
|
||||
#define U8500_I2C_PDEVICE(cid) \
|
||||
static struct platform_device i2c_controller##cid = { \
|
||||
.name = "nmk-i2c", \
|
||||
.id = cid, \
|
||||
.num_resources = 2, \
|
||||
.resource = u8500_i2c_resources_##cid, \
|
||||
.dev = { \
|
||||
.platform_data = &u8500_i2c_##cid \
|
||||
} \
|
||||
}
|
||||
|
||||
U8500_I2C_PDEVICE(0);
|
||||
U8500_I2C_PDEVICE(1);
|
||||
U8500_I2C_PDEVICE(2);
|
||||
U8500_I2C_PDEVICE(3);
|
||||
|
||||
static struct amba_device *amba_devs[] __initdata = {
|
||||
&uart0_device,
|
||||
&uart1_device,
|
||||
|
@ -128,6 +193,14 @@ static struct amba_device *amba_devs[] __initdata = {
|
|||
&pl031_device,
|
||||
};
|
||||
|
||||
/* add any platform devices here - TODO */
|
||||
static struct platform_device *platform_devs[] __initdata = {
|
||||
&i2c_controller0,
|
||||
&i2c_controller1,
|
||||
&i2c_controller2,
|
||||
&i2c_controller3,
|
||||
};
|
||||
|
||||
static void __init u8500_timer_init(void)
|
||||
{
|
||||
#ifdef CONFIG_LOCAL_TIMERS
|
||||
|
@ -152,6 +225,8 @@ static void __init u8500_init_machine(void)
|
|||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++)
|
||||
amba_device_register(amba_devs[i], &iomem_resource);
|
||||
|
||||
platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));
|
||||
|
||||
spi_register_board_info(u8500_spi_devices,
|
||||
ARRAY_SIZE(u8500_spi_devices));
|
||||
|
||||
|
|
Loading…
Reference in New Issue