1 /* arch/arm/mach-rk30/board-rk30-sdk-sdmmc.c
3 * Copyright (C) 2012 ROCKCHIP, Inc.
5 * This software is licensed under the terms of the GNU General Public
6 * License version 2, as published by the Free Software Foundation, and
7 * may be copied, distributed, and modified under those terms.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
16 * ver1.0 add combo-wifi operateions. such as commit e049351a09c78db8a08aa5c49ce8eba0a3d6824e, at 2012-09-16
17 * ver2.0 Unify all the file versions of board_xxxx_sdmmc.c, at 2012-11-05
20 * Part 1: define the gpio for SD-MMC-SDIO-Wifi functions according to your own projects.
21 ***********************************************************************************
22 * Please set the value according to your own project.
23 ***********************************************************************************
25 * Part 2: define the gpio for the SDMMC controller. Based on the chip datasheet.
26 ***********************************************************************************
27 * Please do not change, each platform has a fixed set. !!!!!!!!!!!!!!!!!!
28 * The system personnel will set the value depending on the specific arch datasheet,
29 * such as RK29XX, RK30XX.
30 * If you have any doubt, please consult BangWang Xie.
31 ***********************************************************************************
33 *.Part 3: The various operations of the SDMMC-SDIO module
34 ***********************************************************************************
35 * Please do not change, each platform has a fixed set. !!!!!!!!!!!!!!!!!!
36 * define the varaious operations for SDMMC module
37 * Generally only the author of SDMMC module will modify this section.
38 * If you have any doubt, please consult BangWang Xie.
39 ***********************************************************************************
41 *.Part 4: The various operations of the Wifi-BT module
42 ***********************************************************************************
43 * Please do not change, each module has a fixed set. !!!!!!!!!!!!!!!!!!
44 * define the varaious operations for Wifi module
45 * Generally only the author of Wifi module will modify this section.
46 * If you have any doubt, please consult BangWang Xie, Weiguo Hu, and Weilong Gao.
47 ***********************************************************************************
51 //1.Part 1: define the gpio for SD-MMC-SDIO-Wifi functions according to your own projects.
53 /*************************************************************************
54 * define the gpio for sd-sdio-wifi module
55 *************************************************************************/
56 #if defined(CONFIG_SDMMC0_RK29_WRITE_PROTECT)
57 #define SDMMC0_WRITE_PROTECT_PIN RK30_PIN3_PB2 //According to your own project to set the value of write-protect-pin.
58 #define SDMMC0_WRITE_PROTECT_ENABLE_VALUE GPIO_HIGH
61 #if defined(CONFIG_SDMMC1_RK29_WRITE_PROTECT)
62 #define SDMMC1_WRITE_PROTECT_PIN RK30_PIN3_PB3 //According to your own project to set the value of write-protect-pin.
63 #define SDMMC1_WRITE_PROTECT_ENABLE_VALUE GPIO_HIGH
66 #if defined(CONFIG_RK29_SDIO_IRQ_FROM_GPIO)
67 #define RK29SDK_WIFI_SDIO_CARD_INT RK30_PIN3_PD2
70 //define the card-detect-pin.
71 #if defined(CONFIG_ARCH_RK29)
72 //refer to file /arch/arm/mach-rk29/include/mach/Iomux.h
74 #define RK29SDK_SD_CARD_DETECT_N RK29_PIN2_PA2 //According to your own project to set the value of card-detect-pin.
75 #define RK29SDK_SD_CARD_INSERT_LEVEL GPIO_LOW // set the voltage of insert-card. Please pay attention to the default setting.
76 #define RK29SDK_SD_CARD_DETECT_PIN_NAME GPIO2A2_SDMMC0DETECTN_NAME
77 #define RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO GPIO2L_GPIO2A2
78 #define RK29SDK_SD_CARD_DETECT_IOMUX_FMUX GPIO2L_SDMMC0_DETECT_N
80 #define RK29SDK_SD_CARD_PWR_EN RK29_PIN5_PD5
81 #define RK29SDK_SD_CARD_PWR_EN_LEVEL GPIO_LOW
82 #define RK29SDK_SD_CARD_PWR_EN_PIN_NAME GPIO5D5_SDMMC0PWREN_NAME
83 #define RK29SDK_SD_CARD_PWR_EN_IOMUX_FGPIO GPIO5H_GPIO5D5
84 #define RK29SDK_SD_CARD_PWR_EN_IOMUX_FMUX GPIO5H_SDMMC0_PWR_EN
86 #elif defined(CONFIG_ARCH_RK3066B)
87 //refer to file /arch/arm/mach-rk30/include/mach/iomux-rk3066b.h
89 #define RK29SDK_SD_CARD_DETECT_N RK30_PIN3_PB0 //According to your own project to set the value of card-detect-pin.
90 #define RK29SDK_SD_CARD_INSERT_LEVEL GPIO_LOW // set the voltage of insert-card. Please pay attention to the default setting.
91 #define RK29SDK_SD_CARD_DETECT_PIN_NAME GPIO3B0_SDMMC0DETECTN_NAME
92 #define RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO GPIO3B_GPIO3B0
93 #define RK29SDK_SD_CARD_DETECT_IOMUX_FMUX GPIO3B_SDMMC0_DETECT_N
95 #define RK29SDK_SD_CARD_PWR_EN RK30_PIN3_PA1
96 #define RK29SDK_SD_CARD_PWR_EN_LEVEL GPIO_LOW
97 #define RK29SDK_SD_CARD_PWR_EN_PIN_NAME GPIO3A1_SDMMC0PWREN_NAME
98 #define RK29SDK_SD_CARD_PWR_EN_IOMUX_FGPIO GPIO3A_GPIO3A1
99 #define RK29SDK_SD_CARD_PWR_EN_IOMUX_FMUX GPIO3A_SDMMC0PWREN
101 #elif defined(CONFIG_ARCH_RK30)&& !defined(CONFIG_ARCH_RK3066B) //for RK30,RK3066 SDK
102 //refer to file /arch/arm/mach-rk30/include/mach/Iomux.h
104 #define RK29SDK_SD_CARD_DETECT_N RK30_PIN3_PB6 //According to your own project to set the value of card-detect-pin.
105 #define RK29SDK_SD_CARD_INSERT_LEVEL GPIO_LOW // set the voltage of insert-card. Please pay attention to the default setting.
106 #define RK29SDK_SD_CARD_DETECT_PIN_NAME GPIO3B6_SDMMC0DETECTN_NAME
107 #define RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO GPIO3B_GPIO3B6
108 #define RK29SDK_SD_CARD_DETECT_IOMUX_FMUX GPIO3B_SDMMC0_DETECT_N
110 #define RK29SDK_SD_CARD_PWR_EN RK30_PIN3_PA7
111 #define RK29SDK_SD_CARD_PWR_EN_LEVEL GPIO_LOW
112 #define RK29SDK_SD_CARD_PWR_EN_PIN_NAME GPIO3A7_SDMMC0PWREN_NAME
113 #define RK29SDK_SD_CARD_PWR_EN_IOMUX_FGPIO GPIO3A_GPIO3A7
114 #define RK29SDK_SD_CARD_PWR_EN_IOMUX_FMUX GPIO3A_SDMMC0_PWR_EN
116 #elif defined(CONFIG_ARCH_RK2928)
117 //refer to file ./arch/arm/mach-rk2928/include/mach/iomux.h
119 #if defined(CONFIG_SDMMC0_RK29_SDCARD_DET_FROM_GPIO) && defined(CONFIG_MACH_RK2928_PHONEPAD) //for i30 no detect pin
120 //use gpio-interupt to dectec card in RK2926. Please pay attention to modify the default setting.
121 #define RK29SDK_SD_CARD_DETECT_N INVALID_GPIO //According to your own project to set the value of card-detect-pin.
122 #define RK29SDK_SD_CARD_INSERT_LEVEL GPIO_LOW // set the voltage of insert-card. Please pay attention to the default setting.
123 #define RK29SDK_SD_CARD_DETECT_PIN_NAME GPIO2A7_NAND_DPS_EMMC_CLKOUT_NAME
124 #define RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO GPIO2A_GPIO2A7
125 #define RK29SDK_SD_CARD_DETECT_IOMUX_FMUX GPIO2A_EMMC_CLKOUT
127 #define RK29SDK_SD_CARD_DETECT_N RK2928_PIN1_PC1 //According to your own project to set the value of card-detect-pin.
128 #define RK29SDK_SD_CARD_INSERT_LEVEL GPIO_LOW // set the voltage of insert-card. Please pay attention to the default setting.
129 #define RK29SDK_SD_CARD_DETECT_PIN_NAME GPIO1C1_MMC0_DETN_NAME
130 #define RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO GPIO1C_GPIO1C1
131 #define RK29SDK_SD_CARD_DETECT_IOMUX_FMUX GPIO1C_MMC0_DETN
134 #define RK29SDK_SD_CARD_PWR_EN INVALID_GPIO
135 //#define RK29SDK_SD_CARD_PWR_EN RK2928_PIN1_PB6
136 #define RK29SDK_SD_CARD_PWR_EN_LEVEL GPIO_LOW
137 //#define RK29SDK_SD_CARD_PWR_EN_PIN_NAME GPIO1B6_MMC0_PWREN_NAME
138 //#define RK29SDK_SD_CARD_PWR_EN_IOMUX_FGPIO GPIO1B_GPIO1B6
139 //#define RK29SDK_SD_CARD_PWR_EN_IOMUX_FMUX GPIO1B_MMC0_PWREN
142 static void rk29_sdmmc_board_setpower(struct device *dev, char *regulator_supply_name)
144 #if !defined(RK29SDK_SD_CARD_PWR_EN) || (INVALID_GPIO == RK29SDK_SD_CARD_PWR_EN)
145 memset(regulator_supply_name, 0,4);
147 //set the PMU-LDO-supply name to NULL, if you use gpio to control power on-off.
148 memset(regulator_supply_name, 0,4);
153 // Define wifi module's power and reset gpio, and gpio sensitive level.
154 // Please set the value according to your own project.
156 #if defined(CONFIG_ARCH_RK30) && !defined(CONFIG_ARCH_RK3066B) //for RK30,RK3066 SDK
157 #define WIFI_HOST_WAKE RK30_PIN3_PD2
159 #if defined(CONFIG_RK903) || defined(CONFIG_RK901) || defined(CONFIG_RTL8192CU) || defined(CONFIG_RTL8188EU)
161 #define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PD0
162 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH
164 #define RK30SDK_WIFI_GPIO_POWER_PIN_NAME GPIO3D0_SDMMC1PWREN_NAME
165 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FGPIO GPIO3D_GPIO3D0
167 #elif defined(CONFIG_BCM4329) || defined(CONFIG_BCM4319)
169 #define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PD0
170 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH
171 #define RK30SDK_WIFI_GPIO_POWER_PIN_NAME GPIO3D0_SDMMC1PWREN_NAME
172 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FGPIO GPIO3D_GPIO3D0
174 #define RK30SDK_WIFI_GPIO_RESET_N RK30_PIN3_PD1
175 #define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH
176 #define RK30SDK_WIFI_GPIO_RESET_PIN_NAME GPIO3D1_SDMMC1BACKENDPWR_NAME
177 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FGPIO GPIO3D_GPIO3D1
179 #elif defined(CONFIG_MT6620)
180 #if !defined(CONFIG_USE_SDMMC0_FOR_WIFI_DEVELOP_BOARD)
181 #define USE_SDMMC_CONTROLLER_FOR_WIFI 1
183 #if defined(CONFIG_MACH_RK30_PHONE_PAD) // define the gpio for MT6620 in RK30_PHONE_PAD project.
184 #define COMBO_MODULE_MT6620_CDT 0 //- 1--use Cdtech chip; 0--unuse CDT chip
186 #define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PC7
187 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH
188 #define RK30SDK_WIFI_GPIO_POWER_PIN_NAME GPIO3C7_SDMMC1WRITEPRT_NAME
189 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FGPIO GPIO3C_GPIO3C7
190 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FMUX GPIO3C_SDMMC1_WRITE_PRT
191 //reset, DAIRST,SYSRST_B
192 #define RK30SDK_WIFI_GPIO_RESET_N RK30_PIN3_PD1
193 #define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH
194 #define RK30SDK_WIFI_GPIO_RESET_PIN_NAME GPIO3D1_SDMMC1BACKENDPWR_NAME
195 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FGPIO GPIO3D_GPIO3D1
196 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FMUX GPIO3D_SDMMC1_BACKEND_PWR
198 //#define RK30SDK_WIFI_GPIO_VCCIO_WL RK30_PIN6_PB4
199 //#define RK30SDK_WIFI_GPIO_VCCIO_WL_ENABLE_VALUE GPIO_HIGH
201 #define RK30SDK_WIFI_GPIO_WIFI_INT_B RK30_PIN4_PD2
202 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_ENABLE_VALUE GPIO_HIGH
203 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_PIN_NAME GPIO4D2_SMCDATA10_TRACEDATA10_NAME
204 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FGPIO GPIO4D_GPIO4D2
205 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FMUX GPIO4D_SMC_DATA10
207 #define RK30SDK_WIFI_GPIO_BGF_INT_B RK30_PIN6_PA7
208 #define RK30SDK_WIFI_GPIO_BGF_INT_B_ENABLE_VALUE GPIO_HIGH
209 //#define RK30SDK_WIFI_GPIO_BGF_INT_B_PIN_NAME GPIO3C6_SDMMC1DETECTN_NAME
210 //#define RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FGPIO GPIO3C_GPIO3C6
211 //#define RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FMUX GPIO3C_SDMMC1_DETECT_N
213 #define RK30SDK_WIFI_GPIO_GPS_SYNC RK30_PIN3_PD0
214 #define RK30SDK_WIFI_GPIO_GPS_SYNC_ENABLE_VALUE GPIO_HIGH
215 #define RK30SDK_WIFI_GPIO_GPS_SYNC_PIN_NAME GPIO3D0_SDMMC1PWREN_NAME
216 #define RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FGPIO GPIO3D_GPIO3D0
217 #define RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FMUX GPIO3D_SDMMC1_PWR_EN
219 #elif defined(CONFIG_MACH_RK3066_M8000R) // define the gpio for MT6620 in CONFIG_MACH_RK3066_M8000R project.
220 #define COMBO_MODULE_MT6620_CDT 1 //- 1--use Cdtech chip; 0--unuse CDT chip
222 #define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PC7
223 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH
224 #define RK30SDK_WIFI_GPIO_POWER_PIN_NAME GPIO3C7_SDMMC1WRITEPRT_NAME
225 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FGPIO GPIO3C_GPIO3C7
226 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FMUX GPIO3C_SDMMC1_WRITE_PRT
227 //reset, DAIRST,SYSRST_B
228 #define RK30SDK_WIFI_GPIO_RESET_N RK30_PIN3_PD1
229 #define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH
230 #define RK30SDK_WIFI_GPIO_RESET_PIN_NAME GPIO3D1_SDMMC1BACKENDPWR_NAME
231 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FGPIO GPIO3D_GPIO3D1
232 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FMUX GPIO3D_SDMMC1_BACKEND_PWR
234 #define RK30SDK_WIFI_GPIO_VCCIO_WL RK30_PIN0_PD2
235 #define RK30SDK_WIFI_GPIO_VCCIO_WL_ENABLE_VALUE GPIO_HIGH
236 #define RK30SDK_WIFI_GPIO_VCCIO_WL_PIN_NAME GPIO0D2_I2S22CHLRCKRX_SMCOEN_NAME
237 #define RK30SDK_WIFI_GPIO_VCCIO_WL_IOMUX_FGPIO GPIO0D_GPIO0D2
238 #define RK30SDK_WIFI_GPIO_VCCIO_WL_IOMUX_FMUX GPIO0D_I2S2_2CH_LRCK_RX
240 #define RK30SDK_WIFI_GPIO_WIFI_INT_B RK30_PIN3_PD2
241 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_ENABLE_VALUE GPIO_HIGH
242 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_PIN_NAME GPIO3D2_SDMMC1INTN_NAME
243 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FGPIO GPIO3D_GPIO3D2
244 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FMUX GPIO3D_SDMMC1_INT_N
246 #define RK30SDK_WIFI_GPIO_BGF_INT_B RK30_PIN6_PA7
247 #define RK30SDK_WIFI_GPIO_BGF_INT_B_ENABLE_VALUE GPIO_HIGH
248 //#define RK30SDK_WIFI_GPIO_BGF_INT_B_PIN_NAME GPIO3C6_SDMMC1DETECTN_NAME
249 //#define RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FGPIO GPIO3C_GPIO3C6
250 // #define RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FMUX GPIO3C_SDMMC1_DETECT_N
252 #define RK30SDK_WIFI_GPIO_GPS_SYNC RK30_PIN3_PD0
253 #define RK30SDK_WIFI_GPIO_GPS_SYNC_ENABLE_VALUE GPIO_HIGH
254 #define RK30SDK_WIFI_GPIO_GPS_SYNC_PIN_NAME GPIO3D0_SDMMC1PWREN_NAME
255 #define RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FGPIO GPIO3D_GPIO3D0
256 #define RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FMUX GPIO3D_SDMMC1_PWR_EN
258 #if COMBO_MODULE_MT6620_CDT
260 //#define RK30SDK_WIFI_GPIO_ANTSEL2 RK30_PIN4_PD4
261 //#define RK30SDK_WIFI_GPIO_ANTSEL2_ENABLE_VALUE GPIO_LOW //use 6620 in CDT chip, LOW--work; High--no work.
262 //#define RK30SDK_WIFI_GPIO_ANTSEL2_PIN_NAME GPIO4D4_SMCDATA12_TRACEDATA12_NAME
263 //#define RK30SDK_WIFI_GPIO_ANTSEL2_IOMUX_FGPIO GPIO4D_GPIO4D4
264 //#define RK30SDK_WIFI_GPIO_ANTSEL2_IOMUX_FMUX GPIO4D_TRACE_DATA12
266 //#define RK30SDK_WIFI_GPIO_ANTSEL3 RK30_PIN4_PD3
267 //#define RK30SDK_WIFI_GPIO_ANTSEL3_ENABLE_VALUE GPIO_HIGH //use 6620 in CDT chip, High--work; Low--no work..
268 //#define RK30SDK_WIFI_GPIO_ANTSEL3_PIN_NAME GPIO4D3_SMCDATA11_TRACEDATA11_NAME
269 //#define RK30SDK_WIFI_GPIO_ANTSEL3_IOMUX_FGPIO GPIO4D_GPIO4D3
270 //#define RK30SDK_WIFI_GPIO_ANTSEL3_IOMUX_FMUX GPIO4D_TRACE_DATA11
272 //#define RK30SDK_WIFI_GPIO_GPS_LAN RK30_PIN4_PD6
273 //#define RK30SDK_WIFI_GPIO_GPS_LAN_ENABLE_VALUE GPIO_HIGH //use 6620 in CDT chip, High--work; Low--no work..
274 //#define RK30SDK_WIFI_GPIO_GPS_LAN_PIN_NAME GPIO4D6_SMCDATA14_TRACEDATA14_NAME
275 //#define RK30SDK_WIFI_GPIO_GPS_LAN_IOMUX_FGPIO GPIO4D_GPIO4D6
276 //#define RK30SDK_WIFI_GPIO_GPS_LAN_IOMUX_FMUX GPIO4D_TRACE_DATA14
277 #endif // #if COMBO_MODULE_MT6620_CDT--#endif
279 #elif defined(CONFIG_MACH_SKYWORTH_T10_SDK) // define the gpio for MT6620 in KYWORTH_T10 project.
280 #define COMBO_MODULE_MT6620_CDT 0 //- 1--use Cdtech chip; 0--unuse CDT chip
282 #define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PD0
283 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH
284 #define RK30SDK_WIFI_GPIO_POWER_PIN_NAME GPIO3D0_SDMMC1PWREN_NAME
285 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FGPIO GPIO3D_GPIO3D0
286 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FMUX GPIO3D_SDMMC1_PWR_EN
287 //reset, DAIRST,SYSRST_B
288 #define RK30SDK_WIFI_GPIO_RESET_N RK30_PIN3_PD1
289 #define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH
290 #define RK30SDK_WIFI_GPIO_RESET_PIN_NAME GPIO3D1_SDMMC1BACKENDPWR_NAME
291 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FGPIO GPIO3D_GPIO3D1
292 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FMUX GPIO3D_SDMMC1_BACKEND_PWR
294 //#define RK30SDK_WIFI_GPIO_VCCIO_WL RK30_PIN6_PB4
295 //#define RK30SDK_WIFI_GPIO_VCCIO_WL_ENABLE_VALUE GPIO_HIGH
297 #define RK30SDK_WIFI_GPIO_WIFI_INT_B RK30_PIN3_PD2
298 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_ENABLE_VALUE GPIO_HIGH
299 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_PIN_NAME GPIO3D2_SDMMC1INTN_NAME
300 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FGPIO GPIO3D_GPIO3D2
301 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FMUX GPIO3D_SDMMC1_INT_N
303 #define RK30SDK_WIFI_GPIO_BGF_INT_B RK30_PIN3_PC6
304 #define RK30SDK_WIFI_GPIO_BGF_INT_B_ENABLE_VALUE GPIO_HIGH
305 #define RK30SDK_WIFI_GPIO_BGF_INT_B_PIN_NAME GPIO3C6_SDMMC1DETECTN_NAME
306 #define RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FGPIO GPIO3C_GPIO3C6
307 #define RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FMUX GPIO3C_SDMMC1_DETECT_N
309 #define RK30SDK_WIFI_GPIO_GPS_SYNC RK30_PIN3_PC7
310 #define RK30SDK_WIFI_GPIO_GPS_SYNC_ENABLE_VALUE GPIO_HIGH
311 #define RK30SDK_WIFI_GPIO_GPS_SYNC_PIN_NAME GPIO3C7_SDMMC1WRITEPRT_NAME
312 #define RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FGPIO GPIO3C_GPIO3C7
313 #define RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FMUX GPIO3C_SDMMC1_WRITE_PRT
315 #else //For exmpale, to define the gpio for MT6620 in RK30SDK project.
316 #define COMBO_MODULE_MT6620_CDT 1 //- 1--use Cdtech chip; 0--unuse CDT chip
318 #define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PD0
319 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH
320 #define RK30SDK_WIFI_GPIO_POWER_PIN_NAME GPIO3D0_SDMMC1PWREN_NAME
321 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FGPIO GPIO3D_GPIO3D0
322 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FMUX GPIO3D_SDMMC1_PWR_EN
324 #define RK30SDK_WIFI_GPIO_RESET_N RK30_PIN3_PD1
325 #define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH
326 #define RK30SDK_WIFI_GPIO_RESET_PIN_NAME GPIO3D1_SDMMC1BACKENDPWR_NAME
327 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FGPIO GPIO3D_GPIO3D1
328 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FMUX GPIO3D_SDMMC1_BACKEND_PWR
330 //#define RK30SDK_WIFI_GPIO_VCCIO_WL RK30_PIN0_PD2
331 //#define RK30SDK_WIFI_GPIO_VCCIO_WL_ENABLE_VALUE GPIO_HIGH
332 //#define RK30SDK_WIFI_GPIO_VCCIO_WL_PIN_NAME GPIO0D2_I2S22CHLRCKRX_SMCOEN_NAME
333 //#define RK30SDK_WIFI_GPIO_VCCIO_WL_IOMUX_FGPIO GPIO0D_GPIO0D2
334 //#define RK30SDK_WIFI_GPIO_VCCIO_WL_IOMUX_FMUX GPIO0D_I2S2_2CH_LRCK_RX
336 #define RK30SDK_WIFI_GPIO_WIFI_INT_B RK30_PIN3_PD2
337 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_ENABLE_VALUE GPIO_HIGH
338 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_PIN_NAME GPIO3D2_SDMMC1INTN_NAME
339 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FGPIO GPIO3D_GPIO3D2
340 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FMUX GPIO3D_SDMMC1_INT_N
342 #define RK30SDK_WIFI_GPIO_BGF_INT_B RK30_PIN3_PC6
343 #define RK30SDK_WIFI_GPIO_BGF_INT_B_ENABLE_VALUE GPIO_HIGH
344 #define RK30SDK_WIFI_GPIO_BGF_INT_B_PIN_NAME GPIO3C6_SDMMC1DETECTN_NAME
345 #define RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FGPIO GPIO3C_GPIO3C6
346 #define RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FMUX GPIO3C_SDMMC1_DETECT_N
348 #define RK30SDK_WIFI_GPIO_GPS_SYNC RK30_PIN3_PC7
349 #define RK30SDK_WIFI_GPIO_GPS_SYNC_ENABLE_VALUE GPIO_HIGH
350 #define RK30SDK_WIFI_GPIO_GPS_SYNC_PIN_NAME GPIO3C7_SDMMC1WRITEPRT_NAME
351 #define RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FGPIO GPIO3C_GPIO3C7
352 #define RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FMUX GPIO3C_SDMMC1_WRITE_PRT
354 #if COMBO_MODULE_MT6620_CDT
356 #define RK30SDK_WIFI_GPIO_ANTSEL2 RK30_PIN4_PD4
357 #define RK30SDK_WIFI_GPIO_ANTSEL2_ENABLE_VALUE GPIO_LOW //use 6620 in CDT chip, LOW--work; High--no work.
358 #define RK30SDK_WIFI_GPIO_ANTSEL2_PIN_NAME GPIO4D4_SMCDATA12_TRACEDATA12_NAME
359 #define RK30SDK_WIFI_GPIO_ANTSEL2_IOMUX_FGPIO GPIO4D_GPIO4D4
360 #define RK30SDK_WIFI_GPIO_ANTSEL2_IOMUX_FMUX GPIO4D_TRACE_DATA12
362 #define RK30SDK_WIFI_GPIO_ANTSEL3 RK30_PIN4_PD3
363 #define RK30SDK_WIFI_GPIO_ANTSEL3_ENABLE_VALUE GPIO_HIGH //use 6620 in CDT chip, High--work; Low--no work..
364 #define RK30SDK_WIFI_GPIO_ANTSEL3_PIN_NAME GPIO4D3_SMCDATA11_TRACEDATA11_NAME
365 #define RK30SDK_WIFI_GPIO_ANTSEL3_IOMUX_FGPIO GPIO4D_GPIO4D3
366 #define RK30SDK_WIFI_GPIO_ANTSEL3_IOMUX_FMUX GPIO4D_TRACE_DATA11
368 #define RK30SDK_WIFI_GPIO_GPS_LAN RK30_PIN4_PD6
369 #define RK30SDK_WIFI_GPIO_GPS_LAN_ENABLE_VALUE GPIO_HIGH //use 6620 in CDT chip, High--work; Low--no work..
370 #define RK30SDK_WIFI_GPIO_GPS_LAN_PIN_NAME GPIO4D6_SMCDATA14_TRACEDATA14_NAME
371 #define RK30SDK_WIFI_GPIO_GPS_LAN_IOMUX_FGPIO GPIO4D_GPIO4D6
372 //#define RK30SDK_WIFI_GPIO_GPS_LAN_IOMUX_FMUX GPIO4D_TRACE_DATA14
373 #endif // #if COMBO_MODULE_MT6620_CDT--#endif
375 #endif// #endif --#if !defined(CONFIG_USE_SDMMC0_FOR_WIFI_DEVELOP_BOARD)
377 #elif defined(CONFIG_ARCH_RK3066B)//refer to file /arch/arm/mach-rk30/include/mach/iomux-rk3066b.h
378 #define WIFI_HOST_WAKE RK30_PIN3_PD2
380 #if defined(CONFIG_RTL8192CU) || defined(CONFIG_RTL8188EU)
381 #define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PD0
382 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH
383 #define RK30SDK_WIFI_GPIO_POWER_PIN_NAME GPIO3D0_SDMMC1PWREN_MIIMD_NAME
384 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FGPIO GPIO3D_GPIO3D0
386 #elif defined(CONFIG_BCM4329) || defined(CONFIG_BCM4319) || defined(CONFIG_RK903) || defined(CONFIG_RK901)
387 #define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PD0
388 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH
389 #define RK30SDK_WIFI_GPIO_POWER_PIN_NAME GPIO3D0_SDMMC1PWREN_MIIMD_NAME
390 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FGPIO GPIO3D_GPIO3D0
392 #define RK30SDK_WIFI_GPIO_RESET_N RK30_PIN2_PA7
393 #define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH
394 #define RK30SDK_WIFI_GPIO_RESET_PIN_NAME GPIO2A7_LCDC1DATA7_SMCDATA7_TRACEDATA7_NAME
395 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FGPIO GPIO2A_GPIO2A7
397 #elif defined(CONFIG_ARCH_RK2928) //refer to file ./arch/arm/mach-rk2928/include/mach/iomux.h
398 #define WIFI_HOST_WAKE RK2928_PIN3_PC0
400 #if defined(CONFIG_RK903) || defined(CONFIG_RK901) || defined(CONFIG_BCM4329) || defined(CONFIG_BCM4319)
401 #define RK30SDK_WIFI_GPIO_POWER_N RK2928_PIN0_PD6
402 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH
403 #define RK30SDK_WIFI_GPIO_POWER_PIN_NAME GPIO0D6_MMC1_PWREN_NAME
404 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FGPIO GPIO0D_GPIO0D6
406 #define RK30SDK_WIFI_GPIO_RESET_N RK2928_PIN3_PC2
407 #define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH
408 #define RK30SDK_WIFI_GPIO_RESET_PIN_NAME GPIO3C2_SDMMC1DATA1_NAME
409 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FGPIO GPIO3C_GPIO3C2
411 #elif defined(CONFIG_RDA5990)
412 #define RK30SDK_WIFI_GPIO_POWER_N INVALID_GPIO
413 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH
414 //#define RK30SDK_WIFI_GPIO_POWER_PIN_NAME GPIO0B6_MMC1_PWREN_NAME
415 //#define RK30SDK_WIFI_GPIO_POWER_IOMUX_FGPIO GPIO0B_GPIO0B6
417 #define RK30SDK_WIFI_GPIO_RESET_N INVALID_GPIO
418 #define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH
419 //#define RK30SDK_WIFI_GPIO_RESET_PIN_NAME GPIO3C2_SDMMC1DATA1_NAME
420 //#define RK30SDK_WIFI_GPIO_RESET_IOMUX_FGPIO GPIO3C_GPIO3C2
423 #elif defined(CONFIG_RTL8192CU) || defined(CONFIG_RTL8188EU) || defined(CONFIG_RT5370)
424 #if defined(CONFIG_MACH_RK2926_V86)
425 #define CONFIG_USB_WIFI_POWER_CONTROLED_BY_GPIO
426 #define RK30SDK_WIFI_GPIO_POWER_N RK2928_PIN0_PD3
427 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_LOW
428 #elif defined(CONFIG_MACH_RK2928_TR726)
429 #define CONFIG_USB_WIFI_POWER_CONTROLED_BY_GPIO
430 #define RK30SDK_WIFI_GPIO_POWER_N RK2928_PIN3_PD3
431 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_LOW
433 #define RK30SDK_WIFI_GPIO_POWER_N RK2928_PIN0_PD6
434 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_LOW
437 #elif defined(CONFIG_MT5931) || defined(CONFIG_MT5931_MT6622)
438 #define RK30SDK_WIFI_GPIO_POWER_N RK2928_PIN3_PD2
439 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH
441 #define RK30SDK_WIFI_GPIO_RESET_N RK2928_PIN3_PD5
442 #define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH
448 //1. Part 2: to define the gpio for the SDMMC controller. Based on the chip datasheet.
449 /*************************************************************************
450 * define the gpio for SDMMC module on various platforms
451 * Generally only system personnel will modify this part
452 *************************************************************************/
454 #if defined(CONFIG_ARCH_RK30)&& !defined(CONFIG_ARCH_RK3066B)//for RK30,RK3066 SDK
456 * define the gpio for sdmmc0
458 struct rksdmmc_gpio_board rksdmmc0_gpio_init = {
464 .name = GPIO3B0_SDMMC0CLKOUT_NAME,
465 .fgpio = GPIO3B_GPIO3B0,
466 .fmux = GPIO3B_SDMMC0_CLKOUT,
474 .name = GPIO3B1_SDMMC0CMD_NAME,
475 .fgpio = GPIO3B_GPIO3B1,
476 .fmux = GPIO3B_SDMMC0_CMD,
484 .name = GPIO3B2_SDMMC0DATA0_NAME,
485 .fgpio = GPIO3B_GPIO3B2,
486 .fmux = GPIO3B_SDMMC0_DATA0,
494 .name = GPIO3B3_SDMMC0DATA1_NAME,
495 .fgpio = GPIO3B_GPIO3B3,
496 .fmux = GPIO3B_SDMMC0_DATA1,
504 .name = GPIO3B4_SDMMC0DATA2_NAME,
505 .fgpio = GPIO3B_GPIO3B4,
506 .fmux = GPIO3B_SDMMC0_DATA2,
514 .name = GPIO3B5_SDMMC0DATA3_NAME,
515 .fgpio = GPIO3B_GPIO3B5,
516 .fmux = GPIO3B_SDMMC0_DATA3,
521 #if defined(RK29SDK_SD_CARD_PWR_EN) || (INVALID_GPIO != RK29SDK_SD_CARD_PWR_EN)
522 .io = RK29SDK_SD_CARD_PWR_EN,
523 .enable = RK29SDK_SD_CARD_PWR_EN_LEVEL,
524 #ifdef RK29SDK_SD_CARD_PWR_EN_PIN_NAME
526 .name = RK29SDK_SD_CARD_PWR_EN_PIN_NAME,
527 #ifdef RK29SDK_SD_CARD_PWR_EN_IOMUX_FGPIO
528 .fgpio = RK29SDK_SD_CARD_PWR_EN_IOMUX_FGPIO,
530 #ifdef RK29SDK_SD_CARD_PWR_EN_IOMUX_FMUX
531 .fmux = RK29SDK_SD_CARD_PWR_EN_IOMUX_FMUX,
542 #if defined(RK29SDK_SD_CARD_DETECT_N) || (INVALID_GPIO != RK29SDK_SD_CARD_DETECT_N)
543 .io = RK29SDK_SD_CARD_DETECT_N,
544 .enable = RK29SDK_SD_CARD_INSERT_LEVEL,
545 #ifdef RK29SDK_SD_CARD_DETECT_PIN_NAME
547 .name = RK29SDK_SD_CARD_DETECT_PIN_NAME,
548 #ifdef RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO
549 .fgpio = RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO,
551 #ifdef RK29SDK_SD_CARD_DETECT_IOMUX_FMUX
552 .fmux = RK29SDK_SD_CARD_DETECT_IOMUX_FMUX,
565 * define the gpio for sdmmc1
567 static struct rksdmmc_gpio_board rksdmmc1_gpio_init = {
573 .name = GPIO3C5_SDMMC1CLKOUT_NAME,
574 .fgpio = GPIO3C_GPIO3C5,
575 .fmux = GPIO3B_SDMMC0_CLKOUT,
583 .name = GPIO3C0_SMMC1CMD_NAME,
584 .fgpio = GPIO3C_GPIO3C0,
585 .fmux = GPIO3B_SDMMC0_CMD,
593 .name = GPIO3C1_SDMMC1DATA0_NAME,
594 .fgpio = GPIO3C_GPIO3C1,
595 .fmux = GPIO3B_SDMMC0_DATA0,
603 .name = GPIO3C2_SDMMC1DATA1_NAME,
604 .fgpio = GPIO3C_GPIO3C2,
605 .fmux = GPIO3B_SDMMC0_DATA1,
613 .name = GPIO3C3_SDMMC1DATA2_NAME,
614 .fgpio = GPIO3C_GPIO3C3,
615 .fmux = GPIO3B_SDMMC0_DATA2,
623 .name = GPIO3C4_SDMMC1DATA3_NAME,
624 .fgpio = GPIO3C_GPIO3C4,
625 .fmux = GPIO3B_SDMMC0_DATA3,
629 // ---end -#if defined(CONFIG_ARCH_RK30)
631 #elif defined(CONFIG_ARCH_RK3066B)
634 * define the gpio for sdmmc0
636 static struct rksdmmc_gpio_board rksdmmc0_gpio_init = {
642 .name = GPIO3A2_SDMMC0CLKOUT_NAME,
643 .fgpio = GPIO3A_GPIO3A2,
644 .fmux = GPIO3A_SDMMC0CLKOUT,
652 .name = GPIO3A3_SDMMC0CMD_NAME,
653 .fgpio = GPIO3A_GPIO3A3,
654 .fmux = GPIO3A_SDMMC0CMD,
662 .name = GPIO3A4_SDMMC0DATA0_NAME,
663 .fgpio = GPIO3A_GPIO3A4,
664 .fmux = GPIO3A_SDMMC0DATA0,
672 .name = GPIO3A5_SDMMC0DATA1_NAME,
673 .fgpio = GPIO3A_GPIO3A5,
674 .fmux = GPIO3A_SDMMC0DATA1,
682 .name = GPIO3A6_SDMMC0DATA2_NAME,
683 .fgpio = GPIO3A_GPIO3A6,
684 .fmux = GPIO3A_SDMMC0DATA2,
692 .name = GPIO3A7_SDMMC0DATA3_NAME,
693 .fgpio = GPIO3A_GPIO3A7,
694 .fmux = GPIO3A_SDMMC0DATA3,
700 #if defined(RK29SDK_SD_CARD_PWR_EN) || (INVALID_GPIO != RK29SDK_SD_CARD_PWR_EN)
701 .io = RK29SDK_SD_CARD_PWR_EN,
702 .enable = RK29SDK_SD_CARD_PWR_EN_LEVEL,
703 #ifdef RK29SDK_SD_CARD_PWR_EN_PIN_NAME
705 .name = RK29SDK_SD_CARD_PWR_EN_PIN_NAME,
706 #ifdef RK29SDK_SD_CARD_PWR_EN_IOMUX_FGPIO
707 .fgpio = RK29SDK_SD_CARD_PWR_EN_IOMUX_FGPIO,
709 #ifdef RK29SDK_SD_CARD_PWR_EN_IOMUX_FMUX
710 .fmux = RK29SDK_SD_CARD_PWR_EN_IOMUX_FMUX,
721 #if defined(RK29SDK_SD_CARD_DETECT_N) || (INVALID_GPIO != RK29SDK_SD_CARD_DETECT_N)
722 .io = RK29SDK_SD_CARD_DETECT_N,
723 .enable = RK29SDK_SD_CARD_INSERT_LEVEL,
724 #ifdef RK29SDK_SD_CARD_DETECT_PIN_NAME
726 .name = RK29SDK_SD_CARD_DETECT_PIN_NAME,
727 #ifdef RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO
728 .fgpio = RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO,
730 #ifdef RK29SDK_SD_CARD_DETECT_IOMUX_FMUX
731 .fmux = RK29SDK_SD_CARD_DETECT_IOMUX_FMUX,
745 * define the gpio for sdmmc1
747 static struct rksdmmc_gpio_board rksdmmc1_gpio_init = {
753 .name = GPIO3C5_SDMMC1CLKOUT_RMIICLKOUT_RMIICLKIN_NAME,
754 .fgpio = GPIO3C_GPIO3C5,
755 .fmux = GPIO3C_SDMMC1CLKOUT,
763 .name = GPIO3C0_SDMMC1CMD_RMIITXEN_NAME,
764 .fgpio = GPIO3C_GPIO3C0,
765 .fmux = GPIO3C_SDMMC1CMD,
773 .name = GPIO3C1_SDMMC1DATA0_RMIITXD1_NAME,
774 .fgpio = GPIO3C_GPIO3C1,
775 .fmux = GPIO3C_SDMMC1DATA0,
783 .name = GPIO3C2_SDMMC1DATA1_RMIITXD0_NAME,
784 .fgpio = GPIO3C_GPIO3C2,
785 .fmux = GPIO3C_SDMMC1DATA1,
793 .name = GPIO3C3_SDMMC1DATA2_RMIIRXD0_NAME,
794 .fgpio = GPIO3C_GPIO3C3,
795 .fmux = GPIO3C_SDMMC1DATA2,
803 .name = GPIO3C4_SDMMC1DATA3_RMIIRXD1_NAME,
804 .fgpio = GPIO3C_GPIO3C4,
805 .fmux = GPIO3C_SDMMC1DATA3,
809 // ---end -#if defined(CONFIG_ARCH_RK3066B)
811 #elif defined(CONFIG_ARCH_RK2928)
813 * define the gpio for sdmmc0
815 static struct rksdmmc_gpio_board rksdmmc0_gpio_init = {
818 .io = RK2928_PIN1_PC0,
821 .name = GPIO1C0_MMC0_CLKOUT_NAME,
822 .fgpio = GPIO1C_GPIO1C0,
823 .fmux = GPIO1C_MMC0_CLKOUT,
828 .io = RK2928_PIN1_PC7,
831 .name = GPIO1B7_MMC0_CMD_NAME,
832 .fgpio = GPIO1B_GPIO1B7,
833 .fmux = GPIO1B_MMC0_CMD,
838 .io = RK2928_PIN1_PC2,
841 .name = GPIO1C2_MMC0_D0_NAME,
842 .fgpio = GPIO1C_GPIO1C2,
843 .fmux = GPIO1C_MMC0_D0,
848 .io = RK2928_PIN1_PC3,
851 .name = GPIO1C3_MMC0_D1_NAME,
852 .fgpio = GPIO1C_GPIO1C3,
853 .fmux = GPIO1C_MMC0_D1,
858 .io = RK2928_PIN1_PC4,
861 .name = GPIO1C4_MMC0_D2_NAME,
862 .fgpio = GPIO1C_GPIO1C4,
863 .fmux = GPIO1C_MMC0_D2,
868 .io = RK2928_PIN1_PC5,
871 .name = GPIO1C5_MMC0_D3_NAME,
872 .fgpio = GPIO1C_GPIO1C5,
873 .fmux = GPIO1C_MMC0_D3,
879 #if defined(RK29SDK_SD_CARD_PWR_EN) || (INVALID_GPIO != RK29SDK_SD_CARD_PWR_EN)
880 .io = RK29SDK_SD_CARD_PWR_EN,
881 .enable = RK29SDK_SD_CARD_PWR_EN_LEVEL,
882 #ifdef RK29SDK_SD_CARD_PWR_EN_PIN_NAME
884 .name = RK29SDK_SD_CARD_PWR_EN_PIN_NAME,
885 #ifdef RK29SDK_SD_CARD_PWR_EN_IOMUX_FGPIO
886 .fgpio = RK29SDK_SD_CARD_PWR_EN_IOMUX_FGPIO,
888 #ifdef RK29SDK_SD_CARD_PWR_EN_IOMUX_FMUX
889 .fmux = RK29SDK_SD_CARD_PWR_EN_IOMUX_FMUX,
900 #if defined(RK29SDK_SD_CARD_DETECT_N) || (INVALID_GPIO != RK29SDK_SD_CARD_DETECT_N)
901 .io = RK29SDK_SD_CARD_DETECT_N,
902 .enable = RK29SDK_SD_CARD_INSERT_LEVEL,
903 #ifdef RK29SDK_SD_CARD_DETECT_PIN_NAME
905 .name = RK29SDK_SD_CARD_DETECT_PIN_NAME,
906 #ifdef RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO
907 .fgpio = RK29SDK_SD_CARD_DETECT_IOMUX_FGPIO,
909 #ifdef RK29SDK_SD_CARD_DETECT_IOMUX_FMUX
910 .fmux = RK29SDK_SD_CARD_DETECT_IOMUX_FMUX,
923 * define the gpio for sdmmc1
925 static struct rksdmmc_gpio_board rksdmmc1_gpio_init = {
928 .io = RK2928_PIN0_PB1,
931 .name = GPIO0B1_MMC1_CLKOUT_NAME,
932 .fgpio = GPIO0B_GPIO0B1,
933 .fmux = GPIO0B_MMC1_CLKOUT,
938 .io = RK2928_PIN0_PB0,
941 .name = GPIO0B0_MMC1_CMD_NAME,
942 .fgpio = GPIO0B_GPIO0B0,
943 .fmux = GPIO0B_MMC1_CMD,
948 .io = RK2928_PIN0_PB3,
951 .name = GPIO0B3_MMC1_D0_NAME,
952 .fgpio = GPIO0B_GPIO0B3,
953 .fmux = GPIO0B_MMC1_D0,
958 .io = RK2928_PIN0_PB4,
961 .name = GPIO0B4_MMC1_D1_NAME,
962 .fgpio = GPIO0B_GPIO0B4,
963 .fmux = GPIO0B_MMC1_D1,
968 .io = RK2928_PIN0_PB5,
971 .name = GPIO0B5_MMC1_D2_NAME,
972 .fgpio = GPIO0B_GPIO0B5,
973 .fmux = GPIO0B_MMC1_D2,
978 .io = RK2928_PIN0_PB6,
981 .name = GPIO0B6_MMC1_D3_NAME,
982 .fgpio = GPIO0B_GPIO0B6,
983 .fmux = GPIO0B_MMC1_D3,
989 // ---end -#if defined(CONFIG_ARCH_RK2928)
994 //1.Part 3: The various operations of the SDMMC-SDIO module
995 /*************************************************************************
996 * define the varaious operations for SDMMC module
997 * Generally only the author of SDMMC module will modify this section.
998 *************************************************************************/
1000 #if !defined(CONFIG_SDMMC_RK29_OLD)
1001 static void rk29_sdmmc_gpio_open(int device_id, int on)
1007 #ifdef CONFIG_SDMMC0_RK29
1010 gpio_direction_output(rksdmmc0_gpio_init.clk_gpio.io, GPIO_HIGH);//set mmc0-clk to high
1011 gpio_direction_output(rksdmmc0_gpio_init.cmd_gpio.io, GPIO_HIGH);// set mmc0-cmd to high.
1012 gpio_direction_output(rksdmmc0_gpio_init.data0_gpio.io,GPIO_HIGH);//set mmc0-data0 to high.
1013 gpio_direction_output(rksdmmc0_gpio_init.data1_gpio.io,GPIO_HIGH);//set mmc0-data1 to high.
1014 gpio_direction_output(rksdmmc0_gpio_init.data2_gpio.io,GPIO_HIGH);//set mmc0-data2 to high.
1015 gpio_direction_output(rksdmmc0_gpio_init.data3_gpio.io,GPIO_HIGH);//set mmc0-data3 to high.
1021 rk30_mux_api_set(rksdmmc0_gpio_init.clk_gpio.iomux.name, rksdmmc0_gpio_init.clk_gpio.iomux.fgpio);
1022 gpio_request(rksdmmc0_gpio_init.clk_gpio.io, "mmc0-clk");
1023 gpio_direction_output(rksdmmc0_gpio_init.clk_gpio.io,GPIO_LOW);//set mmc0-clk to low.
1025 rk30_mux_api_set(rksdmmc0_gpio_init.cmd_gpio.iomux.name, rksdmmc0_gpio_init.cmd_gpio.iomux.fgpio);
1026 gpio_request(rksdmmc0_gpio_init.cmd_gpio.io, "mmc0-cmd");
1027 gpio_direction_output(rksdmmc0_gpio_init.cmd_gpio.io,GPIO_LOW);//set mmc0-cmd to low.
1029 rk30_mux_api_set(rksdmmc0_gpio_init.data0_gpio.iomux.name, rksdmmc0_gpio_init.data0_gpio.iomux.fgpio);
1030 gpio_request(rksdmmc0_gpio_init.data0_gpio.io, "mmc0-data0");
1031 gpio_direction_output(rksdmmc0_gpio_init.data0_gpio.io,GPIO_LOW);//set mmc0-data0 to low.
1033 rk30_mux_api_set(rksdmmc0_gpio_init.data1_gpio.iomux.name, rksdmmc0_gpio_init.data1_gpio.iomux.fgpio);
1034 gpio_request(rksdmmc0_gpio_init.data1_gpio.io, "mmc0-data1");
1035 gpio_direction_output(rksdmmc0_gpio_init.data1_gpio.io,GPIO_LOW);//set mmc0-data1 to low.
1037 rk30_mux_api_set(rksdmmc0_gpio_init.data2_gpio.iomux.name, rksdmmc0_gpio_init.data2_gpio.iomux.fgpio);
1038 gpio_request(rksdmmc0_gpio_init.data2_gpio.io, "mmc0-data2");
1039 gpio_direction_output(rksdmmc0_gpio_init.data2_gpio.io,GPIO_LOW);//set mmc0-data2 to low.
1041 rk30_mux_api_set(rksdmmc0_gpio_init.data3_gpio.iomux.name, rksdmmc0_gpio_init.data3_gpio.iomux.fgpio);
1042 gpio_request(rksdmmc0_gpio_init.data3_gpio.io, "mmc0-data3");
1043 gpio_direction_output(rksdmmc0_gpio_init.data3_gpio.io,GPIO_LOW);//set mmc0-data3 to low.
1053 #ifdef CONFIG_SDMMC1_RK29
1056 gpio_direction_output(rksdmmc1_gpio_init.clk_gpio.io,GPIO_HIGH);//set mmc1-clk to high
1057 gpio_direction_output(rksdmmc1_gpio_init.cmd_gpio.io,GPIO_HIGH);//set mmc1-cmd to high.
1058 gpio_direction_output(rksdmmc1_gpio_init.data0_gpio.io,GPIO_HIGH);//set mmc1-data0 to high.
1059 gpio_direction_output(rksdmmc1_gpio_init.data1_gpio.io,GPIO_HIGH);//set mmc1-data1 to high.
1060 gpio_direction_output(rksdmmc1_gpio_init.data2_gpio.io,GPIO_HIGH);//set mmc1-data2 to high.
1061 gpio_direction_output(rksdmmc1_gpio_init.data3_gpio.io,GPIO_HIGH);//set mmc1-data3 to high.
1066 rk30_mux_api_set(rksdmmc1_gpio_init.clk_gpio.iomux.name, rksdmmc1_gpio_init.clk_gpio.iomux.fgpio);
1067 gpio_request(rksdmmc1_gpio_init.clk_gpio.io, "mmc1-clk");
1068 gpio_direction_output(rksdmmc1_gpio_init.clk_gpio.io,GPIO_LOW);//set mmc1-clk to low.
1070 rk30_mux_api_set(rksdmmc1_gpio_init.cmd_gpio.iomux.name, rksdmmc1_gpio_init.cmd_gpio.iomux.fgpio);
1071 gpio_request(rksdmmc1_gpio_init.cmd_gpio.io, "mmc1-cmd");
1072 gpio_direction_output(rksdmmc1_gpio_init.cmd_gpio.io,GPIO_LOW);//set mmc1-cmd to low.
1074 rk30_mux_api_set(rksdmmc1_gpio_init.data0_gpio.iomux.name, rksdmmc1_gpio_init.data0_gpio.iomux.fgpio);
1075 gpio_request(rksdmmc1_gpio_init.data0_gpio.io, "mmc1-data0");
1076 gpio_direction_output(rksdmmc1_gpio_init.data0_gpio.io,GPIO_LOW);//set mmc1-data0 to low.
1078 rk29_mux_api_set(rksdmmc1_gpio_init.data1_gpio.iomux.name, rksdmmc1_gpio_init.data1_gpio.iomux.fgpio);
1079 gpio_request(rksdmmc1_gpio_init.data1_gpio.io, "mmc1-data1");
1080 gpio_direction_output(rksdmmc1_gpio_init.data1_gpio.io,GPIO_LOW);//set mmc1-data1 to low.
1082 rk29_mux_api_set(rksdmmc1_gpio_init.data2_gpio.iomux.name, rksdmmc1_gpio_init.data2_gpio.iomux.fgpio);
1083 gpio_request(rksdmmc1_gpio_init.data2_gpio.io, "mmc1-data2");
1084 gpio_direction_output(rksdmmc1_gpio_init.data2_gpio.io,GPIO_LOW);//set mmc1-data2 to low.
1086 rk29_mux_api_set(rksdmmc1_gpio_init.data3_gpio.iomux.name, rksdmmc1_gpio_init.data3_gpio.iomux.fgpio);
1087 gpio_request(rksdmmc1_gpio_init.data3_gpio.io, "mmc1-data3");
1088 gpio_direction_output(rksdmmc1_gpio_init.data3_gpio.io,GPIO_LOW);//set mmc1-data3 to low.
1104 static void rk29_sdmmc_set_iomux_mmc0(unsigned int bus_width)
1109 case 1://SDMMC_CTYPE_4BIT:
1111 rk30_mux_api_set(rksdmmc0_gpio_init.data1_gpio.iomux.name, rksdmmc0_gpio_init.data1_gpio.iomux.fmux);
1112 rk30_mux_api_set(rksdmmc0_gpio_init.data2_gpio.iomux.name, rksdmmc0_gpio_init.data2_gpio.iomux.fmux);
1113 rk30_mux_api_set(rksdmmc0_gpio_init.data3_gpio.iomux.name, rksdmmc0_gpio_init.data3_gpio.iomux.fmux);
1117 case 0x10000://SDMMC_CTYPE_8BIT:
1119 case 0xFFFF: //gpio_reset
1121 if (rksdmmc0_gpio_init.power_en_gpio.io == INVALID_GPIO)
1123 rk30_mux_api_set(rksdmmc0_gpio_init.power_en_gpio.iomux.name, rksdmmc0_gpio_init.power_en_gpio.iomux.fgpio);
1124 gpio_request(rksdmmc0_gpio_init.power_en_gpio.io,"sdmmc-power");
1125 gpio_direction_output(rksdmmc0_gpio_init.power_en_gpio.io, !(rksdmmc0_gpio_init.power_en_gpio.enable)); //power-off
1127 #if 0 //replace the power control into rk29_sdmmc_set_ios(); modifyed by xbw at 2012-08-12
1128 rk29_sdmmc_gpio_open(0, 0);
1130 gpio_direction_output(rksdmmc0_gpio_init.power_en_gpio.io, rksdmmc0_gpio_init.power_en_gpio.enable); //power-on
1132 rk29_sdmmc_gpio_open(0, 1);
1137 default: //case 0://SDMMC_CTYPE_1BIT:
1139 rk30_mux_api_set(rksdmmc0_gpio_init.cmd_gpio.iomux.name, rksdmmc0_gpio_init.cmd_gpio.iomux.fmux);
1140 rk30_mux_api_set(rksdmmc0_gpio_init.clk_gpio.iomux.name, rksdmmc0_gpio_init.clk_gpio.iomux.fmux);
1141 rk30_mux_api_set(rksdmmc0_gpio_init.data0_gpio.iomux.name, rksdmmc0_gpio_init.data0_gpio.iomux.fmux);
1143 rk30_mux_api_set(rksdmmc0_gpio_init.data1_gpio.iomux.name, rksdmmc0_gpio_init.data1_gpio.iomux.fgpio);
1144 gpio_request(rksdmmc0_gpio_init.data1_gpio.io, "mmc0-data1");
1145 gpio_direction_output(rksdmmc0_gpio_init.data1_gpio.io,GPIO_HIGH);//set mmc0-data1 to high.
1147 rk30_mux_api_set(rksdmmc0_gpio_init.data2_gpio.iomux.name, rksdmmc0_gpio_init.data2_gpio.iomux.fgpio);
1148 gpio_request(rksdmmc0_gpio_init.data2_gpio.io, "mmc0-data2");
1149 gpio_direction_output(rksdmmc0_gpio_init.data2_gpio.io,GPIO_HIGH);//set mmc0-data2 to high.
1151 rk30_mux_api_set(rksdmmc0_gpio_init.data3_gpio.iomux.name, rksdmmc0_gpio_init.data3_gpio.iomux.fgpio);
1152 gpio_request(rksdmmc0_gpio_init.data3_gpio.io, "mmc0-data3");
1153 gpio_direction_output(rksdmmc0_gpio_init.data3_gpio.io,GPIO_HIGH);//set mmc0-data3 to high.
1159 static void rk29_sdmmc_set_iomux_mmc1(unsigned int bus_width)
1161 rk30_mux_api_set(rksdmmc1_gpio_init.cmd_gpio.iomux.name, rksdmmc1_gpio_init.cmd_gpio.iomux.fmux);
1162 rk30_mux_api_set(rksdmmc1_gpio_init.clk_gpio.iomux.name, rksdmmc1_gpio_init.clk_gpio.iomux.fmux);
1163 rk30_mux_api_set(rksdmmc1_gpio_init.data0_gpio.iomux.name, rksdmmc1_gpio_init.data0_gpio.iomux.fmux);
1164 rk30_mux_api_set(rksdmmc1_gpio_init.data1_gpio.iomux.name, rksdmmc1_gpio_init.data1_gpio.iomux.fmux);
1165 rk30_mux_api_set(rksdmmc1_gpio_init.data2_gpio.iomux.name, rksdmmc1_gpio_init.data2_gpio.iomux.fmux);
1166 rk30_mux_api_set(rksdmmc1_gpio_init.data3_gpio.iomux.name, rksdmmc1_gpio_init.data3_gpio.iomux.fmux);
1169 static void rk29_sdmmc_set_iomux_mmc2(unsigned int bus_width)
1174 static void rk29_sdmmc_set_iomux(int device_id, unsigned int bus_width)
1179 #ifdef CONFIG_SDMMC0_RK29
1180 rk29_sdmmc_set_iomux_mmc0(bus_width);
1184 #ifdef CONFIG_SDMMC1_RK29
1185 rk29_sdmmc_set_iomux_mmc1(bus_width);
1189 rk29_sdmmc_set_iomux_mmc2(bus_width);
1200 //1.Part 4: The various operations of the Wifi-BT module
1201 /*************************************************************************
1202 * define the varaious operations for Wifi module
1203 * Generally only the author of Wifi module will modify this section.
1204 *************************************************************************/
1206 static int rk29sdk_wifi_status(struct device *dev);
1207 static int rk29sdk_wifi_status_register(void (*callback)(int card_presend, void *dev_id), void *dev_id);
1209 #if defined(CONFIG_WIFI_COMBO_MODULE_CONTROL_FUNC)
1210 static int rk29sdk_wifi_mmc0_status(struct device *dev);
1211 static int rk29sdk_wifi_mmc0_status_register(void (*callback)(int card_presend, void *dev_id), void *dev_id);
1212 static int rk29sdk_wifi_mmc0_cd = 0; /* wifi virtual 'card detect' status */
1213 static void (*wifi_mmc0_status_cb)(int card_present, void *dev_id);
1214 static void *wifi_mmc0_status_cb_devid;
1216 int rk29sdk_wifi_power_state = 0;
1217 int rk29sdk_bt_power_state = 0;
1219 #if defined(CONFIG_USE_SDMMC0_FOR_WIFI_DEVELOP_BOARD)
1220 /////////////////////////////////////////////////////////////////////////////////////
1221 // set the gpio to develop wifi EVB if you select the macro of CONFIG_USE_SDMMC0_FOR_WIFI_DEVELOP_BOARD
1222 #define USE_SDMMC_CONTROLLER_FOR_WIFI 0
1223 #define COMBO_MODULE_MT6620_CDT 0 //- 1--use Cdtech chip; 0--unuse CDT chip
1225 #define RK30SDK_WIFI_GPIO_POWER_N RK30_PIN3_PD0
1226 #define RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE GPIO_HIGH
1227 #define RK30SDK_WIFI_GPIO_POWER_PIN_NAME GPIO3D0_SDMMC1PWREN_NAME
1228 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FGPIO GPIO3D_GPIO3D0
1229 #define RK30SDK_WIFI_GPIO_POWER_IOMUX_FMUX GPIO3D_SDMMC1_PWR_EN
1231 #define RK30SDK_WIFI_GPIO_RESET_N RK30_PIN3_PD1
1232 #define RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE GPIO_HIGH
1233 #define RK30SDK_WIFI_GPIO_RESET_PIN_NAME GPIO3D1_SDMMC1BACKENDPWR_NAME
1234 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FGPIO GPIO3D_GPIO3D1
1235 #define RK30SDK_WIFI_GPIO_RESET_IOMUX_FMUX GPIO3D_SDMMC1_BACKEND_PWR
1237 //#define RK30SDK_WIFI_GPIO_VCCIO_WL RK30_PIN2_PC5
1238 //#define RK30SDK_WIFI_GPIO_VCCIO_WL_ENABLE_VALUE GPIO_HIGH
1240 #define RK30SDK_WIFI_GPIO_WIFI_INT_B RK30_PIN3_PD2
1241 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_ENABLE_VALUE GPIO_HIGH
1242 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_PIN_NAME GPIO3D2_SDMMC1INTN_NAME
1243 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FGPIO GPIO3D_GPIO3D2
1244 #define RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FMUX GPIO3D_SDMMC1_INT_N
1246 #define RK30SDK_WIFI_GPIO_BGF_INT_B RK30_PIN3_PC6
1247 #define RK30SDK_WIFI_GPIO_BGF_INT_B_ENABLE_VALUE GPIO_HIGH
1248 #define RK30SDK_WIFI_GPIO_BGF_INT_B_PIN_NAME GPIO3C6_SDMMC1DETECTN_NAME
1249 #define RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FGPIO GPIO3C_GPIO3C6
1250 #define RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FMUX GPIO3C_SDMMC1_DETECT_N
1252 #define RK30SDK_WIFI_GPIO_GPS_SYNC RK30_PIN3_PC7
1253 #define RK30SDK_WIFI_GPIO_GPS_SYNC_ENABLE_VALUE GPIO_HIGH
1254 #define RK30SDK_WIFI_GPIO_GPS_SYNC_PIN_NAME GPIO3C7_SDMMC1WRITEPRT_NAME
1255 #define RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FGPIO GPIO3C_GPIO3C7
1256 #define RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FMUX GPIO3C_SDMMC1_WRITE_PRT
1258 #if COMBO_MODULE_MT6620_CDT
1260 #define RK30SDK_WIFI_GPIO_ANTSEL2 RK30_PIN4_PD4
1261 #define RK30SDK_WIFI_GPIO_ANTSEL2_ENABLE_VALUE GPIO_LOW //use 6620 in CDT chip, LOW--work; High--no work.
1262 #define RK30SDK_WIFI_GPIO_ANTSEL2_PIN_NAME GPIO4D4_SMCDATA12_TRACEDATA12_NAME
1263 #define RK30SDK_WIFI_GPIO_ANTSEL2_IOMUX_FGPIO GPIO4D_GPIO4D4
1264 #define RK30SDK_WIFI_GPIO_ANTSEL2_IOMUX_FMUX GPIO4D_TRACE_DATA12
1266 #define RK30SDK_WIFI_GPIO_ANTSEL3 RK30_PIN4_PD3
1267 #define RK30SDK_WIFI_GPIO_ANTSEL3_ENABLE_VALUE GPIO_HIGH //use 6620 in CDT chip, High--work; Low--no work..
1268 #define RK30SDK_WIFI_GPIO_ANTSEL3_PIN_NAME GPIO4D3_SMCDATA11_TRACEDATA11_NAME
1269 #define RK30SDK_WIFI_GPIO_ANTSEL3_IOMUX_FGPIO GPIO4D_GPIO4D3
1270 #define RK30SDK_WIFI_GPIO_ANTSEL3_IOMUX_FMUX GPIO4D_TRACE_DATA11
1272 #define RK30SDK_WIFI_GPIO_GPS_LAN RK30_PIN4_PD6
1273 #define RK30SDK_WIFI_GPIO_GPS_LAN_ENABLE_VALUE GPIO_HIGH //use 6620 in CDT chip, High--work; Low--no work..
1274 #define RK30SDK_WIFI_GPIO_GPS_LAN_PIN_NAME GPIO4D6_SMCDATA14_TRACEDATA14_NAME
1275 #define RK30SDK_WIFI_GPIO_GPS_LAN_IOMUX_FGPIO GPIO4D_GPIO4D6
1276 #define RK30SDK_WIFI_GPIO_GPS_LAN_IOMUX_FMUX GPIO4D_TRACE_DATA14
1277 #endif // #if COMBO_MODULE_MT6620_CDT--#endif
1279 #endif // #if defined(CONFIG_USE_SDMMC0_FOR_WIFI_DEVELOP_BOARD)---#endif
1280 #endif // #if defined(CONFIG_WIFI_COMBO_MODULE_CONTROL_FUNC) ---#endif
1282 static int rk29sdk_wifi_cd = 0; /* wifi virtual 'card detect' status */
1283 static void (*wifi_status_cb)(int card_present, void *dev_id);
1284 static void *wifi_status_cb_devid;
1286 #if defined(CONFIG_RK29_SDIO_IRQ_FROM_GPIO)
1287 #define RK29SDK_WIFI_SDIO_CARD_INT RK30SDK_WIFI_GPIO_WIFI_INT_B
1290 struct rksdmmc_gpio_wifi_moudle rk_platform_wifi_gpio = {
1292 .io = RK30SDK_WIFI_GPIO_POWER_N,
1293 .enable = RK30SDK_WIFI_GPIO_POWER_ENABLE_VALUE,
1294 #ifdef RK30SDK_WIFI_GPIO_POWER_PIN_NAME
1296 .name = RK30SDK_WIFI_GPIO_POWER_PIN_NAME,
1297 .fgpio = RK30SDK_WIFI_GPIO_POWER_IOMUX_FGPIO,
1298 #ifdef RK30SDK_WIFI_GPIO_POWER_IOMUX_FMUX
1299 .fmux = RK30SDK_WIFI_GPIO_POWER_IOMUX_FMUX,
1305 #ifdef RK30SDK_WIFI_GPIO_RESET_N
1307 .io = RK30SDK_WIFI_GPIO_RESET_N,
1308 .enable = RK30SDK_WIFI_GPIO_RESET_ENABLE_VALUE,
1309 #ifdef RK30SDK_WIFI_GPIO_RESET_PIN_NAME
1311 .name = RK30SDK_WIFI_GPIO_RESET_PIN_NAME,
1312 .fgpio = RK30SDK_WIFI_GPIO_RESET_IOMUX_FGPIO,
1313 #ifdef RK30SDK_WIFI_GPIO_RESET_IOMUX_FMUX
1314 .fmux = RK30SDK_WIFI_GPIO_RESET_IOMUX_FMUX,
1321 #ifdef RK30SDK_WIFI_GPIO_WIFI_INT_B
1323 .io = RK30SDK_WIFI_GPIO_WIFI_INT_B,
1324 .enable = RK30SDK_WIFI_GPIO_WIFI_INT_B_ENABLE_VALUE,
1325 #ifdef RK30SDK_WIFI_GPIO_WIFI_INT_B_PIN_NAME
1327 .name = RK30SDK_WIFI_GPIO_WIFI_INT_B_PIN_NAME,
1328 .fgpio = RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FGPIO,
1329 #ifdef RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FMUX
1330 .fmux = RK30SDK_WIFI_GPIO_WIFI_INT_B_IOMUX_FMUX,
1337 #ifdef RK30SDK_WIFI_GPIO_VCCIO_WL
1339 .io = RK30SDK_WIFI_GPIO_VCCIO_WL,
1340 .enable = RK30SDK_WIFI_GPIO_VCCIO_WL_ENABLE_VALUE,
1341 #ifdef RK30SDK_WIFI_GPIO_VCCIO_WL_PIN_NAME
1343 .name = RK30SDK_WIFI_GPIO_VCCIO_WL_PIN_NAME,
1344 .fgpio = RK30SDK_WIFI_GPIO_VCCIO_WL_IOMUX_FGPIO,
1345 #ifdef RK30SDK_WIFI_GPIO_VCCIO_WL_IOMUX_FMUX
1346 .fmux = RK30SDK_WIFI_GPIO_VCCIO_WL_IOMUX_FMUX,
1353 #ifdef RK30SDK_WIFI_GPIO_BGF_INT_B
1355 .io = RK30SDK_WIFI_GPIO_BGF_INT_B,
1356 .enable = RK30SDK_WIFI_GPIO_BGF_INT_B_ENABLE_VALUE,
1357 #ifdef RK30SDK_WIFI_GPIO_BGF_INT_B_PIN_NAME
1359 .name = RK30SDK_WIFI_GPIO_BGF_INT_B_PIN_NAME,
1360 .fgpio = RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FGPIO,
1361 #ifdef RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FMUX
1362 .fmux = RK30SDK_WIFI_GPIO_BGF_INT_B_IOMUX_FMUX,
1369 #ifdef RK30SDK_WIFI_GPIO_GPS_SYNC
1371 .io = RK30SDK_WIFI_GPIO_GPS_SYNC,
1372 .enable = RK30SDK_WIFI_GPIO_GPS_SYNC_ENABLE_VALUE,
1373 #ifdef RK30SDK_WIFI_GPIO_GPS_SYNC_PIN_NAME
1375 .name = RK30SDK_WIFI_GPIO_GPS_SYNC_PIN_NAME,
1376 .fgpio = RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FGPIO,
1377 #ifdef RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FMUX
1378 .fmux = RK30SDK_WIFI_GPIO_GPS_SYNC_IOMUX_FMUX,
1385 #if COMBO_MODULE_MT6620_CDT
1386 #ifdef RK30SDK_WIFI_GPIO_ANTSEL2
1388 .io = RK30SDK_WIFI_GPIO_ANTSEL2,
1389 .enable = RK30SDK_WIFI_GPIO_ANTSEL2_ENABLE_VALUE,
1390 #ifdef RK30SDK_WIFI_GPIO_ANTSEL2_PIN_NAME
1392 .name = RK30SDK_WIFI_GPIO_ANTSEL2_PIN_NAME,
1393 .fgpio = RK30SDK_WIFI_GPIO_ANTSEL2_IOMUX_FGPIO,
1394 #ifdef RK30SDK_WIFI_GPIO_ANTSEL2_IOMUX_FMUX
1395 .fmux = RK30SDK_WIFI_GPIO_ANTSEL2_IOMUX_FMUX,
1402 #ifdef RK30SDK_WIFI_GPIO_ANTSEL3
1404 .io = RK30SDK_WIFI_GPIO_ANTSEL3,
1405 .enable = RK30SDK_WIFI_GPIO_ANTSEL3_ENABLE_VALUE,
1406 #ifdef RK30SDK_WIFI_GPIO_ANTSEL3_PIN_NAME
1408 .name = RK30SDK_WIFI_GPIO_ANTSEL3_PIN_NAME,
1409 .fgpio = RK30SDK_WIFI_GPIO_ANTSEL3_IOMUX_FGPIO,
1410 #ifdef RK30SDK_WIFI_GPIO_ANTSEL3_IOMUX_FMUX
1411 .fmux = RK30SDK_WIFI_GPIO_ANTSEL3_IOMUX_FMUX,
1418 #ifdef RK30SDK_WIFI_GPIO_GPS_LAN
1420 .io = RK30SDK_WIFI_GPIO_GPS_LAN,
1421 .enable = RK30SDK_WIFI_GPIO_GPS_LAN_ENABLE_VALUE,
1422 #ifdef RK30SDK_WIFI_GPIO_GPS_LAN_PIN_NAME
1424 .name = RK30SDK_WIFI_GPIO_GPS_LAN_PIN_NAME,
1425 .fgpio = RK30SDK_WIFI_GPIO_GPS_LAN_IOMUX_FGPIO,
1426 #ifdef RK30SDK_WIFI_GPIO_GPS_LAN_IOMUX_FMUX
1427 .fmux = RK30SDK_WIFI_GPIO_GPS_LAN_IOMUX_FMUX,
1433 #endif // #if COMBO_MODULE_MT6620_CDT--#endif
1438 #ifdef CONFIG_WIFI_CONTROL_FUNC
1439 #define PREALLOC_WLAN_SEC_NUM 4
1440 #define PREALLOC_WLAN_BUF_NUM 160
1441 #define PREALLOC_WLAN_SECTION_HEADER 24
1443 #define WLAN_SECTION_SIZE_0 (PREALLOC_WLAN_BUF_NUM * 128)
1444 #define WLAN_SECTION_SIZE_1 (PREALLOC_WLAN_BUF_NUM * 128)
1445 #define WLAN_SECTION_SIZE_2 (PREALLOC_WLAN_BUF_NUM * 512)
1446 #define WLAN_SECTION_SIZE_3 (PREALLOC_WLAN_BUF_NUM * 1024)
1448 #define WLAN_SKB_BUF_NUM 16
1450 static struct sk_buff *wlan_static_skb[WLAN_SKB_BUF_NUM];
1452 struct wifi_mem_prealloc {
1457 static struct wifi_mem_prealloc wifi_mem_array[PREALLOC_WLAN_SEC_NUM] = {
1458 {NULL, (WLAN_SECTION_SIZE_0 + PREALLOC_WLAN_SECTION_HEADER)},
1459 {NULL, (WLAN_SECTION_SIZE_1 + PREALLOC_WLAN_SECTION_HEADER)},
1460 {NULL, (WLAN_SECTION_SIZE_2 + PREALLOC_WLAN_SECTION_HEADER)},
1461 {NULL, (WLAN_SECTION_SIZE_3 + PREALLOC_WLAN_SECTION_HEADER)}
1464 static void *rk29sdk_mem_prealloc(int section, unsigned long size)
1466 if (section == PREALLOC_WLAN_SEC_NUM)
1467 return wlan_static_skb;
1469 if ((section < 0) || (section > PREALLOC_WLAN_SEC_NUM))
1472 if (wifi_mem_array[section].size < size)
1475 return wifi_mem_array[section].mem_ptr;
1478 static int __init rk29sdk_init_wifi_mem(void)
1483 for (i = 0 ; i < WLAN_SKB_BUF_NUM ; i++) {
1484 wlan_static_skb[i] = dev_alloc_skb(
1485 ((i < (WLAN_SKB_BUF_NUM / 2)) ? 4096 : 8192));
1487 if (!wlan_static_skb[i])
1491 for (i = 0 ; i < PREALLOC_WLAN_SEC_NUM ; i++) {
1492 wifi_mem_array[i].mem_ptr =
1493 kmalloc(wifi_mem_array[i].size, GFP_KERNEL);
1495 if (!wifi_mem_array[i].mem_ptr)
1501 pr_err("Failed to mem_alloc for WLAN\n");
1502 for (j = 0 ; j < i ; j++)
1503 kfree(wifi_mem_array[j].mem_ptr);
1505 i = WLAN_SKB_BUF_NUM;
1508 pr_err("Failed to skb_alloc for WLAN\n");
1509 for (j = 0 ; j < i ; j++)
1510 dev_kfree_skb(wlan_static_skb[j]);
1515 static int rk29sdk_wifi_status(struct device *dev)
1517 return rk29sdk_wifi_cd;
1520 static int rk29sdk_wifi_status_register(void (*callback)(int card_present, void *dev_id), void *dev_id)
1524 wifi_status_cb = callback;
1525 wifi_status_cb_devid = dev_id;
1529 #if defined(CONFIG_RTL8192CU) || defined(CONFIG_RTL8188EU) || defined(CONFIG_RT5370)
1530 static int __init rk29sdk_wifi_bt_gpio_control_init(void)
1532 #if defined(CONFIG_USB_WIFI_POWER_CONTROLED_BY_GPIO)
1533 if (gpio_request(rk_platform_wifi_gpio.power_n.io, "wifi_power")) {
1534 pr_info("%s: request wifi power gpio failed\n", __func__);
1537 gpio_direction_output(rk_platform_wifi_gpio.power_n.io, !(rk_platform_wifi_gpio.power_n.enable) );
1539 pr_info("%s: init finished\n",__func__);
1542 #elif defined(CONFIG_RDA5990)
1543 static int __init rk29sdk_wifi_bt_gpio_control_init(void)
1545 #if defined(CONFIG_SDMMC1_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1546 rk29_sdmmc_gpio_open(1, 0); //added by xbw at 2011-10-13
1548 pr_info("%s: init finished\n",__func__);
1553 static int __init rk29sdk_wifi_bt_gpio_control_init(void)
1555 rk29sdk_init_wifi_mem();
1556 rk29_mux_api_set(rk_platform_wifi_gpio.power_n.iomux.name, rk_platform_wifi_gpio.power_n.iomux.fgpio);
1558 if (gpio_request(rk_platform_wifi_gpio.power_n.io, "wifi_power")) {
1559 pr_info("%s: request wifi power gpio failed\n", __func__);
1563 #ifdef RK30SDK_WIFI_GPIO_RESET_N
1564 if (gpio_request(rk_platform_wifi_gpio.reset_n.io, "wifi reset")) {
1565 pr_info("%s: request wifi reset gpio failed\n", __func__);
1566 gpio_free(rk_platform_wifi_gpio.reset_n.io);
1571 gpio_direction_output(rk_platform_wifi_gpio.power_n.io, !(rk_platform_wifi_gpio.power_n.enable) );
1573 #ifdef RK30SDK_WIFI_GPIO_RESET_N
1574 gpio_direction_output(rk_platform_wifi_gpio.reset_n.io, !(rk_platform_wifi_gpio.reset_n.enable) );
1577 #if defined(CONFIG_SDMMC1_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1578 rk29_sdmmc_gpio_open(1, 0); //added by xbw at 2011-10-13
1580 pr_info("%s: init finished\n",__func__);
1586 #if defined(CONFIG_RTL8192CU) || defined(CONFIG_RTL8188EU) || defined(CONFIG_RT5370)
1587 static int usbwifi_power_status = 1;
1588 int rk29sdk_wifi_power(int on)
1590 pr_info("%s: %d\n", __func__, on);
1592 #if defined(CONFIG_USB_WIFI_POWER_CONTROLED_BY_GPIO)
1593 gpio_set_value(rk_platform_wifi_gpio.power_n.io, rk_platform_wifi_gpio.power_n.enable);
1596 if(usbwifi_power_status == 1) {
1597 rkusb_wifi_power(0);
1600 rkusb_wifi_power(1);
1602 usbwifi_power_status = 1;
1603 pr_info("wifi turn on power\n");
1605 #if defined(CONFIG_USB_WIFI_POWER_CONTROLED_BY_GPIO)
1606 gpio_set_value(rk_platform_wifi_gpio.power_n.io, !(rk_platform_wifi_gpio.power_n.enable));
1609 rkusb_wifi_power(0);
1611 usbwifi_power_status = 0;
1612 pr_info("wifi shut off power\n");
1616 #elif defined(CONFIG_RDA5990)
1617 int rk29sdk_wifi_power(int on)
1619 pr_info("%s: %d\n", __func__, on);
1623 #if defined(CONFIG_SDMMC1_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1624 rk29_sdmmc_gpio_open(1, 1); //added by xbw at 2011-10-13
1628 pr_info("wifi turn on power\n");
1630 #if defined(CONFIG_SDMMC1_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1631 rk29_sdmmc_gpio_open(1, 0); //added by xbw at 2011-10-13
1635 pr_info("wifi shut off power\n");
1642 int rk29sdk_wifi_power(int on)
1644 pr_info("%s: %d\n", __func__, on);
1646 gpio_set_value(rk_platform_wifi_gpio.power_n.io, rk_platform_wifi_gpio.power_n.enable);
1649 #if defined(CONFIG_SDMMC1_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1650 rk29_sdmmc_gpio_open(1, 1); //added by xbw at 2011-10-13
1653 #ifdef RK30SDK_WIFI_GPIO_RESET_N
1654 gpio_set_value(rk_platform_wifi_gpio.reset_n.io, rk_platform_wifi_gpio.reset_n.enable);
1657 pr_info("wifi turn on power\n");
1659 // if (!rk29sdk_bt_power_state){
1660 gpio_set_value(rk_platform_wifi_gpio.power_n.io, !(rk_platform_wifi_gpio.power_n.enable));
1661 #if defined(CONFIG_SDMMC1_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1662 rk29_sdmmc_gpio_open(1, 0); //added by xbw at 2011-10-13
1666 pr_info("wifi shut off power\n");
1669 // pr_info("wifi shouldn't shut off power, bt is using it!\n");
1671 #ifdef RK30SDK_WIFI_GPIO_RESET_N
1672 gpio_set_value(rk_platform_wifi_gpio.reset_n.io, !(rk_platform_wifi_gpio.reset_n.enable));
1676 // rk29sdk_wifi_power_state = on;
1680 EXPORT_SYMBOL(rk29sdk_wifi_power);
1682 static int rk29sdk_wifi_reset_state;
1683 static int rk29sdk_wifi_reset(int on)
1685 pr_info("%s: %d\n", __func__, on);
1687 rk29sdk_wifi_reset_state = on;
1691 int rk29sdk_wifi_set_carddetect(int val)
1693 pr_info("%s:%d\n", __func__, val);
1694 rk29sdk_wifi_cd = val;
1695 if (wifi_status_cb){
1696 wifi_status_cb(val, wifi_status_cb_devid);
1698 pr_warning("%s, nobody to notify\n", __func__);
1702 EXPORT_SYMBOL(rk29sdk_wifi_set_carddetect);
1705 static struct resource resources[] = {
1707 .start = WIFI_HOST_WAKE,
1708 .flags = IORESOURCE_IRQ,
1709 .name = "bcmdhd_wlan_irq",
1712 //#if defined(CONFIG_WIFI_CONTROL_FUNC)----#elif
1714 ///////////////////////////////////////////////////////////////////////////////////
1715 #elif defined(CONFIG_WIFI_COMBO_MODULE_CONTROL_FUNC)
1717 #define debug_combo_system 0
1719 int rk29sdk_wifi_combo_get_BGFgpio(void)
1721 return rk_platform_wifi_gpio.bgf_int_b.io;
1723 EXPORT_SYMBOL(rk29sdk_wifi_combo_get_BGFgpio);
1726 int rk29sdk_wifi_combo_get_GPS_SYNC_gpio(void)
1728 return rk_platform_wifi_gpio.gps_sync.io;
1730 EXPORT_SYMBOL(rk29sdk_wifi_combo_get_GPS_SYNC_gpio);
1733 static int rk29sdk_wifi_combo_module_gpio_init(void)
1736 #ifdef RK30SDK_WIFI_GPIO_VCCIO_WL
1737 #ifdef RK30SDK_WIFI_GPIO_VCCIO_WL_PIN_NAME
1738 rk30_mux_api_set(rk_platform_wifi_gpio.vddio.iomux.name, rk_platform_wifi_gpio.vddio.iomux.fgpio);
1740 gpio_request(rk_platform_wifi_gpio.vddio.io, "combo-VDDIO");
1741 gpio_direction_output(rk_platform_wifi_gpio.vddio.io, !(rk_platform_wifi_gpio.power_n.enable));
1745 #ifdef RK30SDK_WIFI_GPIO_BGF_INT_B_PIN_NAME
1746 rk30_mux_api_set(rk_platform_wifi_gpio.bgf_int_b.iomux.name, rk_platform_wifi_gpio.bgf_int_b.iomux.fgpio);
1748 gpio_request(rk_platform_wifi_gpio.bgf_int_b.io, "combo-BGFINT");
1749 gpio_pull_updown(rk_platform_wifi_gpio.bgf_int_b.io, GPIOPullUp);
1750 gpio_direction_input(rk_platform_wifi_gpio.bgf_int_b.io);
1753 #ifdef RK30SDK_WIFI_GPIO_WIFI_INT_B_PIN_NAME
1754 rk30_mux_api_set(rk_platform_wifi_gpio.bgf_int_b.iomux.name, rk_platform_wifi_gpio.bgf_int_b.iomux.fgpio);
1756 gpio_request(rk_platform_wifi_gpio.wifi_int_b.io, "combo-WIFIINT");
1757 gpio_pull_updown(rk_platform_wifi_gpio.wifi_int_b.io, GPIOPullUp);
1758 gpio_direction_input(rk_platform_wifi_gpio.wifi_int_b.io);
1761 #ifdef RK30SDK_WIFI_GPIO_RESET_PIN_NAME
1762 rk30_mux_api_set(rk_platform_wifi_gpio.reset_n.iomux.name, rk_platform_wifi_gpio.reset_n.iomux.fgpio);
1764 gpio_request(rk_platform_wifi_gpio.reset_n.io, "combo-RST");
1765 gpio_direction_output(rk_platform_wifi_gpio.reset_n.io, !(rk_platform_wifi_gpio.reset_n.enable));
1768 #ifdef RK30SDK_WIFI_GPIO_POWER_PIN_NAME
1769 rk30_mux_api_set(rk_platform_wifi_gpio.power_n.iomux.name, rk_platform_wifi_gpio.power_n.iomux.fgpio);
1771 gpio_request(rk_platform_wifi_gpio.power_n.io, "combo-PMUEN");
1772 gpio_direction_output(rk_platform_wifi_gpio.power_n.io, !(rk_platform_wifi_gpio.power_n.enable));
1774 #if COMBO_MODULE_MT6620_CDT
1776 #ifdef RK30SDK_WIFI_GPIO_ANTSEL2
1777 #ifdef RK30SDK_WIFI_GPIO_ANTSEL2_PIN_NAME
1778 rk30_mux_api_set(rk_platform_wifi_gpio.ANTSEL2.iomux.name, rk_platform_wifi_gpio.ANTSEL2.iomux.fgpio);
1780 gpio_request(rk_platform_wifi_gpio.ANTSEL2.io, "combo-ANTSEL2");
1781 gpio_direction_output(rk_platform_wifi_gpio.reset_n.io, rk_platform_wifi_gpio.ANTSEL2.enable);
1785 #ifdef RK30SDK_WIFI_GPIO_ANTSEL3
1786 #ifdef RK30SDK_WIFI_GPIO_ANTSEL3_PIN_NAME
1787 rk30_mux_api_set(rk_platform_wifi_gpio.ANTSEL3.iomux.name, rk_platform_wifi_gpio.ANTSEL3.iomux.fgpio);
1789 gpio_request(rk_platform_wifi_gpio.ANTSEL3.io, "combo-ANTSEL3");
1790 gpio_direction_output(rk_platform_wifi_gpio.ANTSEL3.io, rk_platform_wifi_gpio.ANTSEL3.enable);
1794 #ifdef RK30SDK_WIFI_GPIO_GPS_LAN
1795 #ifdef RK30SDK_WIFI_GPIO_GPS_LAN_PIN_NAME
1796 rk30_mux_api_set(rk_platform_wifi_gpio.GPS_LAN.iomux.name, rk_platform_wifi_gpio.GPS_LAN.iomux.fgpio);
1798 gpio_request(rk_platform_wifi_gpio.GPS_LAN.io, "combo-GPSLAN");
1799 gpio_direction_output(rk_platform_wifi_gpio.GPS_LAN.io, rk_platform_wifi_gpio.GPS_LAN.enable);
1802 #endif//#if COMBO_MODULE_MT6620_CDT ---#endif
1808 int rk29sdk_wifi_combo_module_power(int on)
1812 #ifdef RK30SDK_WIFI_GPIO_VCCIO_WL
1813 gpio_set_value(rk_platform_wifi_gpio.vddio.io, rk_platform_wifi_gpio.vddio.enable);
1817 gpio_set_value(rk_platform_wifi_gpio.power_n.io, rk_platform_wifi_gpio.power_n.enable);
1819 pr_info("combo-module turn on power\n");
1823 gpio_set_value(rk_platform_wifi_gpio.power_n.io, !(rk_platform_wifi_gpio.power_n.enable) );
1826 #ifdef RK30SDK_WIFI_GPIO_VCCIO_WL
1827 gpio_set_value(rk_platform_wifi_gpio.vddio.io, !(rk_platform_wifi_gpio.vddio.enable));
1830 pr_info("combo-module turn off power\n");
1835 EXPORT_SYMBOL(rk29sdk_wifi_combo_module_power);
1838 int rk29sdk_wifi_combo_module_reset(int on)
1842 gpio_set_value(rk_platform_wifi_gpio.reset_n.io, rk_platform_wifi_gpio.reset_n.enable);
1843 pr_info("combo-module reset out 1\n");
1847 gpio_set_value(rk_platform_wifi_gpio.reset_n.io, !(rk_platform_wifi_gpio.reset_n.enable) );
1848 pr_info("combo-module reset out 0\n");
1853 EXPORT_SYMBOL(rk29sdk_wifi_combo_module_reset);
1856 static int rk29sdk_wifi_mmc0_status(struct device *dev)
1858 return rk29sdk_wifi_mmc0_cd;
1861 static int rk29sdk_wifi_mmc0_status_register(void (*callback)(int card_present, void *dev_id), void *dev_id)
1863 if(wifi_mmc0_status_cb)
1865 wifi_mmc0_status_cb = callback;
1866 wifi_mmc0_status_cb_devid = dev_id;
1871 static int rk29sdk_wifi_status(struct device *dev)
1873 return rk29sdk_wifi_cd;
1876 static int rk29sdk_wifi_status_register(void (*callback)(int card_present, void *dev_id), void *dev_id)
1880 wifi_status_cb = callback;
1881 wifi_status_cb_devid = dev_id;
1885 int rk29sdk_wifi_power(int on)
1887 pr_info("%s: %d\n", __func__, on);
1890 #if defined(CONFIG_SDMMC1_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1892 #if defined(CONFIG_USE_SDMMC0_FOR_WIFI_DEVELOP_BOARD)
1893 rk29_sdmmc_gpio_open(0, 1);
1895 rk29_sdmmc_gpio_open(1, 0);
1897 rk29_sdmmc_gpio_open(1, 1);
1902 pr_info("wifi turn on power\n");
1906 #if defined(CONFIG_SDMMC1_RK29) && !defined(CONFIG_SDMMC_RK29_OLD)
1907 #if defined(CONFIG_USE_SDMMC0_FOR_WIFI_DEVELOP_BOARD)
1908 rk29_sdmmc_gpio_open(0, 0);
1910 rk29_sdmmc_gpio_open(1, 0);
1914 pr_info("wifi shut off power\n");
1918 rk29sdk_wifi_power_state = on;
1922 EXPORT_SYMBOL(rk29sdk_wifi_power);
1925 int rk29sdk_wifi_reset(int on)
1929 EXPORT_SYMBOL(rk29sdk_wifi_reset);
1932 #if defined(CONFIG_USE_SDMMC0_FOR_WIFI_DEVELOP_BOARD)
1933 int rk29sdk_wifi_set_carddetect(int val)
1935 pr_info("%s:%d\n", __func__, val);
1936 rk29sdk_wifi_mmc0_cd = val;
1937 if (wifi_mmc0_status_cb){
1938 wifi_mmc0_status_cb(val, wifi_mmc0_status_cb_devid);
1940 pr_warning("%s,in mmc0 nobody to notify\n", __func__);
1946 int rk29sdk_wifi_set_carddetect(int val)
1948 pr_info("%s:%d\n", __func__, val);
1949 rk29sdk_wifi_cd = val;
1950 if (wifi_status_cb){
1951 wifi_status_cb(val, wifi_status_cb_devid);
1953 pr_warning("%s,in mmc1 nobody to notify\n", __func__);
1959 EXPORT_SYMBOL(rk29sdk_wifi_set_carddetect);
1961 ///////////////////////////////////////////////////////////////////////////////////
1962 #endif //#if defined(CONFIG_WIFI_CONTROL_FUNC)---#elif defined(CONFIG_WIFI_COMBO_MODULE_CONTROL_FUNC) --#endif
1966 #if defined(CONFIG_WIFI_CONTROL_FUNC)
1967 static struct wifi_platform_data rk29sdk_wifi_control = {
1968 .set_power = rk29sdk_wifi_power,
1969 .set_reset = rk29sdk_wifi_reset,
1970 .set_carddetect = rk29sdk_wifi_set_carddetect,
1971 .mem_prealloc = rk29sdk_mem_prealloc,
1974 static struct platform_device rk29sdk_wifi_device = {
1975 .name = "bcmdhd_wlan",
1977 .num_resources = ARRAY_SIZE(resources),
1978 .resource = resources,
1980 .platform_data = &rk29sdk_wifi_control,
1984 #elif defined(CONFIG_WIFI_COMBO_MODULE_CONTROL_FUNC)
1986 #if debug_combo_system
1987 static struct combo_module_platform_data rk29sdk_combo_module_control = {
1988 .set_power = rk29sdk_wifi_combo_module_power,
1989 .set_reset = rk29sdk_wifi_combo_module_reset,
1992 static struct platform_device rk29sdk_combo_module_device = {
1993 .name = "combo-system",
1996 .platform_data = &rk29sdk_combo_module_control,
2001 static struct wifi_platform_data rk29sdk_wifi_control = {
2002 .set_power = rk29sdk_wifi_power,
2003 .set_reset = rk29sdk_wifi_reset,
2004 .set_carddetect = rk29sdk_wifi_set_carddetect,
2007 static struct platform_device rk29sdk_wifi_device = {
2008 .name = "combo-wifi",
2011 .platform_data = &rk29sdk_wifi_control,