/****************************************************************************** * * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * * ******************************************************************************/ #include // // Description: // Callback function of LED BlinkTimer, // it just schedules to corresponding BlinkWorkItem/led_blink_hdl // void BlinkTimerCallback(void *data) { PLED_871x pLed = (PLED_871x)data; _adapter *padapter = pLed->padapter; //DBG_88E("%s\n", __func__); if ( (padapter->bSurpriseRemoved == true) || ( padapter->bDriverStopped == true)) { //DBG_88E("%s bSurpriseRemoved:%d, bDriverStopped:%d\n", __func__, padapter->bSurpriseRemoved, padapter->bDriverStopped); return; } #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) #ifdef CONFIG_LED_HANDLED_BY_CMD_THREAD rtw_led_blink_cmd(padapter, pLed); #else _set_workitem(&(pLed->BlinkWorkItem)); #endif #elif defined(CONFIG_PCI_HCI) BlinkHandler(pLed); #endif } #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) // // Description: // Callback function of LED BlinkWorkItem. // We dispatch acture LED blink action according to LedStrategy. // void BlinkWorkItemCallback(struct work_struct *work) { PLED_871x pLed = container_of(work, LED_871x, BlinkWorkItem); BlinkHandler(pLed); } #endif // // Description: // Reset status of LED_871x object. // void ResetLedStatus(PLED_871x pLed) { pLed->CurrLedState = RTW_LED_OFF; // Current LED state. pLed->bLedOn = false; // true if LED is ON, false if LED is OFF. pLed->bLedBlinkInProgress = false; // true if it is blinking, false o.w.. pLed->bLedWPSBlinkInProgress = false; pLed->BlinkTimes = 0; // Number of times to toggle led state for blinking. pLed->BlinkingLedState = LED_UNKNOWN; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are. #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) pLed->bLedNoLinkBlinkInProgress = false; pLed->bLedLinkBlinkInProgress = false; pLed->bLedStartToLinkBlinkInProgress = false; pLed->bLedScanBlinkInProgress = false; #endif } // // Description: // Initialize an LED_871x object. // void InitLed871x( _adapter *padapter, PLED_871x pLed, LED_PIN_871x LedPin ) { pLed->padapter = padapter; pLed->LedPin = LedPin; ResetLedStatus(pLed); _init_timer(&(pLed->BlinkTimer), padapter->pnetdev, BlinkTimerCallback, pLed); #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) _init_workitem(&(pLed->BlinkWorkItem), BlinkWorkItemCallback, pLed); #endif } // // Description: // DeInitialize an LED_871x object. // void DeInitLed871x( PLED_871x pLed ) { #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) _cancel_workitem_sync(&(pLed->BlinkWorkItem)); #endif _cancel_timer_ex(&(pLed->BlinkTimer)); ResetLedStatus(pLed); } // // Description: // Implementation of LED blinking behavior. // It toggle off LED and schedule corresponding timer if necessary. // #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) void SwLedOn(_adapter *padapter, PLED_871x pLed); void SwLedOff(_adapter *padapter, PLED_871x pLed); #define CONFIG_LED_REMOVE_HAL void SwLedBlink( PLED_871x pLed ) { _adapter *padapter = pLed->padapter; struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); u8 bStopBlinking = false; // Change LED according to BlinkingLedState specified. if ( pLed->BlinkingLedState == RTW_LED_ON ) { SwLedOn(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes)); } else { SwLedOff(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,( "Blinktimes (%d): turn off\n", pLed->BlinkTimes)); } // Determine if we shall change LED state again. pLed->BlinkTimes--; switch (pLed->CurrLedState) { case LED_BLINK_NORMAL: if (pLed->BlinkTimes == 0) { bStopBlinking = true; } break; case LED_BLINK_StartToBlink: if ( check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE) ) { bStopBlinking = true; } if ( check_fwstate(pmlmepriv, _FW_LINKED) && (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) ) { bStopBlinking = true; } else if (pLed->BlinkTimes == 0) { bStopBlinking = true; } break; case LED_BLINK_WPS: if ( pLed->BlinkTimes == 0 ) { bStopBlinking = true; } break; default: bStopBlinking = true; break; } if (bStopBlinking) { //if ( padapter->pwrctrlpriv.cpwm >= PS_STATE_S2) if (0) { SwLedOff(padapter, pLed); } else if ( (check_fwstate(pmlmepriv, _FW_LINKED)== true) && (pLed->bLedOn == false)) { SwLedOn(padapter, pLed); } else if ( (check_fwstate(pmlmepriv, _FW_LINKED)== true) && pLed->bLedOn == true) { SwLedOff(padapter, pLed); } pLed->BlinkTimes = 0; pLed->bLedBlinkInProgress = false; } else { // Assign LED state to toggle. if ( pLed->BlinkingLedState == RTW_LED_ON ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; // Schedule a timer to toggle LED state. switch ( pLed->CurrLedState ) { case LED_BLINK_NORMAL: _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL); break; case LED_BLINK_SLOWLY: case LED_BLINK_StartToBlink: _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL); break; case LED_BLINK_WPS: { if ( pLed->BlinkingLedState == RTW_LED_ON ) _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL); else _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL); } break; default: _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL); break; } } } void SwLedBlink1( PLED_871x pLed ) { _adapter *padapter = pLed->padapter; #ifndef CONFIG_LED_REMOVE_HAL HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter); #endif struct led_priv *ledpriv = &(padapter->ledpriv); struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); PLED_871x pLed1 = &(ledpriv->SwLed1); u8 bStopBlinking = false; #ifndef CONFIG_LED_REMOVE_HAL if (pHalData->EEPROMCustomerID == RT_CID_819x_CAMEO) pLed = &(ledpriv->SwLed1); #endif // Change LED according to BlinkingLedState specified. if ( pLed->BlinkingLedState == RTW_LED_ON ) { SwLedOn(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,( "Blinktimes (%d): turn on\n", pLed->BlinkTimes)); } else { SwLedOff(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes)); } #ifndef CONFIG_LED_REMOVE_HAL if (pHalData->EEPROMCustomerID == RT_CID_DEFAULT) { if (check_fwstate(pmlmepriv, _FW_LINKED)== true) { if (!pLed1->bSWLedCtrl) { SwLedOn(padapter, pLed1); pLed1->bSWLedCtrl = true; } else if (!pLed1->bLedOn) SwLedOn(padapter, pLed1); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (): turn on pLed1\n")); } else { if (!pLed1->bSWLedCtrl) { SwLedOff(padapter, pLed1); pLed1->bSWLedCtrl = true; } else if (pLed1->bLedOn) SwLedOff(padapter, pLed1); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (): turn off pLed1\n")); } } #endif if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on ) { SwLedOff(padapter, pLed); ResetLedStatus(pLed); return; } switch (pLed->CurrLedState) { case LED_BLINK_SLOWLY: if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA); break; case LED_BLINK_NORMAL: if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA); break; case LED_BLINK_SCAN: pLed->BlinkTimes--; if ( pLed->BlinkTimes == 0 ) { bStopBlinking = true; } if (bStopBlinking) { if (check_fwstate(pmlmepriv, _FW_LINKED)== true) { pLed->bLedLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_NORMAL; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } else if (check_fwstate(pmlmepriv, _FW_LINKED)== false) { pLed->bLedNoLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SLOWLY; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } pLed->bLedScanBlinkInProgress = false; } else { if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); } break; case LED_BLINK_TXRX: pLed->BlinkTimes--; if ( pLed->BlinkTimes == 0 ) { bStopBlinking = true; } if (bStopBlinking) { if (check_fwstate(pmlmepriv, _FW_LINKED)== true) { pLed->bLedLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_NORMAL; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } else if (check_fwstate(pmlmepriv, _FW_LINKED)== false) { pLed->bLedNoLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SLOWLY; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } pLed->BlinkTimes = 0; pLed->bLedBlinkInProgress = false; } else { if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA); } break; case LED_BLINK_WPS: if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); break; case LED_BLINK_WPS_STOP: //WPS success if (pLed->BlinkingLedState == RTW_LED_ON) bStopBlinking = false; else bStopBlinking = true; if (bStopBlinking) { pLed->bLedLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_NORMAL; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); pLed->bLedWPSBlinkInProgress = false; } else { pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA); } break; default: break; } } void SwLedBlink2( PLED_871x pLed ) { _adapter *padapter = pLed->padapter; struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); u8 bStopBlinking = false; // Change LED according to BlinkingLedState specified. if ( pLed->BlinkingLedState == RTW_LED_ON) { SwLedOn(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes)); } else { SwLedOff(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes)); } switch (pLed->CurrLedState) { case LED_BLINK_SCAN: pLed->BlinkTimes--; if ( pLed->BlinkTimes == 0 ) { bStopBlinking = true; } if (bStopBlinking) { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on ) { SwLedOff(padapter, pLed); } else if (check_fwstate(pmlmepriv, _FW_LINKED)== true) { pLed->CurrLedState = RTW_LED_ON; pLed->BlinkingLedState = RTW_LED_ON; SwLedOn(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState)); } else if (check_fwstate(pmlmepriv, _FW_LINKED)== false) { pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; SwLedOff(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState)); } pLed->bLedScanBlinkInProgress = false; } else { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on ) { SwLedOff(padapter, pLed); } else { if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); } } break; case LED_BLINK_TXRX: pLed->BlinkTimes--; if ( pLed->BlinkTimes == 0 ) { bStopBlinking = true; } if (bStopBlinking) { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on ) { SwLedOff(padapter, pLed); } else if (check_fwstate(pmlmepriv, _FW_LINKED)== true) { pLed->CurrLedState = RTW_LED_ON; pLed->BlinkingLedState = RTW_LED_ON; SwLedOn(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState)); } else if (check_fwstate(pmlmepriv, _FW_LINKED)== false) { pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; SwLedOff(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState)); } pLed->bLedBlinkInProgress = false; } else { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on ) { SwLedOff(padapter, pLed); } else { if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA); } } break; default: break; } } void SwLedBlink3( PLED_871x pLed ) { _adapter *padapter = pLed->padapter; struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); u8 bStopBlinking = false; // Change LED according to BlinkingLedState specified. if ( pLed->BlinkingLedState == RTW_LED_ON ) { SwLedOn(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes)); } else { if (pLed->CurrLedState != LED_BLINK_WPS_STOP) SwLedOff(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes)); } switch (pLed->CurrLedState) { case LED_BLINK_SCAN: pLed->BlinkTimes--; if ( pLed->BlinkTimes == 0 ) { bStopBlinking = true; } if (bStopBlinking) { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on ) { SwLedOff(padapter, pLed); } else if (check_fwstate(pmlmepriv, _FW_LINKED)== true) { pLed->CurrLedState = RTW_LED_ON; pLed->BlinkingLedState = RTW_LED_ON; if ( !pLed->bLedOn ) SwLedOn(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } else if (check_fwstate(pmlmepriv, _FW_LINKED)== false) { pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; if ( pLed->bLedOn ) SwLedOff(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } pLed->bLedScanBlinkInProgress = false; } else { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on ) { SwLedOff(padapter, pLed); } else { if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); } } break; case LED_BLINK_TXRX: pLed->BlinkTimes--; if ( pLed->BlinkTimes == 0 ) { bStopBlinking = true; } if (bStopBlinking) { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on ) { SwLedOff(padapter, pLed); } else if (check_fwstate(pmlmepriv, _FW_LINKED)== true) { pLed->CurrLedState = RTW_LED_ON; pLed->BlinkingLedState = RTW_LED_ON; if ( !pLed->bLedOn ) SwLedOn(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } else if (check_fwstate(pmlmepriv, _FW_LINKED)== false) { pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; if ( pLed->bLedOn ) SwLedOff(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } pLed->bLedBlinkInProgress = false; } else { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on ) { SwLedOff(padapter, pLed); } else { if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA); } } break; case LED_BLINK_WPS: if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); break; case LED_BLINK_WPS_STOP: //WPS success if (pLed->BlinkingLedState == RTW_LED_ON) { pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA); bStopBlinking = false; } else { bStopBlinking = true; } if (bStopBlinking) { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on ) { SwLedOff(padapter, pLed); } else { pLed->CurrLedState = RTW_LED_ON; pLed->BlinkingLedState = RTW_LED_ON; SwLedOn(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } pLed->bLedWPSBlinkInProgress = false; } break; default: break; } } void SwLedBlink4( PLED_871x pLed ) { _adapter *padapter = pLed->padapter; struct led_priv *ledpriv = &(padapter->ledpriv); struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); PLED_871x pLed1 = &(ledpriv->SwLed1); u8 bStopBlinking = false; // Change LED according to BlinkingLedState specified. if ( pLed->BlinkingLedState == RTW_LED_ON ) { SwLedOn(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes)); } else { SwLedOff(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes)); } if (!pLed1->bLedWPSBlinkInProgress && pLed1->BlinkingLedState == LED_UNKNOWN) { pLed1->BlinkingLedState = RTW_LED_OFF; pLed1->CurrLedState = RTW_LED_OFF; SwLedOff(padapter, pLed1); } switch (pLed->CurrLedState) { case LED_BLINK_SLOWLY: if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA); break; case LED_BLINK_StartToBlink: if ( pLed->bLedOn ) { pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL); } else { pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL); } break; case LED_BLINK_SCAN: pLed->BlinkTimes--; if ( pLed->BlinkTimes == 0 ) { bStopBlinking = false; } if (bStopBlinking) { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) { SwLedOff(padapter, pLed); } else { pLed->bLedNoLinkBlinkInProgress = false; pLed->CurrLedState = LED_BLINK_SLOWLY; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA); } pLed->bLedScanBlinkInProgress = false; } else { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) { SwLedOff(padapter, pLed); } else { if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); } } break; case LED_BLINK_TXRX: pLed->BlinkTimes--; if ( pLed->BlinkTimes == 0 ) { bStopBlinking = true; } if (bStopBlinking) { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) { SwLedOff(padapter, pLed); } else { pLed->bLedNoLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SLOWLY; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA); } pLed->bLedBlinkInProgress = false; } else { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) { SwLedOff(padapter, pLed); } else { if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA); } } break; case LED_BLINK_WPS: if ( pLed->bLedOn ) { pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL); } else { pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL); } break; case LED_BLINK_WPS_STOP: //WPS authentication fail if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL); break; case LED_BLINK_WPS_STOP_OVERLAP: //WPS session overlap pLed->BlinkTimes--; if (pLed->BlinkTimes == 0) { if (pLed->bLedOn) { pLed->BlinkTimes = 1; } else { bStopBlinking = true; } } if (bStopBlinking) { pLed->BlinkTimes = 10; pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA); } else { if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL); } break; default: break; } RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink4 CurrLedState %d\n", pLed->CurrLedState)); } void SwLedBlink5( PLED_871x pLed ) { _adapter *padapter = pLed->padapter; struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); u8 bStopBlinking = false; // Change LED according to BlinkingLedState specified. if ( pLed->BlinkingLedState == RTW_LED_ON ) { SwLedOn(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes)); } else { SwLedOff(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes)); } switch (pLed->CurrLedState) { case LED_BLINK_SCAN: pLed->BlinkTimes--; if ( pLed->BlinkTimes == 0 ) { bStopBlinking = true; } if (bStopBlinking) { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) { pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; if (pLed->bLedOn) SwLedOff(padapter, pLed); } else { pLed->CurrLedState = RTW_LED_ON; pLed->BlinkingLedState = RTW_LED_ON; if (!pLed->bLedOn) _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA); } pLed->bLedScanBlinkInProgress = false; } else { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) { SwLedOff(padapter, pLed); } else { if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); } } break; case LED_BLINK_TXRX: pLed->BlinkTimes--; if ( pLed->BlinkTimes == 0 ) { bStopBlinking = true; } if (bStopBlinking) { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) { pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; if (pLed->bLedOn) SwLedOff(padapter, pLed); } else { pLed->CurrLedState = RTW_LED_ON; pLed->BlinkingLedState = RTW_LED_ON; if (!pLed->bLedOn) _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA); } pLed->bLedBlinkInProgress = false; } else { if ( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) { SwLedOff(padapter, pLed); } else { if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA); } } break; default: break; } RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink5 CurrLedState %d\n", pLed->CurrLedState)); } void SwLedBlink6( PLED_871x pLed ) { _adapter *padapter = pLed->padapter; struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); u8 bStopBlinking = false; // Change LED according to BlinkingLedState specified. if ( pLed->BlinkingLedState == RTW_LED_ON ) { SwLedOn(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes)); } else { SwLedOff(padapter, pLed); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes)); } RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("<==== blink6\n")); } static void SwLedControlMode0( _adapter *padapter, LED_CTL_MODE LedAction ) { struct led_priv *ledpriv = &(padapter->ledpriv); PLED_871x pLed = &(ledpriv->SwLed1); // Decide led state switch (LedAction) { case LED_CTL_TX: case LED_CTL_RX: if ( pLed->bLedBlinkInProgress == false ) { pLed->bLedBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_NORMAL; pLed->BlinkTimes = 2; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL); } break; case LED_CTL_START_TO_LINK: if ( pLed->bLedBlinkInProgress == false ) { pLed->bLedBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_StartToBlink; pLed->BlinkTimes = 24; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL); } else { pLed->CurrLedState = LED_BLINK_StartToBlink; } break; case LED_CTL_LINK: pLed->CurrLedState = RTW_LED_ON; if ( pLed->bLedBlinkInProgress == false ) { SwLedOn(padapter, pLed); } break; case LED_CTL_NO_LINK: pLed->CurrLedState = RTW_LED_OFF; if ( pLed->bLedBlinkInProgress == false ) { SwLedOff(padapter, pLed); } break; case LED_CTL_POWER_OFF: pLed->CurrLedState = RTW_LED_OFF; if (pLed->bLedBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } SwLedOff(padapter, pLed); break; case LED_CTL_START_WPS: if ( pLed->bLedBlinkInProgress == false || pLed->CurrLedState == RTW_LED_ON) { pLed->bLedBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_WPS; pLed->BlinkTimes = 20; if ( pLed->bLedOn ) { pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL); } else { pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL); } } break; case LED_CTL_STOP_WPS: if (pLed->bLedBlinkInProgress) { pLed->CurrLedState = RTW_LED_OFF; _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } break; default: break; } RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState)); } //ALPHA, added by chiyoko, 20090106 static void SwLedControlMode1( _adapter *padapter, LED_CTL_MODE LedAction ) { #ifndef CONFIG_LED_REMOVE_HAL HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter); #endif struct led_priv *ledpriv = &(padapter->ledpriv); PLED_871x pLed = &(ledpriv->SwLed0); struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); #ifndef CONFIG_LED_REMOVE_HAL if (pHalData->EEPROMCustomerID == RT_CID_819x_CAMEO) pLed = &(ledpriv->SwLed1); #endif switch (LedAction) { case LED_CTL_POWER_ON: case LED_CTL_START_TO_LINK: case LED_CTL_NO_LINK: if ( pLed->bLedNoLinkBlinkInProgress == false ) { if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed)) { return; } if ( pLed->bLedLinkBlinkInProgress == true ) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } pLed->bLedNoLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SLOWLY; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA); } break; case LED_CTL_LINK: if ( pLed->bLedLinkBlinkInProgress == false ) { if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed)) { return; } if (pLed->bLedNoLinkBlinkInProgress == true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } pLed->bLedLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_NORMAL; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA); } break; case LED_CTL_SITE_SURVEY: if ((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== true)) ; else if (pLed->bLedScanBlinkInProgress ==false) { if (IS_LED_WPS_BLINKING(pLed)) return; if (pLed->bLedNoLinkBlinkInProgress == true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if ( pLed->bLedLinkBlinkInProgress == true ) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } pLed->bLedScanBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SCAN; pLed->BlinkTimes = 24; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); } break; case LED_CTL_TX: case LED_CTL_RX: if (pLed->bLedBlinkInProgress ==false) { if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed)) { return; } if (pLed->bLedNoLinkBlinkInProgress == true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if ( pLed->bLedLinkBlinkInProgress == true ) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } pLed->bLedBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_TXRX; pLed->BlinkTimes = 2; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA); } break; case LED_CTL_START_WPS: //wait until xinpin finish case LED_CTL_START_WPS_BOTTON: if (pLed->bLedWPSBlinkInProgress ==false) { if (pLed->bLedNoLinkBlinkInProgress == true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if ( pLed->bLedLinkBlinkInProgress == true ) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if (pLed->bLedScanBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } pLed->bLedWPSBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_WPS; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); } break; case LED_CTL_STOP_WPS: if (pLed->bLedNoLinkBlinkInProgress == true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if ( pLed->bLedLinkBlinkInProgress == true ) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if (pLed->bLedScanBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } if (pLed->bLedWPSBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); } else { pLed->bLedWPSBlinkInProgress = true; } pLed->CurrLedState = LED_BLINK_WPS_STOP; if (pLed->bLedOn) { pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA); } else { pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), 0); } break; case LED_CTL_STOP_WPS_FAIL: if (pLed->bLedWPSBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedWPSBlinkInProgress = false; } pLed->bLedNoLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SLOWLY; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA); break; case LED_CTL_POWER_OFF: pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; if ( pLed->bLedNoLinkBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if ( pLed->bLedLinkBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } if ( pLed->bLedBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if ( pLed->bLedWPSBlinkInProgress ) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedWPSBlinkInProgress = false; } if ( pLed->bLedScanBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } SwLedOff(padapter, pLed); break; default: break; } RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState)); } //Arcadyan/Sitecom , added by chiyoko, 20090216 static void SwLedControlMode2( _adapter *padapter, LED_CTL_MODE LedAction ) { struct led_priv *ledpriv = &(padapter->ledpriv); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; PLED_871x pLed = &(ledpriv->SwLed0); switch (LedAction) { case LED_CTL_SITE_SURVEY: if (pmlmepriv->LinkDetectInfo.bBusyTraffic) ; else if (pLed->bLedScanBlinkInProgress ==false) { if (IS_LED_WPS_BLINKING(pLed)) return; if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } pLed->bLedScanBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SCAN; pLed->BlinkTimes = 24; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); } break; case LED_CTL_TX: case LED_CTL_RX: if ((pLed->bLedBlinkInProgress ==false) && (check_fwstate(pmlmepriv, _FW_LINKED)== true)) { if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed)) { return; } pLed->bLedBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_TXRX; pLed->BlinkTimes = 2; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA); } break; case LED_CTL_LINK: pLed->CurrLedState = RTW_LED_ON; pLed->BlinkingLedState = RTW_LED_ON; if ( pLed->bLedBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if ( pLed->bLedScanBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } _set_timer(&(pLed->BlinkTimer), 0); break; case LED_CTL_START_WPS: //wait until xinpin finish case LED_CTL_START_WPS_BOTTON: if (pLed->bLedWPSBlinkInProgress ==false) { if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if (pLed->bLedScanBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } pLed->bLedWPSBlinkInProgress = true; pLed->CurrLedState = RTW_LED_ON; pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), 0); } break; case LED_CTL_STOP_WPS: pLed->bLedWPSBlinkInProgress = false; if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) { SwLedOff(padapter, pLed); } else { pLed->CurrLedState = RTW_LED_ON; pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), 0); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } break; case LED_CTL_STOP_WPS_FAIL: pLed->bLedWPSBlinkInProgress = false; if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) { SwLedOff(padapter, pLed); } else { pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), 0); RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } break; case LED_CTL_START_TO_LINK: case LED_CTL_NO_LINK: if (!IS_LED_BLINKING(pLed)) { pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), 0); } break; case LED_CTL_POWER_OFF: pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; if ( pLed->bLedBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if ( pLed->bLedScanBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } if ( pLed->bLedWPSBlinkInProgress ) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedWPSBlinkInProgress = false; } _set_timer(&(pLed->BlinkTimer), 0); break; default: break; } RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } //COREGA, added by chiyoko, 20090316 static void SwLedControlMode3( _adapter *padapter, LED_CTL_MODE LedAction ) { struct led_priv *ledpriv = &(padapter->ledpriv); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; PLED_871x pLed = &(ledpriv->SwLed0); switch (LedAction) { case LED_CTL_SITE_SURVEY: if (pmlmepriv->LinkDetectInfo.bBusyTraffic) ; else if (pLed->bLedScanBlinkInProgress ==false) { if (IS_LED_WPS_BLINKING(pLed)) return; if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } pLed->bLedScanBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SCAN; pLed->BlinkTimes = 24; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); } break; case LED_CTL_TX: case LED_CTL_RX: if ((pLed->bLedBlinkInProgress ==false) && (check_fwstate(pmlmepriv, _FW_LINKED)== true)) { if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed)) { return; } pLed->bLedBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_TXRX; pLed->BlinkTimes = 2; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA); } break; case LED_CTL_LINK: if (IS_LED_WPS_BLINKING(pLed)) return; pLed->CurrLedState = RTW_LED_ON; pLed->BlinkingLedState = RTW_LED_ON; if ( pLed->bLedBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if ( pLed->bLedScanBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } _set_timer(&(pLed->BlinkTimer), 0); break; case LED_CTL_START_WPS: //wait until xinpin finish case LED_CTL_START_WPS_BOTTON: if (pLed->bLedWPSBlinkInProgress ==false) { if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if (pLed->bLedScanBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } pLed->bLedWPSBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_WPS; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); } break; case LED_CTL_STOP_WPS: if (pLed->bLedWPSBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedWPSBlinkInProgress = false; } else { pLed->bLedWPSBlinkInProgress = true; } pLed->CurrLedState = LED_BLINK_WPS_STOP; if (pLed->bLedOn) { pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA); } else { pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), 0); } break; case LED_CTL_STOP_WPS_FAIL: if (pLed->bLedWPSBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedWPSBlinkInProgress = false; } pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), 0); break; case LED_CTL_START_TO_LINK: case LED_CTL_NO_LINK: if (!IS_LED_BLINKING(pLed)) { pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), 0); } break; case LED_CTL_POWER_OFF: pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; if ( pLed->bLedBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if ( pLed->bLedScanBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } if ( pLed->bLedWPSBlinkInProgress ) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedWPSBlinkInProgress = false; } _set_timer(&(pLed->BlinkTimer), 0); break; default: break; } RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState)); } //Edimax-Belkin, added by chiyoko, 20090413 static void SwLedControlMode4( _adapter *padapter, LED_CTL_MODE LedAction ) { struct led_priv *ledpriv = &(padapter->ledpriv); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; PLED_871x pLed = &(ledpriv->SwLed0); PLED_871x pLed1 = &(ledpriv->SwLed1); switch (LedAction) { case LED_CTL_START_TO_LINK: if (pLed1->bLedWPSBlinkInProgress) { pLed1->bLedWPSBlinkInProgress = false; _cancel_timer_ex(&(pLed1->BlinkTimer)); pLed1->BlinkingLedState = RTW_LED_OFF; pLed1->CurrLedState = RTW_LED_OFF; if (pLed1->bLedOn) _set_timer(&(pLed->BlinkTimer), 0); } if ( pLed->bLedStartToLinkBlinkInProgress == false ) { if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed)) { return; } if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if (pLed->bLedNoLinkBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } pLed->bLedStartToLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_StartToBlink; if ( pLed->bLedOn ) { pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL); } else { pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL); } } break; case LED_CTL_LINK: case LED_CTL_NO_LINK: //LED1 settings if (LedAction == LED_CTL_LINK) { if (pLed1->bLedWPSBlinkInProgress) { pLed1->bLedWPSBlinkInProgress = false; _cancel_timer_ex(&(pLed1->BlinkTimer)); pLed1->BlinkingLedState = RTW_LED_OFF; pLed1->CurrLedState = RTW_LED_OFF; if (pLed1->bLedOn) _set_timer(&(pLed->BlinkTimer), 0); } } if ( pLed->bLedNoLinkBlinkInProgress == false ) { if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed)) { return; } if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } pLed->bLedNoLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SLOWLY; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA); } break; case LED_CTL_SITE_SURVEY: if ((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== true)) ; else if (pLed->bLedScanBlinkInProgress ==false) { if (IS_LED_WPS_BLINKING(pLed)) return; if (pLed->bLedNoLinkBlinkInProgress == true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } pLed->bLedScanBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SCAN; pLed->BlinkTimes = 24; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); } break; case LED_CTL_TX: case LED_CTL_RX: if (pLed->bLedBlinkInProgress ==false) { if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed)) { return; } if (pLed->bLedNoLinkBlinkInProgress == true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } pLed->bLedBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_TXRX; pLed->BlinkTimes = 2; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA); } break; case LED_CTL_START_WPS: //wait until xinpin finish case LED_CTL_START_WPS_BOTTON: if (pLed1->bLedWPSBlinkInProgress) { pLed1->bLedWPSBlinkInProgress = false; _cancel_timer_ex(&(pLed1->BlinkTimer)); pLed1->BlinkingLedState = RTW_LED_OFF; pLed1->CurrLedState = RTW_LED_OFF; if (pLed1->bLedOn) _set_timer(&(pLed->BlinkTimer), 0); } if (pLed->bLedWPSBlinkInProgress ==false) { if (pLed->bLedNoLinkBlinkInProgress == true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if (pLed->bLedScanBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } pLed->bLedWPSBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_WPS; if ( pLed->bLedOn ) { pLed->BlinkingLedState = RTW_LED_OFF; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL); } else { pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL); } } break; case LED_CTL_STOP_WPS: //WPS connect success if (pLed->bLedWPSBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedWPSBlinkInProgress = false; } pLed->bLedNoLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SLOWLY; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA); break; case LED_CTL_STOP_WPS_FAIL: //WPS authentication fail if (pLed->bLedWPSBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedWPSBlinkInProgress = false; } pLed->bLedNoLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SLOWLY; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA); //LED1 settings if (pLed1->bLedWPSBlinkInProgress) _cancel_timer_ex(&(pLed1->BlinkTimer)); else pLed1->bLedWPSBlinkInProgress = true; pLed1->CurrLedState = LED_BLINK_WPS_STOP; if ( pLed1->bLedOn ) pLed1->BlinkingLedState = RTW_LED_OFF; else pLed1->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL); break; case LED_CTL_STOP_WPS_FAIL_OVERLAP: //WPS session overlap if (pLed->bLedWPSBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedWPSBlinkInProgress = false; } pLed->bLedNoLinkBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SLOWLY; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA); //LED1 settings if (pLed1->bLedWPSBlinkInProgress) _cancel_timer_ex(&(pLed1->BlinkTimer)); else pLed1->bLedWPSBlinkInProgress = true; pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP; pLed1->BlinkTimes = 10; if ( pLed1->bLedOn ) pLed1->BlinkingLedState = RTW_LED_OFF; else pLed1->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL); break; case LED_CTL_POWER_OFF: pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; if ( pLed->bLedNoLinkBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedNoLinkBlinkInProgress = false; } if ( pLed->bLedLinkBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedLinkBlinkInProgress = false; } if ( pLed->bLedBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } if ( pLed->bLedWPSBlinkInProgress ) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedWPSBlinkInProgress = false; } if ( pLed->bLedScanBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedScanBlinkInProgress = false; } if ( pLed->bLedStartToLinkBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedStartToLinkBlinkInProgress = false; } if ( pLed1->bLedWPSBlinkInProgress ) { _cancel_timer_ex(&(pLed1->BlinkTimer)); pLed1->bLedWPSBlinkInProgress = false; } pLed1->BlinkingLedState = LED_UNKNOWN; SwLedOff(padapter, pLed); SwLedOff(padapter, pLed1); break; default: break; } RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState)); } //Sercomm-Belkin, added by chiyoko, 20090415 static void SwLedControlMode5( _adapter *padapter, LED_CTL_MODE LedAction ) { #ifndef CONFIG_LED_REMOVE_HAL HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter); #endif struct led_priv *ledpriv = &(padapter->ledpriv); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; PLED_871x pLed = &(ledpriv->SwLed0); #ifndef CONFIG_LED_REMOVE_HAL if (pHalData->EEPROMCustomerID == RT_CID_819x_CAMEO) pLed = &(ledpriv->SwLed1); #endif switch (LedAction) { case LED_CTL_POWER_ON: case LED_CTL_NO_LINK: case LED_CTL_LINK: //solid blue pLed->CurrLedState = RTW_LED_ON; pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), 0); break; case LED_CTL_SITE_SURVEY: if ((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== true)) ; else if (pLed->bLedScanBlinkInProgress ==false) { if (pLed->bLedBlinkInProgress ==true) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } pLed->bLedScanBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_SCAN; pLed->BlinkTimes = 24; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA); } break; case LED_CTL_TX: case LED_CTL_RX: if (pLed->bLedBlinkInProgress ==false) { if (pLed->CurrLedState == LED_BLINK_SCAN) { return; } pLed->bLedBlinkInProgress = true; pLed->CurrLedState = LED_BLINK_TXRX; pLed->BlinkTimes = 2; if ( pLed->bLedOn ) pLed->BlinkingLedState = RTW_LED_OFF; else pLed->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA); } break; case LED_CTL_POWER_OFF: pLed->CurrLedState = RTW_LED_OFF; pLed->BlinkingLedState = RTW_LED_OFF; if ( pLed->bLedBlinkInProgress) { _cancel_timer_ex(&(pLed->BlinkTimer)); pLed->bLedBlinkInProgress = false; } SwLedOff(padapter, pLed); break; default: break; } RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState)); } //WNC-Corega, added by chiyoko, 20090902 static void SwLedControlMode6( _adapter *padapter, LED_CTL_MODE LedAction ) { struct led_priv *ledpriv = &(padapter->ledpriv); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; PLED_871x pLed0 = &(ledpriv->SwLed0); switch (LedAction) { case LED_CTL_POWER_ON: case LED_CTL_LINK: case LED_CTL_NO_LINK: _cancel_timer_ex(&(pLed0->BlinkTimer)); pLed0->CurrLedState = RTW_LED_ON; pLed0->BlinkingLedState = RTW_LED_ON; _set_timer(&(pLed0->BlinkTimer), 0); break; case LED_CTL_POWER_OFF: SwLedOff(padapter, pLed0); break; default: break; } RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("ledcontrol 6 Led %d\n", pLed0->CurrLedState)); } // // Description: // Handler function of LED Blinking. // We dispatch acture LED blink action according to LedStrategy. // void BlinkHandler(PLED_871x pLed) { _adapter *padapter = pLed->padapter; struct led_priv *ledpriv = &(padapter->ledpriv); //DBG_88E("%s (%s:%d)\n",__func__, current->comm, current->pid); if ( (padapter->bSurpriseRemoved == true) || ( padapter->bDriverStopped == true)) { //DBG_88E("%s bSurpriseRemoved:%d, bDriverStopped:%d\n", __func__, padapter->bSurpriseRemoved, padapter->bDriverStopped); return; } switch (ledpriv->LedStrategy) { case SW_LED_MODE0: SwLedBlink(pLed); break; case SW_LED_MODE1: SwLedBlink1(pLed); break; case SW_LED_MODE2: SwLedBlink2(pLed); break; case SW_LED_MODE3: SwLedBlink3(pLed); break; case SW_LED_MODE4: SwLedBlink4(pLed); break; case SW_LED_MODE5: SwLedBlink5(pLed); break; case SW_LED_MODE6: SwLedBlink6(pLed); break; default: //RT_TRACE(COMP_LED, DBG_LOUD, ("BlinkWorkItemCallback 0x%x\n", pHalData->LedStrategy)); //SwLedBlink(pLed); break; } } void LedControl871x( _adapter *padapter, LED_CTL_MODE LedAction ) { struct led_priv *ledpriv = &(padapter->ledpriv); if ( (padapter->bSurpriseRemoved == true) || ( padapter->bDriverStopped == true) ||(padapter->hw_init_completed == false) ) { return; } if ( ledpriv->bRegUseLed == false) return; //if (!priv->up) // return; //if (priv->bInHctTest) // return; if ( (padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) && (LedAction == LED_CTL_TX || LedAction == LED_CTL_RX || LedAction == LED_CTL_SITE_SURVEY || LedAction == LED_CTL_LINK || LedAction == LED_CTL_NO_LINK || LedAction == LED_CTL_POWER_ON) ) { return; } switch (ledpriv->LedStrategy) { case SW_LED_MODE0: //SwLedControlMode0(padapter, LedAction); break; case SW_LED_MODE1: SwLedControlMode1(padapter, LedAction); break; case SW_LED_MODE2: SwLedControlMode2(padapter, LedAction); break; case SW_LED_MODE3: SwLedControlMode3(padapter, LedAction); break; case SW_LED_MODE4: SwLedControlMode4(padapter, LedAction); break; case SW_LED_MODE5: SwLedControlMode5(padapter, LedAction); break; case SW_LED_MODE6: SwLedControlMode6(padapter, LedAction); break; default: break; } RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("LedStrategy:%d, LedAction %d\n", ledpriv->LedStrategy,LedAction)); } #endif