net: wireless: rockchip_wlan: add rtl8188fu support
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8188fu / platform / platform_ARM_SUNxI_sdio.c
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188fu/platform/platform_ARM_SUNxI_sdio.c b/drivers/net/wireless/rockchip_wlan/rtl8188fu/platform/platform_ARM_SUNxI_sdio.c
new file mode 100644 (file)
index 0000000..5bc888d
--- /dev/null
@@ -0,0 +1,95 @@
+/******************************************************************************\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