diff options
author | Rakesh Goyal <rgoyal@nvidia.com> | 2012-08-28 22:16:08 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-09-05 16:02:42 -0700 |
commit | 32b8cc820fc9f3709c23e6b383825d6cdb0a6085 (patch) | |
tree | 8fe5c888cb38b2971a49c6892d43dc694e0d7051 /arch/arm/mach-tegra/board-enterprise-sdhci.c | |
parent | 6315861867aae8b64d04a46b05248c33b7d613db (diff) |
ARM: tegra: enterprise: enable wl18xx wireless module support
Bug 990784
Change-Id: I173df3f7244e7d0b40ae5aad98c72885ff42fdab
Signed-off-by: Rakesh Goyal <rgoyal@nvidia.com>
Reviewed-on: http://git-master/r/129103
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Rakesh Kumar <krakesh@nvidia.com>
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/board-enterprise-sdhci.c')
-rw-r--r-- | arch/arm/mach-tegra/board-enterprise-sdhci.c | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/arch/arm/mach-tegra/board-enterprise-sdhci.c b/arch/arm/mach-tegra/board-enterprise-sdhci.c index 8032f8105bed..a003ae9cbd8e 100644 --- a/arch/arm/mach-tegra/board-enterprise-sdhci.c +++ b/arch/arm/mach-tegra/board-enterprise-sdhci.c @@ -22,6 +22,7 @@ #include <linux/clk.h> #include <linux/err.h> #include <linux/mmc/host.h> +#include <linux/wl12xx.h> #include <asm/mach-types.h> #include <mach/irqs.h> @@ -52,6 +53,14 @@ static struct wifi_platform_data enterprise_wifi_control = { .set_carddetect = enterprise_wifi_set_carddetect, }; +static struct wl12xx_platform_data enterprise_wl12xx_wlan_data __initdata = { + .irq = TEGRA_GPIO_TO_IRQ(ENTERPRISE_WLAN_WOW), + .board_ref_clock = WL12XX_REFCLOCK_26, + .board_tcxo_clock = 1, + .set_power = enterprise_wifi_power, + .set_carddetect = enterprise_wifi_set_carddetect, +}; + static struct resource wifi_resource[] = { [0] = { .name = "bcm4329_wlan_irq", @@ -61,7 +70,7 @@ static struct resource wifi_resource[] = { }, }; -static struct platform_device enterprise_wifi_device = { +static struct platform_device enterprise_brcm_wifi_device = { .name = "bcm4329_wlan", .id = 1, .num_resources = 1, @@ -238,10 +247,22 @@ static int enterprise_wifi_power(int on) tegra_io_dpd_disable(sd_dpd); mutex_unlock(&sd_dpd->delay_lock); } - gpio_set_value(ENTERPRISE_WLAN_PWR, on); - mdelay(100); - gpio_set_value(ENTERPRISE_WLAN_RST, on); - mdelay(200); + + if (on) { + gpio_set_value(ENTERPRISE_WLAN_RST, 1); + mdelay(100); + gpio_set_value(ENTERPRISE_WLAN_RST, 0); + mdelay(100); + gpio_set_value(ENTERPRISE_WLAN_RST, 1); + mdelay(100); + gpio_set_value(ENTERPRISE_WLAN_PWR, 1); + mdelay(200); + } else { + gpio_set_value(ENTERPRISE_WLAN_RST, 0); + mdelay(100); + gpio_set_value(ENTERPRISE_WLAN_PWR, 0); + } + if (sd_dpd) { mutex_lock(&sd_dpd->delay_lock); tegra_io_dpd_enable(sd_dpd); @@ -295,7 +316,11 @@ static int __init enterprise_wifi_init(void) if (rc) pr_err("WLAN_WOW gpio direction configuration failed:%d\n", rc); - platform_device_register(&enterprise_wifi_device); + if (tegra_get_commchip_id() == COMMCHIP_TI_WL18XX) + wl12xx_set_platform_data(&enterprise_wl12xx_wlan_data); + else + platform_device_register(&enterprise_brcm_wifi_device); + return 0; } @@ -306,6 +331,13 @@ int __init enterprise_sdhci_init(void) tegra_sdhci_platform_data2.cd_gpio = ENTERPRISE_SD_CD; platform_device_register(&tegra_sdhci_device2); + /* TI wifi module does not use emdedded sdio */ + if (tegra_get_commchip_id() == COMMCHIP_TI_WL18XX) { +#ifdef CONFIG_MMC_EMBEDDED_SDIO + tegra_sdhci_platform_data0.mmc_data.embedded_sdio = NULL; +#endif + } + platform_device_register(&tegra_sdhci_device0); enterprise_wifi_init(); return 0; |