summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/bcmdhd.1.88.45.x.cn/dhd_gpio.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/bcmdhd.1.88.45.x.cn/dhd_gpio.c')
-rwxr-xr-xdrivers/net/wireless/bcmdhd.1.88.45.x.cn/dhd_gpio.c124
1 files changed, 124 insertions, 0 deletions
diff --git a/drivers/net/wireless/bcmdhd.1.88.45.x.cn/dhd_gpio.c b/drivers/net/wireless/bcmdhd.1.88.45.x.cn/dhd_gpio.c
new file mode 100755
index 00000000..8dcc8ca6
--- /dev/null
+++ b/drivers/net/wireless/bcmdhd.1.88.45.x.cn/dhd_gpio.c
@@ -0,0 +1,124 @@
+/*
+* Customer code to add GPIO control during WLAN start/stop
+* Copyright (C) 1999-2011, Broadcom Corporation
+*
+* Unless you and Broadcom execute a separate written software license
+* agreement governing use of this software, this software is licensed to you
+* under the terms of the GNU General Public License version 2 (the "GPL"),
+* available at http://www.broadcom.com/licenses/GPLv2.php, with the
+* following added to such license:
+*
+* As a special exception, the copyright holders of this software give you
+* permission to link this software with independent modules, and to copy and
+* distribute the resulting executable under terms of your choice, provided that
+* you also meet, for each linked independent module, the terms and conditions of
+* the license of that module. An independent module is a module which is not
+* derived from this software. The special exception does not apply to any
+* modifications of the software.
+*
+* Notwithstanding the above, under no circumstances may you combine this
+* software in any way with any other Broadcom software provided under a license
+* other than the GPL, without Broadcom's express prior written consent.
+*
+* $Id: dhd_custom_gpio.c,v 1.2.42.1 2010-10-19 00:41:09 Exp $
+*/
+
+#include <osl.h>
+
+#ifdef CUSTOMER_HW
+
+#ifdef CONFIG_MACH_ODROID_4210
+/*
+#include <mach/gpio.h>
+#include <mach/regs-gpio.h>
+#include <plat/gpio-cfg.h>
+
+#include <plat/sdhci.h>
+#include <plat/devs.h> // modifed plat-samsung/dev-hsmmcX.c EXPORT_SYMBOL(s3c_device_hsmmcx) added
+
+#define sdmmc_channel s3c_device_hsmmc0
+*/
+#endif
+
+#include <mach/wmt_misc.h> //wifi_power_ctrl_comm(int open,int mdelay)
+#include <mach/wmt_iomux.h>
+#include <linux/gpio.h>
+extern void wifi_power_ctrl_comm(int open,int mdelay);
+extern void force_remove_sdio2(void);
+extern void wmt_detect_sdio2(void);
+#define OOB_IRQ WMT_PIN_GP1_GPIO15
+
+
+#ifdef CUSTOMER_OOB
+int bcm_wlan_get_oob_irq(void)
+{
+ int host_oob_irq = OOB_IRQ;
+
+ int ret = 0;
+ ret = gpio_request(OOB_IRQ, "ap6493_oob_irq");
+ if(ret < 0)
+ {
+ printk("request gpio for ap6493 oob irq failed!\n");
+ return 0;
+ }
+ gpio_direction_input(OOB_IRQ);
+
+ wmt_gpio_setpull(WMT_PIN_GP62_WAKEUP0, WMT_GPIO_PULL_DOWN);
+
+/*
+#ifdef CONFIG_MACH_ODROID_4210
+ printk("GPIO(WL_HOST_WAKE) = EXYNOS4_GPX0(7) = %d\n", EXYNOS4_GPX0(7));
+ host_oob_irq = gpio_to_irq(EXYNOS4_GPX0(7));
+ gpio_direction_input(EXYNOS4_GPX0(7));
+ printk("host_oob_irq: %d \r\n", host_oob_irq);
+#endif
+*/
+
+ return host_oob_irq;
+}
+#endif
+
+void bcm_wlan_power_on(int flag)
+{
+ if (flag == 1) {
+ printk("======== PULL WL_REG_ON HIGH! ========\n");
+#ifdef CONFIG_MACH_ODROID_4210
+ //gpio_set_value(EXYNOS4_GPK1(0), 1);
+ wifi_power_ctrl_comm(1,0x00);
+ /* Lets customer power to get stable */
+ mdelay(100);
+ printk("======== Card detection to detect SDIO card! ========\n");
+ //sdhci_s3c_force_presence_change(&sdmmc_channel, 1);
+ wmt_detect_sdio2();
+#endif
+ } else {
+ printk("======== PULL WL_REG_ON HIGH! (flag = %d) ========\n", flag);
+#ifdef CONFIG_MACH_ODROID_4210
+ //gpio_set_value(EXYNOS4_GPK1(0), 1);
+ wifi_power_ctrl_comm(1,0x00);
+#endif
+ }
+}
+
+void bcm_wlan_power_off(int flag)
+{
+ if (flag == 1) {
+ printk("======== Card detection to remove SDIO card! ========\n");
+#ifdef CONFIG_MACH_ODROID_4210
+ //sdhci_s3c_force_presence_change(&sdmmc_channel, 0);
+ force_remove_sdio2();
+ mdelay(100);
+ printk("======== PULL WL_REG_ON LOW! ========\n");
+ //gpio_set_value(EXYNOS4_GPK1(0), 0);
+ wifi_power_ctrl_comm(0,0x00);
+#endif
+ } else {
+ printk("======== PULL WL_REG_ON LOW! (flag = %d) ========\n", flag);
+#ifdef CONFIG_MACH_ODROID_4210
+ //gpio_set_value(EXYNOS4_GPK1(0), 0);
+ wifi_power_ctrl_comm(0,0x00);
+#endif
+ }
+}
+
+#endif /* CUSTOMER_HW */