Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6
[pandora-kernel.git] / arch / arm / mach-omap2 / board-n8x0.c
index 3f79668..f396756 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/i2c.h>
 #include <linux/spi/spi.h>
 #include <linux/usb/musb.h>
+#include <sound/tlv320aic3x.h>
 
 #include <asm/mach/arch.h>
 #include <asm/mach-types.h>
@@ -45,8 +46,7 @@ static struct device *mmc_device;
 #define TUSB6010_GPIO_ENABLE   0
 #define TUSB6010_DMACHAN       0x3f
 
-#if defined(CONFIG_USB_TUSB6010) || \
-       defined(CONFIG_USB_TUSB6010_MODULE)
+#ifdef CONFIG_USB_MUSB_TUSB6010
 /*
  * Enable or disable power to TUSB6010. When enabling, turn on 3.3 V and
  * 1.5 V voltage regulators of PM companion chip. Companion chip will then
@@ -133,7 +133,7 @@ err:
 
 static void __init n8x0_usb_init(void) {}
 
-#endif /*CONFIG_USB_TUSB6010 */
+#endif /*CONFIG_USB_MUSB_TUSB6010 */
 
 
 static struct omap2_mcspi_device_config p54spi_mcspi_config = {
@@ -183,23 +183,15 @@ static struct mtd_partition onenand_partitions[] = {
        },
 };
 
-static struct omap_onenand_platform_data board_onenand_data = {
-       .cs             = 0,
-       .gpio_irq       = 26,
-       .parts          = onenand_partitions,
-       .nr_parts       = ARRAY_SIZE(onenand_partitions),
-       .flags          = ONENAND_SYNC_READ,
+static struct omap_onenand_platform_data board_onenand_data[] = {
+       {
+               .cs             = 0,
+               .gpio_irq       = 26,
+               .parts          = onenand_partitions,
+               .nr_parts       = ARRAY_SIZE(onenand_partitions),
+               .flags          = ONENAND_SYNC_READ,
+       }
 };
-
-static void __init n8x0_onenand_init(void)
-{
-       gpmc_onenand_init(&board_onenand_data);
-}
-
-#else
-
-static void __init n8x0_onenand_init(void) {}
-
 #endif
 
 #if defined(CONFIG_MENELAUS) &&                                                \
@@ -383,15 +375,6 @@ static void n8x0_mmc_callback(void *data, u8 card_mask)
        omap_mmc_notify_cover_event(mmc_device, index, *openp);
 }
 
-void n8x0_mmc_slot1_cover_handler(void *arg, int closed_state)
-{
-       if (mmc_device == NULL)
-               return;
-
-       slot1_cover_open = !closed_state;
-       omap_mmc_notify_cover_event(mmc_device, 0, closed_state);
-}
-
 static int n8x0_mmc_late_init(struct device *dev)
 {
        int r, bit, *openp;
@@ -511,7 +494,7 @@ static struct omap_mmc_platform_data mmc1_data = {
 
 static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC];
 
-void __init n8x0_mmc_init(void)
+static void __init n8x0_mmc_init(void)
 
 {
        int err;
@@ -560,11 +543,6 @@ void __init n8x0_mmc_init(void)
 void __init n8x0_mmc_init(void)
 {
 }
-
-void n8x0_mmc_slot1_cover_handler(void *arg, int state)
-{
-}
-
 #endif /* CONFIG_MMC_OMAP */
 
 #ifdef CONFIG_MENELAUS
@@ -614,29 +592,35 @@ static int n8x0_menelaus_late_init(struct device *dev)
        return 0;
 }
 
-static struct i2c_board_info __initdata n8x0_i2c_board_info_1[] = {
+#else
+static int n8x0_menelaus_late_init(struct device *dev)
+{
+       return 0;
+}
+#endif
+
+static struct menelaus_platform_data n8x0_menelaus_platform_data __initdata = {
+       .late_init = n8x0_menelaus_late_init,
+};
+
+static struct i2c_board_info __initdata n8x0_i2c_board_info_1[] __initdata = {
        {
                I2C_BOARD_INFO("menelaus", 0x72),
                .irq = INT_24XX_SYS_NIRQ,
+               .platform_data = &n8x0_menelaus_platform_data,
        },
 };
 
-static struct menelaus_platform_data n8x0_menelaus_platform_data = {
-       .late_init = n8x0_menelaus_late_init,
+static struct aic3x_pdata n810_aic33_data __initdata = {
+       .gpio_reset = 118,
 };
 
-static void __init n8x0_menelaus_init(void)
-{
-       n8x0_i2c_board_info_1[0].platform_data = &n8x0_menelaus_platform_data;
-       omap_register_i2c_bus(1, 400, n8x0_i2c_board_info_1,
-                             ARRAY_SIZE(n8x0_i2c_board_info_1));
-}
-
-#else
-static inline void __init n8x0_menelaus_init(void)
-{
-}
-#endif
+static struct i2c_board_info n810_i2c_board_info_2[] __initdata = {
+       {
+               I2C_BOARD_INFO("tlv320aic3x", 0x18),
+               .platform_data = &n810_aic33_data,
+       },
+};
 
 static void __init n8x0_map_io(void)
 {
@@ -646,17 +630,57 @@ static void __init n8x0_map_io(void)
 
 static void __init n8x0_init_irq(void)
 {
-       omap2_init_common_hw(NULL, NULL);
+       omap2_init_common_infrastructure();
+       omap2_init_common_devices(NULL, NULL);
        omap_init_irq();
-       omap_gpio_init();
 }
 
 #ifdef CONFIG_OMAP_MUX
 static struct omap_board_mux board_mux[] __initdata = {
+       /* I2S codec port pins for McBSP block */
+       OMAP2420_MUX(EAC_AC_SCLK, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
+       OMAP2420_MUX(EAC_AC_FS, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
+       OMAP2420_MUX(EAC_AC_DIN, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
+       OMAP2420_MUX(EAC_AC_DOUT, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
        { .reg_offset = OMAP_MUX_TERMINATOR },
 };
+
+static struct omap_device_pad serial2_pads[] __initdata = {
+       {
+               .name   = "uart3_rx_irrx.uart3_rx_irrx",
+               .flags  = OMAP_DEVICE_PAD_REMUX | OMAP_DEVICE_PAD_WAKEUP,
+               .enable = OMAP_MUX_MODE0,
+               .idle   = OMAP_MUX_MODE3        /* Mux as GPIO for idle */
+       },
+};
+
+static inline void board_serial_init(void)
+{
+       struct omap_board_data bdata;
+
+       bdata.flags = 0;
+       bdata.pads = NULL;
+       bdata.pads_cnt = 0;
+
+       bdata.id = 0;
+       omap_serial_init_port(&bdata);
+
+       bdata.id = 1;
+       omap_serial_init_port(&bdata);
+
+       bdata.id = 2;
+       bdata.pads = serial2_pads;
+       bdata.pads_cnt = ARRAY_SIZE(serial2_pads);
+       omap_serial_init_port(&bdata);
+}
+
 #else
-#define board_mux      NULL
+
+static inline void board_serial_init(void)
+{
+       omap_serial_init();
+}
+
 #endif
 
 static void __init n8x0_init_machine(void)
@@ -665,10 +689,14 @@ static void __init n8x0_init_machine(void)
        /* FIXME: add n810 spi devices */
        spi_register_board_info(n800_spi_board_info,
                                ARRAY_SIZE(n800_spi_board_info));
-
-       omap_serial_init();
-       n8x0_menelaus_init();
-       n8x0_onenand_init();
+       omap_register_i2c_bus(1, 400, n8x0_i2c_board_info_1,
+                             ARRAY_SIZE(n8x0_i2c_board_info_1));
+       omap_register_i2c_bus(2, 400, NULL, 0);
+       if (machine_is_nokia_n810())
+               i2c_register_board_info(2, n810_i2c_board_info_2,
+                                       ARRAY_SIZE(n810_i2c_board_info_2));
+       board_serial_init();
+       gpmc_onenand_init(board_onenand_data);
        n8x0_mmc_init();
        n8x0_usb_init();
 }