提交 c67b0d98 编写于 作者: J Jonas Zetterberg 提交者: Tony Lindgren

IGEPv2: Added WIFI support

Enabled VMMC2 LDO voltage regulator on TWL4030.
Added GPIO's (power down and reset) for WIFI chip.
Signed-off-by: NAnders Hedlund <anders.j.hedlund@gmail.com>
Signed-off-by: NJonas Zetterberg <jozz@jozz.se>
Signed-off-by: NTony Lindgren <tony@atomide.com>
上级 cd2b90d9
...@@ -42,6 +42,8 @@ ...@@ -42,6 +42,8 @@
#define IGEP2_GPIO_LED0_GREEN 27 #define IGEP2_GPIO_LED0_GREEN 27
#define IGEP2_GPIO_LED1_RED 28 #define IGEP2_GPIO_LED1_RED 28
#define IGEP2_GPIO_DVI_PUP 170 #define IGEP2_GPIO_DVI_PUP 170
#define IGEP2_GPIO_WIFI_NPD 94
#define IGEP2_GPIO_WIFI_NRESET 95
#if defined(CONFIG_MTD_ONENAND_OMAP2) || \ #if defined(CONFIG_MTD_ONENAND_OMAP2) || \
defined(CONFIG_MTD_ONENAND_OMAP2_MODULE) defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
...@@ -209,6 +211,10 @@ static struct regulator_consumer_supply igep2_vmmc1_supply = { ...@@ -209,6 +211,10 @@ static struct regulator_consumer_supply igep2_vmmc1_supply = {
.supply = "vmmc", .supply = "vmmc",
}; };
static struct regulator_consumer_supply igep2_vmmc2_supply = {
.supply = "vmmc",
};
/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */ /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
static struct regulator_init_data igep2_vmmc1 = { static struct regulator_init_data igep2_vmmc1 = {
.constraints = { .constraints = {
...@@ -224,6 +230,21 @@ static struct regulator_init_data igep2_vmmc1 = { ...@@ -224,6 +230,21 @@ static struct regulator_init_data igep2_vmmc1 = {
.consumer_supplies = &igep2_vmmc1_supply, .consumer_supplies = &igep2_vmmc1_supply,
}; };
/* VMMC2 for OMAP VDD_MMC2 (i/o) and MMC2 WIFI */
static struct regulator_init_data igep2_vmmc2 = {
.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 = &igep2_vmmc2_supply,
};
static struct omap2_hsmmc_info mmc[] = { static struct omap2_hsmmc_info mmc[] = {
{ {
.mmc = 1, .mmc = 1,
...@@ -251,6 +272,7 @@ static int igep2_twl_gpio_setup(struct device *dev, ...@@ -251,6 +272,7 @@ static int igep2_twl_gpio_setup(struct device *dev,
* regulators will be set up only *after* we return. * regulators will be set up only *after* we return.
*/ */
igep2_vmmc1_supply.dev = mmc[0].dev; igep2_vmmc1_supply.dev = mmc[0].dev;
igep2_vmmc2_supply.dev = mmc[1].dev;
return 0; return 0;
}; };
...@@ -364,6 +386,7 @@ static struct twl4030_platform_data igep2_twldata = { ...@@ -364,6 +386,7 @@ static struct twl4030_platform_data igep2_twldata = {
.codec = &igep2_codec_data, .codec = &igep2_codec_data,
.gpio = &igep2_gpio_data, .gpio = &igep2_gpio_data,
.vmmc1 = &igep2_vmmc1, .vmmc1 = &igep2_vmmc1,
.vmmc2 = &igep2_vmmc2,
.vpll2 = &igep2_vpll2, .vpll2 = &igep2_vpll2,
}; };
...@@ -440,6 +463,23 @@ static void __init igep2_init(void) ...@@ -440,6 +463,23 @@ static void __init igep2_init(void)
gpio_set_value(IGEP2_GPIO_LED1_RED, 0); gpio_set_value(IGEP2_GPIO_LED1_RED, 0);
} else } else
pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_RED\n"); pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_RED\n");
/* GPIO W-LAN + Bluetooth combo module */
if ((gpio_request(IGEP2_GPIO_WIFI_NPD, "GPIO_WIFI_NPD") == 0) &&
(gpio_direction_output(IGEP2_GPIO_WIFI_NPD, 1) == 0)) {
gpio_export(IGEP2_GPIO_WIFI_NPD, 0);
/* gpio_set_value(IGEP2_GPIO_WIFI_NPD, 0); */
} else
pr_warning("IGEP v2: Could not obtain gpio GPIO_WIFI_NPD\n");
if ((gpio_request(IGEP2_GPIO_WIFI_NRESET, "GPIO_WIFI_NRESET") == 0) &&
(gpio_direction_output(IGEP2_GPIO_WIFI_NRESET, 1) == 0)) {
gpio_export(IGEP2_GPIO_WIFI_NRESET, 0);
gpio_set_value(IGEP2_GPIO_WIFI_NRESET, 0);
udelay(10);
gpio_set_value(IGEP2_GPIO_WIFI_NRESET, 1);
} else
pr_warning("IGEP v2: Could not obtain gpio GPIO_WIFI_NRESET\n");
} }
static void __init igep2_map_io(void) static void __init igep2_map_io(void)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册