5bc888dc4ac3ff7ce6a447f08e251866ed4c0761
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bs / platform / platform_ARM_SUNxI_sdio.c
1 /******************************************************************************\r
2  *\r
3  * Copyright(c) 2013 Realtek Corporation. All rights reserved.\r
4  *\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
8  *\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
12  * more details.\r
13  *\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
17  *\r
18  *\r
19  ******************************************************************************/\r
20 #include <drv_types.h>\r
21 \r
22 #ifdef CONFIG_MMC_SUNXI_POWER_CONTROL\r
23 #ifdef CONFIG_WITS_EVB_V13\r
24 #define SDIOID  0\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
28 \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
33 /*\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
38  */\r
39 \r
40 int rtl8189es_sdio_powerup(void)\r
41 {\r
42         mmc_pm_gpio_ctrl("rtl8189es_vdd_en", 1);\r
43         udelay(100);\r
44         mmc_pm_gpio_ctrl("rtl8189es_vcc_en", 1);\r
45         udelay(50);\r
46         mmc_pm_gpio_ctrl("rtl8189es_shdn", 1);\r
47         return 0;\r
48 }\r
49 \r
50 int rtl8189es_sdio_poweroff(void)\r
51 {\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
55         return 0;\r
56 }\r
57 #endif // CONFIG_MMC_SUNXI_POWER_CONTROL\r
58 \r
59 /*\r
60  * Return:\r
61  *      0:      power on successfully\r
62  *      others: power on failed\r
63  */\r
64 int platform_wifi_power_on(void)\r
65 {\r
66         int ret = 0;\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
70 \r
71 \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
77         } else {\r
78                 ret = -1;\r
79                 printk("[rtl8189es] %s: mod_sel = %d is incorrect.\n", __FUNCTION__, mod_sel);\r
80         }\r
81 #endif // CONFIG_MMC_SUNXI_POWER_CONTROL\r
82 \r
83         return ret;\r
84 }\r
85 \r
86 void platform_wifi_power_off(void)\r
87 {\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
95 }\r