diff options
Diffstat (limited to 'arch/arm/mach-omap2/board-overo.c')
| -rw-r--r-- | arch/arm/mach-omap2/board-overo.c | 79 | 
1 files changed, 59 insertions, 20 deletions
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index b1f23bea863..dff5528fbfb 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c @@ -27,6 +27,7 @@  #include <linux/kernel.h>  #include <linux/platform_device.h>  #include <linux/i2c/twl4030.h> +#include <linux/regulator/machine.h>  #include <linux/mtd/mtd.h>  #include <linux/mtd/nand.h> @@ -45,6 +46,7 @@  #include <mach/nand.h>  #include <mach/usb.h> +#include "sdram-micron-mt46h32m32lf-6.h"  #include "mmc-twl4030.h"  #define OVERO_GPIO_BT_XGATE	15 @@ -271,21 +273,76 @@ static struct omap_uart_config overo_uart_config __initdata = {  	.enabled_uarts	= ((1 << 0) | (1 << 1) | (1 << 2)),  }; +static struct twl4030_hsmmc_info mmc[] = { +	{ +		.mmc		= 1, +		.wires		= 4, +		.gpio_cd	= -EINVAL, +		.gpio_wp	= -EINVAL, +	}, +	{ +		.mmc		= 2, +		.wires		= 4, +		.gpio_cd	= -EINVAL, +		.gpio_wp	= -EINVAL, +		.transceiver	= true, +		.ocr_mask	= 0x00100000,	/* 3.3V */ +	}, +	{}	/* Terminator */ +}; + +static struct regulator_consumer_supply overo_vmmc1_supply = { +	.supply			= "vmmc", +}; + +static int overo_twl_gpio_setup(struct device *dev, +		unsigned gpio, unsigned ngpio) +{ +	twl4030_mmc_init(mmc); + +	overo_vmmc1_supply.dev = mmc[0].dev; + +	return 0; +} +  static struct twl4030_gpio_platform_data overo_gpio_data = {  	.gpio_base	= OMAP_MAX_GPIO_LINES,  	.irq_base	= TWL4030_GPIO_IRQ_BASE,  	.irq_end	= TWL4030_GPIO_IRQ_END, +	.setup		= overo_twl_gpio_setup, +}; + +static struct twl4030_usb_data overo_usb_data = { +	.usb_mode	= T2_USB_MODE_ULPI, +}; + +static struct regulator_init_data overo_vmmc1 = { +	.constraints = { +		.min_uV			= 1850000, +		.max_uV			= 3150000, +		.valid_modes_mask	= REGULATOR_MODE_NORMAL +					| REGULATOR_MODE_STANDBY, +		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE +					| REGULATOR_CHANGE_MODE +					| REGULATOR_CHANGE_STATUS, +	}, +	.num_consumer_supplies	= 1, +	.consumer_supplies	= &overo_vmmc1_supply,  }; +/* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */ +  static struct twl4030_platform_data overo_twldata = {  	.irq_base	= TWL4030_IRQ_BASE,  	.irq_end	= TWL4030_IRQ_END,  	.gpio		= &overo_gpio_data, +	.usb		= &overo_usb_data, +	.vmmc1		= &overo_vmmc1,  };  static struct i2c_board_info __initdata overo_i2c_boardinfo[] = {  	{ -		I2C_BOARD_INFO("twl4030", 0x48), +		I2C_BOARD_INFO("tps65950", 0x48),  		.flags = I2C_CLIENT_WAKE,  		.irq = INT_34XX_SYS_NIRQ,  		.platform_data = &overo_twldata, @@ -303,7 +360,7 @@ static int __init overo_i2c_init(void)  static void __init overo_init_irq(void)  { -	omap2_init_common_hw(NULL); +	omap2_init_common_hw(mt46h32m32lf6_sdrc_params);  	omap_init_irq();  	omap_gpio_init();  } @@ -326,23 +383,6 @@ static struct platform_device *overo_devices[] __initdata = {  	&overo_lcd_device,  }; -static struct twl4030_hsmmc_info mmc[] __initdata = { -	{ -		.mmc		= 1, -		.wires		= 4, -		.gpio_cd	= -EINVAL, -		.gpio_wp	= -EINVAL, -	}, -	{ -		.mmc		= 2, -		.wires		= 4, -		.gpio_cd	= -EINVAL, -		.gpio_wp	= -EINVAL, -		.transceiver	= true, -	}, -	{}	/* Terminator */ -}; -  static void __init overo_init(void)  {  	overo_i2c_init(); @@ -350,7 +390,6 @@ static void __init overo_init(void)  	omap_board_config = overo_config;  	omap_board_config_size = ARRAY_SIZE(overo_config);  	omap_serial_init(); -	twl4030_mmc_init(mmc);  	overo_flash_init();  	usb_musb_init();  	overo_ads7846_init();  |