1 /******************************************************************************
3 * Copyright(c) 2007 - 2011 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"
22 #include "rtl8192c_hal.h"
24 //================================================================================
26 //================================================================================
29 // Default LED behavior.
31 #define LED_BLINK_NORMAL_INTERVAL 100
32 #define LED_BLINK_SLOWLY_INTERVAL 200
33 #define LED_BLINK_LONG_INTERVAL 400
35 #define LED_BLINK_NO_LINK_INTERVAL_ALPHA 1000
36 #define LED_BLINK_LINK_INTERVAL_ALPHA 500 //500
37 #define LED_BLINK_SCAN_INTERVAL_ALPHA 180 //150
38 #define LED_BLINK_FASTER_INTERVAL_ALPHA 50
39 #define LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA 5000
41 //================================================================================
43 //================================================================================
46 //================================================================================
47 // Prototype of protected function.
48 //================================================================================
57 BlinkWorkItemCallback(
58 struct work_struct *work
63 // Reset blinking status of LED_871x object.
66 ResetLedStatus(PLED_871x pLed) {
67 pLed->CurrLedState = RTW_LED_OFF; // Current LED state.
68 pLed->bLedOn = _FALSE; // true if LED is ON, false if LED is OFF.
70 pLed->bLedBlinkInProgress = _FALSE; // true if it is blinking, false o.w..
71 pLed->bLedNoLinkBlinkInProgress = _FALSE;
72 pLed->bLedLinkBlinkInProgress = _FALSE;
73 pLed->bLedStartToLinkBlinkInProgress = _FALSE;
74 pLed->bLedScanBlinkInProgress = _FALSE;
75 pLed->bLedWPSBlinkInProgress = _FALSE;
76 pLed->BlinkTimes = 0; // Number of times to toggle led state for blinking.
77 pLed->BlinkingLedState = LED_UNKNOWN; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are.
80 //================================================================================
81 // LED_819xUsb routines.
82 //================================================================================
86 // Initialize an LED_871x object.
95 pLed->padapter = padapter;
96 pLed->LedPin = LedPin;
100 _init_timer(&(pLed->BlinkTimer), padapter->pnetdev, BlinkTimerCallback, pLed);
101 _init_workitem(&(pLed->BlinkWorkItem), BlinkWorkItemCallback, pLed);
107 // DeInitialize an LED_871x object.
114 //call _cancel_workitem_sync(&(pLed->BlinkWorkItem))
115 //before _cancel_timer_ex(&(pLed->BlinkTimer)) to
116 //avoid led timer restarting when driver is removed
118 _cancel_workitem_sync(&(pLed->BlinkWorkItem));
120 _cancel_timer_ex(&(pLed->BlinkTimer));
122 // We should reset bLedBlinkInProgress if we cancel the LedControlTimer, 2005.03.10, by rcnjko.
123 ResetLedStatus(pLed);
128 // Turn on LED according to LedPin specified.
137 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
139 if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
144 if( (BOARD_MINICARD == pHalData->BoardType )||
145 (BOARD_USB_SOLO == pHalData->BoardType)||
146 (BOARD_USB_COMBO == pHalData->BoardType))
148 LedCfg = rtw_read8(padapter, REG_LEDCFG2);
155 rtw_write8(padapter, REG_LEDCFG2, (LedCfg&0xf0)|BIT5|BIT6); // SW control led0 on.
159 rtw_write8(padapter, REG_LEDCFG2, (LedCfg&0x0f)|BIT5); // SW control led1 on.
175 #ifdef CONFIG_SW_ANTENNA_DIVERSITY
176 if(pHalData->AntDivCfg)
178 LedCfg = rtw_read8(padapter, REG_LEDCFG2);
179 rtw_write8(padapter, REG_LEDCFG2, (LedCfg&0xe0)|BIT7|BIT6|BIT5); // SW control led0 on.
180 //RT_TRACE(COMP_LED, DBG_LOUD, ("SwLedOn LED0 0x%x\n", PlatformEFIORead4Byte(Adapter, REG_LEDCFG2)));
185 LedCfg = rtw_read8(padapter, REG_LEDCFG0);
186 rtw_write8(padapter,REG_LEDCFG0, LedCfg&0x70); // SW control led0 on.
187 //RT_TRACE(COMP_LED, DBG_LOUD, ("SwLedOn LED0 0x%lx\n", PlatformEFIORead4Byte(Adapter, REG_LEDCFG0)));
192 LedCfg = rtw_read8(padapter,(REG_LEDCFG1));
193 rtw_write8(padapter,(REG_LEDCFG1), LedCfg&0x70); // SW control led1 on.
194 //RT_TRACE(COMP_LED, DBG_LOUD, ("SwLedOn LED1 0x%lx\n", PlatformEFIORead4Byte(Adapter, REG_LEDCFG0)));
202 pLed->bLedOn = _TRUE;
209 // Turn off LED according to LedPin specified.
218 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
220 if((padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
225 if( (BOARD_MINICARD == pHalData->BoardType )||
226 (BOARD_USB_SOLO == pHalData->BoardType)||
227 (BOARD_USB_COMBO == pHalData->BoardType))
229 LedCfg = rtw_read8(padapter, REG_LEDCFG2);//0x4E
238 if(BOARD_USB_COMBO == pHalData->BoardType)
240 LedCfg &= 0x90; // Set to software control.
241 rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3));
242 LedCfg = rtw_read8(padapter, REG_MAC_PINMUX_CFG);
244 rtw_write8(padapter, REG_MAC_PINMUX_CFG, LedCfg);
248 LedCfg &= 0xf0; // Set to software control.
249 if(pHalData->bLedOpenDrain == _TRUE) // Open-drain arrangement for controlling the LED
250 rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT1|BIT5|BIT6));
252 rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3|BIT5|BIT6));
257 LedCfg &= 0x0f; // Set to software control.
258 rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3));
273 #ifdef CONFIG_SW_ANTENNA_DIVERSITY
274 if(pHalData->AntDivCfg)
276 LedCfg = rtw_read8(padapter, REG_LEDCFG2);
277 LedCfg &= 0xe0; // Set to software control.
278 rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3|BIT7|BIT6|BIT5));
279 //RT_TRACE(COMP_LED, DBG_LOUD, ("SwLedOff LED0 0x%x\n", PlatformEFIORead4Byte(Adapter, REG_LEDCFG2)));
284 LedCfg = rtw_read8(padapter, REG_LEDCFG0);
285 LedCfg &= 0x70; // Set to software control.
286 rtw_write8(padapter, REG_LEDCFG0, (LedCfg|BIT3));
287 //RT_TRACE(COMP_LED, DBG_LOUD, ("SwLedOff LED0 0x%lx\n", PlatformEFIORead4Byte(Adapter, REG_LEDCFG0)));
292 LedCfg = rtw_read8(padapter, (REG_LEDCFG1));
293 LedCfg &= 0x70; // Set to software control.
294 rtw_write8(padapter, (REG_LEDCFG1), (LedCfg|BIT3));
295 //RT_TRACE(COMP_LED, DBG_LOUD, ("SwLedOff LED1 0x%lx\n", PlatformEFIORead4Byte(Adapter, REG_LEDCFG0)));
304 pLed->bLedOn = _FALSE;
308 //================================================================================
309 // Interface to manipulate LED objects.
310 //================================================================================
315 // Implementation of LED blinking behavior.
316 // It toggle off LED and schedule corresponding timer if necessary.
323 _adapter *padapter = pLed->padapter;
324 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
325 u8 bStopBlinking = _FALSE;
327 // Change LED according to BlinkingLedState specified.
328 if( pLed->BlinkingLedState == RTW_LED_ON )
330 SwLedOn(padapter, pLed);
331 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
335 SwLedOff(padapter, pLed);
336 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,( "Blinktimes (%d): turn off\n", pLed->BlinkTimes));
339 // Determine if we shall change LED state again.
341 switch(pLed->CurrLedState)
344 case LED_BLINK_NORMAL:
345 if(pLed->BlinkTimes == 0)
347 bStopBlinking = _TRUE;
351 case LED_BLINK_StartToBlink:
352 if( check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE) )
354 bStopBlinking = _TRUE;
356 if( check_fwstate(pmlmepriv, _FW_LINKED) &&
357 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) )
359 bStopBlinking = _TRUE;
361 else if(pLed->BlinkTimes == 0)
363 bStopBlinking = _TRUE;
368 if( pLed->BlinkTimes == 0 )
370 bStopBlinking = _TRUE;
376 bStopBlinking = _TRUE;
383 //if( padapter->pwrctrlpriv.cpwm >= PS_STATE_S2)
386 SwLedOff(padapter, pLed);
388 else if( (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) && (pLed->bLedOn == _FALSE))
390 SwLedOn(padapter, pLed);
392 else if( (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) && pLed->bLedOn == _TRUE)
394 SwLedOff(padapter, pLed);
397 pLed->BlinkTimes = 0;
398 pLed->bLedBlinkInProgress = _FALSE;
402 // Assign LED state to toggle.
403 if( pLed->BlinkingLedState == RTW_LED_ON )
404 pLed->BlinkingLedState = RTW_LED_OFF;
406 pLed->BlinkingLedState = RTW_LED_ON;
408 // Schedule a timer to toggle LED state.
409 switch( pLed->CurrLedState )
411 case LED_BLINK_NORMAL:
412 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
415 case LED_BLINK_SLOWLY:
416 case LED_BLINK_StartToBlink:
417 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
422 if( pLed->BlinkingLedState == RTW_LED_ON )
423 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
425 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
430 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
442 _adapter *padapter = pLed->padapter;
443 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
444 struct led_priv *ledpriv = &(padapter->ledpriv);
445 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
446 PLED_871x pLed1 = &(ledpriv->SwLed1);
447 u8 bStopBlinking = _FALSE;
449 if(pHalData->EEPROMCustomerID == RT_CID_819x_CAMEO)
450 pLed = &(ledpriv->SwLed1);
452 // Change LED according to BlinkingLedState specified.
453 if( pLed->BlinkingLedState == RTW_LED_ON )
455 SwLedOn(padapter, pLed);
456 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,( "Blinktimes (%d): turn on\n", pLed->BlinkTimes));
460 SwLedOff(padapter, pLed);
461 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
465 if(pHalData->EEPROMCustomerID == RT_CID_DEFAULT)
467 if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
469 if(!pLed1->bSWLedCtrl)
471 SwLedOn(padapter, pLed1);
472 pLed1->bSWLedCtrl = _TRUE;
474 else if(!pLed1->bLedOn)
475 SwLedOn(padapter, pLed1);
476 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (): turn on pLed1\n"));
480 if(!pLed1->bSWLedCtrl)
482 SwLedOff(padapter, pLed1);
483 pLed1->bSWLedCtrl = _TRUE;
485 else if(pLed1->bLedOn)
486 SwLedOff(padapter, pLed1);
487 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (): turn off pLed1\n"));
492 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
494 SwLedOff(padapter, pLed);
495 ResetLedStatus(pLed);
500 switch(pLed->CurrLedState)
502 case LED_BLINK_SLOWLY:
504 pLed->BlinkingLedState = RTW_LED_OFF;
506 pLed->BlinkingLedState = RTW_LED_ON;
507 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
510 case LED_BLINK_NORMAL:
512 pLed->BlinkingLedState = RTW_LED_OFF;
514 pLed->BlinkingLedState = RTW_LED_ON;
515 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
520 if( pLed->BlinkTimes == 0 )
522 bStopBlinking = _TRUE;
527 if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
529 pLed->bLedLinkBlinkInProgress = _TRUE;
530 pLed->CurrLedState = LED_BLINK_NORMAL;
532 pLed->BlinkingLedState = RTW_LED_OFF;
534 pLed->BlinkingLedState = RTW_LED_ON;
535 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
536 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
539 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
541 pLed->bLedNoLinkBlinkInProgress = _TRUE;
542 pLed->CurrLedState = LED_BLINK_SLOWLY;
544 pLed->BlinkingLedState = RTW_LED_OFF;
546 pLed->BlinkingLedState = RTW_LED_ON;
547 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
548 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
550 pLed->bLedScanBlinkInProgress = _FALSE;
555 pLed->BlinkingLedState = RTW_LED_OFF;
557 pLed->BlinkingLedState = RTW_LED_ON;
558 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
564 if( pLed->BlinkTimes == 0 )
566 bStopBlinking = _TRUE;
570 if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
572 pLed->bLedLinkBlinkInProgress = _TRUE;
573 pLed->CurrLedState = LED_BLINK_NORMAL;
575 pLed->BlinkingLedState = RTW_LED_OFF;
577 pLed->BlinkingLedState = RTW_LED_ON;
578 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
579 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
581 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
583 pLed->bLedNoLinkBlinkInProgress = _TRUE;
584 pLed->CurrLedState = LED_BLINK_SLOWLY;
586 pLed->BlinkingLedState = RTW_LED_OFF;
588 pLed->BlinkingLedState = RTW_LED_ON;
589 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
590 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
592 pLed->BlinkTimes = 0;
593 pLed->bLedBlinkInProgress = _FALSE;
598 pLed->BlinkingLedState = RTW_LED_OFF;
600 pLed->BlinkingLedState = RTW_LED_ON;
601 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
607 pLed->BlinkingLedState = RTW_LED_OFF;
609 pLed->BlinkingLedState = RTW_LED_ON;
610 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
613 case LED_BLINK_WPS_STOP: //WPS success
614 if(pLed->BlinkingLedState == RTW_LED_ON)
615 bStopBlinking = _FALSE;
617 bStopBlinking = _TRUE;
621 pLed->bLedLinkBlinkInProgress = _TRUE;
622 pLed->CurrLedState = LED_BLINK_NORMAL;
624 pLed->BlinkingLedState = RTW_LED_OFF;
626 pLed->BlinkingLedState = RTW_LED_ON;
627 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
628 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
630 pLed->bLedWPSBlinkInProgress = _FALSE;
634 pLed->BlinkingLedState = RTW_LED_OFF;
635 _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
650 _adapter *padapter = pLed->padapter;
651 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
652 u8 bStopBlinking = _FALSE;
654 // Change LED according to BlinkingLedState specified.
655 if( pLed->BlinkingLedState == RTW_LED_ON)
657 SwLedOn(padapter, pLed);
658 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
662 SwLedOff(padapter, pLed);
663 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
666 switch(pLed->CurrLedState)
670 if( pLed->BlinkTimes == 0 )
672 bStopBlinking = _TRUE;
677 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
679 SwLedOff(padapter, pLed);
681 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
683 pLed->CurrLedState = RTW_LED_ON;
684 pLed->BlinkingLedState = RTW_LED_ON;
685 SwLedOn(padapter, pLed);
686 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState));
689 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
691 pLed->CurrLedState = RTW_LED_OFF;
692 pLed->BlinkingLedState = RTW_LED_OFF;
693 SwLedOff(padapter, pLed);
694 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState));
696 pLed->bLedScanBlinkInProgress = _FALSE;
700 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
702 SwLedOff(padapter, pLed);
707 pLed->BlinkingLedState = RTW_LED_OFF;
709 pLed->BlinkingLedState = RTW_LED_ON;
710 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
717 if( pLed->BlinkTimes == 0 )
719 bStopBlinking = _TRUE;
723 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
725 SwLedOff(padapter, pLed);
727 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
729 pLed->CurrLedState = RTW_LED_ON;
730 pLed->BlinkingLedState = RTW_LED_ON;
731 SwLedOn(padapter, pLed);
732 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState));
735 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
737 pLed->CurrLedState = RTW_LED_OFF;
738 pLed->BlinkingLedState = RTW_LED_OFF;
739 SwLedOff(padapter, pLed);
740 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState));
742 pLed->bLedBlinkInProgress = _FALSE;
746 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
748 SwLedOff(padapter, pLed);
753 pLed->BlinkingLedState = RTW_LED_OFF;
755 pLed->BlinkingLedState = RTW_LED_ON;
756 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
772 _adapter *padapter = pLed->padapter;
773 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
774 u8 bStopBlinking = _FALSE;
776 // Change LED according to BlinkingLedState specified.
777 if( pLed->BlinkingLedState == RTW_LED_ON )
779 SwLedOn(padapter, pLed);
780 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
784 if(pLed->CurrLedState != LED_BLINK_WPS_STOP)
785 SwLedOff(padapter, pLed);
786 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
789 switch(pLed->CurrLedState)
793 if( pLed->BlinkTimes == 0 )
795 bStopBlinking = _TRUE;
800 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
802 SwLedOff(padapter, pLed);
804 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
806 pLed->CurrLedState = RTW_LED_ON;
807 pLed->BlinkingLedState = RTW_LED_ON;
809 SwLedOn(padapter, pLed);
811 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
813 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
815 pLed->CurrLedState = RTW_LED_OFF;
816 pLed->BlinkingLedState = RTW_LED_OFF;
818 SwLedOff(padapter, pLed);
820 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
822 pLed->bLedScanBlinkInProgress = _FALSE;
826 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
828 SwLedOff(padapter, pLed);
833 pLed->BlinkingLedState = RTW_LED_OFF;
835 pLed->BlinkingLedState = RTW_LED_ON;
836 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
843 if( pLed->BlinkTimes == 0 )
845 bStopBlinking = _TRUE;
849 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
851 SwLedOff(padapter, pLed);
853 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
855 pLed->CurrLedState = RTW_LED_ON;
856 pLed->BlinkingLedState = RTW_LED_ON;
859 SwLedOn(padapter, pLed);
861 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
863 else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
865 pLed->CurrLedState = RTW_LED_OFF;
866 pLed->BlinkingLedState = RTW_LED_OFF;
869 SwLedOff(padapter, pLed);
872 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
874 pLed->bLedBlinkInProgress = _FALSE;
878 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
880 SwLedOff(padapter, pLed);
885 pLed->BlinkingLedState = RTW_LED_OFF;
887 pLed->BlinkingLedState = RTW_LED_ON;
888 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
895 pLed->BlinkingLedState = RTW_LED_OFF;
897 pLed->BlinkingLedState = RTW_LED_ON;
898 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
901 case LED_BLINK_WPS_STOP: //WPS success
902 if(pLed->BlinkingLedState == RTW_LED_ON)
904 pLed->BlinkingLedState = RTW_LED_OFF;
905 _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
906 bStopBlinking = _FALSE;
910 bStopBlinking = _TRUE;
915 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
917 SwLedOff(padapter, pLed);
921 pLed->CurrLedState = RTW_LED_ON;
922 pLed->BlinkingLedState = RTW_LED_ON;
923 SwLedOn(padapter, pLed);
924 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
926 pLed->bLedWPSBlinkInProgress = _FALSE;
943 _adapter *padapter = pLed->padapter;
944 struct led_priv *ledpriv = &(padapter->ledpriv);
945 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
946 PLED_871x pLed1 = &(ledpriv->SwLed1);
947 u8 bStopBlinking = _FALSE;
949 // Change LED according to BlinkingLedState specified.
950 if( pLed->BlinkingLedState == RTW_LED_ON )
952 SwLedOn(padapter, pLed);
953 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
957 SwLedOff(padapter, pLed);
958 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
961 if(!pLed1->bLedWPSBlinkInProgress && pLed1->BlinkingLedState == LED_UNKNOWN)
963 pLed1->BlinkingLedState = RTW_LED_OFF;
964 pLed1->CurrLedState = RTW_LED_OFF;
965 SwLedOff(padapter, pLed1);
968 switch(pLed->CurrLedState)
970 case LED_BLINK_SLOWLY:
972 pLed->BlinkingLedState = RTW_LED_OFF;
974 pLed->BlinkingLedState = RTW_LED_ON;
975 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
978 case LED_BLINK_StartToBlink:
981 pLed->BlinkingLedState = RTW_LED_OFF;
982 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
986 pLed->BlinkingLedState = RTW_LED_ON;
987 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
993 if( pLed->BlinkTimes == 0 )
995 bStopBlinking = _FALSE;
1000 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
1002 SwLedOff(padapter, pLed);
1006 pLed->bLedNoLinkBlinkInProgress = _FALSE;
1007 pLed->CurrLedState = LED_BLINK_SLOWLY;
1009 pLed->BlinkingLedState = RTW_LED_OFF;
1011 pLed->BlinkingLedState = RTW_LED_ON;
1012 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
1014 pLed->bLedScanBlinkInProgress = _FALSE;
1018 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
1020 SwLedOff(padapter, pLed);
1025 pLed->BlinkingLedState = RTW_LED_OFF;
1027 pLed->BlinkingLedState = RTW_LED_ON;
1028 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
1033 case LED_TXRX_BLINK:
1035 if( pLed->BlinkTimes == 0 )
1037 bStopBlinking = _TRUE;
1041 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
1043 SwLedOff(padapter, pLed);
1047 pLed->bLedNoLinkBlinkInProgress = _TRUE;
1048 pLed->CurrLedState = LED_BLINK_SLOWLY;
1050 pLed->BlinkingLedState = RTW_LED_OFF;
1052 pLed->BlinkingLedState = RTW_LED_ON;
1053 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
1055 pLed->bLedBlinkInProgress = _FALSE;
1059 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
1061 SwLedOff(padapter, pLed);
1066 pLed->BlinkingLedState = RTW_LED_OFF;
1068 pLed->BlinkingLedState = RTW_LED_ON;
1069 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
1077 pLed->BlinkingLedState = RTW_LED_OFF;
1078 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
1082 pLed->BlinkingLedState = RTW_LED_ON;
1083 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
1087 case LED_BLINK_WPS_STOP: //WPS authentication fail
1089 pLed->BlinkingLedState = RTW_LED_OFF;
1091 pLed->BlinkingLedState = RTW_LED_ON;
1093 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
1096 case LED_BLINK_WPS_STOP_OVERLAP: //WPS session overlap
1098 if(pLed->BlinkTimes == 0)
1102 pLed->BlinkTimes = 1;
1106 bStopBlinking = _TRUE;
1112 pLed->BlinkTimes = 10;
1113 pLed->BlinkingLedState = RTW_LED_ON;
1114 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
1119 pLed->BlinkingLedState = RTW_LED_OFF;
1121 pLed->BlinkingLedState = RTW_LED_ON;
1123 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
1132 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink4 CurrLedState %d\n", pLed->CurrLedState));
1142 _adapter *padapter = pLed->padapter;
1143 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1144 u8 bStopBlinking = _FALSE;
1146 // Change LED according to BlinkingLedState specified.
1147 if( pLed->BlinkingLedState == RTW_LED_ON )
1149 SwLedOn(padapter, pLed);
1150 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
1154 SwLedOff(padapter, pLed);
1155 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
1158 switch(pLed->CurrLedState)
1160 case LED_SCAN_BLINK:
1162 if( pLed->BlinkTimes == 0 )
1164 bStopBlinking = _TRUE;
1169 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
1171 pLed->CurrLedState = RTW_LED_OFF;
1172 pLed->BlinkingLedState = RTW_LED_OFF;
1174 SwLedOff(padapter, pLed);
1177 { pLed->CurrLedState = RTW_LED_ON;
1178 pLed->BlinkingLedState = RTW_LED_ON;
1180 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
1183 pLed->bLedScanBlinkInProgress = _FALSE;
1187 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
1189 SwLedOff(padapter, pLed);
1194 pLed->BlinkingLedState = RTW_LED_OFF;
1196 pLed->BlinkingLedState = RTW_LED_ON;
1197 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
1203 case LED_TXRX_BLINK:
1205 if( pLed->BlinkTimes == 0 )
1207 bStopBlinking = _TRUE;
1212 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
1214 pLed->CurrLedState = RTW_LED_OFF;
1215 pLed->BlinkingLedState = RTW_LED_OFF;
1217 SwLedOff(padapter, pLed);
1221 pLed->CurrLedState = RTW_LED_ON;
1222 pLed->BlinkingLedState = RTW_LED_ON;
1224 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
1227 pLed->bLedBlinkInProgress = _FALSE;
1231 if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
1233 SwLedOff(padapter, pLed);
1238 pLed->BlinkingLedState = RTW_LED_OFF;
1240 pLed->BlinkingLedState = RTW_LED_ON;
1241 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
1250 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink5 CurrLedState %d\n", pLed->CurrLedState));
1260 _adapter *padapter = pLed->padapter;
1261 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1262 u8 bStopBlinking = _FALSE;
1264 // Change LED according to BlinkingLedState specified.
1265 if( pLed->BlinkingLedState == RTW_LED_ON )
1267 SwLedOn(padapter, pLed);
1268 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
1272 SwLedOff(padapter, pLed);
1273 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
1276 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("<==== blink6\n"));
1282 // Callback function of LED BlinkTimer,
1283 // it just schedules to corresponding BlinkWorkItem.
1290 PLED_871x pLed = (PLED_871x)data;
1291 _adapter *padapter = pLed->padapter;
1293 //DBG_871X("%s\n", __FUNCTION__);
1295 if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
1297 //DBG_871X("%s bSurpriseRemoved:%d, bDriverStopped:%d\n", __FUNCTION__, padapter->bSurpriseRemoved, padapter->bDriverStopped);
1301 #ifdef CONFIG_LED_HANDLED_BY_CMD_THREAD
1302 rtw_led_blink_cmd(padapter, pLed);
1304 _set_workitem(&(pLed->BlinkWorkItem));
1310 // Handler function of LED Blinking.
1311 // We dispatch acture LED blink action according to LedStrategy.
1313 void BlinkHandler(PLED_871x pLed)
1315 struct led_priv *ledpriv = &(pLed->padapter->ledpriv);
1316 _adapter *padapter = pLed->padapter;
1318 //DBG_871X("%s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
1320 if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
1322 //DBG_871X("%s bSurpriseRemoved:%d, bDriverStopped:%d\n", __FUNCTION__, padapter->bSurpriseRemoved, padapter->bDriverStopped);
1326 switch(ledpriv->LedStrategy)
1357 //RT_TRACE(COMP_LED, DBG_LOUD, ("BlinkWorkItemCallback 0x%x \n", pHalData->LedStrategy));
1365 // Callback function of LED BlinkWorkItem.
1366 // We dispatch acture LED blink action according to LedStrategy.
1368 static void BlinkWorkItemCallback(struct work_struct *work)
1370 PLED_871x pLed = container_of(work, LED_871x, BlinkWorkItem);
1376 //================================================================================
1377 // Default LED behavior.
1378 //================================================================================
1382 // Implement each led action for SW_LED_MODE0.
1383 // This is default strategy.
1388 LED_CTL_MODE LedAction
1391 struct led_priv *ledpriv = &(padapter->ledpriv);
1392 PLED_871x pLed = &(ledpriv->SwLed1);
1399 if( pLed->bLedBlinkInProgress == _FALSE )
1401 pLed->bLedBlinkInProgress = _TRUE;
1403 pLed->CurrLedState = LED_BLINK_NORMAL;
1404 pLed->BlinkTimes = 2;
1407 pLed->BlinkingLedState = RTW_LED_OFF;
1409 pLed->BlinkingLedState = RTW_LED_ON;
1410 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
1414 case LED_CTL_START_TO_LINK:
1415 if( pLed->bLedBlinkInProgress == _FALSE )
1417 pLed->bLedBlinkInProgress = _TRUE;
1419 pLed->CurrLedState = LED_BLINK_StartToBlink;
1420 pLed->BlinkTimes = 24;
1423 pLed->BlinkingLedState = RTW_LED_OFF;
1425 pLed->BlinkingLedState = RTW_LED_ON;
1426 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
1430 pLed->CurrLedState = LED_BLINK_StartToBlink;
1435 pLed->CurrLedState = RTW_LED_ON;
1436 if( pLed->bLedBlinkInProgress == _FALSE )
1438 SwLedOn(padapter, pLed);
1442 case LED_CTL_NO_LINK:
1443 pLed->CurrLedState = RTW_LED_OFF;
1444 if( pLed->bLedBlinkInProgress == _FALSE )
1446 SwLedOff(padapter, pLed);
1450 case LED_CTL_POWER_OFF:
1451 pLed->CurrLedState = RTW_LED_OFF;
1452 if(pLed->bLedBlinkInProgress)
1454 _cancel_timer_ex(&(pLed->BlinkTimer));
1455 pLed->bLedBlinkInProgress = _FALSE;
1457 SwLedOff(padapter, pLed);
1460 case LED_CTL_START_WPS:
1461 if( pLed->bLedBlinkInProgress == _FALSE || pLed->CurrLedState == RTW_LED_ON)
1463 pLed->bLedBlinkInProgress = _TRUE;
1465 pLed->CurrLedState = LED_BLINK_WPS;
1466 pLed->BlinkTimes = 20;
1470 pLed->BlinkingLedState = RTW_LED_OFF;
1471 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
1475 pLed->BlinkingLedState = RTW_LED_ON;
1476 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
1481 case LED_CTL_STOP_WPS:
1482 if(pLed->bLedBlinkInProgress)
1484 pLed->CurrLedState = RTW_LED_OFF;
1485 _cancel_timer_ex(&(pLed->BlinkTimer));
1486 pLed->bLedBlinkInProgress = _FALSE;
1495 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));
1499 //ALPHA, added by chiyoko, 20090106
1503 LED_CTL_MODE LedAction
1506 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
1507 struct led_priv *ledpriv = &(padapter->ledpriv);
1508 PLED_871x pLed = &(ledpriv->SwLed0);
1509 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
1511 if(pHalData->EEPROMCustomerID == RT_CID_819x_CAMEO)
1512 pLed = &(ledpriv->SwLed1);
1516 case LED_CTL_POWER_ON:
1517 case LED_CTL_START_TO_LINK:
1518 case LED_CTL_NO_LINK:
1519 if( pLed->bLedNoLinkBlinkInProgress == _FALSE )
1521 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1525 if( pLed->bLedLinkBlinkInProgress == _TRUE )
1527 _cancel_timer_ex(&(pLed->BlinkTimer));
1528 pLed->bLedLinkBlinkInProgress = _FALSE;
1530 if(pLed->bLedBlinkInProgress ==_TRUE)
1532 _cancel_timer_ex(&(pLed->BlinkTimer));
1533 pLed->bLedBlinkInProgress = _FALSE;
1536 pLed->bLedNoLinkBlinkInProgress = _TRUE;
1537 pLed->CurrLedState = LED_BLINK_SLOWLY;
1539 pLed->BlinkingLedState = RTW_LED_OFF;
1541 pLed->BlinkingLedState = RTW_LED_ON;
1542 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
1547 if( pLed->bLedLinkBlinkInProgress == _FALSE )
1549 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1553 if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
1555 _cancel_timer_ex(&(pLed->BlinkTimer));
1556 pLed->bLedNoLinkBlinkInProgress = _FALSE;
1558 if(pLed->bLedBlinkInProgress ==_TRUE)
1560 _cancel_timer_ex(&(pLed->BlinkTimer));
1561 pLed->bLedBlinkInProgress = _FALSE;
1563 pLed->bLedLinkBlinkInProgress = _TRUE;
1564 pLed->CurrLedState = LED_BLINK_NORMAL;
1566 pLed->BlinkingLedState = RTW_LED_OFF;
1568 pLed->BlinkingLedState = RTW_LED_ON;
1569 _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
1573 case LED_CTL_SITE_SURVEY:
1574 if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
1576 else if(pLed->bLedScanBlinkInProgress ==_FALSE)
1578 if(IS_LED_WPS_BLINKING(pLed))
1581 if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
1583 _cancel_timer_ex(&(pLed->BlinkTimer));
1584 pLed->bLedNoLinkBlinkInProgress = _FALSE;
1586 if( pLed->bLedLinkBlinkInProgress == _TRUE )
1588 _cancel_timer_ex(&(pLed->BlinkTimer));
1589 pLed->bLedLinkBlinkInProgress = _FALSE;
1591 if(pLed->bLedBlinkInProgress ==_TRUE)
1593 _cancel_timer_ex(&(pLed->BlinkTimer));
1594 pLed->bLedBlinkInProgress = _FALSE;
1596 pLed->bLedScanBlinkInProgress = _TRUE;
1597 pLed->CurrLedState = LED_SCAN_BLINK;
1598 pLed->BlinkTimes = 24;
1600 pLed->BlinkingLedState = RTW_LED_OFF;
1602 pLed->BlinkingLedState = RTW_LED_ON;
1603 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
1609 if(pLed->bLedBlinkInProgress ==_FALSE)
1611 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1615 if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
1617 _cancel_timer_ex(&(pLed->BlinkTimer));
1618 pLed->bLedNoLinkBlinkInProgress = _FALSE;
1620 if( pLed->bLedLinkBlinkInProgress == _TRUE )
1622 _cancel_timer_ex(&(pLed->BlinkTimer));
1623 pLed->bLedLinkBlinkInProgress = _FALSE;
1625 pLed->bLedBlinkInProgress = _TRUE;
1626 pLed->CurrLedState = LED_TXRX_BLINK;
1627 pLed->BlinkTimes = 2;
1629 pLed->BlinkingLedState = RTW_LED_OFF;
1631 pLed->BlinkingLedState = RTW_LED_ON;
1632 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
1636 case LED_CTL_START_WPS: //wait until xinpin finish
1637 case LED_CTL_START_WPS_BOTTON:
1638 if(pLed->bLedWPSBlinkInProgress ==_FALSE)
1640 if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
1642 _cancel_timer_ex(&(pLed->BlinkTimer));
1643 pLed->bLedNoLinkBlinkInProgress = _FALSE;
1645 if( pLed->bLedLinkBlinkInProgress == _TRUE )
1647 _cancel_timer_ex(&(pLed->BlinkTimer));
1648 pLed->bLedLinkBlinkInProgress = _FALSE;
1650 if(pLed->bLedBlinkInProgress ==_TRUE)
1652 _cancel_timer_ex(&(pLed->BlinkTimer));
1653 pLed->bLedBlinkInProgress = _FALSE;
1655 if(pLed->bLedScanBlinkInProgress ==_TRUE)
1657 _cancel_timer_ex(&(pLed->BlinkTimer));
1658 pLed->bLedScanBlinkInProgress = _FALSE;
1660 pLed->bLedWPSBlinkInProgress = _TRUE;
1661 pLed->CurrLedState = LED_BLINK_WPS;
1663 pLed->BlinkingLedState = RTW_LED_OFF;
1665 pLed->BlinkingLedState = RTW_LED_ON;
1666 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
1671 case LED_CTL_STOP_WPS:
1672 if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
1674 _cancel_timer_ex(&(pLed->BlinkTimer));
1675 pLed->bLedNoLinkBlinkInProgress = _FALSE;
1677 if( pLed->bLedLinkBlinkInProgress == _TRUE )
1679 _cancel_timer_ex(&(pLed->BlinkTimer));
1680 pLed->bLedLinkBlinkInProgress = _FALSE;
1682 if(pLed->bLedBlinkInProgress ==_TRUE)
1684 _cancel_timer_ex(&(pLed->BlinkTimer));
1685 pLed->bLedBlinkInProgress = _FALSE;
1687 if(pLed->bLedScanBlinkInProgress ==_TRUE)
1689 _cancel_timer_ex(&(pLed->BlinkTimer));
1690 pLed->bLedScanBlinkInProgress = _FALSE;
1692 if(pLed->bLedWPSBlinkInProgress)
1694 _cancel_timer_ex(&(pLed->BlinkTimer));
1698 pLed->bLedWPSBlinkInProgress = _TRUE;
1701 pLed->CurrLedState = LED_BLINK_WPS_STOP;
1704 pLed->BlinkingLedState = RTW_LED_OFF;
1705 _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
1709 pLed->BlinkingLedState = RTW_LED_ON;
1710 _set_timer(&(pLed->BlinkTimer), 0);
1714 case LED_CTL_STOP_WPS_FAIL:
1715 if(pLed->bLedWPSBlinkInProgress)
1717 _cancel_timer_ex(&(pLed->BlinkTimer));
1718 pLed->bLedWPSBlinkInProgress = _FALSE;
1721 pLed->bLedNoLinkBlinkInProgress = _TRUE;
1722 pLed->CurrLedState = LED_BLINK_SLOWLY;
1724 pLed->BlinkingLedState = RTW_LED_OFF;
1726 pLed->BlinkingLedState = RTW_LED_ON;
1727 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
1730 case LED_CTL_POWER_OFF:
1731 pLed->CurrLedState = RTW_LED_OFF;
1732 pLed->BlinkingLedState = RTW_LED_OFF;
1733 if( pLed->bLedNoLinkBlinkInProgress)
1735 _cancel_timer_ex(&(pLed->BlinkTimer));
1736 pLed->bLedNoLinkBlinkInProgress = _FALSE;
1738 if( pLed->bLedLinkBlinkInProgress)
1740 _cancel_timer_ex(&(pLed->BlinkTimer));
1741 pLed->bLedLinkBlinkInProgress = _FALSE;
1743 if( pLed->bLedBlinkInProgress)
1745 _cancel_timer_ex(&(pLed->BlinkTimer));
1746 pLed->bLedBlinkInProgress = _FALSE;
1748 if( pLed->bLedWPSBlinkInProgress )
1750 _cancel_timer_ex(&(pLed->BlinkTimer));
1751 pLed->bLedWPSBlinkInProgress = _FALSE;
1753 if( pLed->bLedScanBlinkInProgress)
1755 _cancel_timer_ex(&(pLed->BlinkTimer));
1756 pLed->bLedScanBlinkInProgress = _FALSE;
1759 SwLedOff(padapter, pLed);
1767 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));
1770 //Arcadyan/Sitecom , added by chiyoko, 20090216
1774 LED_CTL_MODE LedAction
1777 struct led_priv *ledpriv = &(padapter->ledpriv);
1778 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
1779 PLED_871x pLed = &(ledpriv->SwLed0);
1783 case LED_CTL_SITE_SURVEY:
1784 if(pmlmepriv->LinkDetectInfo.bBusyTraffic)
1786 else if(pLed->bLedScanBlinkInProgress ==_FALSE)
1788 if(IS_LED_WPS_BLINKING(pLed))
1791 if(pLed->bLedBlinkInProgress ==_TRUE)
1793 _cancel_timer_ex(&(pLed->BlinkTimer));
1794 pLed->bLedBlinkInProgress = _FALSE;
1796 pLed->bLedScanBlinkInProgress = _TRUE;
1797 pLed->CurrLedState = LED_SCAN_BLINK;
1798 pLed->BlinkTimes = 24;
1800 pLed->BlinkingLedState = RTW_LED_OFF;
1802 pLed->BlinkingLedState = RTW_LED_ON;
1803 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
1809 if((pLed->bLedBlinkInProgress ==_FALSE) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
1811 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1816 pLed->bLedBlinkInProgress = _TRUE;
1817 pLed->CurrLedState = LED_TXRX_BLINK;
1818 pLed->BlinkTimes = 2;
1820 pLed->BlinkingLedState = RTW_LED_OFF;
1822 pLed->BlinkingLedState = RTW_LED_ON;
1823 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
1828 pLed->CurrLedState = RTW_LED_ON;
1829 pLed->BlinkingLedState = RTW_LED_ON;
1830 if( pLed->bLedBlinkInProgress)
1832 _cancel_timer_ex(&(pLed->BlinkTimer));
1833 pLed->bLedBlinkInProgress = _FALSE;
1835 if( pLed->bLedScanBlinkInProgress)
1837 _cancel_timer_ex(&(pLed->BlinkTimer));
1838 pLed->bLedScanBlinkInProgress = _FALSE;
1841 _set_timer(&(pLed->BlinkTimer), 0);
1844 case LED_CTL_START_WPS: //wait until xinpin finish
1845 case LED_CTL_START_WPS_BOTTON:
1846 if(pLed->bLedWPSBlinkInProgress ==_FALSE)
1848 if(pLed->bLedBlinkInProgress ==_TRUE)
1850 _cancel_timer_ex(&(pLed->BlinkTimer));
1851 pLed->bLedBlinkInProgress = _FALSE;
1853 if(pLed->bLedScanBlinkInProgress ==_TRUE)
1855 _cancel_timer_ex(&(pLed->BlinkTimer));
1856 pLed->bLedScanBlinkInProgress = _FALSE;
1858 pLed->bLedWPSBlinkInProgress = _TRUE;
1859 pLed->CurrLedState = RTW_LED_ON;
1860 pLed->BlinkingLedState = RTW_LED_ON;
1861 _set_timer(&(pLed->BlinkTimer), 0);
1865 case LED_CTL_STOP_WPS:
1866 pLed->bLedWPSBlinkInProgress = _FALSE;
1867 if(padapter->pwrctrlpriv.rf_pwrstate != rf_on)
1869 SwLedOff(padapter, pLed);
1873 pLed->CurrLedState = RTW_LED_ON;
1874 pLed->BlinkingLedState = RTW_LED_ON;
1875 _set_timer(&(pLed->BlinkTimer), 0);
1876 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
1880 case LED_CTL_STOP_WPS_FAIL:
1881 pLed->bLedWPSBlinkInProgress = _FALSE;
1882 if(padapter->pwrctrlpriv.rf_pwrstate != rf_on)
1884 SwLedOff(padapter, pLed);
1888 pLed->CurrLedState = RTW_LED_OFF;
1889 pLed->BlinkingLedState = RTW_LED_OFF;
1890 _set_timer(&(pLed->BlinkTimer), 0);
1891 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
1895 case LED_CTL_START_TO_LINK:
1896 case LED_CTL_NO_LINK:
1897 if(!IS_LED_BLINKING(pLed))
1899 pLed->CurrLedState = RTW_LED_OFF;
1900 pLed->BlinkingLedState = RTW_LED_OFF;
1901 _set_timer(&(pLed->BlinkTimer), 0);
1905 case LED_CTL_POWER_OFF:
1906 pLed->CurrLedState = RTW_LED_OFF;
1907 pLed->BlinkingLedState = RTW_LED_OFF;
1908 if( pLed->bLedBlinkInProgress)
1910 _cancel_timer_ex(&(pLed->BlinkTimer));
1911 pLed->bLedBlinkInProgress = _FALSE;
1913 if( pLed->bLedScanBlinkInProgress)
1915 _cancel_timer_ex(&(pLed->BlinkTimer));
1916 pLed->bLedScanBlinkInProgress = _FALSE;
1918 if( pLed->bLedWPSBlinkInProgress )
1920 _cancel_timer_ex(&(pLed->BlinkTimer));
1921 pLed->bLedWPSBlinkInProgress = _FALSE;
1924 _set_timer(&(pLed->BlinkTimer), 0);
1932 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
1935 //COREGA, added by chiyoko, 20090316
1939 LED_CTL_MODE LedAction
1942 struct led_priv *ledpriv = &(padapter->ledpriv);
1943 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
1944 PLED_871x pLed = &(ledpriv->SwLed0);
1948 case LED_CTL_SITE_SURVEY:
1949 if(pmlmepriv->LinkDetectInfo.bBusyTraffic)
1951 else if(pLed->bLedScanBlinkInProgress ==_FALSE)
1953 if(IS_LED_WPS_BLINKING(pLed))
1956 if(pLed->bLedBlinkInProgress ==_TRUE)
1958 _cancel_timer_ex(&(pLed->BlinkTimer));
1959 pLed->bLedBlinkInProgress = _FALSE;
1961 pLed->bLedScanBlinkInProgress = _TRUE;
1962 pLed->CurrLedState = LED_SCAN_BLINK;
1963 pLed->BlinkTimes = 24;
1965 pLed->BlinkingLedState = RTW_LED_OFF;
1967 pLed->BlinkingLedState = RTW_LED_ON;
1968 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
1974 if((pLed->bLedBlinkInProgress ==_FALSE) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
1976 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1981 pLed->bLedBlinkInProgress = _TRUE;
1982 pLed->CurrLedState = LED_TXRX_BLINK;
1983 pLed->BlinkTimes = 2;
1985 pLed->BlinkingLedState = RTW_LED_OFF;
1987 pLed->BlinkingLedState = RTW_LED_ON;
1988 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
1993 if(IS_LED_WPS_BLINKING(pLed))
1996 pLed->CurrLedState = RTW_LED_ON;
1997 pLed->BlinkingLedState = RTW_LED_ON;
1998 if( pLed->bLedBlinkInProgress)
2000 _cancel_timer_ex(&(pLed->BlinkTimer));
2001 pLed->bLedBlinkInProgress = _FALSE;
2003 if( pLed->bLedScanBlinkInProgress)
2005 _cancel_timer_ex(&(pLed->BlinkTimer));
2006 pLed->bLedScanBlinkInProgress = _FALSE;
2009 _set_timer(&(pLed->BlinkTimer), 0);
2012 case LED_CTL_START_WPS: //wait until xinpin finish
2013 case LED_CTL_START_WPS_BOTTON:
2014 if(pLed->bLedWPSBlinkInProgress ==_FALSE)
2016 if(pLed->bLedBlinkInProgress ==_TRUE)
2018 _cancel_timer_ex(&(pLed->BlinkTimer));
2019 pLed->bLedBlinkInProgress = _FALSE;
2021 if(pLed->bLedScanBlinkInProgress ==_TRUE)
2023 _cancel_timer_ex(&(pLed->BlinkTimer));
2024 pLed->bLedScanBlinkInProgress = _FALSE;
2026 pLed->bLedWPSBlinkInProgress = _TRUE;
2027 pLed->CurrLedState = LED_BLINK_WPS;
2029 pLed->BlinkingLedState = RTW_LED_OFF;
2031 pLed->BlinkingLedState = RTW_LED_ON;
2032 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
2036 case LED_CTL_STOP_WPS:
2037 if(pLed->bLedWPSBlinkInProgress)
2039 _cancel_timer_ex(&(pLed->BlinkTimer));
2040 pLed->bLedWPSBlinkInProgress = _FALSE;
2044 pLed->bLedWPSBlinkInProgress = _TRUE;
2047 pLed->CurrLedState = LED_BLINK_WPS_STOP;
2050 pLed->BlinkingLedState = RTW_LED_OFF;
2051 _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
2055 pLed->BlinkingLedState = RTW_LED_ON;
2056 _set_timer(&(pLed->BlinkTimer), 0);
2061 case LED_CTL_STOP_WPS_FAIL:
2062 if(pLed->bLedWPSBlinkInProgress)
2064 _cancel_timer_ex(&(pLed->BlinkTimer));
2065 pLed->bLedWPSBlinkInProgress = _FALSE;
2068 pLed->CurrLedState = RTW_LED_OFF;
2069 pLed->BlinkingLedState = RTW_LED_OFF;
2070 _set_timer(&(pLed->BlinkTimer), 0);
2073 case LED_CTL_START_TO_LINK:
2074 case LED_CTL_NO_LINK:
2075 if(!IS_LED_BLINKING(pLed))
2077 pLed->CurrLedState = RTW_LED_OFF;
2078 pLed->BlinkingLedState = RTW_LED_OFF;
2079 _set_timer(&(pLed->BlinkTimer), 0);
2083 case LED_CTL_POWER_OFF:
2084 pLed->CurrLedState = RTW_LED_OFF;
2085 pLed->BlinkingLedState = RTW_LED_OFF;
2086 if( pLed->bLedBlinkInProgress)
2088 _cancel_timer_ex(&(pLed->BlinkTimer));
2089 pLed->bLedBlinkInProgress = _FALSE;
2091 if( pLed->bLedScanBlinkInProgress)
2093 _cancel_timer_ex(&(pLed->BlinkTimer));
2094 pLed->bLedScanBlinkInProgress = _FALSE;
2096 if( pLed->bLedWPSBlinkInProgress )
2098 _cancel_timer_ex(&(pLed->BlinkTimer));
2099 pLed->bLedWPSBlinkInProgress = _FALSE;
2102 _set_timer(&(pLed->BlinkTimer), 0);
2110 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
2114 //Edimax-Belkin, added by chiyoko, 20090413
2118 LED_CTL_MODE LedAction
2121 struct led_priv *ledpriv = &(padapter->ledpriv);
2122 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
2123 PLED_871x pLed = &(ledpriv->SwLed0);
2124 PLED_871x pLed1 = &(ledpriv->SwLed1);
2128 case LED_CTL_START_TO_LINK:
2129 if(pLed1->bLedWPSBlinkInProgress)
2131 pLed1->bLedWPSBlinkInProgress = _FALSE;
2132 _cancel_timer_ex(&(pLed1->BlinkTimer));
2134 pLed1->BlinkingLedState = RTW_LED_OFF;
2135 pLed1->CurrLedState = RTW_LED_OFF;
2138 _set_timer(&(pLed->BlinkTimer), 0);
2141 if( pLed->bLedStartToLinkBlinkInProgress == _FALSE )
2143 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
2147 if(pLed->bLedBlinkInProgress ==_TRUE)
2149 _cancel_timer_ex(&(pLed->BlinkTimer));
2150 pLed->bLedBlinkInProgress = _FALSE;
2152 if(pLed->bLedNoLinkBlinkInProgress ==_TRUE)
2154 _cancel_timer_ex(&(pLed->BlinkTimer));
2155 pLed->bLedNoLinkBlinkInProgress = _FALSE;
2158 pLed->bLedStartToLinkBlinkInProgress = _TRUE;
2159 pLed->CurrLedState = LED_BLINK_StartToBlink;
2162 pLed->BlinkingLedState = RTW_LED_OFF;
2163 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
2167 pLed->BlinkingLedState = RTW_LED_ON;
2168 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
2174 case LED_CTL_NO_LINK:
2176 if(LedAction == LED_CTL_LINK)
2178 if(pLed1->bLedWPSBlinkInProgress)
2180 pLed1->bLedWPSBlinkInProgress = _FALSE;
2181 _cancel_timer_ex(&(pLed1->BlinkTimer));
2183 pLed1->BlinkingLedState = RTW_LED_OFF;
2184 pLed1->CurrLedState = RTW_LED_OFF;
2187 _set_timer(&(pLed->BlinkTimer), 0);
2191 if( pLed->bLedNoLinkBlinkInProgress == _FALSE )
2193 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
2197 if(pLed->bLedBlinkInProgress ==_TRUE)
2199 _cancel_timer_ex(&(pLed->BlinkTimer));
2200 pLed->bLedBlinkInProgress = _FALSE;
2203 pLed->bLedNoLinkBlinkInProgress = _TRUE;
2204 pLed->CurrLedState = LED_BLINK_SLOWLY;
2206 pLed->BlinkingLedState = RTW_LED_OFF;
2208 pLed->BlinkingLedState = RTW_LED_ON;
2209 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
2213 case LED_CTL_SITE_SURVEY:
2214 if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
2216 else if(pLed->bLedScanBlinkInProgress ==_FALSE)
2218 if(IS_LED_WPS_BLINKING(pLed))
2221 if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
2223 _cancel_timer_ex(&(pLed->BlinkTimer));
2224 pLed->bLedNoLinkBlinkInProgress = _FALSE;
2226 if(pLed->bLedBlinkInProgress ==_TRUE)
2228 _cancel_timer_ex(&(pLed->BlinkTimer));
2229 pLed->bLedBlinkInProgress = _FALSE;
2231 pLed->bLedScanBlinkInProgress = _TRUE;
2232 pLed->CurrLedState = LED_SCAN_BLINK;
2233 pLed->BlinkTimes = 24;
2235 pLed->BlinkingLedState = RTW_LED_OFF;
2237 pLed->BlinkingLedState = RTW_LED_ON;
2238 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
2244 if(pLed->bLedBlinkInProgress ==_FALSE)
2246 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
2250 if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
2252 _cancel_timer_ex(&(pLed->BlinkTimer));
2253 pLed->bLedNoLinkBlinkInProgress = _FALSE;
2255 pLed->bLedBlinkInProgress = _TRUE;
2256 pLed->CurrLedState = LED_TXRX_BLINK;
2257 pLed->BlinkTimes = 2;
2259 pLed->BlinkingLedState = RTW_LED_OFF;
2261 pLed->BlinkingLedState = RTW_LED_ON;
2262 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
2266 case LED_CTL_START_WPS: //wait until xinpin finish
2267 case LED_CTL_START_WPS_BOTTON:
2268 if(pLed1->bLedWPSBlinkInProgress)
2270 pLed1->bLedWPSBlinkInProgress = _FALSE;
2271 _cancel_timer_ex(&(pLed1->BlinkTimer));
2273 pLed1->BlinkingLedState = RTW_LED_OFF;
2274 pLed1->CurrLedState = RTW_LED_OFF;
2277 _set_timer(&(pLed->BlinkTimer), 0);
2280 if(pLed->bLedWPSBlinkInProgress ==_FALSE)
2282 if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
2284 _cancel_timer_ex(&(pLed->BlinkTimer));
2285 pLed->bLedNoLinkBlinkInProgress = _FALSE;
2287 if(pLed->bLedBlinkInProgress ==_TRUE)
2289 _cancel_timer_ex(&(pLed->BlinkTimer));
2290 pLed->bLedBlinkInProgress = _FALSE;
2292 if(pLed->bLedScanBlinkInProgress ==_TRUE)
2294 _cancel_timer_ex(&(pLed->BlinkTimer));
2295 pLed->bLedScanBlinkInProgress = _FALSE;
2297 pLed->bLedWPSBlinkInProgress = _TRUE;
2298 pLed->CurrLedState = LED_BLINK_WPS;
2301 pLed->BlinkingLedState = RTW_LED_OFF;
2302 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
2306 pLed->BlinkingLedState = RTW_LED_ON;
2307 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
2312 case LED_CTL_STOP_WPS: //WPS connect success
2313 if(pLed->bLedWPSBlinkInProgress)
2315 _cancel_timer_ex(&(pLed->BlinkTimer));
2316 pLed->bLedWPSBlinkInProgress = _FALSE;
2319 pLed->bLedNoLinkBlinkInProgress = _TRUE;
2320 pLed->CurrLedState = LED_BLINK_SLOWLY;
2322 pLed->BlinkingLedState = RTW_LED_OFF;
2324 pLed->BlinkingLedState = RTW_LED_ON;
2325 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
2329 case LED_CTL_STOP_WPS_FAIL: //WPS authentication fail
2330 if(pLed->bLedWPSBlinkInProgress)
2332 _cancel_timer_ex(&(pLed->BlinkTimer));
2333 pLed->bLedWPSBlinkInProgress = _FALSE;
2336 pLed->bLedNoLinkBlinkInProgress = _TRUE;
2337 pLed->CurrLedState = LED_BLINK_SLOWLY;
2339 pLed->BlinkingLedState = RTW_LED_OFF;
2341 pLed->BlinkingLedState = RTW_LED_ON;
2342 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
2345 if(pLed1->bLedWPSBlinkInProgress)
2346 _cancel_timer_ex(&(pLed1->BlinkTimer));
2348 pLed1->bLedWPSBlinkInProgress = _TRUE;
2350 pLed1->CurrLedState = LED_BLINK_WPS_STOP;
2352 pLed1->BlinkingLedState = RTW_LED_OFF;
2354 pLed1->BlinkingLedState = RTW_LED_ON;
2355 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
2359 case LED_CTL_STOP_WPS_FAIL_OVERLAP: //WPS session overlap
2360 if(pLed->bLedWPSBlinkInProgress)
2362 _cancel_timer_ex(&(pLed->BlinkTimer));
2363 pLed->bLedWPSBlinkInProgress = _FALSE;
2366 pLed->bLedNoLinkBlinkInProgress = _TRUE;
2367 pLed->CurrLedState = LED_BLINK_SLOWLY;
2369 pLed->BlinkingLedState = RTW_LED_OFF;
2371 pLed->BlinkingLedState = RTW_LED_ON;
2372 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
2375 if(pLed1->bLedWPSBlinkInProgress)
2376 _cancel_timer_ex(&(pLed1->BlinkTimer));
2378 pLed1->bLedWPSBlinkInProgress = _TRUE;
2380 pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;
2381 pLed1->BlinkTimes = 10;
2383 pLed1->BlinkingLedState = RTW_LED_OFF;
2385 pLed1->BlinkingLedState = RTW_LED_ON;
2386 _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
2390 case LED_CTL_POWER_OFF:
2391 pLed->CurrLedState = RTW_LED_OFF;
2392 pLed->BlinkingLedState = RTW_LED_OFF;
2394 if( pLed->bLedNoLinkBlinkInProgress)
2396 _cancel_timer_ex(&(pLed->BlinkTimer));
2397 pLed->bLedNoLinkBlinkInProgress = _FALSE;
2399 if( pLed->bLedLinkBlinkInProgress)
2401 _cancel_timer_ex(&(pLed->BlinkTimer));
2402 pLed->bLedLinkBlinkInProgress = _FALSE;
2404 if( pLed->bLedBlinkInProgress)
2406 _cancel_timer_ex(&(pLed->BlinkTimer));
2407 pLed->bLedBlinkInProgress = _FALSE;
2409 if( pLed->bLedWPSBlinkInProgress )
2411 _cancel_timer_ex(&(pLed->BlinkTimer));
2412 pLed->bLedWPSBlinkInProgress = _FALSE;
2414 if( pLed->bLedScanBlinkInProgress)
2416 _cancel_timer_ex(&(pLed->BlinkTimer));
2417 pLed->bLedScanBlinkInProgress = _FALSE;
2419 if( pLed->bLedStartToLinkBlinkInProgress)
2421 _cancel_timer_ex(&(pLed->BlinkTimer));
2422 pLed->bLedStartToLinkBlinkInProgress = _FALSE;
2425 if( pLed1->bLedWPSBlinkInProgress )
2427 _cancel_timer_ex(&(pLed1->BlinkTimer));
2428 pLed1->bLedWPSBlinkInProgress = _FALSE;
2431 pLed1->BlinkingLedState = LED_UNKNOWN;
2432 SwLedOff(padapter, pLed);
2433 SwLedOff(padapter, pLed1);
2441 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));
2446 //Sercomm-Belkin, added by chiyoko, 20090415
2450 LED_CTL_MODE LedAction
2453 HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
2454 struct led_priv *ledpriv = &(padapter->ledpriv);
2455 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
2456 PLED_871x pLed = &(ledpriv->SwLed0);
2458 if(pHalData->EEPROMCustomerID == RT_CID_819x_CAMEO)
2459 pLed = &(ledpriv->SwLed1);
2463 case LED_CTL_POWER_ON:
2464 case LED_CTL_NO_LINK:
2465 case LED_CTL_LINK: //solid blue
2466 pLed->CurrLedState = RTW_LED_ON;
2467 pLed->BlinkingLedState = RTW_LED_ON;
2469 _set_timer(&(pLed->BlinkTimer), 0);
2472 case LED_CTL_SITE_SURVEY:
2473 if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
2475 else if(pLed->bLedScanBlinkInProgress ==_FALSE)
2477 if(pLed->bLedBlinkInProgress ==_TRUE)
2479 _cancel_timer_ex(&(pLed->BlinkTimer));
2480 pLed->bLedBlinkInProgress = _FALSE;
2482 pLed->bLedScanBlinkInProgress = _TRUE;
2483 pLed->CurrLedState = LED_SCAN_BLINK;
2484 pLed->BlinkTimes = 24;
2486 pLed->BlinkingLedState = RTW_LED_OFF;
2488 pLed->BlinkingLedState = RTW_LED_ON;
2489 _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
2495 if(pLed->bLedBlinkInProgress ==_FALSE)
2497 if(pLed->CurrLedState == LED_SCAN_BLINK)
2501 pLed->bLedBlinkInProgress = _TRUE;
2502 pLed->CurrLedState = LED_TXRX_BLINK;
2503 pLed->BlinkTimes = 2;
2505 pLed->BlinkingLedState = RTW_LED_OFF;
2507 pLed->BlinkingLedState = RTW_LED_ON;
2508 _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
2512 case LED_CTL_POWER_OFF:
2513 pLed->CurrLedState = RTW_LED_OFF;
2514 pLed->BlinkingLedState = RTW_LED_OFF;
2516 if( pLed->bLedBlinkInProgress)
2518 _cancel_timer_ex(&(pLed->BlinkTimer));
2519 pLed->bLedBlinkInProgress = _FALSE;
2522 SwLedOff(padapter, pLed);
2530 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));
2533 //WNC-Corega, added by chiyoko, 20090902
2537 LED_CTL_MODE LedAction
2540 struct led_priv *ledpriv = &(padapter->ledpriv);
2541 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
2542 PLED_871x pLed0 = &(ledpriv->SwLed0);
2546 case LED_CTL_POWER_ON:
2548 case LED_CTL_NO_LINK:
2549 _cancel_timer_ex(&(pLed0->BlinkTimer));
2550 pLed0->CurrLedState = RTW_LED_ON;
2551 pLed0->BlinkingLedState = RTW_LED_ON;
2552 _set_timer(&(pLed0->BlinkTimer), 0);
2555 case LED_CTL_POWER_OFF:
2556 SwLedOff(padapter, pLed0);
2563 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("ledcontrol 6 Led %d\n", pLed0->CurrLedState));
2569 // Dispatch LED action according to pHalData->LedStrategy.
2574 LED_CTL_MODE LedAction
2577 struct led_priv *ledpriv = &(padapter->ledpriv);
2579 if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE)
2580 ||(padapter->hw_init_completed == _FALSE) )
2586 if( ledpriv->bRegUseLed == _FALSE)
2592 //if(priv->bInHctTest)
2595 if( (padapter->pwrctrlpriv.rf_pwrstate != rf_on &&
2596 padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) &&
2597 (LedAction == LED_CTL_TX || LedAction == LED_CTL_RX ||
2598 LedAction == LED_CTL_SITE_SURVEY ||
2599 LedAction == LED_CTL_LINK ||
2600 LedAction == LED_CTL_NO_LINK ||
2601 LedAction == LED_CTL_POWER_ON) )
2606 switch(ledpriv->LedStrategy)
2609 //SwLedControlMode0(padapter, LedAction);
2613 SwLedControlMode1(padapter, LedAction);
2616 SwLedControlMode2(padapter, LedAction);
2620 SwLedControlMode3(padapter, LedAction);
2624 SwLedControlMode4(padapter, LedAction);
2628 SwLedControlMode5(padapter, LedAction);
2632 SwLedControlMode6(padapter, LedAction);
2639 RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("LedStrategy:%d, LedAction %d\n", ledpriv->LedStrategy,LedAction));
2644 // Initialize all LED_871x objects.
2647 rtl8192cu_InitSwLeds(
2651 struct led_priv *pledpriv = &(padapter->ledpriv);
2653 pledpriv->LedControlHandler = LedControl871x;
2655 InitLed871x(padapter, &(pledpriv->SwLed0), LED_PIN_LED0);
2657 InitLed871x(padapter,&(pledpriv->SwLed1), LED_PIN_LED1);
2663 // DeInitialize all LED_819xUsb objects.
2666 rtl8192cu_DeInitSwLeds(
2670 struct led_priv *ledpriv = &(padapter->ledpriv);
2672 DeInitLed871x( &(ledpriv->SwLed0) );
2673 DeInitLed871x( &(ledpriv->SwLed1) );