|
@@ -302,3 +302,166 @@ static int __init omap4_panda_i2c_init(void)
|
|
|
*/
|
|
|
omap_register_i2c_bus(3, 100, panda_i2c_eeprom,
|
|
|
ARRAY_SIZE(panda_i2c_eeprom));
|
|
|
+ omap_register_i2c_bus(4, 400, NULL, 0);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+#ifdef CONFIG_OMAP_MUX
|
|
|
+static struct omap_board_mux board_mux[] __initdata = {
|
|
|
+ /* WLAN IRQ - GPIO 53 */
|
|
|
+ OMAP4_MUX(GPMC_NCS3, OMAP_MUX_MODE3 | OMAP_PIN_INPUT),
|
|
|
+ /* WLAN POWER ENABLE - GPIO 43 */
|
|
|
+ OMAP4_MUX(GPMC_A19, OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT),
|
|
|
+ /* WLAN SDIO: MMC5 CMD */
|
|
|
+ OMAP4_MUX(SDMMC5_CMD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
|
|
|
+ /* WLAN SDIO: MMC5 CLK */
|
|
|
+ OMAP4_MUX(SDMMC5_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
|
|
|
+ /* WLAN SDIO: MMC5 DAT[0-3] */
|
|
|
+ OMAP4_MUX(SDMMC5_DAT0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
|
|
|
+ OMAP4_MUX(SDMMC5_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
|
|
|
+ OMAP4_MUX(SDMMC5_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
|
|
|
+ OMAP4_MUX(SDMMC5_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
|
|
|
+ /* gpio 0 - TFP410 PD */
|
|
|
+ OMAP4_MUX(KPD_COL1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
|
|
|
+ /* dispc2_data23 */
|
|
|
+ OMAP4_MUX(USBB2_ULPITLL_STP, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data22 */
|
|
|
+ OMAP4_MUX(USBB2_ULPITLL_DIR, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data21 */
|
|
|
+ OMAP4_MUX(USBB2_ULPITLL_NXT, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data20 */
|
|
|
+ OMAP4_MUX(USBB2_ULPITLL_DAT0, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data19 */
|
|
|
+ OMAP4_MUX(USBB2_ULPITLL_DAT1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data18 */
|
|
|
+ OMAP4_MUX(USBB2_ULPITLL_DAT2, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data15 */
|
|
|
+ OMAP4_MUX(USBB2_ULPITLL_DAT3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data14 */
|
|
|
+ OMAP4_MUX(USBB2_ULPITLL_DAT4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data13 */
|
|
|
+ OMAP4_MUX(USBB2_ULPITLL_DAT5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data12 */
|
|
|
+ OMAP4_MUX(USBB2_ULPITLL_DAT6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data11 */
|
|
|
+ OMAP4_MUX(USBB2_ULPITLL_DAT7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data10 */
|
|
|
+ OMAP4_MUX(DPM_EMU3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data9 */
|
|
|
+ OMAP4_MUX(DPM_EMU4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data16 */
|
|
|
+ OMAP4_MUX(DPM_EMU5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data17 */
|
|
|
+ OMAP4_MUX(DPM_EMU6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_hsync */
|
|
|
+ OMAP4_MUX(DPM_EMU7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_pclk */
|
|
|
+ OMAP4_MUX(DPM_EMU8, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_vsync */
|
|
|
+ OMAP4_MUX(DPM_EMU9, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_de */
|
|
|
+ OMAP4_MUX(DPM_EMU10, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data8 */
|
|
|
+ OMAP4_MUX(DPM_EMU11, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data7 */
|
|
|
+ OMAP4_MUX(DPM_EMU12, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data6 */
|
|
|
+ OMAP4_MUX(DPM_EMU13, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data5 */
|
|
|
+ OMAP4_MUX(DPM_EMU14, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data4 */
|
|
|
+ OMAP4_MUX(DPM_EMU15, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data3 */
|
|
|
+ OMAP4_MUX(DPM_EMU16, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data2 */
|
|
|
+ OMAP4_MUX(DPM_EMU17, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data1 */
|
|
|
+ OMAP4_MUX(DPM_EMU18, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* dispc2_data0 */
|
|
|
+ OMAP4_MUX(DPM_EMU19, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
|
|
|
+ /* NIRQ2 for twl6040 */
|
|
|
+ OMAP4_MUX(SYS_NIRQ2, OMAP_MUX_MODE0 |
|
|
|
+ OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE),
|
|
|
+ /* GPIO_127 for twl6040 */
|
|
|
+ OMAP4_MUX(HDQ_SIO, OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT),
|
|
|
+ /* McPDM */
|
|
|
+ OMAP4_MUX(ABE_PDM_UL_DATA, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
|
|
|
+ OMAP4_MUX(ABE_PDM_DL_DATA, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
|
|
|
+ OMAP4_MUX(ABE_PDM_FRAME, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
|
|
|
+ OMAP4_MUX(ABE_PDM_LB_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
|
|
|
+ OMAP4_MUX(ABE_CLKS, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
|
|
|
+ /* McBSP1 */
|
|
|
+ OMAP4_MUX(ABE_MCBSP1_CLKX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
|
|
|
+ OMAP4_MUX(ABE_MCBSP1_DR, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
|
|
|
+ OMAP4_MUX(ABE_MCBSP1_DX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT |
|
|
|
+ OMAP_PULL_ENA),
|
|
|
+ OMAP4_MUX(ABE_MCBSP1_FSX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
|
|
|
+
|
|
|
+ /* UART2 - BT/FM/GPS shared transport */
|
|
|
+ OMAP4_MUX(UART2_CTS, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
|
|
|
+ OMAP4_MUX(UART2_RTS, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
|
|
|
+ OMAP4_MUX(UART2_RX, OMAP_PIN_INPUT | OMAP_MUX_MODE0),
|
|
|
+ OMAP4_MUX(UART2_TX, OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
|
|
|
+
|
|
|
+ { .reg_offset = OMAP_MUX_TERMINATOR },
|
|
|
+};
|
|
|
+
|
|
|
+#else
|
|
|
+#define board_mux NULL
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
+static void omap4_panda_init_rev(void)
|
|
|
+{
|
|
|
+ if (cpu_is_omap443x()) {
|
|
|
+ /* PandaBoard 4430 */
|
|
|
+ /* ASoC audio configuration */
|
|
|
+ panda_abe_audio_data.card_name = "PandaBoard";
|
|
|
+ panda_abe_audio_data.has_hsmic = 1;
|
|
|
+ } else {
|
|
|
+ /* PandaBoard ES */
|
|
|
+ /* ASoC audio configuration */
|
|
|
+ panda_abe_audio_data.card_name = "PandaBoardES";
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void __init omap4_panda_init(void)
|
|
|
+{
|
|
|
+ int package = OMAP_PACKAGE_CBS;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if (omap_rev() == OMAP4430_REV_ES1_0)
|
|
|
+ package = OMAP_PACKAGE_CBL;
|
|
|
+ omap4_mux_init(board_mux, NULL, package);
|
|
|
+
|
|
|
+ omap_panda_wlan_data.irq = gpio_to_irq(GPIO_WIFI_IRQ);
|
|
|
+ ret = wl12xx_set_platform_data(&omap_panda_wlan_data);
|
|
|
+ if (ret)
|
|
|
+ pr_err("error setting wl12xx data: %d\n", ret);
|
|
|
+
|
|
|
+ omap4_panda_init_rev();
|
|
|
+ omap4_panda_i2c_init();
|
|
|
+ platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
|
|
|
+ platform_device_register(&omap_vwlan_device);
|
|
|
+ omap_serial_init();
|
|
|
+ omap_sdrc_init(NULL, NULL);
|
|
|
+ omap4_twl6030_hsmmc_init(mmc);
|
|
|
+ omap4_ehci_init();
|
|
|
+ usb_musb_init(&musb_board_data);
|
|
|
+ omap4_panda_display_init();
|
|
|
+}
|
|
|
+
|
|
|
+MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board")
|
|
|
+ /* Maintainer: David Anders - Texas Instruments Inc */
|
|
|
+ .atag_offset = 0x100,
|
|
|
+ .smp = smp_ops(omap4_smp_ops),
|
|
|
+ .reserve = omap_reserve,
|
|
|
+ .map_io = omap4_map_io,
|
|
|
+ .init_early = omap4430_init_early,
|
|
|
+ .init_irq = gic_init_irq,
|
|
|
+ .handle_irq = gic_handle_irq,
|
|
|
+ .init_machine = omap4_panda_init,
|
|
|
+ .init_late = omap4430_init_late,
|
|
|
+ .timer = &omap4_timer,
|
|
|
+ .restart = omap44xx_restart,
|
|
|
+MACHINE_END
|