1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright(c) 2007 - 2012 Realtek Corporation. */
3
4 #include "../include/drv_types.h"
5 #include "../include/rtw_led.h"
6
7 /* */
8 /* Description: */
9 /* Callback function of LED BlinkTimer, */
10 /* it just schedules to corresponding BlinkWorkItem/led_blink_hdl */
11 /* */
BlinkTimerCallback(struct timer_list * t)12 void BlinkTimerCallback(struct timer_list *t)
13 {
14 struct LED_871x *pLed = from_timer(pLed, t, BlinkTimer);
15 struct adapter *padapter = pLed->padapter;
16
17 if ((padapter->bSurpriseRemoved) || (padapter->bDriverStopped))
18 return;
19
20 _set_workitem(&pLed->BlinkWorkItem);
21 }
22
23 /* */
24 /* Description: */
25 /* Callback function of LED BlinkWorkItem. */
26 /* We dispatch acture LED blink action according to LedStrategy. */
27 /* */
BlinkWorkItemCallback(struct work_struct * work)28 void BlinkWorkItemCallback(struct work_struct *work)
29 {
30 struct LED_871x *pLed = container_of(work, struct LED_871x, BlinkWorkItem);
31 BlinkHandler(pLed);
32 }
33
34 /* */
35 /* Description: */
36 /* Reset status of LED_871x object. */
37 /* */
ResetLedStatus(struct LED_871x * pLed)38 void ResetLedStatus(struct LED_871x *pLed)
39 {
40 pLed->CurrLedState = RTW_LED_OFF; /* Current LED state. */
41 pLed->bLedOn = false; /* true if LED is ON, false if LED is OFF. */
42
43 pLed->bLedBlinkInProgress = false; /* true if it is blinking, false o.w.. */
44 pLed->bLedWPSBlinkInProgress = false;
45
46 pLed->BlinkTimes = 0; /* Number of times to toggle led state for blinking. */
47 pLed->BlinkingLedState = LED_UNKNOWN; /* Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are. */
48
49 pLed->bLedNoLinkBlinkInProgress = false;
50 pLed->bLedLinkBlinkInProgress = false;
51 pLed->bLedStartToLinkBlinkInProgress = false;
52 pLed->bLedScanBlinkInProgress = false;
53 }
54
55 /*Description: */
56 /* Initialize an LED_871x object. */
InitLed871x(struct adapter * padapter,struct LED_871x * pLed,enum LED_PIN_871x LedPin)57 void InitLed871x(struct adapter *padapter, struct LED_871x *pLed, enum LED_PIN_871x LedPin)
58 {
59 pLed->padapter = padapter;
60 pLed->LedPin = LedPin;
61
62 ResetLedStatus(pLed);
63
64 timer_setup(&pLed->BlinkTimer, BlinkTimerCallback, 0);
65 _init_workitem(&pLed->BlinkWorkItem, BlinkWorkItemCallback, pLed);
66 }
67
68 /* */
69 /* Description: */
70 /* DeInitialize an LED_871x object. */
71 /* */
DeInitLed871x(struct LED_871x * pLed)72 void DeInitLed871x(struct LED_871x *pLed)
73 {
74 _cancel_workitem_sync(&pLed->BlinkWorkItem);
75 _cancel_timer_ex(&pLed->BlinkTimer);
76 ResetLedStatus(pLed);
77 }
78
79 /* */
80 /* Description: */
81 /* Implementation of LED blinking behavior. */
82 /* It toggle off LED and schedule corresponding timer if necessary. */
83 /* */
84
SwLedBlink(struct LED_871x * pLed)85 static void SwLedBlink(struct LED_871x *pLed)
86 {
87 struct adapter *padapter = pLed->padapter;
88 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
89 u8 bStopBlinking = false;
90
91 /* Change LED according to BlinkingLedState specified. */
92 if (pLed->BlinkingLedState == RTW_LED_ON)
93 SwLedOn(padapter, pLed);
94 else
95 SwLedOff(padapter, pLed);
96
97 /* Determine if we shall change LED state again. */
98 pLed->BlinkTimes--;
99 switch (pLed->CurrLedState) {
100 case LED_BLINK_NORMAL:
101 if (pLed->BlinkTimes == 0)
102 bStopBlinking = true;
103 break;
104 case LED_BLINK_StartToBlink:
105 if (check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE))
106 bStopBlinking = true;
107 if (check_fwstate(pmlmepriv, _FW_LINKED) &&
108 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) ||
109 check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)))
110 bStopBlinking = true;
111 else if (pLed->BlinkTimes == 0)
112 bStopBlinking = true;
113 break;
114 case LED_BLINK_WPS:
115 if (pLed->BlinkTimes == 0)
116 bStopBlinking = true;
117 break;
118 default:
119 bStopBlinking = true;
120 break;
121 }
122
123 if (bStopBlinking) {
124 if (check_fwstate(pmlmepriv, _FW_LINKED) && !pLed->bLedOn) {
125 SwLedOn(padapter, pLed);
126 } else if (check_fwstate(pmlmepriv, _FW_LINKED) && pLed->bLedOn) {
127 SwLedOff(padapter, pLed);
128 }
129 pLed->BlinkTimes = 0;
130 pLed->bLedBlinkInProgress = false;
131 } else {
132 /* Assign LED state to toggle. */
133 if (pLed->BlinkingLedState == RTW_LED_ON)
134 pLed->BlinkingLedState = RTW_LED_OFF;
135 else
136 pLed->BlinkingLedState = RTW_LED_ON;
137
138 /* Schedule a timer to toggle LED state. */
139 switch (pLed->CurrLedState) {
140 case LED_BLINK_NORMAL:
141 _set_timer(&pLed->BlinkTimer, LED_BLINK_NORMAL_INTERVAL);
142 break;
143 case LED_BLINK_SLOWLY:
144 case LED_BLINK_StartToBlink:
145 _set_timer(&pLed->BlinkTimer, LED_BLINK_SLOWLY_INTERVAL);
146 break;
147 case LED_BLINK_WPS:
148 _set_timer(&pLed->BlinkTimer, LED_BLINK_LONG_INTERVAL);
149 break;
150 default:
151 _set_timer(&pLed->BlinkTimer, LED_BLINK_SLOWLY_INTERVAL);
152 break;
153 }
154 }
155 }
156
SwLedBlink1(struct LED_871x * pLed)157 static void SwLedBlink1(struct LED_871x *pLed)
158 {
159 struct adapter *padapter = pLed->padapter;
160 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
161 u8 bStopBlinking = false;
162
163 /* Change LED according to BlinkingLedState specified. */
164 if (pLed->BlinkingLedState == RTW_LED_ON)
165 SwLedOn(padapter, pLed);
166 else
167 SwLedOff(padapter, pLed);
168
169 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
170 SwLedOff(padapter, pLed);
171 ResetLedStatus(pLed);
172 return;
173 }
174
175 switch (pLed->CurrLedState) {
176 case LED_BLINK_SLOWLY:
177 if (pLed->bLedOn)
178 pLed->BlinkingLedState = RTW_LED_OFF;
179 else
180 pLed->BlinkingLedState = RTW_LED_ON;
181 _set_timer(&pLed->BlinkTimer, LED_BLINK_NO_LINK_INTERVAL_ALPHA);
182 break;
183 case LED_BLINK_NORMAL:
184 if (pLed->bLedOn)
185 pLed->BlinkingLedState = RTW_LED_OFF;
186 else
187 pLed->BlinkingLedState = RTW_LED_ON;
188 _set_timer(&pLed->BlinkTimer, LED_BLINK_LINK_INTERVAL_ALPHA);
189 break;
190 case LED_BLINK_SCAN:
191 pLed->BlinkTimes--;
192 if (pLed->BlinkTimes == 0)
193 bStopBlinking = true;
194 if (bStopBlinking) {
195 if (check_fwstate(pmlmepriv, _FW_LINKED)) {
196 pLed->bLedLinkBlinkInProgress = true;
197 pLed->CurrLedState = LED_BLINK_NORMAL;
198 if (pLed->bLedOn)
199 pLed->BlinkingLedState = RTW_LED_OFF;
200 else
201 pLed->BlinkingLedState = RTW_LED_ON;
202 _set_timer(&pLed->BlinkTimer, LED_BLINK_LINK_INTERVAL_ALPHA);
203 } else if (!check_fwstate(pmlmepriv, _FW_LINKED)) {
204 pLed->bLedNoLinkBlinkInProgress = true;
205 pLed->CurrLedState = LED_BLINK_SLOWLY;
206 if (pLed->bLedOn)
207 pLed->BlinkingLedState = RTW_LED_OFF;
208 else
209 pLed->BlinkingLedState = RTW_LED_ON;
210 _set_timer(&pLed->BlinkTimer, LED_BLINK_NO_LINK_INTERVAL_ALPHA);
211 }
212 pLed->bLedScanBlinkInProgress = false;
213 } else {
214 if (pLed->bLedOn)
215 pLed->BlinkingLedState = RTW_LED_OFF;
216 else
217 pLed->BlinkingLedState = RTW_LED_ON;
218 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
219 }
220 break;
221 case LED_BLINK_TXRX:
222 pLed->BlinkTimes--;
223 if (pLed->BlinkTimes == 0)
224 bStopBlinking = true;
225 if (bStopBlinking) {
226 if (check_fwstate(pmlmepriv, _FW_LINKED)) {
227 pLed->bLedLinkBlinkInProgress = true;
228 pLed->CurrLedState = LED_BLINK_NORMAL;
229 if (pLed->bLedOn)
230 pLed->BlinkingLedState = RTW_LED_OFF;
231 else
232 pLed->BlinkingLedState = RTW_LED_ON;
233 _set_timer(&pLed->BlinkTimer, LED_BLINK_LINK_INTERVAL_ALPHA);
234 } else if (!check_fwstate(pmlmepriv, _FW_LINKED)) {
235 pLed->bLedNoLinkBlinkInProgress = true;
236 pLed->CurrLedState = LED_BLINK_SLOWLY;
237 if (pLed->bLedOn)
238 pLed->BlinkingLedState = RTW_LED_OFF;
239 else
240 pLed->BlinkingLedState = RTW_LED_ON;
241 _set_timer(&pLed->BlinkTimer, LED_BLINK_NO_LINK_INTERVAL_ALPHA);
242 }
243 pLed->BlinkTimes = 0;
244 pLed->bLedBlinkInProgress = false;
245 } else {
246 if (pLed->bLedOn)
247 pLed->BlinkingLedState = RTW_LED_OFF;
248 else
249 pLed->BlinkingLedState = RTW_LED_ON;
250 _set_timer(&pLed->BlinkTimer, LED_BLINK_FASTER_INTERVAL_ALPHA);
251 }
252 break;
253 case LED_BLINK_WPS:
254 if (pLed->bLedOn)
255 pLed->BlinkingLedState = RTW_LED_OFF;
256 else
257 pLed->BlinkingLedState = RTW_LED_ON;
258 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
259 break;
260 case LED_BLINK_WPS_STOP: /* WPS success */
261 if (pLed->BlinkingLedState == RTW_LED_ON)
262 bStopBlinking = false;
263 else
264 bStopBlinking = true;
265
266 if (bStopBlinking) {
267 pLed->bLedLinkBlinkInProgress = true;
268 pLed->CurrLedState = LED_BLINK_NORMAL;
269 if (pLed->bLedOn)
270 pLed->BlinkingLedState = RTW_LED_OFF;
271 else
272 pLed->BlinkingLedState = RTW_LED_ON;
273 _set_timer(&pLed->BlinkTimer, LED_BLINK_LINK_INTERVAL_ALPHA);
274
275 pLed->bLedWPSBlinkInProgress = false;
276 } else {
277 pLed->BlinkingLedState = RTW_LED_OFF;
278 _set_timer(&pLed->BlinkTimer, LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
279 }
280 break;
281 default:
282 break;
283 }
284 }
285
SwLedBlink2(struct LED_871x * pLed)286 static void SwLedBlink2(struct LED_871x *pLed)
287 {
288 struct adapter *padapter = pLed->padapter;
289 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
290 u8 bStopBlinking = false;
291
292 /* Change LED according to BlinkingLedState specified. */
293 if (pLed->BlinkingLedState == RTW_LED_ON)
294 SwLedOn(padapter, pLed);
295 else
296 SwLedOff(padapter, pLed);
297
298 switch (pLed->CurrLedState) {
299 case LED_BLINK_SCAN:
300 pLed->BlinkTimes--;
301 if (pLed->BlinkTimes == 0)
302 bStopBlinking = true;
303 if (bStopBlinking) {
304 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
305 SwLedOff(padapter, pLed);
306 } else if (check_fwstate(pmlmepriv, _FW_LINKED)) {
307 pLed->CurrLedState = RTW_LED_ON;
308 pLed->BlinkingLedState = RTW_LED_ON;
309 SwLedOn(padapter, pLed);
310 } else if (!check_fwstate(pmlmepriv, _FW_LINKED)) {
311 pLed->CurrLedState = RTW_LED_OFF;
312 pLed->BlinkingLedState = RTW_LED_OFF;
313 SwLedOff(padapter, pLed);
314 }
315 pLed->bLedScanBlinkInProgress = false;
316 } else {
317 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
318 SwLedOff(padapter, pLed);
319 } else {
320 if (pLed->bLedOn)
321 pLed->BlinkingLedState = RTW_LED_OFF;
322 else
323 pLed->BlinkingLedState = RTW_LED_ON;
324 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
325 }
326 }
327 break;
328 case LED_BLINK_TXRX:
329 pLed->BlinkTimes--;
330 if (pLed->BlinkTimes == 0)
331 bStopBlinking = true;
332 if (bStopBlinking) {
333 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
334 SwLedOff(padapter, pLed);
335 } else if (check_fwstate(pmlmepriv, _FW_LINKED)) {
336 pLed->CurrLedState = RTW_LED_ON;
337 pLed->BlinkingLedState = RTW_LED_ON;
338 SwLedOn(padapter, pLed);
339 } else if (!check_fwstate(pmlmepriv, _FW_LINKED)) {
340 pLed->CurrLedState = RTW_LED_OFF;
341 pLed->BlinkingLedState = RTW_LED_OFF;
342 SwLedOff(padapter, pLed);
343 }
344 pLed->bLedBlinkInProgress = false;
345 } else {
346 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
347 SwLedOff(padapter, pLed);
348 } else {
349 if (pLed->bLedOn)
350 pLed->BlinkingLedState = RTW_LED_OFF;
351 else
352 pLed->BlinkingLedState = RTW_LED_ON;
353 _set_timer(&pLed->BlinkTimer, LED_BLINK_FASTER_INTERVAL_ALPHA);
354 }
355 }
356 break;
357 default:
358 break;
359 }
360 }
361
SwLedBlink3(struct LED_871x * pLed)362 static void SwLedBlink3(struct LED_871x *pLed)
363 {
364 struct adapter *padapter = pLed->padapter;
365 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
366 u8 bStopBlinking = false;
367
368 /* Change LED according to BlinkingLedState specified. */
369 if (pLed->BlinkingLedState == RTW_LED_ON) {
370 SwLedOn(padapter, pLed);
371 } else {
372 if (pLed->CurrLedState != LED_BLINK_WPS_STOP)
373 SwLedOff(padapter, pLed);
374 }
375
376 switch (pLed->CurrLedState) {
377 case LED_BLINK_SCAN:
378 pLed->BlinkTimes--;
379 if (pLed->BlinkTimes == 0)
380 bStopBlinking = true;
381 if (bStopBlinking) {
382 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
383 SwLedOff(padapter, pLed);
384 } else if (check_fwstate(pmlmepriv, _FW_LINKED)) {
385 pLed->CurrLedState = RTW_LED_ON;
386 pLed->BlinkingLedState = RTW_LED_ON;
387 if (!pLed->bLedOn)
388 SwLedOn(padapter, pLed);
389 } else if (!check_fwstate(pmlmepriv, _FW_LINKED)) {
390 pLed->CurrLedState = RTW_LED_OFF;
391 pLed->BlinkingLedState = RTW_LED_OFF;
392 if (pLed->bLedOn)
393 SwLedOff(padapter, pLed);
394 }
395 pLed->bLedScanBlinkInProgress = false;
396 } else {
397 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
398 SwLedOff(padapter, pLed);
399 } else {
400 if (pLed->bLedOn)
401 pLed->BlinkingLedState = RTW_LED_OFF;
402 else
403 pLed->BlinkingLedState = RTW_LED_ON;
404 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
405 }
406 }
407 break;
408 case LED_BLINK_TXRX:
409 pLed->BlinkTimes--;
410 if (pLed->BlinkTimes == 0)
411 bStopBlinking = true;
412 if (bStopBlinking) {
413 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
414 SwLedOff(padapter, pLed);
415 } else if (check_fwstate(pmlmepriv, _FW_LINKED)) {
416 pLed->CurrLedState = RTW_LED_ON;
417 pLed->BlinkingLedState = RTW_LED_ON;
418 if (!pLed->bLedOn)
419 SwLedOn(padapter, pLed);
420 } else if (!check_fwstate(pmlmepriv, _FW_LINKED)) {
421 pLed->CurrLedState = RTW_LED_OFF;
422 pLed->BlinkingLedState = RTW_LED_OFF;
423
424 if (pLed->bLedOn)
425 SwLedOff(padapter, pLed);
426 }
427 pLed->bLedBlinkInProgress = false;
428 } else {
429 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
430 SwLedOff(padapter, pLed);
431 } else {
432 if (pLed->bLedOn)
433 pLed->BlinkingLedState = RTW_LED_OFF;
434 else
435 pLed->BlinkingLedState = RTW_LED_ON;
436 _set_timer(&pLed->BlinkTimer, LED_BLINK_FASTER_INTERVAL_ALPHA);
437 }
438 }
439 break;
440 case LED_BLINK_WPS:
441 if (pLed->bLedOn)
442 pLed->BlinkingLedState = RTW_LED_OFF;
443 else
444 pLed->BlinkingLedState = RTW_LED_ON;
445 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
446 break;
447 case LED_BLINK_WPS_STOP: /* WPS success */
448 if (pLed->BlinkingLedState == RTW_LED_ON) {
449 pLed->BlinkingLedState = RTW_LED_OFF;
450 _set_timer(&pLed->BlinkTimer, LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
451 bStopBlinking = false;
452 } else {
453 bStopBlinking = true;
454 }
455 if (bStopBlinking) {
456 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
457 SwLedOff(padapter, pLed);
458 } else {
459 pLed->CurrLedState = RTW_LED_ON;
460 pLed->BlinkingLedState = RTW_LED_ON;
461 SwLedOn(padapter, pLed);
462 }
463 pLed->bLedWPSBlinkInProgress = false;
464 }
465 break;
466 default:
467 break;
468 }
469 }
470
SwLedBlink4(struct LED_871x * pLed)471 static void SwLedBlink4(struct LED_871x *pLed)
472 {
473 struct adapter *padapter = pLed->padapter;
474 struct led_priv *ledpriv = &padapter->ledpriv;
475 struct LED_871x *pLed1 = &ledpriv->SwLed1;
476 u8 bStopBlinking = false;
477
478 /* Change LED according to BlinkingLedState specified. */
479 if (pLed->BlinkingLedState == RTW_LED_ON)
480 SwLedOn(padapter, pLed);
481 else
482 SwLedOff(padapter, pLed);
483
484 if (!pLed1->bLedWPSBlinkInProgress && pLed1->BlinkingLedState == LED_UNKNOWN) {
485 pLed1->BlinkingLedState = RTW_LED_OFF;
486 pLed1->CurrLedState = RTW_LED_OFF;
487 SwLedOff(padapter, pLed1);
488 }
489
490 switch (pLed->CurrLedState) {
491 case LED_BLINK_SLOWLY:
492 if (pLed->bLedOn)
493 pLed->BlinkingLedState = RTW_LED_OFF;
494 else
495 pLed->BlinkingLedState = RTW_LED_ON;
496 _set_timer(&pLed->BlinkTimer, LED_BLINK_NO_LINK_INTERVAL_ALPHA);
497 break;
498 case LED_BLINK_StartToBlink:
499 if (pLed->bLedOn) {
500 pLed->BlinkingLedState = RTW_LED_OFF;
501 _set_timer(&pLed->BlinkTimer, LED_BLINK_SLOWLY_INTERVAL);
502 } else {
503 pLed->BlinkingLedState = RTW_LED_ON;
504 _set_timer(&pLed->BlinkTimer, LED_BLINK_NORMAL_INTERVAL);
505 }
506 break;
507 case LED_BLINK_SCAN:
508 pLed->BlinkTimes--;
509 if (pLed->BlinkTimes == 0)
510 bStopBlinking = false;
511 if (bStopBlinking) {
512 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) {
513 SwLedOff(padapter, pLed);
514 } else {
515 pLed->bLedNoLinkBlinkInProgress = false;
516 pLed->CurrLedState = LED_BLINK_SLOWLY;
517 if (pLed->bLedOn)
518 pLed->BlinkingLedState = RTW_LED_OFF;
519 else
520 pLed->BlinkingLedState = RTW_LED_ON;
521 _set_timer(&pLed->BlinkTimer, LED_BLINK_NO_LINK_INTERVAL_ALPHA);
522 }
523 pLed->bLedScanBlinkInProgress = false;
524 } else {
525 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) {
526 SwLedOff(padapter, pLed);
527 } else {
528 if (pLed->bLedOn)
529 pLed->BlinkingLedState = RTW_LED_OFF;
530 else
531 pLed->BlinkingLedState = RTW_LED_ON;
532 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
533 }
534 }
535 break;
536 case LED_BLINK_TXRX:
537 pLed->BlinkTimes--;
538 if (pLed->BlinkTimes == 0)
539 bStopBlinking = true;
540 if (bStopBlinking) {
541 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) {
542 SwLedOff(padapter, pLed);
543 } else {
544 pLed->bLedNoLinkBlinkInProgress = true;
545 pLed->CurrLedState = LED_BLINK_SLOWLY;
546 if (pLed->bLedOn)
547 pLed->BlinkingLedState = RTW_LED_OFF;
548 else
549 pLed->BlinkingLedState = RTW_LED_ON;
550 _set_timer(&pLed->BlinkTimer, LED_BLINK_NO_LINK_INTERVAL_ALPHA);
551 }
552 pLed->bLedBlinkInProgress = false;
553 } else {
554 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) {
555 SwLedOff(padapter, pLed);
556 } else {
557 if (pLed->bLedOn)
558 pLed->BlinkingLedState = RTW_LED_OFF;
559 else
560 pLed->BlinkingLedState = RTW_LED_ON;
561 _set_timer(&pLed->BlinkTimer, LED_BLINK_FASTER_INTERVAL_ALPHA);
562 }
563 }
564 break;
565 case LED_BLINK_WPS:
566 if (pLed->bLedOn) {
567 pLed->BlinkingLedState = RTW_LED_OFF;
568 _set_timer(&pLed->BlinkTimer, LED_BLINK_SLOWLY_INTERVAL);
569 } else {
570 pLed->BlinkingLedState = RTW_LED_ON;
571 _set_timer(&pLed->BlinkTimer, LED_BLINK_NORMAL_INTERVAL);
572 }
573 break;
574 case LED_BLINK_WPS_STOP: /* WPS authentication fail */
575 if (pLed->bLedOn)
576 pLed->BlinkingLedState = RTW_LED_OFF;
577 else
578 pLed->BlinkingLedState = RTW_LED_ON;
579
580 _set_timer(&pLed->BlinkTimer, LED_BLINK_NORMAL_INTERVAL);
581 break;
582 case LED_BLINK_WPS_STOP_OVERLAP: /* WPS session overlap */
583 pLed->BlinkTimes--;
584 if (pLed->BlinkTimes == 0) {
585 if (pLed->bLedOn)
586 pLed->BlinkTimes = 1;
587 else
588 bStopBlinking = true;
589 }
590
591 if (bStopBlinking) {
592 pLed->BlinkTimes = 10;
593 pLed->BlinkingLedState = RTW_LED_ON;
594 _set_timer(&pLed->BlinkTimer, LED_BLINK_LINK_INTERVAL_ALPHA);
595 } else {
596 if (pLed->bLedOn)
597 pLed->BlinkingLedState = RTW_LED_OFF;
598 else
599 pLed->BlinkingLedState = RTW_LED_ON;
600
601 _set_timer(&pLed->BlinkTimer, LED_BLINK_NORMAL_INTERVAL);
602 }
603 break;
604 default:
605 break;
606 }
607 }
608
SwLedBlink5(struct LED_871x * pLed)609 static void SwLedBlink5(struct LED_871x *pLed)
610 {
611 struct adapter *padapter = pLed->padapter;
612 u8 bStopBlinking = false;
613
614 /* Change LED according to BlinkingLedState specified. */
615 if (pLed->BlinkingLedState == RTW_LED_ON)
616 SwLedOn(padapter, pLed);
617 else
618 SwLedOff(padapter, pLed);
619
620 switch (pLed->CurrLedState) {
621 case LED_BLINK_SCAN:
622 pLed->BlinkTimes--;
623 if (pLed->BlinkTimes == 0)
624 bStopBlinking = true;
625
626 if (bStopBlinking) {
627 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) {
628 pLed->CurrLedState = RTW_LED_OFF;
629 pLed->BlinkingLedState = RTW_LED_OFF;
630 if (pLed->bLedOn)
631 SwLedOff(padapter, pLed);
632 } else {
633 pLed->CurrLedState = RTW_LED_ON;
634 pLed->BlinkingLedState = RTW_LED_ON;
635 if (!pLed->bLedOn)
636 _set_timer(&pLed->BlinkTimer, LED_BLINK_FASTER_INTERVAL_ALPHA);
637 }
638
639 pLed->bLedScanBlinkInProgress = false;
640 } else {
641 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) {
642 SwLedOff(padapter, pLed);
643 } else {
644 if (pLed->bLedOn)
645 pLed->BlinkingLedState = RTW_LED_OFF;
646 else
647 pLed->BlinkingLedState = RTW_LED_ON;
648 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
649 }
650 }
651 break;
652 case LED_BLINK_TXRX:
653 pLed->BlinkTimes--;
654 if (pLed->BlinkTimes == 0)
655 bStopBlinking = true;
656
657 if (bStopBlinking) {
658 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) {
659 pLed->CurrLedState = RTW_LED_OFF;
660 pLed->BlinkingLedState = RTW_LED_OFF;
661 if (pLed->bLedOn)
662 SwLedOff(padapter, pLed);
663 } else {
664 pLed->CurrLedState = RTW_LED_ON;
665 pLed->BlinkingLedState = RTW_LED_ON;
666 if (!pLed->bLedOn)
667 _set_timer(&pLed->BlinkTimer, LED_BLINK_FASTER_INTERVAL_ALPHA);
668 }
669
670 pLed->bLedBlinkInProgress = false;
671 } else {
672 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) {
673 SwLedOff(padapter, pLed);
674 } else {
675 if (pLed->bLedOn)
676 pLed->BlinkingLedState = RTW_LED_OFF;
677 else
678 pLed->BlinkingLedState = RTW_LED_ON;
679 _set_timer(&pLed->BlinkTimer, LED_BLINK_FASTER_INTERVAL_ALPHA);
680 }
681 }
682 break;
683
684 default:
685 break;
686 }
687 }
688
SwLedBlink6(struct LED_871x * pLed)689 static void SwLedBlink6(struct LED_871x *pLed)
690 {
691 struct adapter *padapter = pLed->padapter;
692
693 /* Change LED according to BlinkingLedState specified. */
694 if (pLed->BlinkingLedState == RTW_LED_ON)
695 SwLedOn(padapter, pLed);
696 else
697 SwLedOff(padapter, pLed);
698 }
699
700 /* ALPHA, added by chiyoko, 20090106 */
SwLedControlMode1(struct adapter * padapter,enum LED_CTL_MODE LedAction)701 static void SwLedControlMode1(struct adapter *padapter, enum LED_CTL_MODE LedAction)
702 {
703 struct led_priv *ledpriv = &padapter->ledpriv;
704 struct LED_871x *pLed = &ledpriv->SwLed0;
705 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
706
707 switch (LedAction) {
708 case LED_CTL_POWER_ON:
709 case LED_CTL_START_TO_LINK:
710 case LED_CTL_NO_LINK:
711 if (!pLed->bLedNoLinkBlinkInProgress) {
712 if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
713 return;
714 if (pLed->bLedLinkBlinkInProgress) {
715 _cancel_timer_ex(&pLed->BlinkTimer);
716 pLed->bLedLinkBlinkInProgress = false;
717 }
718 if (pLed->bLedBlinkInProgress) {
719 _cancel_timer_ex(&pLed->BlinkTimer);
720 pLed->bLedBlinkInProgress = false;
721 }
722
723 pLed->bLedNoLinkBlinkInProgress = true;
724 pLed->CurrLedState = LED_BLINK_SLOWLY;
725 if (pLed->bLedOn)
726 pLed->BlinkingLedState = RTW_LED_OFF;
727 else
728 pLed->BlinkingLedState = RTW_LED_ON;
729 _set_timer(&pLed->BlinkTimer, LED_BLINK_NO_LINK_INTERVAL_ALPHA);
730 }
731 break;
732 case LED_CTL_LINK:
733 if (!pLed->bLedLinkBlinkInProgress) {
734 if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
735 return;
736 if (pLed->bLedNoLinkBlinkInProgress) {
737 _cancel_timer_ex(&pLed->BlinkTimer);
738 pLed->bLedNoLinkBlinkInProgress = false;
739 }
740 if (pLed->bLedBlinkInProgress) {
741 _cancel_timer_ex(&pLed->BlinkTimer);
742 pLed->bLedBlinkInProgress = false;
743 }
744 pLed->bLedLinkBlinkInProgress = true;
745 pLed->CurrLedState = LED_BLINK_NORMAL;
746 if (pLed->bLedOn)
747 pLed->BlinkingLedState = RTW_LED_OFF;
748 else
749 pLed->BlinkingLedState = RTW_LED_ON;
750 _set_timer(&pLed->BlinkTimer, LED_BLINK_LINK_INTERVAL_ALPHA);
751 }
752 break;
753 case LED_CTL_SITE_SURVEY:
754 if ((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED))) {
755 ;
756 } else if (!pLed->bLedScanBlinkInProgress) {
757 if (IS_LED_WPS_BLINKING(pLed))
758 return;
759 if (pLed->bLedNoLinkBlinkInProgress) {
760 _cancel_timer_ex(&pLed->BlinkTimer);
761 pLed->bLedNoLinkBlinkInProgress = false;
762 }
763 if (pLed->bLedLinkBlinkInProgress) {
764 _cancel_timer_ex(&pLed->BlinkTimer);
765 pLed->bLedLinkBlinkInProgress = false;
766 }
767 if (pLed->bLedBlinkInProgress) {
768 _cancel_timer_ex(&pLed->BlinkTimer);
769 pLed->bLedBlinkInProgress = false;
770 }
771 pLed->bLedScanBlinkInProgress = true;
772 pLed->CurrLedState = LED_BLINK_SCAN;
773 pLed->BlinkTimes = 24;
774 if (pLed->bLedOn)
775 pLed->BlinkingLedState = RTW_LED_OFF;
776 else
777 pLed->BlinkingLedState = RTW_LED_ON;
778 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
779 }
780 break;
781 case LED_CTL_TX:
782 case LED_CTL_RX:
783 if (!pLed->bLedBlinkInProgress) {
784 if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
785 return;
786 if (pLed->bLedNoLinkBlinkInProgress) {
787 _cancel_timer_ex(&pLed->BlinkTimer);
788 pLed->bLedNoLinkBlinkInProgress = false;
789 }
790 if (pLed->bLedLinkBlinkInProgress) {
791 _cancel_timer_ex(&pLed->BlinkTimer);
792 pLed->bLedLinkBlinkInProgress = false;
793 }
794 pLed->bLedBlinkInProgress = true;
795 pLed->CurrLedState = LED_BLINK_TXRX;
796 pLed->BlinkTimes = 2;
797 if (pLed->bLedOn)
798 pLed->BlinkingLedState = RTW_LED_OFF;
799 else
800 pLed->BlinkingLedState = RTW_LED_ON;
801 _set_timer(&pLed->BlinkTimer, LED_BLINK_FASTER_INTERVAL_ALPHA);
802 }
803 break;
804 case LED_CTL_START_WPS: /* wait until xinpin finish */
805 case LED_CTL_START_WPS_BOTTON:
806 if (!pLed->bLedWPSBlinkInProgress) {
807 if (pLed->bLedNoLinkBlinkInProgress) {
808 _cancel_timer_ex(&pLed->BlinkTimer);
809 pLed->bLedNoLinkBlinkInProgress = false;
810 }
811 if (pLed->bLedLinkBlinkInProgress) {
812 _cancel_timer_ex(&pLed->BlinkTimer);
813 pLed->bLedLinkBlinkInProgress = false;
814 }
815 if (pLed->bLedBlinkInProgress) {
816 _cancel_timer_ex(&pLed->BlinkTimer);
817 pLed->bLedBlinkInProgress = false;
818 }
819 if (pLed->bLedScanBlinkInProgress) {
820 _cancel_timer_ex(&pLed->BlinkTimer);
821 pLed->bLedScanBlinkInProgress = false;
822 }
823 pLed->bLedWPSBlinkInProgress = true;
824 pLed->CurrLedState = LED_BLINK_WPS;
825 if (pLed->bLedOn)
826 pLed->BlinkingLedState = RTW_LED_OFF;
827 else
828 pLed->BlinkingLedState = RTW_LED_ON;
829 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
830 }
831 break;
832 case LED_CTL_STOP_WPS:
833 if (pLed->bLedNoLinkBlinkInProgress) {
834 _cancel_timer_ex(&pLed->BlinkTimer);
835 pLed->bLedNoLinkBlinkInProgress = false;
836 }
837 if (pLed->bLedLinkBlinkInProgress) {
838 _cancel_timer_ex(&pLed->BlinkTimer);
839 pLed->bLedLinkBlinkInProgress = false;
840 }
841 if (pLed->bLedBlinkInProgress) {
842 _cancel_timer_ex(&pLed->BlinkTimer);
843 pLed->bLedBlinkInProgress = false;
844 }
845 if (pLed->bLedScanBlinkInProgress) {
846 _cancel_timer_ex(&pLed->BlinkTimer);
847 pLed->bLedScanBlinkInProgress = false;
848 }
849 if (pLed->bLedWPSBlinkInProgress)
850 _cancel_timer_ex(&pLed->BlinkTimer);
851 else
852 pLed->bLedWPSBlinkInProgress = true;
853 pLed->CurrLedState = LED_BLINK_WPS_STOP;
854 if (pLed->bLedOn) {
855 pLed->BlinkingLedState = RTW_LED_OFF;
856 _set_timer(&pLed->BlinkTimer, LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
857 } else {
858 pLed->BlinkingLedState = RTW_LED_ON;
859 _set_timer(&pLed->BlinkTimer, 0);
860 }
861 break;
862 case LED_CTL_STOP_WPS_FAIL:
863 if (pLed->bLedWPSBlinkInProgress) {
864 _cancel_timer_ex(&pLed->BlinkTimer);
865 pLed->bLedWPSBlinkInProgress = false;
866 }
867 pLed->bLedNoLinkBlinkInProgress = true;
868 pLed->CurrLedState = LED_BLINK_SLOWLY;
869 if (pLed->bLedOn)
870 pLed->BlinkingLedState = RTW_LED_OFF;
871 else
872 pLed->BlinkingLedState = RTW_LED_ON;
873 _set_timer(&pLed->BlinkTimer, LED_BLINK_NO_LINK_INTERVAL_ALPHA);
874 break;
875 case LED_CTL_POWER_OFF:
876 pLed->CurrLedState = RTW_LED_OFF;
877 pLed->BlinkingLedState = RTW_LED_OFF;
878 if (pLed->bLedNoLinkBlinkInProgress) {
879 _cancel_timer_ex(&pLed->BlinkTimer);
880 pLed->bLedNoLinkBlinkInProgress = false;
881 }
882 if (pLed->bLedLinkBlinkInProgress) {
883 _cancel_timer_ex(&pLed->BlinkTimer);
884 pLed->bLedLinkBlinkInProgress = false;
885 }
886 if (pLed->bLedBlinkInProgress) {
887 _cancel_timer_ex(&pLed->BlinkTimer);
888 pLed->bLedBlinkInProgress = false;
889 }
890 if (pLed->bLedWPSBlinkInProgress) {
891 _cancel_timer_ex(&pLed->BlinkTimer);
892 pLed->bLedWPSBlinkInProgress = false;
893 }
894 if (pLed->bLedScanBlinkInProgress) {
895 _cancel_timer_ex(&pLed->BlinkTimer);
896 pLed->bLedScanBlinkInProgress = false;
897 }
898 SwLedOff(padapter, pLed);
899 break;
900 default:
901 break;
902 }
903 }
904
905 /* Arcadyan/Sitecom , added by chiyoko, 20090216 */
SwLedControlMode2(struct adapter * padapter,enum LED_CTL_MODE LedAction)906 static void SwLedControlMode2(struct adapter *padapter, enum LED_CTL_MODE LedAction)
907 {
908 struct led_priv *ledpriv = &padapter->ledpriv;
909 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
910 struct LED_871x *pLed = &ledpriv->SwLed0;
911
912 switch (LedAction) {
913 case LED_CTL_SITE_SURVEY:
914 if (pmlmepriv->LinkDetectInfo.bBusyTraffic) {
915 } else if (!pLed->bLedScanBlinkInProgress) {
916 if (IS_LED_WPS_BLINKING(pLed))
917 return;
918
919 if (pLed->bLedBlinkInProgress) {
920 _cancel_timer_ex(&pLed->BlinkTimer);
921 pLed->bLedBlinkInProgress = false;
922 }
923 pLed->bLedScanBlinkInProgress = true;
924 pLed->CurrLedState = LED_BLINK_SCAN;
925 pLed->BlinkTimes = 24;
926 if (pLed->bLedOn)
927 pLed->BlinkingLedState = RTW_LED_OFF;
928 else
929 pLed->BlinkingLedState = RTW_LED_ON;
930 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
931 }
932 break;
933 case LED_CTL_TX:
934 case LED_CTL_RX:
935 if ((!pLed->bLedBlinkInProgress) && (check_fwstate(pmlmepriv, _FW_LINKED))) {
936 if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
937 return;
938 pLed->bLedBlinkInProgress = true;
939 pLed->CurrLedState = LED_BLINK_TXRX;
940 pLed->BlinkTimes = 2;
941 if (pLed->bLedOn)
942 pLed->BlinkingLedState = RTW_LED_OFF;
943 else
944 pLed->BlinkingLedState = RTW_LED_ON;
945 _set_timer(&pLed->BlinkTimer, LED_BLINK_FASTER_INTERVAL_ALPHA);
946 }
947 break;
948 case LED_CTL_LINK:
949 pLed->CurrLedState = RTW_LED_ON;
950 pLed->BlinkingLedState = RTW_LED_ON;
951 if (pLed->bLedBlinkInProgress) {
952 _cancel_timer_ex(&pLed->BlinkTimer);
953 pLed->bLedBlinkInProgress = false;
954 }
955 if (pLed->bLedScanBlinkInProgress) {
956 _cancel_timer_ex(&pLed->BlinkTimer);
957 pLed->bLedScanBlinkInProgress = false;
958 }
959 _set_timer(&pLed->BlinkTimer, 0);
960 break;
961 case LED_CTL_START_WPS: /* wait until xinpin finish */
962 case LED_CTL_START_WPS_BOTTON:
963 if (!pLed->bLedWPSBlinkInProgress) {
964 if (pLed->bLedBlinkInProgress) {
965 _cancel_timer_ex(&pLed->BlinkTimer);
966 pLed->bLedBlinkInProgress = false;
967 }
968 if (pLed->bLedScanBlinkInProgress) {
969 _cancel_timer_ex(&pLed->BlinkTimer);
970 pLed->bLedScanBlinkInProgress = false;
971 }
972 pLed->bLedWPSBlinkInProgress = true;
973 pLed->CurrLedState = RTW_LED_ON;
974 pLed->BlinkingLedState = RTW_LED_ON;
975 _set_timer(&pLed->BlinkTimer, 0);
976 }
977 break;
978 case LED_CTL_STOP_WPS:
979 pLed->bLedWPSBlinkInProgress = false;
980 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
981 SwLedOff(padapter, pLed);
982 } else {
983 pLed->CurrLedState = RTW_LED_ON;
984 pLed->BlinkingLedState = RTW_LED_ON;
985 _set_timer(&pLed->BlinkTimer, 0);
986 }
987 break;
988 case LED_CTL_STOP_WPS_FAIL:
989 pLed->bLedWPSBlinkInProgress = false;
990 if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
991 SwLedOff(padapter, pLed);
992 } else {
993 pLed->CurrLedState = RTW_LED_OFF;
994 pLed->BlinkingLedState = RTW_LED_OFF;
995 _set_timer(&pLed->BlinkTimer, 0);
996 }
997 break;
998 case LED_CTL_START_TO_LINK:
999 case LED_CTL_NO_LINK:
1000 if (!IS_LED_BLINKING(pLed)) {
1001 pLed->CurrLedState = RTW_LED_OFF;
1002 pLed->BlinkingLedState = RTW_LED_OFF;
1003 _set_timer(&pLed->BlinkTimer, 0);
1004 }
1005 break;
1006 case LED_CTL_POWER_OFF:
1007 pLed->CurrLedState = RTW_LED_OFF;
1008 pLed->BlinkingLedState = RTW_LED_OFF;
1009 if (pLed->bLedBlinkInProgress) {
1010 _cancel_timer_ex(&pLed->BlinkTimer);
1011 pLed->bLedBlinkInProgress = false;
1012 }
1013 if (pLed->bLedScanBlinkInProgress) {
1014 _cancel_timer_ex(&pLed->BlinkTimer);
1015 pLed->bLedScanBlinkInProgress = false;
1016 }
1017 if (pLed->bLedWPSBlinkInProgress) {
1018 _cancel_timer_ex(&pLed->BlinkTimer);
1019 pLed->bLedWPSBlinkInProgress = false;
1020 }
1021
1022 _set_timer(&pLed->BlinkTimer, 0);
1023 break;
1024 default:
1025 break;
1026 }
1027 }
1028
1029 /* COREGA, added by chiyoko, 20090316 */
SwLedControlMode3(struct adapter * padapter,enum LED_CTL_MODE LedAction)1030 static void SwLedControlMode3(struct adapter *padapter, enum LED_CTL_MODE LedAction)
1031 {
1032 struct led_priv *ledpriv = &padapter->ledpriv;
1033 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
1034 struct LED_871x *pLed = &ledpriv->SwLed0;
1035
1036 switch (LedAction) {
1037 case LED_CTL_SITE_SURVEY:
1038 if (pmlmepriv->LinkDetectInfo.bBusyTraffic) {
1039 } else if (!pLed->bLedScanBlinkInProgress) {
1040 if (IS_LED_WPS_BLINKING(pLed))
1041 return;
1042
1043 if (pLed->bLedBlinkInProgress) {
1044 _cancel_timer_ex(&pLed->BlinkTimer);
1045 pLed->bLedBlinkInProgress = false;
1046 }
1047 pLed->bLedScanBlinkInProgress = true;
1048 pLed->CurrLedState = LED_BLINK_SCAN;
1049 pLed->BlinkTimes = 24;
1050 if (pLed->bLedOn)
1051 pLed->BlinkingLedState = RTW_LED_OFF;
1052 else
1053 pLed->BlinkingLedState = RTW_LED_ON;
1054 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
1055 }
1056 break;
1057 case LED_CTL_TX:
1058 case LED_CTL_RX:
1059 if ((!pLed->bLedBlinkInProgress) && (check_fwstate(pmlmepriv, _FW_LINKED))) {
1060 if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
1061 return;
1062 pLed->bLedBlinkInProgress = true;
1063 pLed->CurrLedState = LED_BLINK_TXRX;
1064 pLed->BlinkTimes = 2;
1065 if (pLed->bLedOn)
1066 pLed->BlinkingLedState = RTW_LED_OFF;
1067 else
1068 pLed->BlinkingLedState = RTW_LED_ON;
1069 _set_timer(&pLed->BlinkTimer, LED_BLINK_FASTER_INTERVAL_ALPHA);
1070 }
1071 break;
1072 case LED_CTL_LINK:
1073 if (IS_LED_WPS_BLINKING(pLed))
1074 return;
1075 pLed->CurrLedState = RTW_LED_ON;
1076 pLed->BlinkingLedState = RTW_LED_ON;
1077 if (pLed->bLedBlinkInProgress) {
1078 _cancel_timer_ex(&pLed->BlinkTimer);
1079 pLed->bLedBlinkInProgress = false;
1080 }
1081 if (pLed->bLedScanBlinkInProgress) {
1082 _cancel_timer_ex(&pLed->BlinkTimer);
1083 pLed->bLedScanBlinkInProgress = false;
1084 }
1085
1086 _set_timer(&pLed->BlinkTimer, 0);
1087 break;
1088 case LED_CTL_START_WPS: /* wait until xinpin finish */
1089 case LED_CTL_START_WPS_BOTTON:
1090 if (!pLed->bLedWPSBlinkInProgress) {
1091 if (pLed->bLedBlinkInProgress) {
1092 _cancel_timer_ex(&pLed->BlinkTimer);
1093 pLed->bLedBlinkInProgress = false;
1094 }
1095 if (pLed->bLedScanBlinkInProgress) {
1096 _cancel_timer_ex(&pLed->BlinkTimer);
1097 pLed->bLedScanBlinkInProgress = false;
1098 }
1099 pLed->bLedWPSBlinkInProgress = true;
1100 pLed->CurrLedState = LED_BLINK_WPS;
1101 if (pLed->bLedOn)
1102 pLed->BlinkingLedState = RTW_LED_OFF;
1103 else
1104 pLed->BlinkingLedState = RTW_LED_ON;
1105 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
1106 }
1107 break;
1108 case LED_CTL_STOP_WPS:
1109 if (pLed->bLedWPSBlinkInProgress) {
1110 _cancel_timer_ex(&pLed->BlinkTimer);
1111 pLed->bLedWPSBlinkInProgress = false;
1112 } else {
1113 pLed->bLedWPSBlinkInProgress = true;
1114 }
1115
1116 pLed->CurrLedState = LED_BLINK_WPS_STOP;
1117 if (pLed->bLedOn) {
1118 pLed->BlinkingLedState = RTW_LED_OFF;
1119 _set_timer(&pLed->BlinkTimer, LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
1120 } else {
1121 pLed->BlinkingLedState = RTW_LED_ON;
1122 _set_timer(&pLed->BlinkTimer, 0);
1123 }
1124 break;
1125 case LED_CTL_STOP_WPS_FAIL:
1126 if (pLed->bLedWPSBlinkInProgress) {
1127 _cancel_timer_ex(&pLed->BlinkTimer);
1128 pLed->bLedWPSBlinkInProgress = false;
1129 }
1130 pLed->CurrLedState = RTW_LED_OFF;
1131 pLed->BlinkingLedState = RTW_LED_OFF;
1132 _set_timer(&pLed->BlinkTimer, 0);
1133 break;
1134 case LED_CTL_START_TO_LINK:
1135 case LED_CTL_NO_LINK:
1136 if (!IS_LED_BLINKING(pLed)) {
1137 pLed->CurrLedState = RTW_LED_OFF;
1138 pLed->BlinkingLedState = RTW_LED_OFF;
1139 _set_timer(&pLed->BlinkTimer, 0);
1140 }
1141 break;
1142 case LED_CTL_POWER_OFF:
1143 pLed->CurrLedState = RTW_LED_OFF;
1144 pLed->BlinkingLedState = RTW_LED_OFF;
1145 if (pLed->bLedBlinkInProgress) {
1146 _cancel_timer_ex(&pLed->BlinkTimer);
1147 pLed->bLedBlinkInProgress = false;
1148 }
1149 if (pLed->bLedScanBlinkInProgress) {
1150 _cancel_timer_ex(&pLed->BlinkTimer);
1151 pLed->bLedScanBlinkInProgress = false;
1152 }
1153 if (pLed->bLedWPSBlinkInProgress) {
1154 _cancel_timer_ex(&pLed->BlinkTimer);
1155 pLed->bLedWPSBlinkInProgress = false;
1156 }
1157
1158 _set_timer(&pLed->BlinkTimer, 0);
1159 break;
1160 default:
1161 break;
1162 }
1163 }
1164
1165 /* Edimax-Belkin, added by chiyoko, 20090413 */
SwLedControlMode4(struct adapter * padapter,enum LED_CTL_MODE LedAction)1166 static void SwLedControlMode4(struct adapter *padapter, enum LED_CTL_MODE LedAction)
1167 {
1168 struct led_priv *ledpriv = &padapter->ledpriv;
1169 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
1170 struct LED_871x *pLed = &ledpriv->SwLed0;
1171 struct LED_871x *pLed1 = &ledpriv->SwLed1;
1172
1173 switch (LedAction) {
1174 case LED_CTL_START_TO_LINK:
1175 if (pLed1->bLedWPSBlinkInProgress) {
1176 pLed1->bLedWPSBlinkInProgress = false;
1177 _cancel_timer_ex(&pLed1->BlinkTimer);
1178
1179 pLed1->BlinkingLedState = RTW_LED_OFF;
1180 pLed1->CurrLedState = RTW_LED_OFF;
1181
1182 if (pLed1->bLedOn)
1183 _set_timer(&pLed->BlinkTimer, 0);
1184 }
1185
1186 if (!pLed->bLedStartToLinkBlinkInProgress) {
1187 if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
1188 return;
1189 if (pLed->bLedBlinkInProgress) {
1190 _cancel_timer_ex(&pLed->BlinkTimer);
1191 pLed->bLedBlinkInProgress = false;
1192 }
1193 if (pLed->bLedNoLinkBlinkInProgress) {
1194 _cancel_timer_ex(&pLed->BlinkTimer);
1195 pLed->bLedNoLinkBlinkInProgress = false;
1196 }
1197
1198 pLed->bLedStartToLinkBlinkInProgress = true;
1199 pLed->CurrLedState = LED_BLINK_StartToBlink;
1200 if (pLed->bLedOn) {
1201 pLed->BlinkingLedState = RTW_LED_OFF;
1202 _set_timer(&pLed->BlinkTimer, LED_BLINK_SLOWLY_INTERVAL);
1203 } else {
1204 pLed->BlinkingLedState = RTW_LED_ON;
1205 _set_timer(&pLed->BlinkTimer, LED_BLINK_NORMAL_INTERVAL);
1206 }
1207 }
1208 break;
1209 case LED_CTL_LINK:
1210 case LED_CTL_NO_LINK:
1211 /* LED1 settings */
1212 if (LedAction == LED_CTL_LINK) {
1213 if (pLed1->bLedWPSBlinkInProgress) {
1214 pLed1->bLedWPSBlinkInProgress = false;
1215 _cancel_timer_ex(&pLed1->BlinkTimer);
1216
1217 pLed1->BlinkingLedState = RTW_LED_OFF;
1218 pLed1->CurrLedState = RTW_LED_OFF;
1219
1220 if (pLed1->bLedOn)
1221 _set_timer(&pLed->BlinkTimer, 0);
1222 }
1223 }
1224
1225 if (!pLed->bLedNoLinkBlinkInProgress) {
1226 if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
1227 return;
1228 if (pLed->bLedBlinkInProgress) {
1229 _cancel_timer_ex(&pLed->BlinkTimer);
1230 pLed->bLedBlinkInProgress = false;
1231 }
1232
1233 pLed->bLedNoLinkBlinkInProgress = true;
1234 pLed->CurrLedState = LED_BLINK_SLOWLY;
1235 if (pLed->bLedOn)
1236 pLed->BlinkingLedState = RTW_LED_OFF;
1237 else
1238 pLed->BlinkingLedState = RTW_LED_ON;
1239 _set_timer(&pLed->BlinkTimer, LED_BLINK_NO_LINK_INTERVAL_ALPHA);
1240 }
1241 break;
1242 case LED_CTL_SITE_SURVEY:
1243 if ((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED))) {
1244 } else if (!pLed->bLedScanBlinkInProgress) {
1245 if (IS_LED_WPS_BLINKING(pLed))
1246 return;
1247
1248 if (pLed->bLedNoLinkBlinkInProgress) {
1249 _cancel_timer_ex(&pLed->BlinkTimer);
1250 pLed->bLedNoLinkBlinkInProgress = false;
1251 }
1252 if (pLed->bLedBlinkInProgress) {
1253 _cancel_timer_ex(&pLed->BlinkTimer);
1254 pLed->bLedBlinkInProgress = false;
1255 }
1256 pLed->bLedScanBlinkInProgress = true;
1257 pLed->CurrLedState = LED_BLINK_SCAN;
1258 pLed->BlinkTimes = 24;
1259 if (pLed->bLedOn)
1260 pLed->BlinkingLedState = RTW_LED_OFF;
1261 else
1262 pLed->BlinkingLedState = RTW_LED_ON;
1263 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
1264 }
1265 break;
1266 case LED_CTL_TX:
1267 case LED_CTL_RX:
1268 if (!pLed->bLedBlinkInProgress) {
1269 if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
1270 return;
1271 if (pLed->bLedNoLinkBlinkInProgress) {
1272 _cancel_timer_ex(&pLed->BlinkTimer);
1273 pLed->bLedNoLinkBlinkInProgress = false;
1274 }
1275 pLed->bLedBlinkInProgress = true;
1276 pLed->CurrLedState = LED_BLINK_TXRX;
1277 pLed->BlinkTimes = 2;
1278 if (pLed->bLedOn)
1279 pLed->BlinkingLedState = RTW_LED_OFF;
1280 else
1281 pLed->BlinkingLedState = RTW_LED_ON;
1282 _set_timer(&pLed->BlinkTimer, LED_BLINK_FASTER_INTERVAL_ALPHA);
1283 }
1284 break;
1285 case LED_CTL_START_WPS: /* wait until xinpin finish */
1286 case LED_CTL_START_WPS_BOTTON:
1287 if (pLed1->bLedWPSBlinkInProgress) {
1288 pLed1->bLedWPSBlinkInProgress = false;
1289 _cancel_timer_ex(&pLed1->BlinkTimer);
1290
1291 pLed1->BlinkingLedState = RTW_LED_OFF;
1292 pLed1->CurrLedState = RTW_LED_OFF;
1293
1294 if (pLed1->bLedOn)
1295 _set_timer(&pLed->BlinkTimer, 0);
1296 }
1297
1298 if (!pLed->bLedWPSBlinkInProgress) {
1299 if (pLed->bLedNoLinkBlinkInProgress) {
1300 _cancel_timer_ex(&pLed->BlinkTimer);
1301 pLed->bLedNoLinkBlinkInProgress = false;
1302 }
1303 if (pLed->bLedBlinkInProgress) {
1304 _cancel_timer_ex(&pLed->BlinkTimer);
1305 pLed->bLedBlinkInProgress = false;
1306 }
1307 if (pLed->bLedScanBlinkInProgress) {
1308 _cancel_timer_ex(&pLed->BlinkTimer);
1309 pLed->bLedScanBlinkInProgress = false;
1310 }
1311 pLed->bLedWPSBlinkInProgress = true;
1312 pLed->CurrLedState = LED_BLINK_WPS;
1313 if (pLed->bLedOn) {
1314 pLed->BlinkingLedState = RTW_LED_OFF;
1315 _set_timer(&pLed->BlinkTimer, LED_BLINK_SLOWLY_INTERVAL);
1316 } else {
1317 pLed->BlinkingLedState = RTW_LED_ON;
1318 _set_timer(&pLed->BlinkTimer, LED_BLINK_NORMAL_INTERVAL);
1319 }
1320 }
1321 break;
1322 case LED_CTL_STOP_WPS: /* WPS connect success */
1323 if (pLed->bLedWPSBlinkInProgress) {
1324 _cancel_timer_ex(&pLed->BlinkTimer);
1325 pLed->bLedWPSBlinkInProgress = false;
1326 }
1327
1328 pLed->bLedNoLinkBlinkInProgress = true;
1329 pLed->CurrLedState = LED_BLINK_SLOWLY;
1330 if (pLed->bLedOn)
1331 pLed->BlinkingLedState = RTW_LED_OFF;
1332 else
1333 pLed->BlinkingLedState = RTW_LED_ON;
1334 _set_timer(&pLed->BlinkTimer, LED_BLINK_NO_LINK_INTERVAL_ALPHA);
1335
1336 break;
1337 case LED_CTL_STOP_WPS_FAIL: /* WPS authentication fail */
1338 if (pLed->bLedWPSBlinkInProgress) {
1339 _cancel_timer_ex(&pLed->BlinkTimer);
1340 pLed->bLedWPSBlinkInProgress = false;
1341 }
1342 pLed->bLedNoLinkBlinkInProgress = true;
1343 pLed->CurrLedState = LED_BLINK_SLOWLY;
1344 if (pLed->bLedOn)
1345 pLed->BlinkingLedState = RTW_LED_OFF;
1346 else
1347 pLed->BlinkingLedState = RTW_LED_ON;
1348 _set_timer(&pLed->BlinkTimer, LED_BLINK_NO_LINK_INTERVAL_ALPHA);
1349
1350 /* LED1 settings */
1351 if (pLed1->bLedWPSBlinkInProgress)
1352 _cancel_timer_ex(&pLed1->BlinkTimer);
1353 else
1354 pLed1->bLedWPSBlinkInProgress = true;
1355 pLed1->CurrLedState = LED_BLINK_WPS_STOP;
1356 if (pLed1->bLedOn)
1357 pLed1->BlinkingLedState = RTW_LED_OFF;
1358 else
1359 pLed1->BlinkingLedState = RTW_LED_ON;
1360 _set_timer(&pLed->BlinkTimer, LED_BLINK_NORMAL_INTERVAL);
1361 break;
1362 case LED_CTL_STOP_WPS_FAIL_OVERLAP: /* WPS session overlap */
1363 if (pLed->bLedWPSBlinkInProgress) {
1364 _cancel_timer_ex(&pLed->BlinkTimer);
1365 pLed->bLedWPSBlinkInProgress = false;
1366 }
1367 pLed->bLedNoLinkBlinkInProgress = true;
1368 pLed->CurrLedState = LED_BLINK_SLOWLY;
1369 if (pLed->bLedOn)
1370 pLed->BlinkingLedState = RTW_LED_OFF;
1371 else
1372 pLed->BlinkingLedState = RTW_LED_ON;
1373 _set_timer(&pLed->BlinkTimer, LED_BLINK_NO_LINK_INTERVAL_ALPHA);
1374
1375 /* LED1 settings */
1376 if (pLed1->bLedWPSBlinkInProgress)
1377 _cancel_timer_ex(&pLed1->BlinkTimer);
1378 else
1379 pLed1->bLedWPSBlinkInProgress = true;
1380 pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;
1381 pLed1->BlinkTimes = 10;
1382 if (pLed1->bLedOn)
1383 pLed1->BlinkingLedState = RTW_LED_OFF;
1384 else
1385 pLed1->BlinkingLedState = RTW_LED_ON;
1386 _set_timer(&pLed->BlinkTimer, LED_BLINK_NORMAL_INTERVAL);
1387 break;
1388 case LED_CTL_POWER_OFF:
1389 pLed->CurrLedState = RTW_LED_OFF;
1390 pLed->BlinkingLedState = RTW_LED_OFF;
1391
1392 if (pLed->bLedNoLinkBlinkInProgress) {
1393 _cancel_timer_ex(&pLed->BlinkTimer);
1394 pLed->bLedNoLinkBlinkInProgress = false;
1395 }
1396 if (pLed->bLedLinkBlinkInProgress) {
1397 _cancel_timer_ex(&pLed->BlinkTimer);
1398 pLed->bLedLinkBlinkInProgress = false;
1399 }
1400 if (pLed->bLedBlinkInProgress) {
1401 _cancel_timer_ex(&pLed->BlinkTimer);
1402 pLed->bLedBlinkInProgress = false;
1403 }
1404 if (pLed->bLedWPSBlinkInProgress) {
1405 _cancel_timer_ex(&pLed->BlinkTimer);
1406 pLed->bLedWPSBlinkInProgress = false;
1407 }
1408 if (pLed->bLedScanBlinkInProgress) {
1409 _cancel_timer_ex(&pLed->BlinkTimer);
1410 pLed->bLedScanBlinkInProgress = false;
1411 }
1412 if (pLed->bLedStartToLinkBlinkInProgress) {
1413 _cancel_timer_ex(&pLed->BlinkTimer);
1414 pLed->bLedStartToLinkBlinkInProgress = false;
1415 }
1416 if (pLed1->bLedWPSBlinkInProgress) {
1417 _cancel_timer_ex(&pLed1->BlinkTimer);
1418 pLed1->bLedWPSBlinkInProgress = false;
1419 }
1420 pLed1->BlinkingLedState = LED_UNKNOWN;
1421 SwLedOff(padapter, pLed);
1422 SwLedOff(padapter, pLed1);
1423 break;
1424 default:
1425 break;
1426 }
1427 }
1428
1429 /* Sercomm-Belkin, added by chiyoko, 20090415 */
1430 static void
SwLedControlMode5(struct adapter * padapter,enum LED_CTL_MODE LedAction)1431 SwLedControlMode5(
1432 struct adapter *padapter,
1433 enum LED_CTL_MODE LedAction
1434 )
1435 {
1436 struct led_priv *ledpriv = &padapter->ledpriv;
1437 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
1438 struct LED_871x *pLed = &ledpriv->SwLed0;
1439
1440 switch (LedAction) {
1441 case LED_CTL_POWER_ON:
1442 case LED_CTL_NO_LINK:
1443 case LED_CTL_LINK: /* solid blue */
1444 pLed->CurrLedState = RTW_LED_ON;
1445 pLed->BlinkingLedState = RTW_LED_ON;
1446
1447 _set_timer(&pLed->BlinkTimer, 0);
1448 break;
1449 case LED_CTL_SITE_SURVEY:
1450 if ((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED))) {
1451 } else if (!pLed->bLedScanBlinkInProgress) {
1452 if (pLed->bLedBlinkInProgress) {
1453 _cancel_timer_ex(&pLed->BlinkTimer);
1454 pLed->bLedBlinkInProgress = false;
1455 }
1456 pLed->bLedScanBlinkInProgress = true;
1457 pLed->CurrLedState = LED_BLINK_SCAN;
1458 pLed->BlinkTimes = 24;
1459 if (pLed->bLedOn)
1460 pLed->BlinkingLedState = RTW_LED_OFF;
1461 else
1462 pLed->BlinkingLedState = RTW_LED_ON;
1463 _set_timer(&pLed->BlinkTimer, LED_BLINK_SCAN_INTERVAL_ALPHA);
1464 }
1465 break;
1466 case LED_CTL_TX:
1467 case LED_CTL_RX:
1468 if (!pLed->bLedBlinkInProgress) {
1469 if (pLed->CurrLedState == LED_BLINK_SCAN)
1470 return;
1471 pLed->bLedBlinkInProgress = true;
1472 pLed->CurrLedState = LED_BLINK_TXRX;
1473 pLed->BlinkTimes = 2;
1474 if (pLed->bLedOn)
1475 pLed->BlinkingLedState = RTW_LED_OFF;
1476 else
1477 pLed->BlinkingLedState = RTW_LED_ON;
1478 _set_timer(&pLed->BlinkTimer, LED_BLINK_FASTER_INTERVAL_ALPHA);
1479 }
1480 break;
1481 case LED_CTL_POWER_OFF:
1482 pLed->CurrLedState = RTW_LED_OFF;
1483 pLed->BlinkingLedState = RTW_LED_OFF;
1484
1485 if (pLed->bLedBlinkInProgress) {
1486 _cancel_timer_ex(&pLed->BlinkTimer);
1487 pLed->bLedBlinkInProgress = false;
1488 }
1489 SwLedOff(padapter, pLed);
1490 break;
1491 default:
1492 break;
1493 }
1494 }
1495
1496 /* WNC-Corega, added by chiyoko, 20090902 */
1497 static void
SwLedControlMode6(struct adapter * padapter,enum LED_CTL_MODE LedAction)1498 SwLedControlMode6(
1499 struct adapter *padapter,
1500 enum LED_CTL_MODE LedAction
1501 )
1502 {
1503 struct led_priv *ledpriv = &padapter->ledpriv;
1504 struct LED_871x *pLed0 = &ledpriv->SwLed0;
1505
1506 switch (LedAction) {
1507 case LED_CTL_POWER_ON:
1508 case LED_CTL_LINK:
1509 case LED_CTL_NO_LINK:
1510 _cancel_timer_ex(&pLed0->BlinkTimer);
1511 pLed0->CurrLedState = RTW_LED_ON;
1512 pLed0->BlinkingLedState = RTW_LED_ON;
1513 _set_timer(&pLed0->BlinkTimer, 0);
1514 break;
1515 case LED_CTL_POWER_OFF:
1516 SwLedOff(padapter, pLed0);
1517 break;
1518 default:
1519 break;
1520 }
1521 }
1522
1523 /* */
1524 /* Description: */
1525 /* Handler function of LED Blinking. */
1526 /* We dispatch acture LED blink action according to LedStrategy. */
1527 /* */
BlinkHandler(struct LED_871x * pLed)1528 void BlinkHandler(struct LED_871x *pLed)
1529 {
1530 struct adapter *padapter = pLed->padapter;
1531 struct led_priv *ledpriv = &padapter->ledpriv;
1532
1533 if ((padapter->bSurpriseRemoved) || (padapter->bDriverStopped))
1534 return;
1535
1536 switch (ledpriv->LedStrategy) {
1537 case SW_LED_MODE0:
1538 SwLedBlink(pLed);
1539 break;
1540 case SW_LED_MODE1:
1541 SwLedBlink1(pLed);
1542 break;
1543 case SW_LED_MODE2:
1544 SwLedBlink2(pLed);
1545 break;
1546 case SW_LED_MODE3:
1547 SwLedBlink3(pLed);
1548 break;
1549 case SW_LED_MODE4:
1550 SwLedBlink4(pLed);
1551 break;
1552 case SW_LED_MODE5:
1553 SwLedBlink5(pLed);
1554 break;
1555 case SW_LED_MODE6:
1556 SwLedBlink6(pLed);
1557 break;
1558 default:
1559 break;
1560 }
1561 }
1562
LedControl8188eu(struct adapter * padapter,enum LED_CTL_MODE LedAction)1563 void LedControl8188eu(struct adapter *padapter, enum LED_CTL_MODE LedAction)
1564 {
1565 struct led_priv *ledpriv = &padapter->ledpriv;
1566 struct registry_priv *registry_par;
1567
1568 if ((padapter->bSurpriseRemoved) || (padapter->bDriverStopped) ||
1569 (!padapter->hw_init_completed))
1570 return;
1571
1572 if (!ledpriv->bRegUseLed)
1573 return;
1574
1575 registry_par = &padapter->registrypriv;
1576 if (!registry_par->led_enable)
1577 return;
1578
1579 if ((padapter->pwrctrlpriv.rf_pwrstate != rf_on &&
1580 padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) &&
1581 (LedAction == LED_CTL_TX || LedAction == LED_CTL_RX ||
1582 LedAction == LED_CTL_SITE_SURVEY ||
1583 LedAction == LED_CTL_LINK ||
1584 LedAction == LED_CTL_NO_LINK ||
1585 LedAction == LED_CTL_POWER_ON))
1586 return;
1587
1588 switch (ledpriv->LedStrategy) {
1589 case SW_LED_MODE0:
1590 break;
1591 case SW_LED_MODE1:
1592 SwLedControlMode1(padapter, LedAction);
1593 break;
1594 case SW_LED_MODE2:
1595 SwLedControlMode2(padapter, LedAction);
1596 break;
1597 case SW_LED_MODE3:
1598 SwLedControlMode3(padapter, LedAction);
1599 break;
1600 case SW_LED_MODE4:
1601 SwLedControlMode4(padapter, LedAction);
1602 break;
1603 case SW_LED_MODE5:
1604 SwLedControlMode5(padapter, LedAction);
1605 break;
1606 case SW_LED_MODE6:
1607 SwLedControlMode6(padapter, LedAction);
1608 break;
1609 default:
1610 break;
1611 }
1612 }
1613