1 /******************************************************************************
3 * Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 ******************************************************************************/
16 #include "halmac_gpio_8821c.h"
17 #include "../halmac_gpio_88xx.h"
19 #if HALMAC_8821C_SUPPORT
21 /* P_LED0 definition */
22 #define GPIO0_BT_GPIO0_8821C \
23 {HALMAC_BT_GPIO, HALMAC_GPIO0, HALMAC_GPIO_IN_OUT, \
25 #define GPIO0_BT_GPIO0_8821C \
26 {HALMAC_BT_GPIO, HALMAC_GPIO0, HALMAC_GPIO_IN_OUT, \
28 #define GPIO0_BT_ACT_8821C \
29 {HALMAC_BT_PTA, HALMAC_GPIO0, HALMAC_GPIO_IN_OUT, \
31 #define GPIO0_WL_ACT_8821C \
32 {HALMAC_WL_PTA, HALMAC_GPIO0, HALMAC_GPIO_IN_OUT, \
34 #define GPIO0_WLMAC_DBG_GPIO0_8821C \
35 {HALMAC_WLMAC_DBG, HALMAC_GPIO0, HALMAC_GPIO_OUT, \
36 0x40, BIT(1) | BIT(0), BIT(0)}
37 #define GPIO0_WLPHY_DBG_GPIO0_8821C \
38 {HALMAC_WLPHY_DBG, HALMAC_GPIO0, HALMAC_GPIO_IN_OUT, \
39 0x40, BIT(1) | BIT(0), BIT(1)}
40 #define GPIO0_BT_DBG_GPIO0_8821C \
41 {HALMAC_BT_DBG, HALMAC_GPIO0, HALMAC_GPIO_OUT, \
42 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)}
43 #define GPIO0_SW_IO_8821C \
44 {HALMAC_SW_IO, HALMAC_GPIO0, HALMAC_GPIO_IN_OUT, \
45 0x40, BIT(1) | BIT(0), 0}
47 /* GPIO1 definition */
48 #define GPIO1_BT_GPIO1_8821C \
49 {HALMAC_BT_GPIO, HALMAC_GPIO1, HALMAC_GPIO_IN_OUT, \
51 #define GPIO1_BT_3DD_SYNC_A_8821C \
52 {HALMAC_BT_3DDLS_A, HALMAC_GPIO1, HALMAC_GPIO_IN, \
54 #define GPIO1_WL_CK_8821C \
55 {HALMAC_BT_PTA, HALMAC_GPIO1, HALMAC_GPIO_OUT, \
57 #define GPIO1_BT_CK_8821C \
58 {HALMAC_WL_PTA, HALMAC_GPIO1, HALMAC_GPIO_OUT, \
60 #define GPIO1_WLMAC_DBG_GPIO1_8821C \
61 {HALMAC_WLMAC_DBG, HALMAC_GPIO1, HALMAC_GPIO_OUT, \
62 0x40, BIT(1) | BIT(0), BIT(0)}
63 #define GPIO1_WLPHY_DBG_GPIO1_8821C \
64 {HALMAC_WLPHY_DBG, HALMAC_GPIO1, HALMAC_GPIO_IN_OUT, \
65 0x40, BIT(1) | BIT(0), BIT(1)}
66 #define GPIO1_BT_DBG_GPIO1_8821C \
67 {HALMAC_BT_DBG, HALMAC_GPIO1, HALMAC_GPIO_OUT, \
68 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)}
69 #define GPIO1_SW_IO_8821C \
70 {HALMAC_SW_IO, HALMAC_GPIO1, HALMAC_GPIO_IN_OUT, \
71 0x40, BIT(1) | BIT(0), 0}
73 /* GPIO2 definition */
74 #define GPIO2_BT_GPIO2_8821C \
75 {HALMAC_BT_GPIO, HALMAC_GPIO2, HALMAC_GPIO_IN_OUT, \
77 #define GPIO2_WL_STATE_8821C \
78 {HALMAC_BT_PTA, HALMAC_GPIO2, HALMAC_GPIO_OUT, \
80 #define GPIO2_BT_STATE_8821C \
81 {HALMAC_WL_PTA, HALMAC_GPIO2, HALMAC_GPIO_OUT, \
83 #define GPIO2_WLMAC_DBG_GPIO2_8821C \
84 {HALMAC_WLMAC_DBG, HALMAC_GPIO2, HALMAC_GPIO_OUT, \
85 0x40, BIT(1) | BIT(0), BIT(0)}
86 #define GPIO2_WLPHY_DBG_GPIO2_8821C \
87 {HALMAC_WLPHY_DBG, HALMAC_GPIO2, HALMAC_GPIO_IN_OUT, \
88 0x40, BIT(1) | BIT(0), BIT(1)}
89 #define GPIO2_BT_DBG_GPIO2_8821C \
90 {HALMAC_BT_DBG, HALMAC_GPIO2, HALMAC_GPIO_OUT, \
91 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)}
92 #define GPIO2_RFE_CTRL_5_8821C \
93 {HALMAC_WLPHY_RFE_CTRL2GPIO, HALMAC_GPIO2, HALMAC_GPIO_IN_OUT, \
95 #define GPIO2_SW_IO_8821C \
96 {HALMAC_SW_IO, HALMAC_GPIO2, HALMAC_GPIO_IN_OUT, \
97 0x40, BIT(1) | BIT(0), 0}
99 /* GPIO3 definition */
100 #define GPIO3_BT_GPIO3_8821C \
101 {HALMAC_BT_GPIO, HALMAC_GPIO3, HALMAC_GPIO_IN_OUT, \
102 0x66, BIT(2), BIT(2)}
103 #define GPIO3_WL_PRI_8821C \
104 {HALMAC_BT_PTA, HALMAC_GPIO3, HALMAC_GPIO_OUT, \
106 #define GPIO3_BT_PRI_8821C \
107 {HALMAC_WL_PTA, HALMAC_GPIO3, HALMAC_GPIO_OUT, \
108 0x41, BIT(2), BIT(2)}
109 #define GPIO3_WLMAC_DBG_GPIO3_8821C \
110 {HALMAC_WLMAC_DBG, HALMAC_GPIO3, HALMAC_GPIO_OUT, \
111 0x40, BIT(1) | BIT(0), BIT(0)}
112 #define GPIO3_WLPHY_DBG_GPIO3_8821C \
113 {HALMAC_WLPHY_DBG, HALMAC_GPIO3, HALMAC_GPIO_IN_OUT, \
114 0x40, BIT(1) | BIT(0), BIT(1)}
115 #define GPIO3_BT_DBG_GPIO3_8821C \
116 {HALMAC_BT_DBG, HALMAC_GPIO3, HALMAC_GPIO_OUT, \
117 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)}
118 #define GPIO3_RFE_CTRL_4_8821C \
119 {HALMAC_WLPHY_RFE_CTRL2GPIO, HALMAC_GPIO3, HALMAC_GPIO_IN_OUT, \
120 0x40, BIT(2), BIT(2)}
121 #define GPIO3_SW_IO_8821C \
122 {HALMAC_SW_IO, HALMAC_GPIO3, HALMAC_GPIO_IN_OUT, \
123 0x40, BIT(1) | BIT(0), 0}
125 /* GPIO4 definition */
126 #define GPIO4_BT_SPI_D0_8821C \
127 {HALMAC_BT_SFLASH, HALMAC_GPIO4, HALMAC_GPIO_IN_OUT, \
128 0x66, BIT(4), BIT(4)}
129 #define GPIO4_WL_SPI_D0_8821C \
130 {HALMAC_WL_SFLASH, HALMAC_GPIO4, HALMAC_GPIO_IN_OUT, \
131 0x42, BIT(3), BIT(3)}
132 #define GPIO4_SDIO_INT_8821C \
133 {HALMAC_SDIO_INT, HALMAC_GPIO4, HALMAC_GPIO_OUT, \
134 0x72, BIT(2), BIT(2)}
135 #define GPIO4_JTAG_TRST_8821C \
136 {HALMAC_JTAG, HALMAC_GPIO4, HALMAC_GPIO_IN, \
137 0x67, BIT(0), BIT(0)}
138 #define GPIO4_DBG_GNT_WL_8821C \
139 {HALMAC_DBG_GNT_WL_BT, HALMAC_GPIO4, HALMAC_GPIO_OUT, \
140 0x73, BIT(3), BIT(3)}
141 #define GPIO4_WLMAC_DBG_GPIO4_8821C \
142 {HALMAC_WLMAC_DBG, HALMAC_GPIO4, HALMAC_GPIO_OUT, \
143 0x40, BIT(1) | BIT(0), BIT(0)}
144 #define GPIO4_WLPHY_DBG_GPIO4_8821C \
145 {HALMAC_WLPHY_DBG, HALMAC_GPIO4, HALMAC_GPIO_IN_OUT, \
146 0x40, BIT(1) | BIT(0), BIT(1)}
147 #define GPIO4_BT_DBG_GPIO4_8821C \
148 {HALMAC_BT_DBG, HALMAC_GPIO4, HALMAC_GPIO_OUT, \
149 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)}
150 #define GPIO4_SW_IO_8821C \
151 {HALMAC_SW_IO, HALMAC_GPIO4, HALMAC_GPIO_IN_OUT, \
152 0x40, BIT(1) | BIT(0), 0}
154 /* GPIO5 definition */
155 #define GPIO5_BT_SPI_D1_8821C \
156 {HALMAC_BT_SFLASH, HALMAC_GPIO5, HALMAC_GPIO_IN_OUT, \
157 0x66, BIT(4), BIT(4)}
158 #define GPIO5_WL_SPI_D1_8821C \
159 {HALMAC_WL_SFLASH, HALMAC_GPIO5, HALMAC_GPIO_IN_OUT, \
160 0x42, BIT(3), BIT(3)}
161 #define GPIO5_JTAG_TDI_8821C \
162 {HALMAC_JTAG, HALMAC_GPIO5, HALMAC_GPIO_IN, \
163 0x67, BIT(0), BIT(0)}
164 #define GPIO5_DBG_GNT_BT_8821C \
165 {HALMAC_DBG_GNT_WL_BT, HALMAC_GPIO5, HALMAC_GPIO_OUT, \
166 0x73, BIT(3), BIT(3)}
167 #define GPIO5_WLMAC_DBG_GPIO5_8821C \
168 {HALMAC_WLMAC_DBG, HALMAC_GPIO5, HALMAC_GPIO_OUT, \
169 0x40, BIT(1) | BIT(0), BIT(0)}
170 #define GPIO5_WLPHY_DBG_GPIO5_8821C \
171 {HALMAC_WLPHY_DBG, HALMAC_GPIO5, HALMAC_GPIO_IN_OUT, \
172 0x40, BIT(1) | BIT(0), BIT(1)}
173 #define GPIO5_BT_DBG_GPIO5_8821C \
174 {HALMAC_BT_DBG, HALMAC_GPIO5, HALMAC_GPIO_OUT, \
175 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)}
176 #define GPIO5_SW_IO_8821C \
177 {HALMAC_SW_IO, HALMAC_GPIO5, HALMAC_GPIO_IN_OUT, \
178 0x40, BIT(1) | BIT(0), 0}
180 /* GPIO6 definition */
181 #define GPIO6_BT_SPI_D2_8821C \
182 {HALMAC_BT_SFLASH, HALMAC_GPIO6, HALMAC_GPIO_IN_OUT, \
183 0x66, BIT(4), BIT(4)}
184 #define GPIO6_WL_SPI_D2_8821C \
185 {HALMAC_WL_SFLASH, HALMAC_GPIO6, HALMAC_GPIO_IN_OUT, \
186 0x42, BIT(3), BIT(3)}
187 #define GPIO6_EEDO_8821C \
188 {HALMAC_EEPROM, HALMAC_GPIO6, HALMAC_GPIO_IN, \
189 0x40, BIT(4), BIT(4)}
190 #define GPIO6_JTAG_TDO_8821C \
191 {HALMAC_JTAG, HALMAC_GPIO6, HALMAC_GPIO_OUT, \
192 0x67, BIT(0), BIT(0)}
193 #define GPIO6_BT_3DD_SYNC_B_8821C \
194 {HALMAC_BT_3DDLS_B, HALMAC_GPIO6, HALMAC_GPIO_IN, \
195 0x67, BIT(1), BIT(1)}
196 #define GPIO6_BT_GPIO18_8821C \
197 {HALMAC_BT_GPIO, HALMAC_GPIO6, HALMAC_GPIO_IN_OUT, \
198 0x67, BIT(1), BIT(1)}
199 #define GPIO6_SIN_8821C \
200 {HALMAC_WL_UART, HALMAC_GPIO6, HALMAC_GPIO_IN, \
201 0x41, BIT(0), BIT(0)}
202 #define GPIO6_WLMAC_DBG_GPIO6_8821C \
203 {HALMAC_WLMAC_DBG, HALMAC_GPIO6, HALMAC_GPIO_OUT, \
204 0x40, BIT(1) | BIT(0), BIT(0)}
205 #define GPIO6_WLPHY_DBG_GPIO6_8821C \
206 {HALMAC_WLPHY_DBG, HALMAC_GPIO6, HALMAC_GPIO_IN_OUT, \
207 0x40, BIT(1) | BIT(0), BIT(1)}
208 #define GPIO6_BT_DBG_GPIO6_8821C \
209 {HALMAC_BT_DBG, HALMAC_GPIO6, HALMAC_GPIO_OUT, \
210 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)}
211 #define GPIO6_SW_IO_8821C \
212 {HALMAC_SW_IO, HALMAC_GPIO6, HALMAC_GPIO_IN_OUT, \
213 0x40, BIT(1) | BIT(0), 0}
215 /* GPIO7 definition */
216 #define GPIO7_BT_SPI_D3_8821C \
217 {HALMAC_BT_SFLASH, HALMAC_GPIO7, HALMAC_GPIO_IN_OUT, \
218 0x66, BIT(4), BIT(4)}
219 #define GPIO7_WL_SPI_D3_8821C \
220 {HALMAC_WL_SFLASH, HALMAC_GPIO7, HALMAC_GPIO_IN_OUT, \
221 0x42, BIT(3), BIT(3)}
222 #define GPIO7_EEDI_8821C \
223 {HALMAC_EEPROM, HALMAC_GPIO7, HALMAC_GPIO_OUT, \
224 0x40, BIT(4), BIT(4)}
225 #define GPIO7_JTAG_TMS_8821C \
226 {HALMAC_JTAG, HALMAC_GPIO7, HALMAC_GPIO_IN, \
227 0x67, BIT(0), BIT(0)}
228 #define GPIO7_BT_GPIO16_8821C \
229 {HALMAC_BT_GPIO, HALMAC_GPIO7, HALMAC_GPIO_IN_OUT, \
230 0x67, BIT(2), BIT(2)}
231 #define GPIO7_SOUT_8821C \
232 {HALMAC_WL_UART, HALMAC_GPIO7, HALMAC_GPIO_OUT, \
233 0x41, BIT(0), BIT(0)}
234 #define GPIO7_WLMAC_DBG_GPIO7_8821C \
235 {HALMAC_WLMAC_DBG, HALMAC_GPIO7, HALMAC_GPIO_OUT, \
236 0x40, BIT(1) | BIT(0), BIT(0)}
237 #define GPIO7_WLPHY_DBG_GPIO7_8821C \
238 {HALMAC_WLPHY_DBG, HALMAC_GPIO7, HALMAC_GPIO_IN_OUT, \
239 0x40, BIT(1) | BIT(0), BIT(1)}
240 #define GPIO7_BT_DBG_GPIO7_8821C \
241 {HALMAC_BT_DBG, HALMAC_GPIO7, HALMAC_GPIO_OUT, \
242 0x40, BIT(1) | BIT(0), BIT(0) | BIT(1)}
243 #define GPIO7_SW_IO_8821C \
244 {HALMAC_SW_IO, HALMAC_GPIO7, HALMAC_GPIO_IN_OUT, \
245 0x40, BIT(1) | BIT(0), 0}
247 /* GPIO8 definition */
248 #define GPIO8_WL_EXT_WOL_8821C \
249 {HALMAC_WL_HW_EXTWOL, HALMAC_GPIO8, HALMAC_GPIO_IN, \
250 0x4a, BIT(0) | BIT(1), BIT(0) | BIT(1)}
251 #define GPIO8_WL_LED_8821C \
252 {HALMAC_WL_LED, HALMAC_GPIO8, HALMAC_GPIO_OUT, \
253 0x4e, BIT(5), BIT(5)}
254 #define GPIO8_SW_IO_8821C \
255 {HALMAC_SW_IO, HALMAC_GPIO8, HALMAC_GPIO_IN_OUT, \
256 0x40, BIT(1) | BIT(0), 0}
258 /* GPIO9 definition */
259 #define GPIO9_DIS_WL_N_8821C \
260 {HALMAC_WL_HWPDN, HALMAC_GPIO9, HALMAC_GPIO_IN, \
261 0x68, BIT(3) | BIT(0), BIT(3) | BIT(0)}
262 #define GPIO9_WL_EXT_WOL_8821C \
263 {HALMAC_WL_HW_EXTWOL, HALMAC_GPIO9, HALMAC_GPIO_IN, \
264 0x4a, BIT(0) | BIT(1), BIT(0)}
265 #define GPIO9_USCTS0_8821C \
266 {HALMAC_UART0, HALMAC_GPIO9, HALMAC_GPIO_IN, \
267 0x66, BIT(6), BIT(6)}
268 #define GPIO9_SW_IO_8821C \
269 {HALMAC_SW_IO, HALMAC_GPIO9, HALMAC_GPIO_IN_OUT, \
270 0x40, BIT(1) | BIT(0), 0}
272 /* GPIO10 definition */
273 #define GPIO10_SW_IO_8821C \
274 {HALMAC_SW_IO, HALMAC_GPIO10, HALMAC_GPIO_IN_OUT, \
275 0x40, BIT(1) | BIT(0), 0}
277 /* GPIO11 definition */
278 #define GPIO11_DIS_BT_N_8821C \
279 {HALMAC_BT_HWPDN, HALMAC_GPIO11, HALMAC_GPIO_IN, \
280 0x6a, BIT(0), BIT(0)}
281 #define GPIO11_USOUT0_8821C \
282 {HALMAC_UART0, HALMAC_GPIO11, HALMAC_GPIO_OUT, \
283 0x66, BIT(6), BIT(6)}
284 #define GPIO11_SW_IO_8821C \
285 {HALMAC_SW_IO, HALMAC_GPIO11, HALMAC_GPIO_IN_OUT, \
286 0x40, BIT(1) | BIT(0), 0}
288 /* GPIO12 definition */
289 #define GPIO12_USIN0_8821C \
290 {HALMAC_UART0, HALMAC_GPIO12, HALMAC_GPIO_IN, \
291 0x66, BIT(6), BIT(6)}
292 #define GPIO12_SW_IO_8821C \
293 {HALMAC_SW_IO, HALMAC_GPIO12, HALMAC_GPIO_IN_OUT, \
294 0x40, BIT(1) | BIT(0), 0}
296 /* GPIO13 definition */
297 #define GPIO13_BT_WAKE_8821C \
298 {HALMAC_GPIO13_14_WL_CTRL_EN, HALMAC_GPIO13, HALMAC_GPIO_IN, \
299 0x4e, BIT(6), BIT(6)}
300 #define GPIO13_SW_IO_8821C \
301 {HALMAC_SW_IO, HALMAC_GPIO13, HALMAC_GPIO_IN_OUT, \
302 0x40, BIT(1) | BIT(0), 0}
304 /* GPIO14 definition */
305 #define GPIO14_UART_WAKE_8821C \
306 {HALMAC_GPIO13_14_WL_CTRL_EN, HALMAC_GPIO14, HALMAC_GPIO_OUT, \
307 0x4e, BIT(6), BIT(6)}
308 #define GPIO14_SW_IO_8821C \
309 {HALMAC_SW_IO, HALMAC_GPIO14, HALMAC_GPIO_IN_OUT, \
310 0x40, BIT(1) | BIT(0), 0}
312 /* GPIO15 definition */
313 #define GPIO15_EXT_XTAL_8821C \
314 {HALMAC_EXT_XTAL, HALMAC_GPIO15, HALMAC_GPIO_OUT, \
315 0x66, BIT(7), BIT(7)}
316 #define GPIO15_SW_IO_8821C \
317 {HALMAC_SW_IO, HALMAC_GPIO15, HALMAC_GPIO_IN_OUT, \
318 0x40, BIT(1) | BIT(0), 0}
320 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO0_8821C[] = {
321 GPIO0_BT_GPIO0_8821C,
324 GPIO0_WLMAC_DBG_GPIO0_8821C,
325 GPIO0_WLPHY_DBG_GPIO0_8821C,
326 GPIO0_BT_DBG_GPIO0_8821C,
330 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO1_8821C[] = {
331 GPIO1_BT_GPIO1_8821C,
332 GPIO1_BT_3DD_SYNC_A_8821C,
335 GPIO1_WLMAC_DBG_GPIO1_8821C,
336 GPIO1_WLPHY_DBG_GPIO1_8821C,
337 GPIO1_BT_DBG_GPIO1_8821C,
341 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO2_8821C[] = {
342 GPIO2_BT_GPIO2_8821C,
343 GPIO2_WL_STATE_8821C,
344 GPIO2_BT_STATE_8821C,
345 GPIO2_WLMAC_DBG_GPIO2_8821C,
346 GPIO2_WLPHY_DBG_GPIO2_8821C,
347 GPIO2_BT_DBG_GPIO2_8821C,
348 GPIO2_RFE_CTRL_5_8821C,
352 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO3_8821C[] = {
353 GPIO3_BT_GPIO3_8821C,
356 GPIO3_WLMAC_DBG_GPIO3_8821C,
357 GPIO3_WLPHY_DBG_GPIO3_8821C,
358 GPIO3_BT_DBG_GPIO3_8821C,
359 GPIO3_RFE_CTRL_4_8821C,
363 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO4_8821C[] = {
364 GPIO4_BT_SPI_D0_8821C,
365 GPIO4_WL_SPI_D0_8821C,
366 GPIO4_SDIO_INT_8821C,
367 GPIO4_JTAG_TRST_8821C,
368 GPIO4_DBG_GNT_WL_8821C,
369 GPIO4_WLMAC_DBG_GPIO4_8821C,
370 GPIO4_WLPHY_DBG_GPIO4_8821C,
371 GPIO4_BT_DBG_GPIO4_8821C,
375 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO5_8821C[] = {
376 GPIO5_BT_SPI_D1_8821C,
377 GPIO5_WL_SPI_D1_8821C,
378 GPIO5_JTAG_TDI_8821C,
379 GPIO5_DBG_GNT_BT_8821C,
380 GPIO5_WLMAC_DBG_GPIO5_8821C,
381 GPIO5_WLPHY_DBG_GPIO5_8821C,
382 GPIO5_BT_DBG_GPIO5_8821C,
386 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO6_8821C[] = {
387 GPIO6_BT_SPI_D2_8821C,
388 GPIO6_WL_SPI_D2_8821C,
390 GPIO6_JTAG_TDO_8821C,
391 GPIO6_BT_3DD_SYNC_B_8821C,
392 GPIO6_BT_GPIO18_8821C,
394 GPIO6_WLMAC_DBG_GPIO6_8821C,
395 GPIO6_WLPHY_DBG_GPIO6_8821C,
396 GPIO6_BT_DBG_GPIO6_8821C,
400 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO7_8821C[] = {
401 GPIO7_BT_SPI_D3_8821C,
402 GPIO7_WL_SPI_D3_8821C,
404 GPIO7_JTAG_TMS_8821C,
405 GPIO7_BT_GPIO16_8821C,
407 GPIO7_WLMAC_DBG_GPIO7_8821C,
408 GPIO7_WLPHY_DBG_GPIO7_8821C,
409 GPIO7_BT_DBG_GPIO7_8821C,
413 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO8_8821C[] = {
414 GPIO8_WL_EXT_WOL_8821C,
419 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO9_8821C[] = {
420 GPIO9_DIS_WL_N_8821C,
421 GPIO9_WL_EXT_WOL_8821C,
426 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO10_8821C[] = {
430 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO11_8821C[] = {
431 GPIO11_DIS_BT_N_8821C,
436 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO12_8821C[] = {
441 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO13_8821C[] = {
442 GPIO13_BT_WAKE_8821C,
446 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO14_8821C[] = {
447 GPIO14_UART_WAKE_8821C,
451 static const struct halmac_gpio_pimux_list PINMUX_LIST_GPIO15_8821C[] = {
452 GPIO15_EXT_XTAL_8821C,
456 static enum halmac_ret_status
457 get_pinmux_list_8821c(struct halmac_adapter *adapter,
458 enum halmac_gpio_func gpio_func,
459 const struct halmac_gpio_pimux_list **list,
460 u32 *list_size, u32 *gpio_id);
462 static enum halmac_ret_status
463 chk_pinmux_valid_8821c(struct halmac_adapter *adapter,
464 enum halmac_gpio_func gpio_func);
467 * pinmux_get_func_8821c() -get current gpio status
468 * @adapter : the adapter of halmac
469 * @gpio_func : gpio function
470 * @enable : function is enable(1) or disable(0)
472 * Return : enum halmac_ret_status
473 * More details of status code can be found in prototype document
475 enum halmac_ret_status
476 pinmux_get_func_8821c(struct halmac_adapter *adapter,
477 enum halmac_gpio_func gpio_func, u8 *enable)
482 enum halmac_ret_status status;
483 const struct halmac_gpio_pimux_list *list = NULL;
485 PLTFM_MSG_TRACE("[TRACE]%s ===>\n", __func__);
487 status = get_pinmux_list_8821c(adapter, gpio_func, &list, &list_size,
489 if (status != HALMAC_RET_SUCCESS)
492 status = pinmux_parser_88xx(adapter, list, list_size, gpio_id,
494 if (status != HALMAC_RET_SUCCESS)
498 case HALMAC_GPIO_FUNC_WL_LED:
499 *enable = (cur_func == HALMAC_WL_LED) ? 1 : 0;
501 case HALMAC_GPIO_FUNC_SDIO_INT:
502 *enable = (cur_func == HALMAC_SDIO_INT) ? 1 : 0;
504 case HALMAC_GPIO_FUNC_BT_HOST_WAKE1:
505 case HALMAC_GPIO_FUNC_BT_DEV_WAKE1:
506 *enable = (cur_func == HALMAC_GPIO13_14_WL_CTRL_EN) ? 1 : 0;
508 case HALMAC_GPIO_FUNC_SW_IO_0:
509 case HALMAC_GPIO_FUNC_SW_IO_1:
510 case HALMAC_GPIO_FUNC_SW_IO_2:
511 case HALMAC_GPIO_FUNC_SW_IO_3:
512 case HALMAC_GPIO_FUNC_SW_IO_4:
513 case HALMAC_GPIO_FUNC_SW_IO_5:
514 case HALMAC_GPIO_FUNC_SW_IO_6:
515 case HALMAC_GPIO_FUNC_SW_IO_7:
516 case HALMAC_GPIO_FUNC_SW_IO_8:
517 case HALMAC_GPIO_FUNC_SW_IO_9:
518 case HALMAC_GPIO_FUNC_SW_IO_10:
519 case HALMAC_GPIO_FUNC_SW_IO_11:
520 case HALMAC_GPIO_FUNC_SW_IO_12:
521 case HALMAC_GPIO_FUNC_SW_IO_13:
522 case HALMAC_GPIO_FUNC_SW_IO_14:
523 case HALMAC_GPIO_FUNC_SW_IO_15:
524 *enable = (cur_func == HALMAC_SW_IO) ? 1 : 0;
528 return HALMAC_RET_GET_PINMUX_ERR;
531 PLTFM_MSG_TRACE("[TRACE]%s <===\n", __func__);
533 return HALMAC_RET_SUCCESS;
537 * pinmux_set_func_8821c() -set gpio function
538 * @adapter : the adapter of halmac
539 * @gpio_func : gpio function
541 * Return : enum halmac_ret_status
542 * More details of status code can be found in prototype document
544 enum halmac_ret_status
545 pinmux_set_func_8821c(struct halmac_adapter *adapter,
546 enum halmac_gpio_func gpio_func)
550 enum halmac_ret_status status;
551 const struct halmac_gpio_pimux_list *list = NULL;
553 PLTFM_MSG_TRACE("[TRACE]%s ===>\n", __func__);
554 PLTFM_MSG_TRACE("[TRACE]func name : %d\n", gpio_func);
556 status = chk_pinmux_valid_8821c(adapter, gpio_func);
557 if (status != HALMAC_RET_SUCCESS)
560 status = get_pinmux_list_8821c(adapter, gpio_func, &list, &list_size,
562 if (status != HALMAC_RET_SUCCESS)
565 status = pinmux_switch_88xx(adapter, list, list_size, gpio_id,
567 if (status != HALMAC_RET_SUCCESS)
570 status = pinmux_record_88xx(adapter, gpio_func, 1);
571 if (status != HALMAC_RET_SUCCESS)
574 PLTFM_MSG_TRACE("[TRACE]%s <===\n", __func__);
576 return HALMAC_RET_SUCCESS;
580 * pinmux_free_func_8821c() -free locked gpio function
581 * @adapter : the adapter of halmac
582 * @gpio_func : gpio function
584 * Return : enum halmac_ret_status
585 * More details of status code can be found in prototype document
587 enum halmac_ret_status
588 pinmux_free_func_8821c(struct halmac_adapter *adapter,
589 enum halmac_gpio_func gpio_func)
591 struct halmac_pinmux_info *info = &adapter->pinmux_info;
593 PLTFM_MSG_TRACE("[TRACE]%s ===>\n", __func__);
596 case HALMAC_GPIO_FUNC_SW_IO_0:
599 case HALMAC_GPIO_FUNC_SW_IO_1:
602 case HALMAC_GPIO_FUNC_SW_IO_2:
605 case HALMAC_GPIO_FUNC_SW_IO_3:
608 case HALMAC_GPIO_FUNC_SW_IO_4:
609 case HALMAC_GPIO_FUNC_SDIO_INT:
613 case HALMAC_GPIO_FUNC_SW_IO_5:
616 case HALMAC_GPIO_FUNC_SW_IO_6:
619 case HALMAC_GPIO_FUNC_SW_IO_7:
622 case HALMAC_GPIO_FUNC_SW_IO_8:
623 case HALMAC_GPIO_FUNC_WL_LED:
627 case HALMAC_GPIO_FUNC_SW_IO_9:
630 case HALMAC_GPIO_FUNC_SW_IO_10:
633 case HALMAC_GPIO_FUNC_SW_IO_11:
636 case HALMAC_GPIO_FUNC_SW_IO_12:
639 case HALMAC_GPIO_FUNC_SW_IO_13:
640 case HALMAC_GPIO_FUNC_BT_DEV_WAKE1:
641 info->bt_dev_wake = 0;
644 case HALMAC_GPIO_FUNC_SW_IO_14:
645 case HALMAC_GPIO_FUNC_BT_HOST_WAKE1:
646 info->bt_host_wake = 0;
649 case HALMAC_GPIO_FUNC_SW_IO_15:
653 return HALMAC_RET_SWITCH_CASE_ERROR;
656 PLTFM_MSG_TRACE("[TRACE]func : %X\n", gpio_func);
657 PLTFM_MSG_TRACE("[TRACE]%s <===\n", __func__);
659 return HALMAC_RET_SUCCESS;
662 static enum halmac_ret_status
663 get_pinmux_list_8821c(struct halmac_adapter *adapter,
664 enum halmac_gpio_func gpio_func,
665 const struct halmac_gpio_pimux_list **list,
666 u32 *list_size, u32 *gpio_id)
669 case HALMAC_GPIO_FUNC_SW_IO_0:
670 *list = PINMUX_LIST_GPIO0_8821C;
671 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO0_8821C);
672 *gpio_id = HALMAC_GPIO0;
674 case HALMAC_GPIO_FUNC_SW_IO_1:
675 *list = PINMUX_LIST_GPIO1_8821C;
676 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO1_8821C);
677 *gpio_id = HALMAC_GPIO1;
679 case HALMAC_GPIO_FUNC_SW_IO_2:
680 *list = PINMUX_LIST_GPIO2_8821C;
681 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO2_8821C);
682 *gpio_id = HALMAC_GPIO2;
684 case HALMAC_GPIO_FUNC_SW_IO_3:
685 *list = PINMUX_LIST_GPIO3_8821C;
686 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO3_8821C);
687 *gpio_id = HALMAC_GPIO3;
689 case HALMAC_GPIO_FUNC_SW_IO_4:
690 case HALMAC_GPIO_FUNC_SDIO_INT:
691 *list = PINMUX_LIST_GPIO4_8821C;
692 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO4_8821C);
693 *gpio_id = HALMAC_GPIO4;
695 case HALMAC_GPIO_FUNC_SW_IO_5:
696 *list = PINMUX_LIST_GPIO5_8821C;
697 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO5_8821C);
698 *gpio_id = HALMAC_GPIO5;
700 case HALMAC_GPIO_FUNC_SW_IO_6:
701 *list = PINMUX_LIST_GPIO6_8821C;
702 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO6_8821C);
703 *gpio_id = HALMAC_GPIO6;
705 case HALMAC_GPIO_FUNC_SW_IO_7:
706 *list = PINMUX_LIST_GPIO7_8821C;
707 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO7_8821C);
708 *gpio_id = HALMAC_GPIO7;
710 case HALMAC_GPIO_FUNC_SW_IO_8:
711 case HALMAC_GPIO_FUNC_WL_LED:
712 *list = PINMUX_LIST_GPIO8_8821C;
713 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO8_8821C);
714 *gpio_id = HALMAC_GPIO8;
716 case HALMAC_GPIO_FUNC_SW_IO_9:
717 *list = PINMUX_LIST_GPIO9_8821C;
718 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO9_8821C);
719 *gpio_id = HALMAC_GPIO9;
721 case HALMAC_GPIO_FUNC_SW_IO_10:
722 *list = PINMUX_LIST_GPIO10_8821C;
723 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO10_8821C);
724 *gpio_id = HALMAC_GPIO10;
726 case HALMAC_GPIO_FUNC_SW_IO_11:
727 *list = PINMUX_LIST_GPIO11_8821C;
728 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO11_8821C);
729 *gpio_id = HALMAC_GPIO11;
731 case HALMAC_GPIO_FUNC_SW_IO_12:
732 *list = PINMUX_LIST_GPIO12_8821C;
733 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO12_8821C);
734 *gpio_id = HALMAC_GPIO12;
736 case HALMAC_GPIO_FUNC_SW_IO_13:
737 case HALMAC_GPIO_FUNC_BT_DEV_WAKE1:
738 *list = PINMUX_LIST_GPIO13_8821C;
739 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO13_8821C);
740 *gpio_id = HALMAC_GPIO13;
742 case HALMAC_GPIO_FUNC_SW_IO_14:
743 case HALMAC_GPIO_FUNC_BT_HOST_WAKE1:
744 *list = PINMUX_LIST_GPIO14_8821C;
745 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO14_8821C);
746 *gpio_id = HALMAC_GPIO14;
748 case HALMAC_GPIO_FUNC_SW_IO_15:
749 *list = PINMUX_LIST_GPIO15_8821C;
750 *list_size = ARRAY_SIZE(PINMUX_LIST_GPIO15_8821C);
751 *gpio_id = HALMAC_GPIO15;
754 return HALMAC_RET_SWITCH_CASE_ERROR;
757 return HALMAC_RET_SUCCESS;
760 static enum halmac_ret_status
761 chk_pinmux_valid_8821c(struct halmac_adapter *adapter,
762 enum halmac_gpio_func gpio_func)
764 struct halmac_pinmux_info *info = &adapter->pinmux_info;
765 enum halmac_ret_status status = HALMAC_RET_SUCCESS;
768 case HALMAC_GPIO_FUNC_SW_IO_0:
769 if (info->sw_io_0 == 1)
770 status = HALMAC_RET_PINMUX_USED;
772 case HALMAC_GPIO_FUNC_SW_IO_1:
773 if (info->sw_io_1 == 1)
774 status = HALMAC_RET_PINMUX_USED;
776 case HALMAC_GPIO_FUNC_SW_IO_2:
777 if (info->sw_io_2 == 1)
778 status = HALMAC_RET_PINMUX_USED;
780 case HALMAC_GPIO_FUNC_SW_IO_3:
781 if (info->sw_io_3 == 1)
782 status = HALMAC_RET_PINMUX_USED;
784 case HALMAC_GPIO_FUNC_SW_IO_4:
785 case HALMAC_GPIO_FUNC_SDIO_INT:
786 if (info->sw_io_4 == 1 || info->sdio_int == 1)
787 status = HALMAC_RET_PINMUX_USED;
789 case HALMAC_GPIO_FUNC_SW_IO_5:
790 if (info->sw_io_5 == 1)
791 status = HALMAC_RET_PINMUX_USED;
793 case HALMAC_GPIO_FUNC_SW_IO_6:
794 if (info->sw_io_6 == 1)
795 status = HALMAC_RET_PINMUX_USED;
797 case HALMAC_GPIO_FUNC_SW_IO_7:
798 if (info->sw_io_7 == 1)
799 status = HALMAC_RET_PINMUX_USED;
801 case HALMAC_GPIO_FUNC_SW_IO_8:
802 case HALMAC_GPIO_FUNC_WL_LED:
803 if (info->sw_io_8 == 1 || info->wl_led == 1)
804 status = HALMAC_RET_PINMUX_USED;
806 case HALMAC_GPIO_FUNC_SW_IO_9:
807 if (info->sw_io_9 == 1)
808 status = HALMAC_RET_PINMUX_USED;
810 case HALMAC_GPIO_FUNC_SW_IO_10:
811 if (info->sw_io_10 == 1)
812 status = HALMAC_RET_PINMUX_USED;
814 case HALMAC_GPIO_FUNC_SW_IO_11:
815 if (info->sw_io_11 == 1)
816 status = HALMAC_RET_PINMUX_USED;
818 case HALMAC_GPIO_FUNC_SW_IO_12:
819 if (info->sw_io_12 == 1)
820 status = HALMAC_RET_PINMUX_USED;
822 case HALMAC_GPIO_FUNC_SW_IO_13:
823 case HALMAC_GPIO_FUNC_BT_DEV_WAKE1:
824 if (info->sw_io_13 == 1 || info->bt_dev_wake == 1)
825 status = HALMAC_RET_PINMUX_USED;
827 case HALMAC_GPIO_FUNC_SW_IO_14:
828 case HALMAC_GPIO_FUNC_BT_HOST_WAKE1:
829 if (info->sw_io_14 == 1 || info->bt_host_wake == 1)
830 status = HALMAC_RET_PINMUX_USED;
832 case HALMAC_GPIO_FUNC_SW_IO_15:
833 if (info->sw_io_15 == 1)
834 status = HALMAC_RET_PINMUX_USED;
837 return HALMAC_RET_SWITCH_CASE_ERROR;
840 PLTFM_MSG_TRACE("[TRACE]chk_pinmux_valid func : %X status : %X\n",
845 #endif /* HALMAC_8821C_SUPPORT */