Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[~shefty/rdma-dev.git] / arch / arm / mach-ux500 / board-mop500.c
index 5265fb9835ccf50d2e8d7e9bed3b6e2ba6018765..cac83a694880f6dd6d17a62d39387cbf58128144 100644 (file)
 #include <mach/hardware.h>
 #include <mach/setup.h>
 #include <mach/devices.h>
+#include <mach/irqs.h>
 
 #include "pins-db8500.h"
+#include "board-mop500.h"
 
 static pin_cfg_t mop500_pins[] = {
        /* SSP0 */
@@ -75,19 +77,13 @@ static void ab4500_spi_cs_control(u32 command)
 }
 
 struct pl022_config_chip ab4500_chip_info = {
-       .lbm = LOOPBACK_DISABLED,
        .com_mode = INTERRUPT_TRANSFER,
        .iface = SSP_INTERFACE_MOTOROLA_SPI,
        /* we can act as master only */
        .hierarchy = SSP_MASTER,
        .slave_tx_disable = 0,
-       .endian_rx = SSP_RX_MSB,
-       .endian_tx = SSP_TX_MSB,
-       .data_size = SSP_DATA_BITS_24,
        .rx_lev_trig = SSP_RX_1_OR_MORE_ELEM,
        .tx_lev_trig = SSP_TX_1_OR_MORE_EMPTY_LOC,
-       .clk_phase = SSP_CLK_SECOND_EDGE,
-       .clk_pol = SSP_CLK_POL_IDLE_HIGH,
        .cs_control = ab4500_spi_cs_control,
 };
 
@@ -95,15 +91,33 @@ static struct ab8500_platform_data ab8500_platdata = {
        .irq_base       = MOP500_AB8500_IRQ_BASE,
 };
 
-static struct spi_board_info u8500_spi_devices[] = {
+static struct resource ab8500_resources[] = {
+       [0] = {
+               .start = IRQ_AB8500,
+               .end = IRQ_AB8500,
+               .flags = IORESOURCE_IRQ
+       }
+};
+
+struct platform_device ab8500_device = {
+       .name = "ab8500-i2c",
+       .id = 0,
+       .dev = {
+               .platform_data = &ab8500_platdata,
+       },
+       .num_resources = 1,
+       .resource = ab8500_resources,
+};
+
+static struct spi_board_info ab8500_spi_devices[] = {
        {
-               .modalias = "ab8500",
+               .modalias = "ab8500-spi",
                .controller_data = &ab4500_chip_info,
                .platform_data = &ab8500_platdata,
                .max_speed_hz = 12000000,
                .bus_num = 0,
                .chip_select = 0,
-               .mode = SPI_MODE_0,
+               .mode = SPI_MODE_3,
                .irq = IRQ_DB8500_AB8500,
        },
 };
@@ -292,14 +306,18 @@ static void __init u8500_init_machine(void)
 
        platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));
 
-       spi_register_board_info(u8500_spi_devices,
-                       ARRAY_SIZE(u8500_spi_devices));
+       mop500_sdi_init();
+
+       /* If HW is early drop (ED) or V1.0 then use SPI to access AB8500 */
+       if (cpu_is_u8500ed() || cpu_is_u8500v10())
+               spi_register_board_info(ab8500_spi_devices,
+                       ARRAY_SIZE(ab8500_spi_devices));
+       else /* If HW is v.1.1 or later use I2C to access AB8500 */
+               platform_device_register(&ab8500_device);
 }
 
 MACHINE_START(U8500, "ST-Ericsson MOP500 platform")
        /* Maintainer: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> */
-       .phys_io        = U8500_UART2_BASE,
-       .io_pg_offst    = (IO_ADDRESS(U8500_UART2_BASE) >> 18) & 0xfffc,
        .boot_params    = 0x100,
        .map_io         = u8500_map_io,
        .init_irq       = ux500_init_irq,