2 * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
4 * This program is distributed in the hope that it will be useful, but WITHOUT
5 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
9 * You should have received a copy of the GNU General Public License along with
10 * this program; if not, write to the Free Software Foundation, Inc.,
11 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
13 * The full GNU General Public License is included in this distribution in the
14 * file called LICENSE.
16 * Contact Information:
17 * wlanfae <wlanfae@realtek.com>
21 #include "r8192S_hw.h"
22 #include "r8192SU_led.h"
24 #define LED_BLINK_NORMAL_INTERVAL 100
25 #define LED_BLINK_SLOWLY_INTERVAL 200
26 #define LED_BLINK_LONG_INTERVAL 400
28 #define LED_BLINK_NO_LINK_INTERVAL_ALPHA 1000
29 #define LED_BLINK_LINK_INTERVAL_ALPHA 500
30 #define LED_BLINK_SCAN_INTERVAL_ALPHA 180
31 #define LED_BLINK_FASTER_INTERVAL_ALPHA 50
32 #define LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA 5000
36 static void BlinkTimerCallback (unsigned long data);
38 static void BlinkWorkItemCallback (struct work_struct *work);
40 void InitLed819xUsb (struct net_device *dev, PLED_819xUsb pLed,
41 LED_PIN_819xUsb LedPin)
43 struct r8192_priv *priv = ieee80211_priv(dev);
46 pLed->LedPin = LedPin;
47 pLed->CurrLedState = LED_OFF;
50 pLed->bLedBlinkInProgress = FALSE;
52 pLed->BlinkingLedState = LED_OFF;
54 init_timer(&pLed->BlinkTimer);
55 pLed->BlinkTimer.data = (unsigned long)dev;
56 pLed->BlinkTimer.function = BlinkTimerCallback;
58 INIT_WORK(&priv->BlinkWorkItem, (void*)BlinkWorkItemCallback);
63 void DeInitLed819xUsb (PLED_819xUsb pLed)
65 del_timer_sync(&(pLed->BlinkTimer));
66 pLed->bLedBlinkInProgress = FALSE;
69 void SwLedOn (struct net_device *dev, PLED_819xUsb pLed)
73 LedCfg = read_nic_byte(dev, LEDCFG);
74 switch (pLed->LedPin) {
78 write_nic_byte(dev, LEDCFG, LedCfg&0xf0);
81 write_nic_byte(dev, LEDCFG, LedCfg&0x0f);
89 void SwLedOff (struct net_device *dev, PLED_819xUsb pLed)
93 LedCfg = read_nic_byte(dev, LEDCFG);
94 switch (pLed->LedPin) {
99 write_nic_byte(dev, LEDCFG, (LedCfg|BIT3));
103 write_nic_byte(dev, LEDCFG, (LedCfg|BIT7));
108 pLed->bLedOn = FALSE;
114 struct net_device *dev
117 struct r8192_priv *priv = ieee80211_priv(dev);
119 InitLed819xUsb(dev, &(priv->SwLed0), LED_PIN_LED0);
121 InitLed819xUsb(dev,&(priv->SwLed1), LED_PIN_LED1);
127 struct net_device *dev
130 struct r8192_priv *priv = ieee80211_priv(dev);
132 DeInitLed819xUsb( &(priv->SwLed0) );
133 DeInitLed819xUsb( &(priv->SwLed1) );
142 struct net_device *dev = (struct net_device *)(pLed->dev);
143 struct r8192_priv *priv = ieee80211_priv(dev);
144 bool bStopBlinking = FALSE;
146 if( pLed->BlinkingLedState == LED_ON )
149 RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);
154 RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);
158 switch(pLed->CurrLedState)
161 case LED_BLINK_NORMAL:
162 if(pLed->BlinkTimes == 0)
164 bStopBlinking = TRUE;
168 case LED_BLINK_StartToBlink:
169 if( (priv->ieee80211->state == IEEE80211_LINKED) && (priv->ieee80211->iw_mode == IW_MODE_INFRA))
171 bStopBlinking = TRUE;
173 else if((priv->ieee80211->state == IEEE80211_LINKED) && (priv->ieee80211->iw_mode == IW_MODE_ADHOC))
175 bStopBlinking = TRUE;
177 else if(pLed->BlinkTimes == 0)
179 bStopBlinking = TRUE;
184 if( pLed->BlinkTimes == 0 )
186 bStopBlinking = TRUE;
192 bStopBlinking = TRUE;
199 if( priv->ieee80211->eRFPowerState != eRfOn )
203 else if( (priv->ieee80211->state == IEEE80211_LINKED) && (pLed->bLedOn == false))
207 else if( (priv->ieee80211->state != IEEE80211_LINKED) && pLed->bLedOn == true)
212 pLed->BlinkTimes = 0;
213 pLed->bLedBlinkInProgress = FALSE;
217 if( pLed->BlinkingLedState == LED_ON )
218 pLed->BlinkingLedState = LED_OFF;
220 pLed->BlinkingLedState = LED_ON;
222 switch( pLed->CurrLedState )
224 case LED_BLINK_NORMAL:
225 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
228 case LED_BLINK_SLOWLY:
229 case LED_BLINK_StartToBlink:
230 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
235 if( pLed->BlinkingLedState == LED_ON )
236 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL));
238 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL));
243 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
255 struct net_device *dev = (struct net_device *)(pLed->dev);
256 struct r8192_priv *priv = ieee80211_priv(dev);
257 PLED_819xUsb pLed1 = &(priv->SwLed1);
258 bool bStopBlinking = FALSE;
260 if(priv->CustomerID == RT_CID_819x_CAMEO)
261 pLed = &(priv->SwLed1);
263 if( pLed->BlinkingLedState == LED_ON )
266 RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);
271 RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);
275 if(priv->CustomerID == RT_CID_DEFAULT)
277 if(priv->ieee80211->state == IEEE80211_LINKED)
279 if(!pLed1->bSWLedCtrl)
282 pLed1->bSWLedCtrl = TRUE;
284 else if(!pLed1->bLedOn)
286 RT_TRACE(COMP_LED, "Blinktimes (): turn on pLed1\n");
290 if(!pLed1->bSWLedCtrl)
292 SwLedOff(dev, pLed1);
293 pLed1->bSWLedCtrl = TRUE;
295 else if(pLed1->bLedOn)
296 SwLedOff(dev, pLed1);
297 RT_TRACE(COMP_LED, "Blinktimes (): turn off pLed1\n");
301 switch(pLed->CurrLedState)
303 case LED_BLINK_SLOWLY:
305 pLed->BlinkingLedState = LED_OFF;
307 pLed->BlinkingLedState = LED_ON;
308 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
311 case LED_BLINK_NORMAL:
313 pLed->BlinkingLedState = LED_OFF;
315 pLed->BlinkingLedState = LED_ON;
316 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA));
321 if( pLed->BlinkTimes == 0 )
323 bStopBlinking = TRUE;
328 if( priv->ieee80211->eRFPowerState != eRfOn )
332 else if(priv->ieee80211->state == IEEE80211_LINKED)
334 pLed->bLedLinkBlinkInProgress = TRUE;
335 pLed->CurrLedState = LED_BLINK_NORMAL;
337 pLed->BlinkingLedState = LED_OFF;
339 pLed->BlinkingLedState = LED_ON;
340 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA));
341 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
344 else if(priv->ieee80211->state != IEEE80211_LINKED)
346 pLed->bLedNoLinkBlinkInProgress = TRUE;
347 pLed->CurrLedState = LED_BLINK_SLOWLY;
349 pLed->BlinkingLedState = LED_OFF;
351 pLed->BlinkingLedState = LED_ON;
352 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
353 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
355 pLed->bLedScanBlinkInProgress = FALSE;
359 if( priv->ieee80211->eRFPowerState != eRfOn )
366 pLed->BlinkingLedState = LED_OFF;
368 pLed->BlinkingLedState = LED_ON;
369 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
376 if( pLed->BlinkTimes == 0 )
378 bStopBlinking = TRUE;
382 if( priv->ieee80211->eRFPowerState != eRfOn )
386 else if(priv->ieee80211->state == IEEE80211_LINKED)
388 pLed->bLedLinkBlinkInProgress = TRUE;
389 pLed->CurrLedState = LED_BLINK_NORMAL;
391 pLed->BlinkingLedState = LED_OFF;
393 pLed->BlinkingLedState = LED_ON;
394 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA));
395 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
397 else if(priv->ieee80211->state != IEEE80211_LINKED)
399 pLed->bLedNoLinkBlinkInProgress = TRUE;
400 pLed->CurrLedState = LED_BLINK_SLOWLY;
402 pLed->BlinkingLedState = LED_OFF;
404 pLed->BlinkingLedState = LED_ON;
405 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
406 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
408 pLed->BlinkTimes = 0;
409 pLed->bLedBlinkInProgress = FALSE;
413 if( priv->ieee80211->eRFPowerState != eRfOn )
420 pLed->BlinkingLedState = LED_OFF;
422 pLed->BlinkingLedState = LED_ON;
423 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
430 pLed->BlinkingLedState = LED_OFF;
432 pLed->BlinkingLedState = LED_ON;
433 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
436 case LED_BLINK_WPS_STOP:
437 if(pLed->BlinkingLedState == LED_ON)
439 pLed->BlinkingLedState = LED_OFF;
440 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA));
441 bStopBlinking = FALSE;
445 bStopBlinking = TRUE;
450 if( priv->ieee80211->eRFPowerState != eRfOn )
456 pLed->bLedLinkBlinkInProgress = TRUE;
457 pLed->CurrLedState = LED_BLINK_NORMAL;
459 pLed->BlinkingLedState = LED_OFF;
461 pLed->BlinkingLedState = LED_ON;
462 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA));
463 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
465 pLed->bLedWPSBlinkInProgress = FALSE;
480 struct net_device *dev = (struct net_device *)(pLed->dev);
481 struct r8192_priv *priv = ieee80211_priv(dev);
482 bool bStopBlinking = FALSE;
484 if( pLed->BlinkingLedState == LED_ON)
487 RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);
492 RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);
495 switch(pLed->CurrLedState)
499 if( pLed->BlinkTimes == 0 )
501 bStopBlinking = TRUE;
506 if( priv->ieee80211->eRFPowerState != eRfOn )
509 RT_TRACE(COMP_LED, "eRFPowerState %d\n", priv->ieee80211->eRFPowerState);
511 else if(priv->ieee80211->state == IEEE80211_LINKED)
513 pLed->CurrLedState = LED_ON;
514 pLed->BlinkingLedState = LED_ON;
516 RT_TRACE(COMP_LED, "stop scan blink CurrLedState %d\n", pLed->CurrLedState);
519 else if(priv->ieee80211->state != IEEE80211_LINKED)
521 pLed->CurrLedState = LED_OFF;
522 pLed->BlinkingLedState = LED_OFF;
524 RT_TRACE(COMP_LED, "stop scan blink CurrLedState %d\n", pLed->CurrLedState);
526 pLed->bLedScanBlinkInProgress = FALSE;
530 if( priv->ieee80211->eRFPowerState != eRfOn )
537 pLed->BlinkingLedState = LED_OFF;
539 pLed->BlinkingLedState = LED_ON;
540 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
547 if( pLed->BlinkTimes == 0 )
549 bStopBlinking = TRUE;
553 if( priv->ieee80211->eRFPowerState != eRfOn )
557 else if(priv->ieee80211->state == IEEE80211_LINKED)
559 pLed->CurrLedState = LED_ON;
560 pLed->BlinkingLedState = LED_ON;
562 RT_TRACE(COMP_LED, "stop CurrLedState %d\n", pLed->CurrLedState);
565 else if(priv->ieee80211->state != IEEE80211_LINKED)
567 pLed->CurrLedState = LED_OFF;
568 pLed->BlinkingLedState = LED_OFF;
570 RT_TRACE(COMP_LED, "stop CurrLedState %d\n", pLed->CurrLedState);
572 pLed->bLedBlinkInProgress = FALSE;
576 if( priv->ieee80211->eRFPowerState != eRfOn )
583 pLed->BlinkingLedState = LED_OFF;
585 pLed->BlinkingLedState = LED_ON;
586 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
602 struct net_device *dev = (struct net_device *)(pLed->dev);
603 struct r8192_priv *priv = ieee80211_priv(dev);
604 bool bStopBlinking = FALSE;
606 if( pLed->BlinkingLedState == LED_ON )
609 RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);
613 if(pLed->CurrLedState != LED_BLINK_WPS_STOP)
615 RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);
618 switch(pLed->CurrLedState)
622 if( pLed->BlinkTimes == 0 )
624 bStopBlinking = TRUE;
629 if( priv->ieee80211->eRFPowerState != eRfOn )
633 else if(priv->ieee80211->state == IEEE80211_LINKED)
635 pLed->CurrLedState = LED_ON;
636 pLed->BlinkingLedState = LED_ON;
640 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
642 else if(priv->ieee80211->state != IEEE80211_LINKED)
644 pLed->CurrLedState = LED_OFF;
645 pLed->BlinkingLedState = LED_OFF;
649 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
651 pLed->bLedScanBlinkInProgress = FALSE;
655 if( priv->ieee80211->eRFPowerState != eRfOn )
662 pLed->BlinkingLedState = LED_OFF;
664 pLed->BlinkingLedState = LED_ON;
665 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
672 if( pLed->BlinkTimes == 0 )
674 bStopBlinking = TRUE;
678 if( priv->ieee80211->eRFPowerState != eRfOn )
682 else if(priv->ieee80211->state == IEEE80211_LINKED)
684 pLed->CurrLedState = LED_ON;
685 pLed->BlinkingLedState = LED_ON;
690 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
692 else if(priv->ieee80211->state != IEEE80211_LINKED)
694 pLed->CurrLedState = LED_OFF;
695 pLed->BlinkingLedState = LED_OFF;
701 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
703 pLed->bLedBlinkInProgress = FALSE;
707 if( priv->ieee80211->eRFPowerState != eRfOn )
714 pLed->BlinkingLedState = LED_OFF;
716 pLed->BlinkingLedState = LED_ON;
717 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
724 pLed->BlinkingLedState = LED_OFF;
726 pLed->BlinkingLedState = LED_ON;
727 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
730 case LED_BLINK_WPS_STOP:
731 if(pLed->BlinkingLedState == LED_ON)
733 pLed->BlinkingLedState = LED_OFF;
734 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA));
735 bStopBlinking = FALSE;
739 bStopBlinking = TRUE;
744 if( priv->ieee80211->eRFPowerState != eRfOn )
750 pLed->CurrLedState = LED_ON;
751 pLed->BlinkingLedState = LED_ON;
753 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
755 pLed->bLedWPSBlinkInProgress = FALSE;
772 struct net_device *dev = (struct net_device *)(pLed->dev);
773 struct r8192_priv *priv = ieee80211_priv(dev);
774 PLED_819xUsb pLed1 = &(priv->SwLed1);
775 bool bStopBlinking = FALSE;
777 if( pLed->BlinkingLedState == LED_ON )
780 RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);
785 RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);
788 if(!pLed1->bLedWPSBlinkInProgress && pLed1->BlinkingLedState == LED_UNKNOWN)
790 pLed1->BlinkingLedState = LED_OFF;
791 pLed1->CurrLedState = LED_OFF;
792 SwLedOff(dev, pLed1);
795 switch(pLed->CurrLedState)
797 case LED_BLINK_SLOWLY:
799 pLed->BlinkingLedState = LED_OFF;
801 pLed->BlinkingLedState = LED_ON;
802 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
805 case LED_BLINK_StartToBlink:
808 pLed->BlinkingLedState = LED_OFF;
809 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
813 pLed->BlinkingLedState = LED_ON;
814 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
820 if( pLed->BlinkTimes == 0 )
822 bStopBlinking = TRUE;
827 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
833 pLed->bLedNoLinkBlinkInProgress = TRUE;
834 pLed->CurrLedState = LED_BLINK_SLOWLY;
836 pLed->BlinkingLedState = LED_OFF;
838 pLed->BlinkingLedState = LED_ON;
839 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
841 pLed->bLedScanBlinkInProgress = FALSE;
845 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
852 pLed->BlinkingLedState = LED_OFF;
854 pLed->BlinkingLedState = LED_ON;
855 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
862 if( pLed->BlinkTimes == 0 )
864 bStopBlinking = TRUE;
868 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
874 pLed->bLedNoLinkBlinkInProgress = TRUE;
875 pLed->CurrLedState = LED_BLINK_SLOWLY;
877 pLed->BlinkingLedState = LED_OFF;
879 pLed->BlinkingLedState = LED_ON;
880 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
882 pLed->bLedBlinkInProgress = FALSE;
886 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
893 pLed->BlinkingLedState = LED_OFF;
895 pLed->BlinkingLedState = LED_ON;
896 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
904 pLed->BlinkingLedState = LED_OFF;
905 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
909 pLed->BlinkingLedState = LED_ON;
910 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
914 case LED_BLINK_WPS_STOP:
916 pLed->BlinkingLedState = LED_OFF;
918 pLed->BlinkingLedState = LED_ON;
920 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
923 case LED_BLINK_WPS_STOP_OVERLAP:
925 if(pLed->BlinkTimes == 0)
929 pLed->BlinkTimes = 1;
933 bStopBlinking = TRUE;
939 pLed->BlinkTimes = 10;
940 pLed->BlinkingLedState = LED_ON;
941 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA));
946 pLed->BlinkingLedState = LED_OFF;
948 pLed->BlinkingLedState = LED_ON;
950 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
959 RT_TRACE(COMP_LED, "SwLedBlink4 CurrLedState %d\n", pLed->CurrLedState);
969 struct net_device *dev = (struct net_device *)(pLed->dev);
970 struct r8192_priv *priv = ieee80211_priv(dev);
971 bool bStopBlinking = FALSE;
973 if( pLed->BlinkingLedState == LED_ON )
976 RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);
981 RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);
984 switch(pLed->CurrLedState)
988 if( pLed->BlinkTimes == 0 )
990 bStopBlinking = TRUE;
995 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
997 pLed->CurrLedState = LED_OFF;
998 pLed->BlinkingLedState = LED_OFF;
1000 SwLedOff(dev, pLed);
1003 { pLed->CurrLedState = LED_ON;
1004 pLed->BlinkingLedState = LED_ON;
1006 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1009 pLed->bLedScanBlinkInProgress = FALSE;
1013 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
1015 SwLedOff(dev, pLed);
1020 pLed->BlinkingLedState = LED_OFF;
1022 pLed->BlinkingLedState = LED_ON;
1023 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1029 case LED_TXRX_BLINK:
1031 if( pLed->BlinkTimes == 0 )
1033 bStopBlinking = TRUE;
1038 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
1040 pLed->CurrLedState = LED_OFF;
1041 pLed->BlinkingLedState = LED_OFF;
1043 SwLedOff(dev, pLed);
1047 pLed->CurrLedState = LED_ON;
1048 pLed->BlinkingLedState = LED_ON;
1050 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1053 pLed->bLedBlinkInProgress = FALSE;
1057 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
1059 SwLedOff(dev, pLed);
1064 pLed->BlinkingLedState = LED_OFF;
1066 pLed->BlinkingLedState = LED_ON;
1067 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1076 RT_TRACE(COMP_LED, "SwLedBlink5 CurrLedState %d\n", pLed->CurrLedState);
1087 struct net_device *dev = (struct net_device *)data;
1088 struct r8192_priv *priv = ieee80211_priv(dev);
1090 schedule_work(&(priv->BlinkWorkItem));
1094 void BlinkWorkItemCallback(struct work_struct *work)
1096 struct r8192_priv *priv = container_of(work, struct r8192_priv, BlinkWorkItem);
1098 PLED_819xUsb pLed = priv->pLed;
1100 switch(priv->LedStrategy)
1137 struct net_device *dev,
1138 LED_CTL_MODE LedAction
1141 struct r8192_priv *priv = ieee80211_priv(dev);
1142 PLED_819xUsb pLed = &(priv->SwLed1);
1148 if( pLed->bLedBlinkInProgress == FALSE )
1150 pLed->bLedBlinkInProgress = TRUE;
1152 pLed->CurrLedState = LED_BLINK_NORMAL;
1153 pLed->BlinkTimes = 2;
1156 pLed->BlinkingLedState = LED_OFF;
1158 pLed->BlinkingLedState = LED_ON;
1159 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
1163 case LED_CTL_START_TO_LINK:
1164 if( pLed->bLedBlinkInProgress == FALSE )
1166 pLed->bLedBlinkInProgress = TRUE;
1168 pLed->CurrLedState = LED_BLINK_StartToBlink;
1169 pLed->BlinkTimes = 24;
1172 pLed->BlinkingLedState = LED_OFF;
1174 pLed->BlinkingLedState = LED_ON;
1175 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
1179 pLed->CurrLedState = LED_BLINK_StartToBlink;
1184 pLed->CurrLedState = LED_ON;
1185 if( pLed->bLedBlinkInProgress == FALSE )
1191 case LED_CTL_NO_LINK:
1192 pLed->CurrLedState = LED_OFF;
1193 if( pLed->bLedBlinkInProgress == FALSE )
1195 SwLedOff(dev, pLed);
1199 case LED_CTL_POWER_OFF:
1200 pLed->CurrLedState = LED_OFF;
1201 if(pLed->bLedBlinkInProgress)
1203 del_timer_sync(&(pLed->BlinkTimer));
1204 pLed->bLedBlinkInProgress = FALSE;
1206 SwLedOff(dev, pLed);
1209 case LED_CTL_START_WPS:
1210 if( pLed->bLedBlinkInProgress == FALSE || pLed->CurrLedState == LED_ON)
1212 pLed->bLedBlinkInProgress = TRUE;
1214 pLed->CurrLedState = LED_BLINK_WPS;
1215 pLed->BlinkTimes = 20;
1219 pLed->BlinkingLedState = LED_OFF;
1220 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL));
1224 pLed->BlinkingLedState = LED_ON;
1225 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL));
1230 case LED_CTL_STOP_WPS:
1231 if(pLed->bLedBlinkInProgress)
1233 pLed->CurrLedState = LED_OFF;
1234 del_timer_sync(&(pLed->BlinkTimer));
1235 pLed->bLedBlinkInProgress = FALSE;
1244 RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState);
1250 struct net_device *dev,
1251 LED_CTL_MODE LedAction
1254 struct r8192_priv *priv = ieee80211_priv(dev);
1255 PLED_819xUsb pLed = &(priv->SwLed0);
1257 if(priv->CustomerID == RT_CID_819x_CAMEO)
1258 pLed = &(priv->SwLed1);
1262 case LED_CTL_START_TO_LINK:
1263 case LED_CTL_NO_LINK:
1264 if( pLed->bLedNoLinkBlinkInProgress == FALSE )
1266 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1270 if( pLed->bLedLinkBlinkInProgress == TRUE )
1272 del_timer_sync(&(pLed->BlinkTimer));
1273 pLed->bLedLinkBlinkInProgress = FALSE;
1275 if(pLed->bLedBlinkInProgress ==TRUE)
1277 del_timer_sync(&(pLed->BlinkTimer));
1278 pLed->bLedBlinkInProgress = FALSE;
1281 pLed->bLedNoLinkBlinkInProgress = TRUE;
1282 pLed->CurrLedState = LED_BLINK_SLOWLY;
1284 pLed->BlinkingLedState = LED_OFF;
1286 pLed->BlinkingLedState = LED_ON;
1287 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
1292 if( pLed->bLedLinkBlinkInProgress == FALSE )
1294 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1298 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1300 del_timer_sync(&(pLed->BlinkTimer));
1301 pLed->bLedNoLinkBlinkInProgress = FALSE;
1303 if(pLed->bLedBlinkInProgress ==TRUE)
1305 del_timer_sync(&(pLed->BlinkTimer));
1306 pLed->bLedBlinkInProgress = FALSE;
1308 pLed->bLedLinkBlinkInProgress = TRUE;
1309 pLed->CurrLedState = LED_BLINK_NORMAL;
1311 pLed->BlinkingLedState = LED_OFF;
1313 pLed->BlinkingLedState = LED_ON;
1314 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA));
1318 case LED_CTL_SITE_SURVEY:
1319 if((priv->ieee80211->LinkDetectInfo.bBusyTraffic) && (priv->ieee80211->state == IEEE80211_LINKED))
1321 else if(pLed->bLedScanBlinkInProgress ==FALSE)
1323 if(IS_LED_WPS_BLINKING(pLed))
1326 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1328 del_timer_sync(&(pLed->BlinkTimer));
1329 pLed->bLedNoLinkBlinkInProgress = FALSE;
1331 if( pLed->bLedLinkBlinkInProgress == TRUE )
1333 del_timer_sync(&(pLed->BlinkTimer));
1334 pLed->bLedLinkBlinkInProgress = FALSE;
1336 if(pLed->bLedBlinkInProgress ==TRUE)
1338 del_timer_sync(&(pLed->BlinkTimer));
1339 pLed->bLedBlinkInProgress = FALSE;
1341 pLed->bLedScanBlinkInProgress = TRUE;
1342 pLed->CurrLedState = LED_SCAN_BLINK;
1343 pLed->BlinkTimes = 24;
1345 pLed->BlinkingLedState = LED_OFF;
1347 pLed->BlinkingLedState = LED_ON;
1348 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1355 if(pLed->bLedBlinkInProgress ==FALSE)
1357 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1360 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1362 del_timer_sync(&(pLed->BlinkTimer));
1363 pLed->bLedNoLinkBlinkInProgress = FALSE;
1365 if( pLed->bLedLinkBlinkInProgress == TRUE )
1367 del_timer_sync(&(pLed->BlinkTimer));
1368 pLed->bLedLinkBlinkInProgress = FALSE;
1370 pLed->bLedBlinkInProgress = TRUE;
1371 pLed->CurrLedState = LED_TXRX_BLINK;
1372 pLed->BlinkTimes = 2;
1374 pLed->BlinkingLedState = LED_OFF;
1376 pLed->BlinkingLedState = LED_ON;
1377 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1381 case LED_CTL_START_WPS:
1382 case LED_CTL_START_WPS_BOTTON:
1383 if(pLed->bLedWPSBlinkInProgress ==FALSE)
1385 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1387 del_timer_sync(&(pLed->BlinkTimer));
1388 pLed->bLedNoLinkBlinkInProgress = FALSE;
1390 if( pLed->bLedLinkBlinkInProgress == TRUE )
1392 del_timer_sync(&(pLed->BlinkTimer));
1393 pLed->bLedLinkBlinkInProgress = FALSE;
1395 if(pLed->bLedBlinkInProgress ==TRUE)
1397 del_timer_sync(&(pLed->BlinkTimer));
1398 pLed->bLedBlinkInProgress = FALSE;
1400 if(pLed->bLedScanBlinkInProgress ==TRUE)
1402 del_timer_sync(&(pLed->BlinkTimer));
1403 pLed->bLedScanBlinkInProgress = FALSE;
1405 pLed->bLedWPSBlinkInProgress = TRUE;
1406 pLed->CurrLedState = LED_BLINK_WPS;
1408 pLed->BlinkingLedState = LED_OFF;
1410 pLed->BlinkingLedState = LED_ON;
1411 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1417 case LED_CTL_STOP_WPS:
1418 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1420 del_timer_sync(&(pLed->BlinkTimer));
1421 pLed->bLedNoLinkBlinkInProgress = FALSE;
1423 if( pLed->bLedLinkBlinkInProgress == TRUE )
1425 del_timer_sync(&(pLed->BlinkTimer));
1426 pLed->bLedLinkBlinkInProgress = FALSE;
1428 if(pLed->bLedBlinkInProgress ==TRUE)
1430 del_timer_sync(&(pLed->BlinkTimer));
1431 pLed->bLedBlinkInProgress = FALSE;
1433 if(pLed->bLedScanBlinkInProgress ==TRUE)
1435 del_timer_sync(&(pLed->BlinkTimer));
1436 pLed->bLedScanBlinkInProgress = FALSE;
1438 if(pLed->bLedWPSBlinkInProgress)
1440 del_timer_sync(&(pLed->BlinkTimer));
1444 pLed->bLedWPSBlinkInProgress = TRUE;
1447 pLed->CurrLedState = LED_BLINK_WPS_STOP;
1450 pLed->BlinkingLedState = LED_OFF;
1451 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA));
1455 pLed->BlinkingLedState = LED_ON;
1456 mod_timer(&(pLed->BlinkTimer), 0);
1460 case LED_CTL_STOP_WPS_FAIL:
1461 if(pLed->bLedWPSBlinkInProgress)
1463 del_timer_sync(&(pLed->BlinkTimer));
1464 pLed->bLedWPSBlinkInProgress = FALSE;
1467 pLed->bLedNoLinkBlinkInProgress = TRUE;
1468 pLed->CurrLedState = LED_BLINK_SLOWLY;
1470 pLed->BlinkingLedState = LED_OFF;
1472 pLed->BlinkingLedState = LED_ON;
1473 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
1476 case LED_CTL_POWER_OFF:
1477 pLed->CurrLedState = LED_OFF;
1478 if( pLed->bLedNoLinkBlinkInProgress)
1480 del_timer_sync(&(pLed->BlinkTimer));
1481 pLed->bLedNoLinkBlinkInProgress = FALSE;
1483 if( pLed->bLedLinkBlinkInProgress)
1485 del_timer_sync(&(pLed->BlinkTimer));
1486 pLed->bLedLinkBlinkInProgress = FALSE;
1488 if( pLed->bLedBlinkInProgress)
1490 del_timer_sync(&(pLed->BlinkTimer));
1491 pLed->bLedBlinkInProgress = FALSE;
1493 if( pLed->bLedWPSBlinkInProgress )
1495 del_timer_sync(&(pLed->BlinkTimer));
1496 pLed->bLedWPSBlinkInProgress = FALSE;
1498 if( pLed->bLedScanBlinkInProgress)
1500 del_timer_sync(&(pLed->BlinkTimer));
1501 pLed->bLedScanBlinkInProgress = FALSE;
1504 SwLedOff(dev, pLed);
1512 RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState);
1517 struct net_device *dev,
1518 LED_CTL_MODE LedAction
1521 struct r8192_priv *priv = ieee80211_priv(dev);
1522 PLED_819xUsb pLed = &(priv->SwLed0);
1526 case LED_CTL_SITE_SURVEY:
1527 if(priv->ieee80211->LinkDetectInfo.bBusyTraffic)
1529 else if(pLed->bLedScanBlinkInProgress ==FALSE)
1531 if(IS_LED_WPS_BLINKING(pLed))
1534 if(pLed->bLedBlinkInProgress ==TRUE)
1536 del_timer_sync(&(pLed->BlinkTimer));
1537 pLed->bLedBlinkInProgress = FALSE;
1539 pLed->bLedScanBlinkInProgress = TRUE;
1540 pLed->CurrLedState = LED_SCAN_BLINK;
1541 pLed->BlinkTimes = 24;
1543 pLed->BlinkingLedState = LED_OFF;
1545 pLed->BlinkingLedState = LED_ON;
1546 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1553 if((pLed->bLedBlinkInProgress ==FALSE) && (priv->ieee80211->state == IEEE80211_LINKED))
1555 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1560 pLed->bLedBlinkInProgress = TRUE;
1561 pLed->CurrLedState = LED_TXRX_BLINK;
1562 pLed->BlinkTimes = 2;
1564 pLed->BlinkingLedState = LED_OFF;
1566 pLed->BlinkingLedState = LED_ON;
1567 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1572 pLed->CurrLedState = LED_ON;
1573 pLed->BlinkingLedState = LED_ON;
1574 if( pLed->bLedBlinkInProgress)
1576 del_timer_sync(&(pLed->BlinkTimer));
1577 pLed->bLedBlinkInProgress = FALSE;
1579 if( pLed->bLedScanBlinkInProgress)
1581 del_timer_sync(&(pLed->BlinkTimer));
1582 pLed->bLedScanBlinkInProgress = FALSE;
1585 mod_timer(&(pLed->BlinkTimer), 0);
1588 case LED_CTL_START_WPS:
1589 case LED_CTL_START_WPS_BOTTON:
1590 if(pLed->bLedWPSBlinkInProgress ==FALSE)
1592 if(pLed->bLedBlinkInProgress ==TRUE)
1594 del_timer_sync(&(pLed->BlinkTimer));
1595 pLed->bLedBlinkInProgress = FALSE;
1597 if(pLed->bLedScanBlinkInProgress ==TRUE)
1599 del_timer_sync(&(pLed->BlinkTimer));
1600 pLed->bLedScanBlinkInProgress = FALSE;
1602 pLed->bLedWPSBlinkInProgress = TRUE;
1603 pLed->CurrLedState = LED_ON;
1604 pLed->BlinkingLedState = LED_ON;
1605 mod_timer(&(pLed->BlinkTimer), 0);
1609 case LED_CTL_STOP_WPS:
1610 pLed->bLedWPSBlinkInProgress = FALSE;
1611 if( priv->ieee80211->eRFPowerState != eRfOn )
1613 SwLedOff(dev, pLed);
1617 pLed->CurrLedState = LED_ON;
1618 pLed->BlinkingLedState = LED_ON;
1619 mod_timer(&(pLed->BlinkTimer), 0);
1620 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
1624 case LED_CTL_STOP_WPS_FAIL:
1625 pLed->bLedWPSBlinkInProgress = FALSE;
1626 if( priv->ieee80211->eRFPowerState != eRfOn )
1628 SwLedOff(dev, pLed);
1632 pLed->CurrLedState = LED_OFF;
1633 pLed->BlinkingLedState = LED_OFF;
1634 mod_timer(&(pLed->BlinkTimer), 0);
1635 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
1639 case LED_CTL_START_TO_LINK:
1640 case LED_CTL_NO_LINK:
1641 if(!IS_LED_BLINKING(pLed))
1643 pLed->CurrLedState = LED_OFF;
1644 pLed->BlinkingLedState = LED_OFF;
1645 mod_timer(&(pLed->BlinkTimer), 0);
1649 case LED_CTL_POWER_OFF:
1650 pLed->CurrLedState = LED_OFF;
1651 pLed->BlinkingLedState = LED_OFF;
1652 if( pLed->bLedBlinkInProgress)
1654 del_timer_sync(&(pLed->BlinkTimer));
1655 pLed->bLedBlinkInProgress = FALSE;
1657 if( pLed->bLedScanBlinkInProgress)
1659 del_timer_sync(&(pLed->BlinkTimer));
1660 pLed->bLedScanBlinkInProgress = FALSE;
1662 if( pLed->bLedWPSBlinkInProgress )
1664 del_timer_sync(&(pLed->BlinkTimer));
1665 pLed->bLedWPSBlinkInProgress = FALSE;
1668 mod_timer(&(pLed->BlinkTimer), 0);
1676 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
1681 struct net_device *dev,
1682 LED_CTL_MODE LedAction
1685 struct r8192_priv *priv = ieee80211_priv(dev);
1686 PLED_819xUsb pLed = &(priv->SwLed0);
1690 case LED_CTL_SITE_SURVEY:
1691 if(priv->ieee80211->LinkDetectInfo.bBusyTraffic)
1693 else if(pLed->bLedScanBlinkInProgress ==FALSE)
1695 if(IS_LED_WPS_BLINKING(pLed))
1698 if(pLed->bLedBlinkInProgress ==TRUE)
1700 del_timer_sync(&(pLed->BlinkTimer));
1701 pLed->bLedBlinkInProgress = FALSE;
1703 pLed->bLedScanBlinkInProgress = TRUE;
1704 pLed->CurrLedState = LED_SCAN_BLINK;
1705 pLed->BlinkTimes = 24;
1707 pLed->BlinkingLedState = LED_OFF;
1709 pLed->BlinkingLedState = LED_ON;
1710 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1717 if((pLed->bLedBlinkInProgress ==FALSE) && (priv->ieee80211->state == IEEE80211_LINKED))
1719 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1724 pLed->bLedBlinkInProgress = TRUE;
1725 pLed->CurrLedState = LED_TXRX_BLINK;
1726 pLed->BlinkTimes = 2;
1728 pLed->BlinkingLedState = LED_OFF;
1730 pLed->BlinkingLedState = LED_ON;
1731 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1736 if(IS_LED_WPS_BLINKING(pLed))
1739 pLed->CurrLedState = LED_ON;
1740 pLed->BlinkingLedState = LED_ON;
1741 if( pLed->bLedBlinkInProgress)
1743 del_timer_sync(&(pLed->BlinkTimer));
1744 pLed->bLedBlinkInProgress = FALSE;
1746 if( pLed->bLedScanBlinkInProgress)
1748 del_timer_sync(&(pLed->BlinkTimer));
1749 pLed->bLedScanBlinkInProgress = FALSE;
1752 mod_timer(&(pLed->BlinkTimer), 0);
1755 case LED_CTL_START_WPS:
1756 case LED_CTL_START_WPS_BOTTON:
1757 if(pLed->bLedWPSBlinkInProgress ==FALSE)
1759 if(pLed->bLedBlinkInProgress ==TRUE)
1761 del_timer_sync(&(pLed->BlinkTimer));
1762 pLed->bLedBlinkInProgress = FALSE;
1764 if(pLed->bLedScanBlinkInProgress ==TRUE)
1766 del_timer_sync(&(pLed->BlinkTimer));
1767 pLed->bLedScanBlinkInProgress = FALSE;
1769 pLed->bLedWPSBlinkInProgress = TRUE;
1770 pLed->CurrLedState = LED_BLINK_WPS;
1772 pLed->BlinkingLedState = LED_OFF;
1774 pLed->BlinkingLedState = LED_ON;
1775 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1780 case LED_CTL_STOP_WPS:
1781 if(pLed->bLedWPSBlinkInProgress)
1783 del_timer_sync(&(pLed->BlinkTimer));
1784 pLed->bLedWPSBlinkInProgress = FALSE;
1788 pLed->bLedWPSBlinkInProgress = TRUE;
1791 pLed->CurrLedState = LED_BLINK_WPS_STOP;
1794 pLed->BlinkingLedState = LED_OFF;
1795 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA));
1799 pLed->BlinkingLedState = LED_ON;
1800 mod_timer(&(pLed->BlinkTimer), 0);
1806 case LED_CTL_STOP_WPS_FAIL:
1807 if(pLed->bLedWPSBlinkInProgress)
1809 del_timer_sync(&(pLed->BlinkTimer));
1810 pLed->bLedWPSBlinkInProgress = FALSE;
1813 pLed->CurrLedState = LED_OFF;
1814 pLed->BlinkingLedState = LED_OFF;
1815 mod_timer(&(pLed->BlinkTimer), 0);
1818 case LED_CTL_START_TO_LINK:
1819 case LED_CTL_NO_LINK:
1820 if(!IS_LED_BLINKING(pLed))
1822 pLed->CurrLedState = LED_OFF;
1823 pLed->BlinkingLedState = LED_OFF;
1824 mod_timer(&(pLed->BlinkTimer), 0);
1828 case LED_CTL_POWER_OFF:
1829 pLed->CurrLedState = LED_OFF;
1830 pLed->BlinkingLedState = LED_OFF;
1831 if( pLed->bLedBlinkInProgress)
1833 del_timer_sync(&(pLed->BlinkTimer));
1834 pLed->bLedBlinkInProgress = FALSE;
1836 if( pLed->bLedScanBlinkInProgress)
1838 del_timer_sync(&(pLed->BlinkTimer));
1839 pLed->bLedScanBlinkInProgress = FALSE;
1841 if( pLed->bLedWPSBlinkInProgress )
1843 del_timer_sync(&(pLed->BlinkTimer));
1844 pLed->bLedWPSBlinkInProgress = FALSE;
1847 mod_timer(&(pLed->BlinkTimer), 0);
1855 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
1861 struct net_device *dev,
1862 LED_CTL_MODE LedAction
1865 struct r8192_priv *priv = ieee80211_priv(dev);
1866 PLED_819xUsb pLed = &(priv->SwLed0);
1867 PLED_819xUsb pLed1 = &(priv->SwLed1);
1871 case LED_CTL_START_TO_LINK:
1872 if(pLed1->bLedWPSBlinkInProgress)
1874 pLed1->bLedWPSBlinkInProgress = FALSE;
1875 del_timer_sync(&(pLed1->BlinkTimer));
1877 pLed1->BlinkingLedState = LED_OFF;
1878 pLed1->CurrLedState = LED_OFF;
1881 mod_timer(&(pLed1->BlinkTimer), 0);
1884 if( pLed->bLedStartToLinkBlinkInProgress == FALSE )
1886 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1890 if(pLed->bLedBlinkInProgress ==TRUE)
1892 del_timer_sync(&(pLed->BlinkTimer));
1893 pLed->bLedBlinkInProgress = FALSE;
1895 if(pLed->bLedNoLinkBlinkInProgress ==TRUE)
1897 del_timer_sync(&(pLed->BlinkTimer));
1898 pLed->bLedNoLinkBlinkInProgress = FALSE;
1901 pLed->bLedStartToLinkBlinkInProgress = TRUE;
1902 pLed->CurrLedState = LED_BLINK_StartToBlink;
1905 pLed->BlinkingLedState = LED_OFF;
1906 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
1910 pLed->BlinkingLedState = LED_ON;
1911 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
1917 case LED_CTL_NO_LINK:
1918 if(LedAction == LED_CTL_LINK)
1920 if(pLed1->bLedWPSBlinkInProgress)
1922 pLed1->bLedWPSBlinkInProgress = FALSE;
1923 del_timer_sync(&(pLed1->BlinkTimer));
1925 pLed1->BlinkingLedState = LED_OFF;
1926 pLed1->CurrLedState = LED_OFF;
1929 mod_timer(&(pLed1->BlinkTimer), 0);
1933 if( pLed->bLedNoLinkBlinkInProgress == FALSE )
1935 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1939 if(pLed->bLedBlinkInProgress ==TRUE)
1941 del_timer_sync(&(pLed->BlinkTimer));
1942 pLed->bLedBlinkInProgress = FALSE;
1945 pLed->bLedNoLinkBlinkInProgress = TRUE;
1946 pLed->CurrLedState = LED_BLINK_SLOWLY;
1948 pLed->BlinkingLedState = LED_OFF;
1950 pLed->BlinkingLedState = LED_ON;
1951 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
1956 case LED_CTL_SITE_SURVEY:
1957 if((priv->ieee80211->LinkDetectInfo.bBusyTraffic) && (priv->ieee80211->state == IEEE80211_LINKED))
1959 else if(pLed->bLedScanBlinkInProgress ==FALSE)
1961 if(IS_LED_WPS_BLINKING(pLed))
1964 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1966 del_timer_sync(&(pLed->BlinkTimer));
1967 pLed->bLedNoLinkBlinkInProgress = FALSE;
1969 if(pLed->bLedBlinkInProgress ==TRUE)
1971 del_timer_sync(&(pLed->BlinkTimer));
1972 pLed->bLedBlinkInProgress = FALSE;
1974 pLed->bLedScanBlinkInProgress = TRUE;
1975 pLed->CurrLedState = LED_SCAN_BLINK;
1976 pLed->BlinkTimes = 24;
1978 pLed->BlinkingLedState = LED_OFF;
1980 pLed->BlinkingLedState = LED_ON;
1981 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1988 if(pLed->bLedBlinkInProgress ==FALSE)
1990 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1994 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1996 del_timer_sync(&(pLed->BlinkTimer));
1997 pLed->bLedNoLinkBlinkInProgress = FALSE;
1999 pLed->bLedBlinkInProgress = TRUE;
2000 pLed->CurrLedState = LED_TXRX_BLINK;
2001 pLed->BlinkTimes = 2;
2003 pLed->BlinkingLedState = LED_OFF;
2005 pLed->BlinkingLedState = LED_ON;
2006 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
2010 case LED_CTL_START_WPS:
2011 case LED_CTL_START_WPS_BOTTON:
2012 if(pLed1->bLedWPSBlinkInProgress)
2014 pLed1->bLedWPSBlinkInProgress = FALSE;
2015 del_timer_sync(&(pLed1->BlinkTimer));
2017 pLed1->BlinkingLedState = LED_OFF;
2018 pLed1->CurrLedState = LED_OFF;
2021 mod_timer(&(pLed1->BlinkTimer), 0);
2024 if(pLed->bLedWPSBlinkInProgress ==FALSE)
2026 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
2028 del_timer_sync(&(pLed->BlinkTimer));
2029 pLed->bLedNoLinkBlinkInProgress = FALSE;
2031 if(pLed->bLedBlinkInProgress ==TRUE)
2033 del_timer_sync(&(pLed->BlinkTimer));
2034 pLed->bLedBlinkInProgress = FALSE;
2036 if(pLed->bLedScanBlinkInProgress ==TRUE)
2038 del_timer_sync(&(pLed->BlinkTimer));
2039 pLed->bLedScanBlinkInProgress = FALSE;
2041 pLed->bLedWPSBlinkInProgress = TRUE;
2042 pLed->CurrLedState = LED_BLINK_WPS;
2045 pLed->BlinkingLedState = LED_OFF;
2046 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
2050 pLed->BlinkingLedState = LED_ON;
2051 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
2057 case LED_CTL_STOP_WPS:
2058 if(pLed->bLedWPSBlinkInProgress)
2060 del_timer_sync(&(pLed->BlinkTimer));
2061 pLed->bLedWPSBlinkInProgress = FALSE;
2064 pLed->bLedNoLinkBlinkInProgress = TRUE;
2065 pLed->CurrLedState = LED_BLINK_SLOWLY;
2067 pLed->BlinkingLedState = LED_OFF;
2069 pLed->BlinkingLedState = LED_ON;
2070 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
2074 case LED_CTL_STOP_WPS_FAIL:
2075 if(pLed->bLedWPSBlinkInProgress)
2077 del_timer_sync(&(pLed->BlinkTimer));
2078 pLed->bLedWPSBlinkInProgress = FALSE;
2081 pLed->bLedNoLinkBlinkInProgress = TRUE;
2082 pLed->CurrLedState = LED_BLINK_SLOWLY;
2084 pLed->BlinkingLedState = LED_OFF;
2086 pLed->BlinkingLedState = LED_ON;
2087 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
2089 if(pLed1->bLedWPSBlinkInProgress)
2090 del_timer_sync(&(pLed1->BlinkTimer));
2092 pLed1->bLedWPSBlinkInProgress = TRUE;
2094 pLed1->CurrLedState = LED_BLINK_WPS_STOP;
2096 pLed1->BlinkingLedState = LED_OFF;
2098 pLed1->BlinkingLedState = LED_ON;
2099 mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
2103 case LED_CTL_STOP_WPS_FAIL_OVERLAP:
2104 if(pLed->bLedWPSBlinkInProgress)
2106 del_timer_sync(&(pLed->BlinkTimer));
2107 pLed->bLedWPSBlinkInProgress = FALSE;
2110 pLed->bLedNoLinkBlinkInProgress = TRUE;
2111 pLed->CurrLedState = LED_BLINK_SLOWLY;
2113 pLed->BlinkingLedState = LED_OFF;
2115 pLed->BlinkingLedState = LED_ON;
2116 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
2118 if(pLed1->bLedWPSBlinkInProgress)
2119 del_timer_sync(&(pLed1->BlinkTimer));
2121 pLed1->bLedWPSBlinkInProgress = TRUE;
2123 pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;
2124 pLed1->BlinkTimes = 10;
2126 pLed1->BlinkingLedState = LED_OFF;
2128 pLed1->BlinkingLedState = LED_ON;
2129 mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
2133 case LED_CTL_POWER_OFF:
2134 pLed->CurrLedState = LED_OFF;
2135 pLed->BlinkingLedState = LED_OFF;
2137 if( pLed->bLedNoLinkBlinkInProgress)
2139 del_timer_sync(&(pLed->BlinkTimer));
2140 pLed->bLedNoLinkBlinkInProgress = FALSE;
2142 if( pLed->bLedLinkBlinkInProgress)
2144 del_timer_sync(&(pLed->BlinkTimer));
2145 pLed->bLedLinkBlinkInProgress = FALSE;
2147 if( pLed->bLedBlinkInProgress)
2149 del_timer_sync(&(pLed->BlinkTimer));
2150 pLed->bLedBlinkInProgress = FALSE;
2152 if( pLed->bLedWPSBlinkInProgress )
2154 del_timer_sync(&(pLed->BlinkTimer));
2155 pLed->bLedWPSBlinkInProgress = FALSE;
2157 if( pLed->bLedScanBlinkInProgress)
2159 del_timer_sync(&(pLed->BlinkTimer));
2160 pLed->bLedScanBlinkInProgress = FALSE;
2162 if( pLed->bLedStartToLinkBlinkInProgress)
2164 del_timer_sync(&(pLed->BlinkTimer));
2165 pLed->bLedStartToLinkBlinkInProgress = FALSE;
2168 if( pLed1->bLedWPSBlinkInProgress )
2170 del_timer_sync(&(pLed1->BlinkTimer));
2171 pLed1->bLedWPSBlinkInProgress = FALSE;
2175 pLed1->BlinkingLedState = LED_UNKNOWN;
2176 SwLedOff(dev, pLed);
2177 SwLedOff(dev, pLed1);
2185 RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState);
2192 struct net_device *dev,
2193 LED_CTL_MODE LedAction
2196 struct r8192_priv *priv = ieee80211_priv(dev);
2197 PLED_819xUsb pLed = &(priv->SwLed0);
2199 if(priv->CustomerID == RT_CID_819x_CAMEO)
2200 pLed = &(priv->SwLed1);
2204 case LED_CTL_POWER_ON:
2205 case LED_CTL_NO_LINK:
2207 if(pLed->CurrLedState == LED_SCAN_BLINK)
2211 pLed->CurrLedState = LED_ON;
2212 pLed->BlinkingLedState = LED_ON;
2213 pLed->bLedBlinkInProgress = FALSE;
2214 mod_timer(&(pLed->BlinkTimer), 0);
2217 case LED_CTL_SITE_SURVEY:
2218 if((priv->ieee80211->LinkDetectInfo.bBusyTraffic) && (priv->ieee80211->state == IEEE80211_LINKED))
2220 else if(pLed->bLedScanBlinkInProgress ==FALSE)
2222 if(pLed->bLedBlinkInProgress ==TRUE)
2224 del_timer_sync(&(pLed->BlinkTimer));
2225 pLed->bLedBlinkInProgress = FALSE;
2227 pLed->bLedScanBlinkInProgress = TRUE;
2228 pLed->CurrLedState = LED_SCAN_BLINK;
2229 pLed->BlinkTimes = 24;
2231 pLed->BlinkingLedState = LED_OFF;
2233 pLed->BlinkingLedState = LED_ON;
2234 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
2241 if(pLed->bLedBlinkInProgress ==FALSE)
2243 if(pLed->CurrLedState == LED_SCAN_BLINK)
2247 pLed->bLedBlinkInProgress = TRUE;
2248 pLed->CurrLedState = LED_TXRX_BLINK;
2249 pLed->BlinkTimes = 2;
2251 pLed->BlinkingLedState = LED_OFF;
2253 pLed->BlinkingLedState = LED_ON;
2254 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
2258 case LED_CTL_POWER_OFF:
2259 pLed->CurrLedState = LED_OFF;
2260 pLed->BlinkingLedState = LED_OFF;
2262 if( pLed->bLedBlinkInProgress)
2264 del_timer_sync(&(pLed->BlinkTimer));
2265 pLed->bLedBlinkInProgress = FALSE;
2268 SwLedOff(dev, pLed);
2276 RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState);
2282 struct net_device *dev,
2283 LED_CTL_MODE LedAction
2286 struct r8192_priv *priv = ieee80211_priv(dev);
2288 if( priv->bRegUseLed == FALSE)
2294 if(priv->bInHctTest)
2297 if( priv->ieee80211->eRFPowerState != eRfOn &&
2298 (LedAction == LED_CTL_TX || LedAction == LED_CTL_RX ||
2299 LedAction == LED_CTL_SITE_SURVEY ||
2300 LedAction == LED_CTL_LINK ||
2301 LedAction == LED_CTL_NO_LINK ||
2302 LedAction == LED_CTL_POWER_ON) )
2307 switch(priv->LedStrategy)
2313 SwLedControlMode1(dev, LedAction);
2316 SwLedControlMode2(dev, LedAction);
2320 SwLedControlMode3(dev, LedAction);
2324 SwLedControlMode4(dev, LedAction);
2328 SwLedControlMode5(dev, LedAction);
2335 RT_TRACE(COMP_LED, "LedStrategy:%d, LedAction %d\n", priv->LedStrategy,LedAction);