2010-08-02 13:18:05 +03:00
/*
* Board support file for OMAP4430 based PandaBoard .
*
* Copyright ( C ) 2010 Texas Instruments
*
* Author : David Anders < x0132446 @ ti . com >
*
* Based on mach - omap2 / board - 4430 sdp . c
*
* Author : Santosh Shilimkar < santosh . shilimkar @ ti . com >
*
* Based on mach - omap2 / board - 3430 sdp . c
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/platform_device.h>
2011-01-10 14:42:15 +00:00
# include <linux/clk.h>
2010-08-02 13:18:05 +03:00
# include <linux/io.h>
2010-09-23 18:22:49 -07:00
# include <linux/leds.h>
2010-08-02 13:18:05 +03:00
# include <linux/gpio.h>
# include <linux/usb/otg.h>
# include <linux/i2c/twl.h>
2012-04-03 11:56:51 +03:00
# include <linux/mfd/twl6040.h>
2010-08-02 13:18:05 +03:00
# include <linux/regulator/machine.h>
2011-02-15 03:40:34 -05:00
# include <linux/regulator/fixed.h>
2012-05-09 14:19:13 -07:00
# include <linux/ti_wilink_st.h>
2012-10-24 14:26:19 -07:00
# include <linux/usb/musb.h>
2013-02-06 18:58:50 +05:30
# include <linux/usb/phy.h>
2013-03-20 17:44:42 +02:00
# include <linux/usb/nop-usb-xceiv.h>
2011-02-15 03:40:35 -05:00
# include <linux/wl12xx.h>
2012-12-27 13:10:24 -06:00
# include <linux/irqchip/arm-gic.h>
2011-12-08 11:15:45 +02:00
# include <linux/platform_data/omap-abe-twl6040.h>
2010-08-02 13:18:05 +03:00
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
2012-10-24 15:05:45 -07:00
# include "common.h"
2012-08-31 10:59:07 -07:00
# include "soc.h"
2012-10-15 12:09:43 -07:00
# include "mmc.h"
2010-08-02 13:18:05 +03:00
# include "hsmmc.h"
2010-10-08 11:40:20 -06:00
# include "control.h"
2010-11-08 19:26:11 +05:30
# include "mux.h"
2011-04-25 01:09:06 +03:00
# include "common-board-devices.h"
2012-11-05 15:14:17 +02:00
# include "dss-common.h"
2010-08-02 13:18:05 +03:00
2010-10-07 19:36:30 +00:00
# define GPIO_HUB_POWER 1
# define GPIO_HUB_NRESET 62
2011-02-15 03:40:34 -05:00
# define GPIO_WIFI_PMENA 43
2011-02-15 03:40:35 -05:00
# define GPIO_WIFI_IRQ 53
2010-10-07 19:36:30 +00:00
2011-02-25 06:52:35 +00:00
/* wl127x BT, FM, GPS connectivity chip */
2012-05-09 14:19:13 -07:00
static struct ti_st_plat_data wilink_platform_data = {
. nshutdown_gpio = 46 ,
. dev_name = " /dev/ttyO1 " ,
. flow_cntrl = 1 ,
. baud_rate = 3000000 ,
. chip_enable = NULL ,
. suspend = NULL ,
. resume = NULL ,
} ;
2011-02-25 06:52:35 +00:00
static struct platform_device wl1271_device = {
. name = " kim " ,
. id = - 1 ,
. dev = {
2012-05-09 14:19:13 -07:00
. platform_data = & wilink_platform_data ,
2011-02-25 06:52:35 +00:00
} ,
} ;
2010-10-07 19:36:30 +00:00
2010-09-23 18:22:49 -07:00
static struct gpio_led gpio_leds [ ] = {
{
. name = " pandaboard::status1 " ,
. default_trigger = " heartbeat " ,
. gpio = 7 ,
} ,
{
. name = " pandaboard::status2 " ,
. default_trigger = " mmc0 " ,
. gpio = 8 ,
} ,
} ;
2010-08-02 13:18:05 +03:00
2010-09-23 18:22:49 -07:00
static struct gpio_led_platform_data gpio_led_info = {
. leds = gpio_leds ,
. num_leds = ARRAY_SIZE ( gpio_leds ) ,
} ;
static struct platform_device leds_gpio = {
. name = " leds-gpio " ,
. id = - 1 ,
. dev = {
. platform_data = & gpio_led_info ,
} ,
} ;
2011-12-08 11:15:45 +02:00
static struct omap_abe_twl6040_data panda_abe_audio_data = {
/* Audio out */
. has_hs = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT ,
2012-07-12 00:56:57 +09:00
/* HandsFree through expansion connector */
2011-12-08 11:15:45 +02:00
. has_hf = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT ,
/* PandaBoard: FM TX, PandaBoardES: can be connected to audio out */
. has_aux = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT ,
/* PandaBoard: FM RX, PandaBoardES: audio in */
. has_afm = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT ,
/* No jack detection. */
. jack_detection = 0 ,
/* MCLK input is 38.4MHz */
. mclk_freq = 38400000 ,
} ;
static struct platform_device panda_abe_audio = {
. name = " omap-abe-twl6040 " ,
. id = - 1 ,
. dev = {
. platform_data = & panda_abe_audio_data ,
} ,
} ;
2012-05-09 14:19:14 -07:00
static struct platform_device panda_hdmi_audio_codec = {
. name = " hdmi-audio-codec " ,
. id = - 1 ,
} ;
2012-03-05 11:08:37 -08:00
static struct platform_device btwilink_device = {
. name = " btwilink " ,
. id = - 1 ,
} ;
2013-03-20 17:44:42 +02:00
/* PHY device on HS USB Port 1 i.e. nop_usb_xceiv.1 */
static struct nop_usb_xceiv_platform_data hsusb1_phy_data = {
/* FREF_CLK3 provides the 19.2 MHz reference clock to the PHY */
. clk_rate = 19200000 ,
} ;
static struct usbhs_phy_data phy_data [ ] __initdata = {
{
. port = 1 ,
. reset_gpio = GPIO_HUB_NRESET ,
. vcc_gpio = GPIO_HUB_POWER ,
. vcc_polarity = 1 ,
. platform_data = & hsusb1_phy_data ,
} ,
} ;
2010-09-23 18:22:49 -07:00
static struct platform_device * panda_devices [ ] __initdata = {
& leds_gpio ,
2011-02-25 06:52:35 +00:00
& wl1271_device ,
2011-12-08 11:15:45 +02:00
& panda_abe_audio ,
2012-05-09 14:19:14 -07:00
& panda_hdmi_audio_codec ,
2012-03-05 11:08:37 -08:00
& btwilink_device ,
2010-09-23 18:22:49 -07:00
} ;
2010-08-02 13:18:05 +03:00
2013-02-14 10:13:48 +02:00
static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
2011-03-01 20:08:16 +05:30
. port_mode [ 0 ] = OMAP_EHCI_PORT_MODE_PHY ,
2011-05-03 18:22:09 +03:00
} ;
2010-10-07 19:36:30 +00:00
static void __init omap4_ehci_init ( void )
{
int ret ;
2011-01-10 14:42:15 +00:00
/* FREF_CLK3 provides the 19.2 MHz reference clock to the PHY */
2013-03-20 17:44:42 +02:00
ret = clk_add_alias ( " main_clk " , " nop_usb_xceiv.1 " , " auxclk3_ck " , NULL ) ;
if ( ret )
pr_err ( " Failed to add main_clk alias to auxclk3_ck \n " ) ;
2010-10-07 19:36:30 +00:00
2013-03-20 17:44:42 +02:00
usbhs_init_phys ( phy_data , ARRAY_SIZE ( phy_data ) ) ;
2011-03-01 20:08:19 +05:30
usbhs_init ( & usbhs_bdata ) ;
2010-10-07 19:36:30 +00:00
}
2010-08-02 13:18:05 +03:00
static struct omap_musb_board_data musb_board_data = {
. interface_type = MUSB_INTERFACE_UTMI ,
2010-12-10 18:11:42 +05:30
. mode = MUSB_OTG ,
2010-08-02 13:18:05 +03:00
. power = 100 ,
} ;
static struct omap2_hsmmc_info mmc [ ] = {
{
. mmc = 1 ,
2010-09-15 14:49:23 +00:00
. caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA ,
2010-08-02 13:18:05 +03:00
. gpio_wp = - EINVAL ,
2010-12-21 14:14:34 +00:00
. gpio_cd = - EINVAL ,
2010-08-02 13:18:05 +03:00
} ,
2011-02-15 03:40:35 -05:00
{
. name = " wl1271 " ,
. mmc = 5 ,
. caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD ,
. gpio_wp = - EINVAL ,
. gpio_cd = - EINVAL ,
. ocr_mask = MMC_VDD_165_195 ,
. nonremovable = true ,
} ,
2010-08-02 13:18:05 +03:00
{ } /* Terminator */
} ;
2011-06-06 18:57:07 +00:00
static struct regulator_consumer_supply omap4_panda_vmmc5_supply [ ] = {
REGULATOR_SUPPLY ( " vmmc " , " omap_hsmmc.4 " ) ,
2011-02-15 03:40:34 -05:00
} ;
static struct regulator_init_data panda_vmmc5 = {
. constraints = {
. valid_ops_mask = REGULATOR_CHANGE_STATUS ,
} ,
2011-06-06 18:57:07 +00:00
. num_consumer_supplies = ARRAY_SIZE ( omap4_panda_vmmc5_supply ) ,
. consumer_supplies = omap4_panda_vmmc5_supply ,
2011-02-15 03:40:34 -05:00
} ;
static struct fixed_voltage_config panda_vwlan = {
. supply_name = " vwl1271 " ,
. microvolts = 1800000 , /* 1.8V */
. gpio = GPIO_WIFI_PMENA ,
. startup_delay = 70000 , /* 70msec */
. enable_high = 1 ,
. enabled_at_boot = 0 ,
. init_data = & panda_vmmc5 ,
} ;
static struct platform_device omap_vwlan_device = {
. name = " reg-fixed-voltage " ,
. id = 1 ,
. dev = {
. platform_data = & panda_vwlan ,
} ,
} ;
2012-04-13 06:34:26 -06:00
static struct wl12xx_platform_data omap_panda_wlan_data __initdata = {
2012-09-26 22:12:22 +05:30
. board_ref_clock = WL12XX_REFCLOCK_38 , /* 38.4 MHz */
2011-02-15 03:40:35 -05:00
} ;
2012-04-03 11:56:51 +03:00
static struct twl6040_codec_data twl6040_codec = {
2011-12-08 11:15:45 +02:00
/* single-step ramp for headset and handsfree */
. hs_left_step = 0x0f ,
. hs_right_step = 0x0f ,
. hf_left_step = 0x1d ,
. hf_right_step = 0x1d ,
} ;
2012-04-03 11:56:51 +03:00
static struct twl6040_platform_data twl6040_data = {
2011-12-08 11:15:45 +02:00
. codec = & twl6040_codec ,
. audpwron_gpio = 127 ,
} ;
2012-09-24 12:24:48 +03:00
static struct i2c_board_info __initdata panda_i2c_1_boardinfo [ ] = {
{
I2C_BOARD_INFO ( " twl6040 " , 0x4b ) ,
. irq = 119 + OMAP44XX_IRQ_GIC_START ,
. platform_data = & twl6040_data ,
} ,
} ;
2011-06-07 10:26:46 +03:00
/* Panda board uses the common PMIC configuration */
2012-04-03 11:56:51 +03:00
static struct twl4030_platform_data omap4_panda_twldata ;
2010-08-02 13:18:05 +03:00
2011-03-14 07:52:25 -05:00
/*
* Display monitor features are burnt in their EEPROM as EDID data . The EEPROM
* is connected as I2C slave device , and can be accessed at address 0x50
*/
static struct i2c_board_info __initdata panda_i2c_eeprom [ ] = {
{
I2C_BOARD_INFO ( " eeprom " , 0x50 ) ,
} ,
} ;
2010-08-02 13:18:05 +03:00
static int __init omap4_panda_i2c_init ( void )
{
2011-06-07 10:26:46 +03:00
omap4_pmic_get_config ( & omap4_panda_twldata , TWL_COMMON_PDATA_USB ,
TWL_COMMON_REGULATOR_VDAC |
TWL_COMMON_REGULATOR_VAUX2 |
TWL_COMMON_REGULATOR_VAUX3 |
TWL_COMMON_REGULATOR_VMMC |
TWL_COMMON_REGULATOR_VPP |
TWL_COMMON_REGULATOR_VANA |
TWL_COMMON_REGULATOR_VCXIO |
TWL_COMMON_REGULATOR_VUSB |
2012-05-09 10:33:34 +03:00
TWL_COMMON_REGULATOR_CLK32KG |
TWL_COMMON_REGULATOR_V1V8 |
TWL_COMMON_REGULATOR_V2V1 ) ;
2012-09-24 12:24:48 +03:00
omap4_pmic_init ( " twl6030 " , & omap4_panda_twldata , panda_i2c_1_boardinfo ,
ARRAY_SIZE ( panda_i2c_1_boardinfo ) ) ;
2010-08-02 13:18:05 +03:00
omap_register_i2c_bus ( 2 , 400 , NULL , 0 ) ;
2011-03-14 07:52:25 -05:00
/*
* Bus 3 is attached to the DVI port where devices like the pico DLP
* projector don ' t work reliably with 400 kHz
*/
omap_register_i2c_bus ( 3 , 100 , panda_i2c_eeprom ,
ARRAY_SIZE ( panda_i2c_eeprom ) ) ;
2010-08-02 13:18:05 +03:00
omap_register_i2c_bus ( 4 , 400 , NULL , 0 ) ;
return 0 ;
}
2010-11-08 19:26:11 +05:30
# ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux [ ] __initdata = {
2011-02-15 03:40:32 -05:00
/* 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 ) ,
2011-03-14 07:52:25 -05:00
/* 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 ) ,
2012-07-06 15:19:12 +02:00
/* NIRQ2 for twl6040 */
OMAP4_MUX ( SYS_NIRQ2 , OMAP_MUX_MODE0 |
OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE ) ,
2012-10-04 14:57:21 +03:00
/* 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 ) ,
2013-01-21 13:14:12 +02:00
/* 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 ) ,
2010-11-08 19:26:11 +05:30
{ . reg_offset = OMAP_MUX_TERMINATOR } ,
} ;
2011-03-11 06:04:46 +00:00
2010-11-08 19:26:11 +05:30
# else
# define board_mux NULL
# endif
2011-03-14 23:57:42 -05:00
2011-12-08 11:15:45 +02:00
static void omap4_panda_init_rev ( void )
{
2012-02-17 11:12:08 +02:00
if ( cpu_is_omap443x ( ) ) {
2011-12-08 11:15:45 +02:00
/* 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 " ;
}
}
2010-08-02 13:18:05 +03:00
static void __init omap4_panda_init ( void )
{
2010-11-08 19:26:11 +05:30
int package = OMAP_PACKAGE_CBS ;
2012-02-07 11:03:23 +00:00
int ret ;
2010-11-08 19:26:11 +05:30
if ( omap_rev ( ) = = OMAP4430_REV_ES1_0 )
package = OMAP_PACKAGE_CBL ;
2011-05-04 14:57:57 -07:00
omap4_mux_init ( board_mux , NULL , package ) ;
2010-11-08 19:26:11 +05:30
2012-03-29 08:41:01 -07:00
omap_panda_wlan_data . irq = gpio_to_irq ( GPIO_WIFI_IRQ ) ;
2012-02-07 11:03:23 +00:00
ret = wl12xx_set_platform_data ( & omap_panda_wlan_data ) ;
if ( ret )
pr_err ( " error setting wl12xx data: %d \n " , ret ) ;
2011-02-15 03:40:35 -05:00
2011-12-08 11:15:45 +02:00
omap4_panda_init_rev ( ) ;
2010-08-02 13:18:05 +03:00
omap4_panda_i2c_init ( ) ;
2010-09-23 18:22:49 -07:00
platform_add_devices ( panda_devices , ARRAY_SIZE ( panda_devices ) ) ;
2011-02-15 03:40:34 -05:00
platform_device_register ( & omap_vwlan_device ) ;
2011-11-07 18:55:05 +05:30
omap_serial_init ( ) ;
2011-08-22 23:57:23 -07:00
omap_sdrc_init ( NULL , NULL ) ;
2010-08-02 13:18:05 +03:00
omap4_twl6030_hsmmc_init ( mmc ) ;
2010-10-07 19:36:30 +00:00
omap4_ehci_init ( ) ;
2013-05-06 16:39:16 -07:00
usb_bind_phy ( " musb-hdrc.2.auto " , 0 , " omap-usb2.3.auto " ) ;
2010-12-01 13:48:54 +02:00
usb_musb_init ( & musb_board_data ) ;
2011-03-14 23:57:42 -05:00
omap4_panda_display_init ( ) ;
2010-08-02 13:18:05 +03:00
}
MACHINE_START ( OMAP4_PANDA , " OMAP4 Panda board " )
/* Maintainer: David Anders - Texas Instruments Inc */
2011-07-05 22:38:15 -04:00
. atag_offset = 0x100 ,
2011-09-08 13:15:22 +01:00
. smp = smp_ops ( omap4_smp_ops ) ,
2010-12-17 18:15:07 -08:00
. reserve = omap_reserve ,
2011-09-26 14:52:55 -07:00
. map_io = omap4_map_io ,
2011-08-22 23:57:24 -07:00
. init_early = omap4430_init_early ,
2011-02-14 15:40:20 -08:00
. init_irq = gic_init_irq ,
2010-08-02 13:18:05 +03:00
. init_machine = omap4_panda_init ,
2012-04-26 16:06:50 +08:00
. init_late = omap4430_init_late ,
2012-11-08 12:40:59 -07:00
. init_time = omap4_local_timer_init ,
2012-10-29 20:56:12 -06:00
. restart = omap44xx_restart ,
2010-08-02 13:18:05 +03:00
MACHINE_END