1 /******************************************************************************
\r
3 * Copyright(c) 2013 Realtek Corporation. All rights reserved.
\r
5 * This program is free software; you can redistribute it and/or modify it
\r
6 * under the terms of version 2 of the GNU General Public License as
\r
7 * published by the Free Software Foundation.
\r
9 * This program is distributed in the hope that it will be useful, but WITHOUT
\r
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
\r
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
\r
14 * You should have received a copy of the GNU General Public License along with
\r
15 * this program; if not, write to the Free Software Foundation, Inc.,
\r
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
\r
19 ******************************************************************************/
\r
20 #include <drv_types.h>
\r
22 #ifdef CONFIG_MMC_SUNXI_POWER_CONTROL
\r
23 #ifdef CONFIG_WITS_EVB_V13
\r
25 #else // !CONFIG_WITS_EVB_V13
\r
26 #define SDIOID (CONFIG_CHIP_ID==1123 ? 3 : 1)
\r
27 #endif // !CONFIG_WITS_EVB_V13
\r
29 #define SUNXI_SDIO_WIFI_NUM_RTL8189ES 10
\r
30 extern void sunximmc_rescan_card(unsigned id, unsigned insert);
\r
31 extern int mmc_pm_get_mod_type(void);
\r
32 extern int mmc_pm_gpio_ctrl(char* name, int level);
\r
34 * rtl8189es_shdn = port:PH09<1><default><default><0>
\r
35 * rtl8189es_wakeup = port:PH10<1><default><default><1>
\r
36 * rtl8189es_vdd_en = port:PH11<1><default><default><0>
\r
37 * rtl8189es_vcc_en = port:PH12<1><default><default><0>
\r
40 int rtl8189es_sdio_powerup(void)
\r
42 mmc_pm_gpio_ctrl("rtl8189es_vdd_en", 1);
\r
44 mmc_pm_gpio_ctrl("rtl8189es_vcc_en", 1);
\r
46 mmc_pm_gpio_ctrl("rtl8189es_shdn", 1);
\r
50 int rtl8189es_sdio_poweroff(void)
\r
52 mmc_pm_gpio_ctrl("rtl8189es_shdn", 0);
\r
53 mmc_pm_gpio_ctrl("rtl8189es_vcc_en", 0);
\r
54 mmc_pm_gpio_ctrl("rtl8189es_vdd_en", 0);
\r
57 #endif // CONFIG_MMC_SUNXI_POWER_CONTROL
\r
61 * 0: power on successfully
\r
62 * others: power on failed
\r
64 int platform_wifi_power_on(void)
\r
67 #ifdef CONFIG_MMC_SUNXI_POWER_CONTROL
\r
68 unsigned int mod_sel = mmc_pm_get_mod_type();
\r
69 #endif // CONFIG_MMC_SUNXI_POWER_CONTROL
\r
72 #ifdef CONFIG_MMC_SUNXI_POWER_CONTROL
\r
73 if (mod_sel == SUNXI_SDIO_WIFI_NUM_RTL8189ES) {
\r
74 rtl8189es_sdio_powerup();
\r
75 sunximmc_rescan_card(SDIOID, 1);
\r
76 printk("[rtl8189es] %s: power up, rescan card.\n", __FUNCTION__);
\r
79 printk("[rtl8189es] %s: mod_sel = %d is incorrect.\n", __FUNCTION__, mod_sel);
\r
81 #endif // CONFIG_MMC_SUNXI_POWER_CONTROL
\r
86 void platform_wifi_power_off(void)
\r
88 #ifdef CONFIG_MMC_SUNXI_POWER_CONTROL
\r
89 sunximmc_rescan_card(SDIOID, 0);
\r
90 #ifdef CONFIG_RTL8188E
\r
91 rtl8189es_sdio_poweroff();
\r
92 printk("[rtl8189es] %s: remove card, power off.\n", __FUNCTION__);
\r
93 #endif // CONFIG_RTL8188E
\r
94 #endif // CONFIG_MMC_SUNXI_POWER_CONTROL
\r