--- /dev/null
+/******************************************************************************\r
+ *\r
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify it\r
+ * under the terms of version 2 of the GNU General Public License as\r
+ * published by the Free Software Foundation.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but WITHOUT\r
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\r
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\r
+ * more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along with\r
+ * this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA\r
+ *\r
+ *\r
+ ******************************************************************************/\r
+#include <drv_types.h>\r
+\r
+#ifdef CONFIG_MMC_SUNXI_POWER_CONTROL\r
+#ifdef CONFIG_WITS_EVB_V13\r
+#define SDIOID 0\r
+#else // !CONFIG_WITS_EVB_V13\r
+#define SDIOID (CONFIG_CHIP_ID==1123 ? 3 : 1)\r
+#endif // !CONFIG_WITS_EVB_V13\r
+\r
+#define SUNXI_SDIO_WIFI_NUM_RTL8189ES 10\r
+extern void sunximmc_rescan_card(unsigned id, unsigned insert);\r
+extern int mmc_pm_get_mod_type(void);\r
+extern int mmc_pm_gpio_ctrl(char* name, int level);\r
+/*\r
+ * rtl8189es_shdn = port:PH09<1><default><default><0>\r
+ * rtl8189es_wakeup = port:PH10<1><default><default><1>\r
+ * rtl8189es_vdd_en = port:PH11<1><default><default><0>\r
+ * rtl8189es_vcc_en = port:PH12<1><default><default><0>\r
+ */\r
+\r
+int rtl8189es_sdio_powerup(void)\r
+{\r
+ mmc_pm_gpio_ctrl("rtl8189es_vdd_en", 1);\r
+ udelay(100);\r
+ mmc_pm_gpio_ctrl("rtl8189es_vcc_en", 1);\r
+ udelay(50);\r
+ mmc_pm_gpio_ctrl("rtl8189es_shdn", 1);\r
+ return 0;\r
+}\r
+\r
+int rtl8189es_sdio_poweroff(void)\r
+{\r
+ mmc_pm_gpio_ctrl("rtl8189es_shdn", 0);\r
+ mmc_pm_gpio_ctrl("rtl8189es_vcc_en", 0);\r
+ mmc_pm_gpio_ctrl("rtl8189es_vdd_en", 0);\r
+ return 0;\r
+}\r
+#endif // CONFIG_MMC_SUNXI_POWER_CONTROL\r
+\r
+/*\r
+ * Return:\r
+ * 0: power on successfully\r
+ * others: power on failed\r
+ */\r
+int platform_wifi_power_on(void)\r
+{\r
+ int ret = 0;\r
+#ifdef CONFIG_MMC_SUNXI_POWER_CONTROL\r
+ unsigned int mod_sel = mmc_pm_get_mod_type();\r
+#endif // CONFIG_MMC_SUNXI_POWER_CONTROL\r
+\r
+\r
+#ifdef CONFIG_MMC_SUNXI_POWER_CONTROL\r
+ if (mod_sel == SUNXI_SDIO_WIFI_NUM_RTL8189ES) {\r
+ rtl8189es_sdio_powerup();\r
+ sunximmc_rescan_card(SDIOID, 1);\r
+ printk("[rtl8189es] %s: power up, rescan card.\n", __FUNCTION__);\r
+ } else {\r
+ ret = -1;\r
+ printk("[rtl8189es] %s: mod_sel = %d is incorrect.\n", __FUNCTION__, mod_sel);\r
+ }\r
+#endif // CONFIG_MMC_SUNXI_POWER_CONTROL\r
+\r
+ return ret;\r
+}\r
+\r
+void platform_wifi_power_off(void)\r
+{\r
+#ifdef CONFIG_MMC_SUNXI_POWER_CONTROL\r
+ sunximmc_rescan_card(SDIOID, 0);\r
+#ifdef CONFIG_RTL8188E\r
+ rtl8189es_sdio_poweroff();\r
+ printk("[rtl8189es] %s: remove card, power off.\n", __FUNCTION__);\r
+#endif // CONFIG_RTL8188E\r
+#endif // CONFIG_MMC_SUNXI_POWER_CONTROL\r
+}\r