1 /******************************************************************************
3 * Copyright(c) 2007 - 2012 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 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
19 ******************************************************************************/
21 #include <drv_types.h>
26 * Turn on LED according to LedPin specified.
36 switch (pLed->LedPin) {
41 /* rtw_write8(Adapter, LED0Cfg, 0x2); */
45 /* rtw_write8(Adapter, LED1Cfg, 0x2); */
57 * Implement LED blinking behavior for SW_LED_MODE0.
58 * It toggle off LED and schedule corresponding timer if necessary.
65 PADAPTER Adapter = pLed->padapter;
66 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
67 BOOLEAN bStopBlinking = _FALSE;
69 /* Change LED according to BlinkingLedState specified. */
70 if (pLed->BlinkingLedState == RTW_LED_ON) {
71 SwLedOn(Adapter, pLed);
72 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
74 SwLedOff(Adapter, pLed);
75 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
78 /* Determine if we shall change LED state again. */
80 switch (pLed->CurrLedState) {
81 case LED_BLINK_NORMAL:
83 case LED_BLINK_RUNTOP:
84 if (pLed->BlinkTimes == 0)
85 bStopBlinking = _TRUE;
89 if (((check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED)) ||
90 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))) && /* Linked. */
91 (!check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) && /* Not in scan stage. */
92 (pLed->BlinkTimes % 2 == 0)) /* Even */
93 bStopBlinking = _TRUE;
96 case LED_BLINK_NO_LINK:
97 case LED_BLINK_StartToBlink:
98 if (check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE))
99 bStopBlinking = _TRUE;
100 else if ((check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) &&
101 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)))
102 bStopBlinking = _TRUE;
103 else if (pLed->BlinkTimes == 0)
104 bStopBlinking = _TRUE;
107 case LED_BLINK_CAMEO:
108 if (check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE))
109 bStopBlinking = _TRUE;
110 else if (check_fwstate(pmlmepriv, _FW_LINKED) &&
111 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)))
112 bStopBlinking = _TRUE;
116 bStopBlinking = _TRUE;
121 if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on)
122 SwLedOff(Adapter, pLed);
123 else if (pLed->CurrLedState == LED_BLINK_TXRX)
124 SwLedOff(Adapter, pLed);
125 else if (pLed->CurrLedState == LED_BLINK_RUNTOP)
126 SwLedOff(Adapter, pLed);
127 else if ((check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) && pLed->bLedOn == _FALSE)
128 SwLedOn(Adapter, pLed);
129 else if ((check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) && pLed->bLedOn == _TRUE)
130 SwLedOff(Adapter, pLed);
132 pLed->BlinkTimes = 0;
133 pLed->bLedBlinkInProgress = _FALSE;
135 /* Assign LED state to toggle. */
136 if (pLed->BlinkingLedState == RTW_LED_ON)
137 pLed->BlinkingLedState = RTW_LED_OFF;
139 pLed->BlinkingLedState = RTW_LED_ON;
141 /* Schedule a timer to toggle LED state. */
142 switch (pLed->CurrLedState) {
143 case LED_BLINK_NORMAL:
145 case LED_BLINK_StartToBlink:
146 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
149 case LED_BLINK_SLOWLY:
150 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
154 case LED_BLINK_NO_LINK:
156 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
158 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_OFF_INTERVAL);
161 case LED_BLINK_RUNTOP:
162 _set_timer(&(pLed->BlinkTimer), LED_RunTop_BLINK_INTERVAL);
165 case LED_BLINK_CAMEO:
166 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL_PORNET);
170 /* RTW_INFO("SwLedCm2Blink(): unexpected state!\n"); */
171 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
182 PADAPTER Adapter = pLed->padapter;
183 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
184 BOOLEAN bStopBlinking = _FALSE;
186 /* Change LED according to BlinkingLedState specified. */
187 if (pLed->BlinkingLedState == RTW_LED_ON) {
188 SwLedOn(Adapter, pLed);
189 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
191 SwLedOff(Adapter, pLed);
192 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
195 switch (pLed->CurrLedState) {
197 SwLedOff(Adapter, pLed);
200 case LED_BLINK_SLOWLY:
202 pLed->BlinkingLedState = RTW_LED_OFF;
204 pLed->BlinkingLedState = RTW_LED_ON;
205 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL_NETTRONIX);
208 case LED_BLINK_NORMAL:
210 if (pLed->BlinkTimes == 0)
211 bStopBlinking = _TRUE;
213 if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on)
214 SwLedOff(Adapter, pLed);
216 pLed->bLedSlowBlinkInProgress = _TRUE;
217 pLed->CurrLedState = LED_BLINK_SLOWLY;
219 pLed->BlinkingLedState = RTW_LED_OFF;
221 pLed->BlinkingLedState = RTW_LED_ON;
222 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL_NETTRONIX);
224 pLed->BlinkTimes = 0;
225 pLed->bLedBlinkInProgress = _FALSE;
227 if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on)
228 SwLedOff(Adapter, pLed);
231 pLed->BlinkingLedState = RTW_LED_OFF;
233 pLed->BlinkingLedState = RTW_LED_ON;
235 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL_NETTRONIX);
252 PADAPTER Adapter = pLed->padapter;
253 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
254 BOOLEAN bStopBlinking = _FALSE;
256 /* Change LED according to BlinkingLedState specified. */
257 if (pLed->BlinkingLedState == RTW_LED_ON) {
258 SwLedOn(Adapter, pLed);
259 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
261 SwLedOff(Adapter, pLed);
262 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
265 switch (pLed->CurrLedState) {
267 SwLedOff(Adapter, pLed);
270 case LED_BLINK_SLOWLY:
272 pLed->BlinkingLedState = RTW_LED_OFF;
274 pLed->BlinkingLedState = RTW_LED_ON;
275 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL_PORNET);
278 case LED_BLINK_NORMAL:
280 if (pLed->BlinkTimes == 0)
281 bStopBlinking = _TRUE;
283 if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on)
284 SwLedOff(Adapter, pLed);
286 pLed->bLedSlowBlinkInProgress = _TRUE;
287 pLed->CurrLedState = LED_BLINK_SLOWLY;
289 pLed->BlinkingLedState = RTW_LED_OFF;
291 pLed->BlinkingLedState = RTW_LED_ON;
292 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL_PORNET);
294 pLed->BlinkTimes = 0;
295 pLed->bLedBlinkInProgress = _FALSE;
297 if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on)
298 SwLedOff(Adapter, pLed);
301 pLed->BlinkingLedState = RTW_LED_OFF;
303 pLed->BlinkingLedState = RTW_LED_ON;
305 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL_PORNET);
321 PADAPTER Adapter = pLed->padapter;
323 SwLedOn(Adapter, pLed);
324 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
331 * Implement LED blinking behavior for SW_LED_MODE8.
332 * It toggle off LED and schedule corresponding timer if necessary.
339 PADAPTER Adapter = pLed->padapter;
340 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
341 BOOLEAN bStopBlinking = _FALSE;
343 /* Change LED according to BlinkingLedState specified. */
344 if (pLed->BlinkingLedState == RTW_LED_ON) {
345 SwLedOn(Adapter, pLed);
346 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
348 SwLedOff(Adapter, pLed);
349 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
352 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("SwLedBlink8 CurrLedAction %d,\n", pLed->CurrLedState));
354 /* Determine if we shall change LED state again. */
355 if (pLed->CurrLedState != LED_BLINK_NO_LINK)
358 switch (pLed->CurrLedState) {
359 case LED_BLINK_NORMAL:
361 if (pLed->BlinkTimes == 0)
362 bStopBlinking = _TRUE;
370 if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS) {
371 pLed->CurrLedState = RTW_LED_OFF;
372 SwLedOff(Adapter, pLed);
374 pLed->CurrLedState = RTW_LED_ON;
375 SwLedOn(Adapter, pLed);
378 pLed->BlinkTimes = 0;
379 pLed->bLedBlinkInProgress = _FALSE;
381 /* Assign LED state to toggle. */
382 if (pLed->BlinkingLedState == RTW_LED_ON)
383 pLed->BlinkingLedState = RTW_LED_OFF;
385 pLed->BlinkingLedState = RTW_LED_ON;
387 /* Schedule a timer to toggle LED state. */
388 switch (pLed->CurrLedState) {
389 case LED_BLINK_NORMAL:
390 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
394 /* RTW_INFO("SwLedCm8Blink(): unexpected state!\n"); */
405 PADAPTER Adapter = pLed->padapter;
406 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
407 BOOLEAN bStopBlinking = _FALSE;
409 /* Change LED according to BlinkingLedState specified. */
410 if (pLed->BlinkingLedState == RTW_LED_ON) {
411 SwLedOn(Adapter, pLed);
412 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
414 SwLedOff(Adapter, pLed);
415 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
418 /* Determine if we shall change LED state again. */
419 if (pLed->CurrLedState != LED_BLINK_NO_LINK)
422 switch (pLed->CurrLedState) {
423 case LED_BLINK_NORMAL:
425 if (pLed->BlinkTimes == 0)
426 bStopBlinking = _TRUE;
429 case LED_BLINK_NO_LINK:
430 if (check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE))
431 bStopBlinking = _TRUE;
432 else if (check_fwstate(pmlmepriv, _FW_LINKED) &&
433 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)))
434 bStopBlinking = _TRUE;
442 if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS) {
443 pLed->CurrLedState = RTW_LED_OFF;
444 SwLedOff(Adapter, pLed);
445 } else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
446 pLed->CurrLedState = RTW_LED_ON;
447 SwLedOn(Adapter, pLed);
448 } else if (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) {
449 pLed->CurrLedState = LED_BLINK_NO_LINK;
451 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
453 _set_timer(&(pLed->BlinkTimer), LED_CM8_BLINK_OFF_INTERVAL);
456 pLed->BlinkTimes = 0;
457 if (pLed->CurrLedState != LED_BLINK_NO_LINK)
458 pLed->bLedBlinkInProgress = _FALSE;
460 /* Assign LED state to toggle. */
461 if (pLed->BlinkingLedState == RTW_LED_ON)
462 pLed->BlinkingLedState = RTW_LED_OFF;
464 pLed->BlinkingLedState = RTW_LED_ON;
466 /* Schedule a timer to toggle LED state. */
467 switch (pLed->CurrLedState) {
468 case LED_BLINK_NORMAL:
469 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FAST_INTERVAL_BITLAND);
473 case LED_BLINK_NO_LINK:
475 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
477 _set_timer(&(pLed->BlinkTimer), LED_CM8_BLINK_OFF_INTERVAL);
481 /* RTW_INFO("SwLedCm2Blink(): unexpected state!\n"); */
486 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("SwLedBlink9 CurrLedAction %d,\n", pLed->CurrLedState));
496 PADAPTER Adapter = pLed->padapter;
497 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
498 BOOLEAN bStopBlinking = _FALSE;
500 /* Change LED according to BlinkingLedState specified. */
501 if (pLed->BlinkingLedState == RTW_LED_ON) {
502 SwLedOn(Adapter, pLed);
503 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
505 SwLedOff(Adapter, pLed);
506 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
509 /* Determine if we shall change LED state again. */
510 if (pLed->CurrLedState != LED_BLINK_NO_LINK)
513 switch (pLed->CurrLedState) {
514 case LED_BLINK_NORMAL:
516 if (pLed->BlinkTimes == 0)
517 bStopBlinking = _TRUE;
524 pLed->CurrLedState = RTW_LED_OFF;
525 SwLedOff(Adapter, pLed);
527 pLed->BlinkTimes = 0;
528 pLed->bLedBlinkInProgress = _FALSE;
530 /* Assign LED state to toggle. */
531 if (pLed->BlinkingLedState == RTW_LED_ON)
532 pLed->BlinkingLedState = RTW_LED_OFF;
534 pLed->BlinkingLedState = RTW_LED_ON;
536 /* Schedule a timer to toggle LED state. */
537 switch (pLed->CurrLedState) {
538 case LED_BLINK_NORMAL:
540 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FAST_INTERVAL_BITLAND);
544 /* RT_ASSERT(_FALSE, ("SwLedCm2Blink(): unexpected state!\n")); */
549 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("SwLedBlink10 CurrLedAction %d,\n", pLed->CurrLedState));
559 PADAPTER Adapter = pLed->padapter;
560 BOOLEAN bStopBlinking = _FALSE;
562 /* Change LED according to BlinkingLedState specified. */
563 if (pLed->bLedBlinkInProgress == _TRUE) {
564 if (pLed->BlinkingLedState == RTW_LED_ON) {
565 SwLedOn(Adapter, pLed);
566 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%ld): turn on\n", pLed->BlinkTimes));
568 SwLedOff(Adapter, pLed);
569 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Blinktimes (%ld): turn off\n", pLed->BlinkTimes));
573 /* Determine if we shall change LED state again. */
574 if (pLed->CurrLedState != LED_BLINK_NO_LINK)
577 switch (pLed->CurrLedState) {
579 bStopBlinking = _TRUE; /* LED on for 3 seconds */
585 pLed->CurrLedState = RTW_LED_OFF;
586 SwLedOff(Adapter, pLed);
588 pLed->BlinkTimes = 0;
589 pLed->bLedBlinkInProgress = _FALSE;
591 /* Assign LED state to toggle. */
592 if (pLed->BlinkingLedState == RTW_LED_ON)
593 pLed->BlinkingLedState = RTW_LED_OFF;
595 pLed->BlinkingLedState = RTW_LED_ON;
597 /* Schedule a timer to toggle LED state. */
598 switch (pLed->CurrLedState) {
600 _set_timer(&(pLed->BlinkTimer), LED_CM11_BLINK_INTERVAL);
604 /* RT_ASSERT(_FALSE, ("SwLedCm11Blink(): unexpected state!\n")); */
609 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("SwLedBlink11 CurrLedAction %d,\n", pLed->CurrLedState));
619 PADAPTER Adapter = pLed->padapter;
620 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
621 BOOLEAN bStopBlinking = _FALSE;
623 /* Change LED according to BlinkingLedState specified. */
624 if (pLed->BlinkingLedState == RTW_LED_ON) {
625 SwLedOn(Adapter, pLed);
626 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("SwLedBlink12 Blinktimes (%d): turn on\n", pLed->BlinkTimes));
628 SwLedOff(Adapter, pLed);
629 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("SwLedBlink12 Blinktimes (%d): turn off\n", pLed->BlinkTimes));
632 /* Determine if we shall change LED state again. */
633 if (pLed->CurrLedState != LED_BLINK_NO_LINK && pLed->CurrLedState != LED_BLINK_Azurewave_5Mbps
634 && pLed->CurrLedState != LED_BLINK_Azurewave_10Mbps && pLed->CurrLedState != LED_BLINK_Azurewave_20Mbps
635 && pLed->CurrLedState != LED_BLINK_Azurewave_40Mbps && pLed->CurrLedState != LED_BLINK_Azurewave_80Mbps
636 && pLed->CurrLedState != LED_BLINK_Azurewave_MAXMbps)
639 switch (pLed->CurrLedState) {
640 case LED_BLINK_NORMAL:
642 if (pLed->BlinkTimes == 0)
643 bStopBlinking = _TRUE;
646 case LED_BLINK_NO_LINK:
647 if (check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE))
648 bStopBlinking = _TRUE;
649 else if (check_fwstate(pmlmepriv, _FW_LINKED) &&
650 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)))
651 bStopBlinking = _TRUE;
654 case LED_BLINK_Azurewave_5Mbps:
655 case LED_BLINK_Azurewave_10Mbps:
656 case LED_BLINK_Azurewave_20Mbps:
657 case LED_BLINK_Azurewave_40Mbps:
658 case LED_BLINK_Azurewave_80Mbps:
659 case LED_BLINK_Azurewave_MAXMbps:
660 /* RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink12 pTurboCa->TxThroughput (%d) pTurboCa->RxThroughput (%d)\n", pTurboCa->TxThroughput, pTurboCa->RxThroughput)); */
661 /* if(pTurboCa->TxThroughput + pTurboCa->RxThroughput == 0) */
662 /* bStopBlinking = _TRUE; */
669 if (adapter_to_pwrctl(Adapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(Adapter)->rfoff_reason > RF_CHANGE_BY_PS) {
670 pLed->CurrLedState = RTW_LED_OFF;
671 pLed->BlinkingLedState = RTW_LED_OFF;
672 SwLedOff(Adapter, pLed);
673 } else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
674 pLed->CurrLedState = RTW_LED_ON;
675 pLed->BlinkingLedState = RTW_LED_ON;
676 SwLedOn(Adapter, pLed);
677 } else if (check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) {
678 pLed->CurrLedState = LED_BLINK_NO_LINK;
680 pLed->BlinkingLedState = RTW_LED_OFF;
681 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
683 pLed->BlinkingLedState = RTW_LED_ON;
684 _set_timer(&(pLed->BlinkTimer), LED_CM8_BLINK_OFF_INTERVAL);
688 pLed->BlinkTimes = 0;
689 if (pLed->CurrLedState != LED_BLINK_NO_LINK)
690 pLed->bLedBlinkInProgress = _FALSE;
692 /* Assign LED state to toggle. */
693 if (pLed->BlinkingLedState == RTW_LED_ON)
694 pLed->BlinkingLedState = RTW_LED_OFF;
696 pLed->BlinkingLedState = RTW_LED_ON;
698 /* Schedule a timer to toggle LED state. */
699 switch (pLed->CurrLedState) {
700 case LED_BLINK_Azurewave_5Mbps:
701 _set_timer(&(pLed->BlinkTimer), LED_CM12_BLINK_INTERVAL_5Mbps);
704 case LED_BLINK_Azurewave_10Mbps:
705 _set_timer(&(pLed->BlinkTimer), LED_CM12_BLINK_INTERVAL_10Mbps);
708 case LED_BLINK_Azurewave_20Mbps:
709 _set_timer(&(pLed->BlinkTimer), LED_CM12_BLINK_INTERVAL_20Mbps);
712 case LED_BLINK_Azurewave_40Mbps:
713 _set_timer(&(pLed->BlinkTimer), LED_CM12_BLINK_INTERVAL_40Mbps);
716 case LED_BLINK_Azurewave_80Mbps:
717 _set_timer(&(pLed->BlinkTimer), LED_CM12_BLINK_INTERVAL_80Mbps);
720 case LED_BLINK_Azurewave_MAXMbps:
721 _set_timer(&(pLed->BlinkTimer), LED_CM12_BLINK_INTERVAL_MAXMbps);
725 case LED_BLINK_NO_LINK:
727 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
729 _set_timer(&(pLed->BlinkTimer), LED_CM8_BLINK_OFF_INTERVAL);
733 /* RT_ASSERT(_FALSE, ("SwLedCm12Blink(): unexpected state!\n")); */
738 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("SwLedBlink12 stopblink %d CurrLedAction %d BlinkingLedState %d,\n", bStopBlinking, pLed->CurrLedState, pLed->BlinkingLedState));
744 * Handler function of LED Blinking.
745 * We dispatch acture LED blink action according to LedStrategy.
747 void BlinkHandler(PLED_PCIE pLed)
749 _adapter *padapter = pLed->padapter;
750 struct led_priv *ledpriv = &(padapter->ledpriv);
752 if (RTW_CANNOT_RUN(padapter))
755 if (IS_HARDWARE_TYPE_8188E(padapter) ||
756 IS_HARDWARE_TYPE_JAGUAR(padapter) ||
757 IS_HARDWARE_TYPE_8723B(padapter) ||
758 IS_HARDWARE_TYPE_8192E(padapter))
761 switch (ledpriv->LedStrategy) {
763 /* SwLedBlink(pLed); */
766 /* SwLedBlink(pLed); */
769 /* SwLedBlink(pLed); */
772 /* SwLedBlink5(pLed); */
775 /* SwLedBlink6(pLed); */
801 /* SwLedBlink(pLed); */
808 * Callback function of LED BlinkTimer,
809 * it just schedules to corresponding BlinkWorkItem/led_blink_hdl
811 void BlinkTimerCallback(void *data)
813 PLED_PCIE pLed = (PLED_PCIE)data;
814 _adapter *padapter = pLed->padapter;
816 /* RTW_INFO("%s\n", __FUNCTION__); */
818 if (RTW_CANNOT_RUN(padapter) || (!rtw_is_hw_init_completed(padapter))) {
819 /*RTW_INFO("%s bDriverStopped:%s, bSurpriseRemoved:%s\n"
821 , rtw_is_drv_stopped(padapter)?"True":"False"
822 , rtw_is_surprise_removed(padapter)?"True":"False" );
827 #ifdef CONFIG_LED_HANDLED_BY_CMD_THREAD
828 rtw_led_blink_cmd(padapter, pLed);
836 * Implement each led action for SW_LED_MODE0. */
840 IN LED_CTL_MODE LedAction
843 struct led_priv *ledpriv = &(Adapter->ledpriv);
844 PLED_PCIE pLed0 = &(ledpriv->SwLed0);
845 PLED_PCIE pLed1 = &(ledpriv->SwLed1);
853 pLed0->CurrLedState = RTW_LED_ON;
854 SwLedOn(Adapter, pLed0);
856 pLed1->CurrLedState = LED_BLINK_NORMAL;
857 HwLedBlink(Adapter, pLed1);
860 case LED_CTL_POWER_ON:
861 pLed0->CurrLedState = RTW_LED_OFF;
862 SwLedOff(Adapter, pLed0);
864 pLed1->CurrLedState = LED_BLINK_NORMAL;
865 HwLedBlink(Adapter, pLed1);
869 case LED_CTL_POWER_OFF:
870 pLed0->CurrLedState = RTW_LED_OFF;
871 SwLedOff(Adapter, pLed0);
873 pLed1->CurrLedState = RTW_LED_OFF;
874 SwLedOff(Adapter, pLed1);
877 case LED_CTL_SITE_SURVEY:
880 case LED_CTL_NO_LINK:
881 pLed0->CurrLedState = RTW_LED_OFF;
882 SwLedOff(Adapter, pLed0);
884 pLed1->CurrLedState = LED_BLINK_NORMAL;
885 HwLedBlink(Adapter, pLed1);
892 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Led0 %d Led1 %d\n", pLed0->CurrLedState, pLed1->CurrLedState));
899 IN LED_CTL_MODE LedAction
902 struct led_priv *ledpriv = &(Adapter->ledpriv);
903 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
904 PLED_PCIE pLed = &(ledpriv->SwLed1);
906 /* Decide led state */
910 if (pLed->bLedBlinkInProgress == _FALSE) {
911 pLed->bLedBlinkInProgress = _TRUE;
913 pLed->CurrLedState = LED_BLINK_NORMAL;
914 pLed->BlinkTimes = 2;
917 pLed->BlinkingLedState = RTW_LED_OFF;
919 pLed->BlinkingLedState = RTW_LED_ON;
920 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
924 case LED_CTL_SITE_SURVEY:
925 if (pLed->bLedBlinkInProgress == _FALSE) {
926 pLed->bLedBlinkInProgress = _TRUE;
928 if ((check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE)) ||
929 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))) {
930 pLed->CurrLedState = LED_BLINK_SCAN;
931 pLed->BlinkTimes = 4;
933 pLed->CurrLedState = LED_BLINK_NO_LINK;
934 pLed->BlinkTimes = 24;
938 pLed->BlinkingLedState = RTW_LED_OFF;
939 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
941 pLed->BlinkingLedState = RTW_LED_ON;
942 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_OFF_INTERVAL);
945 if (pLed->CurrLedState != LED_BLINK_NO_LINK) {
946 if ((check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE)) ||
947 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)))
948 pLed->CurrLedState = LED_BLINK_SCAN;
950 pLed->CurrLedState = LED_BLINK_NO_LINK;
955 case LED_CTL_NO_LINK:
956 if (pLed->bLedBlinkInProgress == _FALSE) {
957 pLed->bLedBlinkInProgress = _TRUE;
959 pLed->CurrLedState = LED_BLINK_NO_LINK;
960 pLed->BlinkTimes = 24;
963 pLed->BlinkingLedState = RTW_LED_OFF;
964 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
966 pLed->BlinkingLedState = RTW_LED_ON;
967 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_OFF_INTERVAL);
970 pLed->CurrLedState = LED_BLINK_NO_LINK;
974 pLed->CurrLedState = RTW_LED_ON;
975 if (pLed->bLedBlinkInProgress == _FALSE)
976 SwLedOn(Adapter, pLed);
979 case LED_CTL_POWER_OFF:
980 pLed->CurrLedState = RTW_LED_OFF;
981 if (pLed->bLedBlinkInProgress) {
982 _cancel_timer_ex(&(pLed->BlinkTimer));
983 pLed->bLedBlinkInProgress = _FALSE;
985 SwLedOff(Adapter, pLed);
992 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Led %d\n", pLed->CurrLedState));
998 IN LED_CTL_MODE LedAction
1001 struct led_priv *ledpriv = &(Adapter->ledpriv);
1002 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
1003 PLED_PCIE pLed0 = &(ledpriv->SwLed0);
1004 PLED_PCIE pLed1 = &(ledpriv->SwLed1);
1006 /* Decide led state */
1007 switch (LedAction) {
1008 case LED_CTL_POWER_ON:
1009 pLed0->CurrLedState = RTW_LED_OFF;
1010 SwLedOff(Adapter, pLed0);
1012 pLed1->CurrLedState = LED_BLINK_CAMEO;
1013 if (pLed1->bLedBlinkInProgress == _FALSE) {
1014 pLed1->bLedBlinkInProgress = _TRUE;
1016 pLed1->BlinkTimes = 6;
1019 pLed1->BlinkingLedState = RTW_LED_OFF;
1021 pLed1->BlinkingLedState = RTW_LED_ON;
1022 _set_timer(&(pLed1->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL_PORNET);
1028 if (pLed0->bLedBlinkInProgress == _FALSE) {
1029 pLed0->bLedBlinkInProgress = _TRUE;
1031 pLed0->CurrLedState = LED_BLINK_TXRX;
1032 pLed0->BlinkTimes = 2;
1035 pLed0->BlinkingLedState = RTW_LED_OFF;
1037 pLed0->BlinkingLedState = RTW_LED_ON;
1039 _set_timer(&(pLed0->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
1043 case LED_CTL_NO_LINK:
1044 pLed1->CurrLedState = LED_BLINK_CAMEO;
1045 if (pLed1->bLedBlinkInProgress == _FALSE) {
1046 pLed1->bLedBlinkInProgress = _TRUE;
1048 pLed1->BlinkTimes = 6;
1051 pLed1->BlinkingLedState = RTW_LED_OFF;
1053 pLed1->BlinkingLedState = RTW_LED_ON;
1054 _set_timer(&(pLed1->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL_PORNET);
1059 pLed1->CurrLedState = RTW_LED_ON;
1060 if (pLed1->bLedBlinkInProgress == _FALSE)
1061 SwLedOn(Adapter, pLed1);
1064 case LED_CTL_POWER_OFF:
1065 pLed0->CurrLedState = RTW_LED_OFF;
1066 pLed1->CurrLedState = RTW_LED_OFF;
1067 if (pLed0->bLedBlinkInProgress) {
1068 _cancel_timer_ex(&(pLed0->BlinkTimer));
1069 pLed0->bLedBlinkInProgress = _FALSE;
1071 if (pLed1->bLedBlinkInProgress) {
1072 _cancel_timer_ex(&(pLed1->BlinkTimer));
1073 pLed1->bLedBlinkInProgress = _FALSE;
1075 SwLedOff(Adapter, pLed0);
1076 SwLedOff(Adapter, pLed1);
1083 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Led0 %d, Led1 %d\n", pLed0->CurrLedState, pLed1->CurrLedState));
1090 IN PADAPTER Adapter,
1091 IN LED_CTL_MODE LedAction
1094 struct led_priv *ledpriv = &(Adapter->ledpriv);
1095 PLED_PCIE pLed0 = &(ledpriv->SwLed0);
1096 PLED_PCIE pLed1 = &(ledpriv->SwLed1);
1098 /* Decide led state */
1099 switch (LedAction) {
1100 case LED_CTL_POWER_ON:
1101 pLed0->CurrLedState = RTW_LED_ON;
1102 SwLedOn(Adapter, pLed0);
1103 pLed1->CurrLedState = RTW_LED_OFF;
1104 SwLedOff(Adapter, pLed1);
1109 if (pLed1->bLedBlinkInProgress == _FALSE) {
1110 pLed1->bLedBlinkInProgress = _TRUE;
1112 pLed1->CurrLedState = LED_BLINK_RUNTOP;
1113 pLed1->BlinkTimes = 2;
1116 pLed1->BlinkingLedState = RTW_LED_OFF;
1118 pLed1->BlinkingLedState = RTW_LED_ON;
1120 _set_timer(&(pLed1->BlinkTimer), LED_RunTop_BLINK_INTERVAL);
1124 case LED_CTL_POWER_OFF:
1125 pLed0->CurrLedState = RTW_LED_OFF;
1126 pLed1->CurrLedState = RTW_LED_OFF;
1127 if (pLed0->bLedBlinkInProgress) {
1128 _cancel_timer_ex(&(pLed0->BlinkTimer));
1129 pLed0->bLedBlinkInProgress = _FALSE;
1131 if (pLed1->bLedBlinkInProgress) {
1132 _cancel_timer_ex(&(pLed1->BlinkTimer));
1133 pLed1->bLedBlinkInProgress = _FALSE;
1135 SwLedOff(Adapter, pLed0);
1136 SwLedOff(Adapter, pLed1);
1143 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Led0 %d, Led1 %d\n", pLed0->CurrLedState, pLed1->CurrLedState));
1149 IN PADAPTER Adapter,
1150 IN LED_CTL_MODE LedAction
1153 struct led_priv *ledpriv = &(Adapter->ledpriv);
1154 PLED_PCIE pLed0 = &(ledpriv->SwLed0);
1155 PLED_PCIE pLed1 = &(ledpriv->SwLed1);
1157 /* Decide led state */
1158 switch (LedAction) {
1159 case LED_CTL_POWER_ON:
1160 pLed1->CurrLedState = RTW_LED_ON;
1161 SwLedOn(Adapter, pLed1);
1162 pLed0->CurrLedState = RTW_LED_OFF;
1163 SwLedOff(Adapter, pLed0);
1168 if (pLed0->bLedBlinkInProgress == _FALSE) {
1169 pLed0->bLedBlinkInProgress = _TRUE;
1171 pLed0->CurrLedState = LED_BLINK_RUNTOP;
1172 pLed0->BlinkTimes = 2;
1175 pLed0->BlinkingLedState = RTW_LED_OFF;
1177 pLed0->BlinkingLedState = RTW_LED_ON;
1179 _set_timer(&(pLed0->BlinkTimer), LED_RunTop_BLINK_INTERVAL);
1183 case LED_CTL_POWER_OFF:
1184 pLed0->CurrLedState = RTW_LED_OFF;
1185 pLed1->CurrLedState = RTW_LED_OFF;
1186 if (pLed0->bLedBlinkInProgress) {
1187 _cancel_timer_ex(&(pLed0->BlinkTimer));
1188 pLed0->bLedBlinkInProgress = _FALSE;
1190 if (pLed1->bLedBlinkInProgress) {
1191 _cancel_timer_ex(&(pLed1->BlinkTimer));
1192 pLed1->bLedBlinkInProgress = _FALSE;
1194 SwLedOff(Adapter, pLed0);
1195 SwLedOff(Adapter, pLed1);
1202 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Led0 %d, Led1 %d\n", pLed0->CurrLedState, pLed1->CurrLedState));
1205 /* added by vivi, for led new mode */
1208 IN PADAPTER Adapter,
1209 IN LED_CTL_MODE LedAction
1212 struct led_priv *ledpriv = &(Adapter->ledpriv);
1213 PLED_PCIE pLed0 = &(ledpriv->SwLed0);
1214 PLED_PCIE pLed1 = &(ledpriv->SwLed1);
1215 /* Decide led state */
1216 switch (LedAction) {
1217 case LED_CTL_POWER_ON:
1218 case LED_CTL_START_TO_LINK:
1219 case LED_CTL_NO_LINK:
1220 pLed1->CurrLedState = RTW_LED_OFF;
1221 SwLedOff(Adapter, pLed1);
1224 if (pLed0->bLedSlowBlinkInProgress == _FALSE) {
1225 pLed0->bLedSlowBlinkInProgress = _TRUE;
1226 pLed0->CurrLedState = LED_BLINK_SLOWLY;
1228 pLed0->BlinkingLedState = RTW_LED_OFF;
1230 pLed0->BlinkingLedState = RTW_LED_ON;
1231 _set_timer(&(pLed0->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL_NETTRONIX);
1238 pLed1->CurrLedState = RTW_LED_ON;
1239 SwLedOn(Adapter, pLed1);
1241 if (pLed0->bLedBlinkInProgress == _FALSE) {
1242 _cancel_timer_ex(&(pLed0->BlinkTimer));
1243 pLed0->bLedSlowBlinkInProgress = _FALSE;
1244 pLed0->bLedBlinkInProgress = _TRUE;
1245 pLed0->CurrLedState = LED_BLINK_NORMAL;
1246 pLed0->BlinkTimes = 2;
1249 pLed0->BlinkingLedState = RTW_LED_OFF;
1251 pLed0->BlinkingLedState = RTW_LED_ON;
1252 _set_timer(&(pLed0->BlinkTimer), LED_BLINK_NORMAL_INTERVAL_NETTRONIX);
1257 pLed1->CurrLedState = RTW_LED_ON;
1258 SwLedOn(Adapter, pLed1);
1260 if (pLed0->bLedSlowBlinkInProgress == _FALSE) {
1261 pLed0->bLedSlowBlinkInProgress = _TRUE;
1262 pLed0->CurrLedState = LED_BLINK_SLOWLY;
1264 pLed0->BlinkingLedState = RTW_LED_OFF;
1266 pLed0->BlinkingLedState = RTW_LED_ON;
1267 _set_timer(&(pLed0->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL_NETTRONIX);
1272 case LED_CTL_POWER_OFF:
1273 pLed0->CurrLedState = RTW_LED_OFF;
1274 pLed1->CurrLedState = RTW_LED_OFF;
1275 if (pLed0->bLedSlowBlinkInProgress == _TRUE) {
1276 _cancel_timer_ex(&(pLed0->BlinkTimer));
1277 pLed0->bLedSlowBlinkInProgress = _FALSE;
1279 if (pLed0->bLedBlinkInProgress == _TRUE) {
1280 _cancel_timer_ex(&(pLed0->BlinkTimer));
1281 pLed0->bLedBlinkInProgress = _FALSE;
1283 SwLedOff(Adapter, pLed0);
1284 SwLedOff(Adapter, pLed1);
1294 /* added by vivi, for led new mode */
1297 IN PADAPTER Adapter,
1298 IN LED_CTL_MODE LedAction
1301 struct led_priv *ledpriv = &(Adapter->ledpriv);
1302 PLED_PCIE pLed0 = &(ledpriv->SwLed0);
1303 PLED_PCIE pLed1 = &(ledpriv->SwLed1);
1306 switch (LedAction) {
1307 case LED_CTL_POWER_ON:
1308 case LED_CTL_START_TO_LINK:
1309 case LED_CTL_NO_LINK:
1311 case LED_CTL_SITE_SURVEY:
1312 pLed1->CurrLedState = RTW_LED_OFF;
1313 SwLedOff(Adapter, pLed1);
1315 if (pLed0->bLedSlowBlinkInProgress == _FALSE) {
1316 pLed0->bLedSlowBlinkInProgress = _TRUE;
1317 pLed0->CurrLedState = LED_BLINK_SLOWLY;
1319 pLed0->BlinkingLedState = RTW_LED_OFF;
1321 pLed0->BlinkingLedState = RTW_LED_ON;
1322 _set_timer(&(pLed0->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL_PORNET);
1328 pLed1->CurrLedState = RTW_LED_OFF;
1329 SwLedOff(Adapter, pLed1);
1330 if (pLed0->bLedBlinkInProgress == _FALSE) {
1331 _cancel_timer_ex(&(pLed0->BlinkTimer));
1332 pLed0->bLedSlowBlinkInProgress = _FALSE;
1333 pLed0->bLedBlinkInProgress = _TRUE;
1334 pLed0->CurrLedState = LED_BLINK_NORMAL;
1335 pLed0->BlinkTimes = 2;
1337 pLed0->BlinkingLedState = RTW_LED_OFF;
1339 pLed0->BlinkingLedState = RTW_LED_ON;
1340 _set_timer(&(pLed0->BlinkTimer), LED_BLINK_NORMAL_INTERVAL_PORNET);
1344 case LED_CTL_POWER_OFF:
1345 pLed1->CurrLedState = RTW_LED_OFF;
1346 SwLedOff(Adapter, pLed1);
1348 pLed0->CurrLedState = RTW_LED_OFF;
1349 if (pLed0->bLedSlowBlinkInProgress == _TRUE) {
1350 _cancel_timer_ex(&(pLed0->BlinkTimer));
1351 pLed0->bLedSlowBlinkInProgress = _FALSE;
1353 if (pLed0->bLedBlinkInProgress == _TRUE) {
1354 _cancel_timer_ex(&(pLed0->BlinkTimer));
1355 pLed0->bLedBlinkInProgress = _FALSE;
1357 SwLedOff(Adapter, pLed0);
1367 /* added by chiyokolin, for Lenovo */
1370 IN PADAPTER Adapter,
1371 IN LED_CTL_MODE LedAction
1374 struct led_priv *ledpriv = &(Adapter->ledpriv);
1375 PLED_PCIE pLed0 = &(ledpriv->SwLed0);
1377 switch (LedAction) {
1378 case LED_CTL_POWER_ON:
1380 case LED_CTL_NO_LINK:
1381 SwLedOn(Adapter, pLed0);
1384 case LED_CTL_POWER_OFF:
1385 SwLedOff(Adapter, pLed0);
1393 /* added by chiyokolin, for QMI */
1396 IN PADAPTER Adapter,
1397 IN LED_CTL_MODE LedAction
1400 struct led_priv *ledpriv = &(Adapter->ledpriv);
1401 PLED_PCIE pLed = &(ledpriv->SwLed0);
1402 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
1404 /* Decide led state */
1405 switch (LedAction) {
1408 if (pLed->bLedBlinkInProgress == _FALSE && (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)) {
1409 pLed->bLedBlinkInProgress = _TRUE;
1411 pLed->CurrLedState = LED_BLINK_NORMAL;
1412 pLed->BlinkTimes = 2;
1415 pLed->BlinkingLedState = RTW_LED_OFF;
1417 pLed->BlinkingLedState = RTW_LED_ON;
1418 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
1422 case LED_CTL_SITE_SURVEY:
1423 case LED_CTL_POWER_ON:
1424 case LED_CTL_NO_LINK:
1426 pLed->CurrLedState = RTW_LED_ON;
1427 if (pLed->bLedBlinkInProgress) {
1428 _cancel_timer_ex(&(pLed->BlinkTimer));
1429 pLed->bLedBlinkInProgress = _FALSE;
1431 SwLedOn(Adapter, pLed);
1434 case LED_CTL_POWER_OFF:
1435 pLed->CurrLedState = RTW_LED_OFF;
1436 if (pLed->bLedBlinkInProgress) {
1437 _cancel_timer_ex(&(pLed->BlinkTimer));
1438 pLed->bLedBlinkInProgress = _FALSE;
1440 SwLedOff(Adapter, pLed);
1448 /* added by chiyokolin, for MSI */
1451 IN PADAPTER Adapter,
1452 IN LED_CTL_MODE LedAction
1455 struct led_priv *ledpriv = &(Adapter->ledpriv);
1456 PLED_PCIE pLed = &(ledpriv->SwLed0);
1457 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
1459 /* Decide led state */
1460 switch (LedAction) {
1463 if (pLed->bLedBlinkInProgress == _FALSE && (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)) {
1464 pLed->bLedBlinkInProgress = _TRUE;
1466 pLed->CurrLedState = LED_BLINK_NORMAL;
1467 pLed->BlinkTimes = 2;
1470 pLed->BlinkingLedState = RTW_LED_OFF;
1472 pLed->BlinkingLedState = RTW_LED_ON;
1473 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FAST_INTERVAL_BITLAND);
1477 case LED_CTL_SITE_SURVEY:
1478 if (pLed->bLedBlinkInProgress == _FALSE) {
1479 pLed->bLedBlinkInProgress = _TRUE;
1480 pLed->CurrLedState = LED_BLINK_SCAN;
1481 pLed->BlinkTimes = 2;
1484 pLed->BlinkingLedState = RTW_LED_OFF;
1485 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
1487 pLed->BlinkingLedState = RTW_LED_ON;
1488 _set_timer(&(pLed->BlinkTimer), LED_CM8_BLINK_OFF_INTERVAL);
1490 } else if (pLed->CurrLedState != LED_BLINK_SCAN) {
1491 _cancel_timer_ex(&(pLed->BlinkTimer));
1492 pLed->CurrLedState = LED_BLINK_SCAN;
1493 pLed->BlinkTimes = 2;
1496 pLed->BlinkingLedState = RTW_LED_OFF;
1497 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
1499 pLed->BlinkingLedState = RTW_LED_ON;
1500 _set_timer(&(pLed->BlinkTimer), LED_CM8_BLINK_OFF_INTERVAL);
1505 case LED_CTL_POWER_ON:
1506 case LED_CTL_NO_LINK:
1507 if (pLed->bLedBlinkInProgress == _FALSE) {
1508 pLed->bLedBlinkInProgress = _TRUE;
1510 pLed->CurrLedState = LED_BLINK_NO_LINK;
1511 pLed->BlinkTimes = 24;
1514 pLed->BlinkingLedState = RTW_LED_OFF;
1515 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
1517 pLed->BlinkingLedState = RTW_LED_ON;
1518 _set_timer(&(pLed->BlinkTimer), LED_CM8_BLINK_OFF_INTERVAL);
1520 } else if (pLed->CurrLedState != LED_BLINK_SCAN && pLed->CurrLedState != LED_BLINK_NO_LINK) {
1521 pLed->CurrLedState = LED_BLINK_NO_LINK;
1522 pLed->BlinkTimes = 24;
1525 pLed->BlinkingLedState = RTW_LED_OFF;
1526 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
1528 pLed->BlinkingLedState = RTW_LED_ON;
1529 _set_timer(&(pLed->BlinkTimer), LED_CM8_BLINK_OFF_INTERVAL);
1535 pLed->CurrLedState = RTW_LED_ON;
1536 if (pLed->bLedBlinkInProgress) {
1537 _cancel_timer_ex(&(pLed->BlinkTimer));
1538 pLed->bLedBlinkInProgress = _FALSE;
1540 SwLedOn(Adapter, pLed);
1543 case LED_CTL_POWER_OFF:
1544 pLed->CurrLedState = RTW_LED_OFF;
1545 if (pLed->bLedBlinkInProgress) {
1546 _cancel_timer_ex(&(pLed->BlinkTimer));
1547 pLed->bLedBlinkInProgress = _FALSE;
1549 SwLedOff(Adapter, pLed);
1556 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Ledcontrol 9 current led state %d,\n", pLed->CurrLedState));
1561 /* added by chiyokolin, for Edimax-ASUS */
1564 IN PADAPTER Adapter,
1565 IN LED_CTL_MODE LedAction
1568 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
1569 struct led_priv *ledpriv = &(Adapter->ledpriv);
1570 PLED_PCIE pLed0 = &(ledpriv->SwLed0);
1571 PLED_PCIE pLed1 = &(ledpriv->SwLed1);
1572 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
1574 /* Decide led state */
1575 switch (LedAction) {
1578 if (pLed1->bLedBlinkInProgress == _FALSE && pLed1->bLedWPSBlinkInProgress == _FALSE &&
1579 (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)) {
1580 pLed1->bLedBlinkInProgress = _TRUE;
1582 pLed1->CurrLedState = LED_BLINK_NORMAL;
1583 pLed1->BlinkTimes = 2;
1586 pLed1->BlinkingLedState = RTW_LED_OFF;
1588 pLed1->BlinkingLedState = RTW_LED_ON;
1589 _set_timer(&(pLed1->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
1593 case LED_CTL_SITE_SURVEY:
1594 if (pLed1->bLedBlinkInProgress == _FALSE && pLed1->bLedWPSBlinkInProgress == _FALSE) {
1595 pLed1->bLedBlinkInProgress = _TRUE;
1596 pLed1->CurrLedState = LED_BLINK_SCAN;
1597 pLed1->BlinkTimes = 12;
1599 if (pLed1->bLedOn) {
1600 pLed1->BlinkingLedState = RTW_LED_OFF;
1601 _set_timer(&(pLed1->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
1603 pLed1->BlinkingLedState = RTW_LED_ON;
1604 _set_timer(&(pLed1->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
1606 } else if (pLed1->CurrLedState != LED_BLINK_SCAN && pLed1->bLedWPSBlinkInProgress == _FALSE) {
1607 _cancel_timer_ex(&(pLed1->BlinkTimer));
1608 pLed1->CurrLedState = LED_BLINK_SCAN;
1609 pLed1->BlinkTimes = 24;
1611 if (pLed1->bLedOn) {
1612 pLed1->BlinkingLedState = RTW_LED_OFF;
1613 _set_timer(&(pLed1->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
1615 pLed1->BlinkingLedState = RTW_LED_ON;
1616 _set_timer(&(pLed1->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
1621 case LED_CTL_START_WPS:
1622 case LED_CTL_START_WPS_BOTTON:
1623 pLed1->CurrLedState = RTW_LED_ON;
1624 if (pLed1->bLedBlinkInProgress == _TRUE) {
1625 _cancel_timer_ex(&(pLed1->BlinkTimer));
1626 pLed1->bLedBlinkInProgress = _FALSE;
1629 if (pLed1->bLedWPSBlinkInProgress == _FALSE) {
1630 pLed1->bLedWPSBlinkInProgress = _TRUE;
1631 SwLedOn(Adapter, pLed1);
1635 case LED_CTL_STOP_WPS:
1636 case LED_CTL_STOP_WPS_FAIL:
1637 case LED_CTL_STOP_WPS_FAIL_OVERLAP:
1638 if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
1639 pLed0->CurrLedState = RTW_LED_ON;
1640 if (pLed0->bLedBlinkInProgress) {
1641 _cancel_timer_ex(&(pLed0->BlinkTimer));
1642 pLed0->bLedBlinkInProgress = _FALSE;
1644 SwLedOn(Adapter, pLed0);
1646 pLed0->CurrLedState = RTW_LED_OFF;
1647 if (pLed0->bLedBlinkInProgress) {
1648 _cancel_timer_ex(&(pLed0->BlinkTimer));
1649 pLed0->bLedBlinkInProgress = _FALSE;
1651 SwLedOff(Adapter, pLed0);
1654 pLed1->CurrLedState = RTW_LED_OFF;
1655 if (pLed1->bLedBlinkInProgress) {
1656 _cancel_timer_ex(&(pLed1->BlinkTimer));
1657 pLed1->bLedBlinkInProgress = _FALSE;
1659 SwLedOff(Adapter, pLed1);
1661 pLed1->bLedWPSBlinkInProgress = _FALSE;
1666 pLed0->CurrLedState = RTW_LED_ON;
1667 if (pLed0->bLedBlinkInProgress) {
1668 _cancel_timer_ex(&(pLed0->BlinkTimer));
1669 pLed0->bLedBlinkInProgress = _FALSE;
1671 SwLedOn(Adapter, pLed0);
1674 case LED_CTL_NO_LINK:
1675 if (pLed1->bLedWPSBlinkInProgress == _TRUE) {
1676 SwLedOn(Adapter, pLed1);
1680 if (pLed1->CurrLedState == LED_BLINK_SCAN)
1683 pLed0->CurrLedState = RTW_LED_OFF;
1684 if (pLed0->bLedBlinkInProgress) {
1685 _cancel_timer_ex(&(pLed0->BlinkTimer));
1686 pLed0->bLedBlinkInProgress = _FALSE;
1688 SwLedOff(Adapter, pLed0);
1690 pLed1->CurrLedState = RTW_LED_OFF;
1691 if (pLed1->bLedBlinkInProgress) {
1692 _cancel_timer_ex(&(pLed1->BlinkTimer));
1693 pLed1->bLedBlinkInProgress = _FALSE;
1695 SwLedOff(Adapter, pLed1);
1700 case LED_CTL_POWER_ON:
1701 case LED_CTL_POWER_OFF:
1702 if (pLed1->bLedWPSBlinkInProgress == _TRUE) {
1703 SwLedOn(Adapter, pLed1);
1706 pLed0->CurrLedState = RTW_LED_OFF;
1707 if (pLed0->bLedBlinkInProgress) {
1708 _cancel_timer_ex(&(pLed0->BlinkTimer));
1709 pLed0->bLedBlinkInProgress = _FALSE;
1711 SwLedOff(Adapter, pLed0);
1713 pLed1->CurrLedState = RTW_LED_OFF;
1714 if (pLed1->bLedBlinkInProgress) {
1715 _cancel_timer_ex(&(pLed1->BlinkTimer));
1716 pLed1->bLedBlinkInProgress = _FALSE;
1718 SwLedOff(Adapter, pLed1);
1727 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Ledcontrol 10 current led0 state %d led1 state %d,\n", pLed0->CurrLedState, pLed1->CurrLedState));
1732 /* added by hpfan, for Xavi */
1735 IN PADAPTER Adapter,
1736 IN LED_CTL_MODE LedAction
1739 struct led_priv *ledpriv = &(Adapter->ledpriv);
1740 PLED_PCIE pLed = &(ledpriv->SwLed0);
1742 /* Decide led state */
1743 switch (LedAction) {
1744 case LED_CTL_START_WPS:
1745 case LED_CTL_START_WPS_BOTTON:
1746 pLed->bLedWPSBlinkInProgress = _TRUE;
1747 if (pLed->bLedBlinkInProgress == _FALSE) {
1748 pLed->bLedBlinkInProgress = _TRUE;
1749 pLed->CurrLedState = LED_BLINK_XAVI;
1752 pLed->BlinkingLedState = RTW_LED_OFF;
1753 _set_timer(&(pLed->BlinkTimer), LED_CM11_BLINK_INTERVAL);
1755 pLed->BlinkingLedState = RTW_LED_ON;
1756 _set_timer(&(pLed->BlinkTimer), LED_CM11_BLINK_INTERVAL);
1761 case LED_CTL_STOP_WPS:
1762 case LED_CTL_STOP_WPS_FAIL:
1763 case LED_CTL_STOP_WPS_FAIL_OVERLAP:
1764 pLed->bLedWPSBlinkInProgress = _FALSE;
1765 if (pLed->bLedBlinkInProgress) {
1766 _cancel_timer_ex(&(pLed->BlinkTimer));
1767 pLed->bLedBlinkInProgress = _FALSE;
1768 pLed->CurrLedState = RTW_LED_OFF;
1770 SwLedOff(Adapter, pLed);
1774 if (pLed->bLedWPSBlinkInProgress)
1777 if (pLed->bLedBlinkInProgress) {
1778 _cancel_timer_ex(&(pLed->BlinkTimer));
1779 pLed->bLedBlinkInProgress = _FALSE;
1780 pLed->CurrLedState = RTW_LED_ON;
1783 SwLedOn(Adapter, pLed);
1785 pLed->CurrLedState = RTW_LED_ON;
1786 SwLedOn(Adapter, pLed);
1789 _set_timer(&(pLed->BlinkTimer), LED_CM11_LINK_ON_INTERVEL);
1790 pLed->BlinkingLedState = RTW_LED_OFF;
1793 case LED_CTL_NO_LINK:
1794 if (pLed->bLedWPSBlinkInProgress)
1797 if (pLed->bLedBlinkInProgress == _TRUE) {
1798 _cancel_timer_ex(&(pLed->BlinkTimer));
1799 pLed->bLedBlinkInProgress = _FALSE;
1801 pLed->CurrLedState = RTW_LED_OFF;
1802 SwLedOff(Adapter, pLed);
1805 case LED_CTL_POWER_ON:
1806 case LED_CTL_POWER_OFF:
1807 if (pLed->bLedBlinkInProgress == _TRUE) {
1808 _cancel_timer_ex(&(pLed->BlinkTimer));
1809 pLed->bLedBlinkInProgress = _FALSE;
1812 pLed->CurrLedState = RTW_LED_OFF;
1813 SwLedOff(Adapter, pLed);
1821 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("Ledcontrol 11 current led state %d\n", pLed->CurrLedState));
1825 /* added by chiyokolin, for Azurewave */
1828 IN PADAPTER Adapter,
1829 IN LED_CTL_MODE LedAction
1832 struct led_priv *ledpriv = &(Adapter->ledpriv);
1833 PLED_PCIE pLed = &(ledpriv->SwLed0);
1834 struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
1835 LED_STATE LedState = LED_UNKNOWN;
1837 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("====>Ledcontrol 12 current led0 state %d\n", pLed->CurrLedState));
1839 /* Decide led state */
1840 switch (LedAction) {
1843 if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) {
1844 if (pLed->CurrLedState == LED_BLINK_SCAN)
1847 pLed->BlinkTimes = 0;
1850 pLed->BlinkingLedState = RTW_LED_OFF;
1852 pLed->BlinkingLedState = RTW_LED_ON;
1854 /*if(pTurboCa->TotalThroughput <= 5)
1855 LedState = LED_BLINK_Azurewave_5Mbps;
1856 else if(pTurboCa->TotalThroughput <= 10)
1857 LedState = LED_BLINK_Azurewave_10Mbps;
1858 else if(pTurboCa->TotalThroughput <=20)
1859 LedState = LED_BLINK_Azurewave_20Mbps;
1860 else if(pTurboCa->TotalThroughput <=40)
1861 LedState = LED_BLINK_Azurewave_40Mbps;
1862 else if(pTurboCa->TotalThroughput <=80)
1863 LedState = LED_BLINK_Azurewave_80Mbps;
1865 LedState = LED_BLINK_Azurewave_MAXMbps;
1867 if (pLed->bLedBlinkInProgress == _FALSE || pLed->CurrLedState != LedState) {
1868 _cancel_timer_ex(&(pLed->BlinkTimer));
1869 pLed->CurrLedState = LedState;
1870 pLed->bLedBlinkInProgress = _TRUE;
1873 case LED_BLINK_Azurewave_5Mbps:
1874 _set_timer(&(pLed->BlinkTimer), LED_CM12_BLINK_INTERVAL_5Mbps);
1877 case LED_BLINK_Azurewave_10Mbps:
1878 _set_timer(&(pLed->BlinkTimer), LED_CM12_BLINK_INTERVAL_10Mbps);
1881 case LED_BLINK_Azurewave_20Mbps:
1882 _set_timer(&(pLed->BlinkTimer), LED_CM12_BLINK_INTERVAL_20Mbps);
1885 case LED_BLINK_Azurewave_40Mbps:
1886 _set_timer(&(pLed->BlinkTimer), LED_CM12_BLINK_INTERVAL_40Mbps);
1889 case LED_BLINK_Azurewave_80Mbps:
1890 _set_timer(&(pLed->BlinkTimer), LED_CM12_BLINK_INTERVAL_80Mbps);
1893 case LED_BLINK_Azurewave_MAXMbps:
1894 _set_timer(&(pLed->BlinkTimer), LED_CM12_BLINK_INTERVAL_MAXMbps);
1905 case LED_CTL_SITE_SURVEY:
1906 case LED_CTL_START_WPS:
1907 case LED_CTL_START_WPS_BOTTON:
1908 if (pLed->bLedBlinkInProgress == _FALSE)
1909 pLed->bLedBlinkInProgress = _TRUE;
1910 else if (pLed->CurrLedState != LED_BLINK_SCAN)
1911 _cancel_timer_ex(&(pLed->BlinkTimer));
1913 pLed->CurrLedState = LED_BLINK_SCAN;
1914 pLed->BlinkTimes = 2;
1917 pLed->BlinkingLedState = RTW_LED_OFF;
1918 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
1920 pLed->BlinkingLedState = RTW_LED_ON;
1921 _set_timer(&(pLed->BlinkTimer), LED_CM8_BLINK_OFF_INTERVAL);
1926 pLed->CurrLedState = RTW_LED_ON;
1927 if (pLed->bLedBlinkInProgress) {
1928 _cancel_timer_ex(&(pLed->BlinkTimer));
1929 pLed->bLedBlinkInProgress = _FALSE;
1931 SwLedOn(Adapter, pLed);
1934 case LED_CTL_NO_LINK:
1935 case LED_CTL_POWER_ON:
1936 if (pLed->CurrLedState == LED_BLINK_SCAN)
1939 pLed->CurrLedState = LED_BLINK_NO_LINK;
1940 pLed->bLedBlinkInProgress = _TRUE;
1943 pLed->BlinkingLedState = RTW_LED_OFF;
1944 _set_timer(&(pLed->BlinkTimer), LED_CM2_BLINK_ON_INTERVAL);
1946 pLed->BlinkingLedState = RTW_LED_ON;
1947 _set_timer(&(pLed->BlinkTimer), LED_CM8_BLINK_OFF_INTERVAL);
1951 case LED_CTL_POWER_OFF:
1952 pLed->CurrLedState = RTW_LED_OFF;
1953 if (pLed->bLedBlinkInProgress) {
1954 _cancel_timer_ex(&(pLed->BlinkTimer));
1955 pLed->bLedBlinkInProgress = _FALSE;
1957 SwLedOff(Adapter, pLed);
1965 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("<====Ledcontrol 12 current led0 state %d\n", pLed->CurrLedState));
1972 LED_CTL_MODE LedAction
1975 struct led_priv *ledpriv = &(padapter->ledpriv);
1977 #if (MP_DRIVER == 1)
1978 if (padapter->registrypriv.mp_mode == 1)
1982 if (RTW_CANNOT_RUN(padapter) || (!rtw_is_hw_init_completed(padapter)))
1985 /* if(priv->bInHctTest) */
1988 #ifdef CONFIG_CONCURRENT_MODE
1989 /* Only do led action for PRIMARY_ADAPTER */
1990 if (padapter->adapter_type != PRIMARY_ADAPTER)
1994 if ((adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS) &&
1995 (LedAction == LED_CTL_TX ||
1996 LedAction == LED_CTL_RX ||
1997 LedAction == LED_CTL_SITE_SURVEY ||
1998 LedAction == LED_CTL_LINK ||
1999 LedAction == LED_CTL_NO_LINK ||
2000 LedAction == LED_CTL_START_TO_LINK ||
2001 LedAction == LED_CTL_POWER_ON)) {
2002 RT_TRACE(_module_rtl8712_led_c_, _drv_info_, ("LedControlPCIE(): RfOffReason=0x%x\n", adapter_to_pwrctl(padapter)->rfoff_reason));
2006 switch (ledpriv->LedStrategy) {
2008 /* SwLedControlMode0(padapter, LedAction); */
2012 /* SwLedControlMode1(padapter, LedAction); */
2016 /* SwLedControlMode2(padapter, LedAction); */
2020 /* SwLedControlMode3(padapter, LedAction); */
2024 /* SwLedControlMode4(padapter, LedAction); */
2028 /* SwLedControlMode5(padapter, LedAction); */
2032 /* SwLedControlMode6(padapter, LedAction); */
2036 SwLedControlMode7(padapter, LedAction);
2040 SwLedControlMode8(padapter, LedAction);
2044 SwLedControlMode9(padapter, LedAction);
2048 SwLedControlMode10(padapter, LedAction);
2052 SwLedControlMode11(padapter, LedAction);
2056 SwLedControlMode12(padapter, LedAction);
2064 /*-----------------------------------------------------------------------------
2065 * Function: gen_RefreshLedState()
2067 * Overview: When we call the function, media status is no link. It must be in SW/HW
2068 * radio off. Or IPS state. If IPS no link we will turn on LED, otherwise, we must turn off.
2069 * After MAC IO reset, we must write LED control 0x2f2 again.
2071 * Input: IN PADAPTER Adapter)
2079 * 03/27/2009 MHC Create for LED judge only~!!
2081 *---------------------------------------------------------------------------*/
2083 gen_RefreshLedState(
2084 IN PADAPTER Adapter)
2086 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
2087 struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(Adapter);
2088 struct led_priv *pledpriv = &(Adapter->ledpriv);
2089 PLED_PCIE pLed0 = &(Adapter->ledpriv.SwLed0);
2091 RTW_INFO("gen_RefreshLedState:() pwrctrlpriv->rfoff_reason=%x\n", pwrctrlpriv->rfoff_reason);
2093 if (Adapter->bDriverIsGoingToUnload) {
2094 switch (pledpriv->LedStrategy) {
2097 rtw_led_control(Adapter, LED_CTL_POWER_OFF);
2101 /* Turn off LED if RF is not ON. */
2102 SwLedOff(Adapter, pLed0);
2105 } else if (pwrctrlpriv->rfoff_reason == RF_CHANGE_BY_IPS) {
2106 switch (pledpriv->LedStrategy) {
2108 SwLedOn(Adapter, pLed0);
2113 rtw_led_control(Adapter, LED_CTL_NO_LINK);
2117 SwLedOn(Adapter, pLed0);
2120 } else if (pwrctrlpriv->rfoff_reason == RF_CHANGE_BY_INIT) {
2121 switch (pledpriv->LedStrategy) {
2123 SwLedOn(Adapter, pLed0);
2127 rtw_led_control(Adapter, LED_CTL_NO_LINK);
2131 SwLedOn(Adapter, pLed0);
2135 } else { /* SW/HW radio off */
2137 switch (pledpriv->LedStrategy) {
2139 rtw_led_control(Adapter, LED_CTL_POWER_OFF);
2143 /* Turn off LED if RF is not ON. */
2144 SwLedOff(Adapter, pLed0);
2153 * Reset status of LED_871x object.
2155 void ResetLedStatus(PLED_PCIE pLed)
2158 pLed->CurrLedState = RTW_LED_OFF; /* Current LED state. */
2159 pLed->bLedOn = _FALSE; /* true if LED is ON, false if LED is OFF. */
2161 pLed->bLedBlinkInProgress = _FALSE; /* true if it is blinking, false o.w.. */
2162 pLed->bLedWPSBlinkInProgress = _FALSE;
2163 pLed->bLedSlowBlinkInProgress = _FALSE;
2165 pLed->BlinkTimes = 0; /* Number of times to toggle led state for blinking. */
2166 pLed->BlinkingLedState = LED_UNKNOWN; /* Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are. */
2171 * Initialize an LED_871x object.
2180 pLed->padapter = padapter;
2181 pLed->LedPin = LedPin;
2183 ResetLedStatus(pLed);
2185 _init_timer(&(pLed->BlinkTimer), padapter->pnetdev, BlinkTimerCallback, pLed);
2191 * DeInitialize an LED_871x object.
2198 _cancel_timer_ex(&(pLed->BlinkTimer));
2199 ResetLedStatus(pLed);