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 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
1091 schedule_work(&(priv->BlinkWorkItem));
1096 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
1097 void BlinkWorkItemCallback(struct work_struct *work)
1099 struct r8192_priv *priv = container_of(work, struct r8192_priv, BlinkWorkItem);
1101 void BlinkWorkItemCallback(void * Context)
1103 struct net_device *dev = (struct net_device *)Context;
1104 struct r8192_priv *priv = ieee80211_priv(dev);
1107 PLED_819xUsb pLed = priv->pLed;
1109 switch(priv->LedStrategy)
1146 struct net_device *dev,
1147 LED_CTL_MODE LedAction
1150 struct r8192_priv *priv = ieee80211_priv(dev);
1151 PLED_819xUsb pLed = &(priv->SwLed1);
1157 if( pLed->bLedBlinkInProgress == FALSE )
1159 pLed->bLedBlinkInProgress = TRUE;
1161 pLed->CurrLedState = LED_BLINK_NORMAL;
1162 pLed->BlinkTimes = 2;
1165 pLed->BlinkingLedState = LED_OFF;
1167 pLed->BlinkingLedState = LED_ON;
1168 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
1172 case LED_CTL_START_TO_LINK:
1173 if( pLed->bLedBlinkInProgress == FALSE )
1175 pLed->bLedBlinkInProgress = TRUE;
1177 pLed->CurrLedState = LED_BLINK_StartToBlink;
1178 pLed->BlinkTimes = 24;
1181 pLed->BlinkingLedState = LED_OFF;
1183 pLed->BlinkingLedState = LED_ON;
1184 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
1188 pLed->CurrLedState = LED_BLINK_StartToBlink;
1193 pLed->CurrLedState = LED_ON;
1194 if( pLed->bLedBlinkInProgress == FALSE )
1200 case LED_CTL_NO_LINK:
1201 pLed->CurrLedState = LED_OFF;
1202 if( pLed->bLedBlinkInProgress == FALSE )
1204 SwLedOff(dev, pLed);
1208 case LED_CTL_POWER_OFF:
1209 pLed->CurrLedState = LED_OFF;
1210 if(pLed->bLedBlinkInProgress)
1212 del_timer_sync(&(pLed->BlinkTimer));
1213 pLed->bLedBlinkInProgress = FALSE;
1215 SwLedOff(dev, pLed);
1218 case LED_CTL_START_WPS:
1219 if( pLed->bLedBlinkInProgress == FALSE || pLed->CurrLedState == LED_ON)
1221 pLed->bLedBlinkInProgress = TRUE;
1223 pLed->CurrLedState = LED_BLINK_WPS;
1224 pLed->BlinkTimes = 20;
1228 pLed->BlinkingLedState = LED_OFF;
1229 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL));
1233 pLed->BlinkingLedState = LED_ON;
1234 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL));
1239 case LED_CTL_STOP_WPS:
1240 if(pLed->bLedBlinkInProgress)
1242 pLed->CurrLedState = LED_OFF;
1243 del_timer_sync(&(pLed->BlinkTimer));
1244 pLed->bLedBlinkInProgress = FALSE;
1253 RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState);
1259 struct net_device *dev,
1260 LED_CTL_MODE LedAction
1263 struct r8192_priv *priv = ieee80211_priv(dev);
1264 PLED_819xUsb pLed = &(priv->SwLed0);
1266 if(priv->CustomerID == RT_CID_819x_CAMEO)
1267 pLed = &(priv->SwLed1);
1271 case LED_CTL_START_TO_LINK:
1272 case LED_CTL_NO_LINK:
1273 if( pLed->bLedNoLinkBlinkInProgress == FALSE )
1275 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1279 if( pLed->bLedLinkBlinkInProgress == TRUE )
1281 del_timer_sync(&(pLed->BlinkTimer));
1282 pLed->bLedLinkBlinkInProgress = FALSE;
1284 if(pLed->bLedBlinkInProgress ==TRUE)
1286 del_timer_sync(&(pLed->BlinkTimer));
1287 pLed->bLedBlinkInProgress = FALSE;
1290 pLed->bLedNoLinkBlinkInProgress = TRUE;
1291 pLed->CurrLedState = LED_BLINK_SLOWLY;
1293 pLed->BlinkingLedState = LED_OFF;
1295 pLed->BlinkingLedState = LED_ON;
1296 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
1301 if( pLed->bLedLinkBlinkInProgress == FALSE )
1303 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1307 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1309 del_timer_sync(&(pLed->BlinkTimer));
1310 pLed->bLedNoLinkBlinkInProgress = FALSE;
1312 if(pLed->bLedBlinkInProgress ==TRUE)
1314 del_timer_sync(&(pLed->BlinkTimer));
1315 pLed->bLedBlinkInProgress = FALSE;
1317 pLed->bLedLinkBlinkInProgress = TRUE;
1318 pLed->CurrLedState = LED_BLINK_NORMAL;
1320 pLed->BlinkingLedState = LED_OFF;
1322 pLed->BlinkingLedState = LED_ON;
1323 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA));
1327 case LED_CTL_SITE_SURVEY:
1328 if((priv->ieee80211->LinkDetectInfo.bBusyTraffic) && (priv->ieee80211->state == IEEE80211_LINKED))
1330 else if(pLed->bLedScanBlinkInProgress ==FALSE)
1332 if(IS_LED_WPS_BLINKING(pLed))
1335 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1337 del_timer_sync(&(pLed->BlinkTimer));
1338 pLed->bLedNoLinkBlinkInProgress = FALSE;
1340 if( pLed->bLedLinkBlinkInProgress == TRUE )
1342 del_timer_sync(&(pLed->BlinkTimer));
1343 pLed->bLedLinkBlinkInProgress = FALSE;
1345 if(pLed->bLedBlinkInProgress ==TRUE)
1347 del_timer_sync(&(pLed->BlinkTimer));
1348 pLed->bLedBlinkInProgress = FALSE;
1350 pLed->bLedScanBlinkInProgress = TRUE;
1351 pLed->CurrLedState = LED_SCAN_BLINK;
1352 pLed->BlinkTimes = 24;
1354 pLed->BlinkingLedState = LED_OFF;
1356 pLed->BlinkingLedState = LED_ON;
1357 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1364 if(pLed->bLedBlinkInProgress ==FALSE)
1366 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1369 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1371 del_timer_sync(&(pLed->BlinkTimer));
1372 pLed->bLedNoLinkBlinkInProgress = FALSE;
1374 if( pLed->bLedLinkBlinkInProgress == TRUE )
1376 del_timer_sync(&(pLed->BlinkTimer));
1377 pLed->bLedLinkBlinkInProgress = FALSE;
1379 pLed->bLedBlinkInProgress = TRUE;
1380 pLed->CurrLedState = LED_TXRX_BLINK;
1381 pLed->BlinkTimes = 2;
1383 pLed->BlinkingLedState = LED_OFF;
1385 pLed->BlinkingLedState = LED_ON;
1386 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1390 case LED_CTL_START_WPS:
1391 case LED_CTL_START_WPS_BOTTON:
1392 if(pLed->bLedWPSBlinkInProgress ==FALSE)
1394 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1396 del_timer_sync(&(pLed->BlinkTimer));
1397 pLed->bLedNoLinkBlinkInProgress = FALSE;
1399 if( pLed->bLedLinkBlinkInProgress == TRUE )
1401 del_timer_sync(&(pLed->BlinkTimer));
1402 pLed->bLedLinkBlinkInProgress = FALSE;
1404 if(pLed->bLedBlinkInProgress ==TRUE)
1406 del_timer_sync(&(pLed->BlinkTimer));
1407 pLed->bLedBlinkInProgress = FALSE;
1409 if(pLed->bLedScanBlinkInProgress ==TRUE)
1411 del_timer_sync(&(pLed->BlinkTimer));
1412 pLed->bLedScanBlinkInProgress = FALSE;
1414 pLed->bLedWPSBlinkInProgress = TRUE;
1415 pLed->CurrLedState = LED_BLINK_WPS;
1417 pLed->BlinkingLedState = LED_OFF;
1419 pLed->BlinkingLedState = LED_ON;
1420 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1426 case LED_CTL_STOP_WPS:
1427 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1429 del_timer_sync(&(pLed->BlinkTimer));
1430 pLed->bLedNoLinkBlinkInProgress = FALSE;
1432 if( pLed->bLedLinkBlinkInProgress == TRUE )
1434 del_timer_sync(&(pLed->BlinkTimer));
1435 pLed->bLedLinkBlinkInProgress = FALSE;
1437 if(pLed->bLedBlinkInProgress ==TRUE)
1439 del_timer_sync(&(pLed->BlinkTimer));
1440 pLed->bLedBlinkInProgress = FALSE;
1442 if(pLed->bLedScanBlinkInProgress ==TRUE)
1444 del_timer_sync(&(pLed->BlinkTimer));
1445 pLed->bLedScanBlinkInProgress = FALSE;
1447 if(pLed->bLedWPSBlinkInProgress)
1449 del_timer_sync(&(pLed->BlinkTimer));
1453 pLed->bLedWPSBlinkInProgress = TRUE;
1456 pLed->CurrLedState = LED_BLINK_WPS_STOP;
1459 pLed->BlinkingLedState = LED_OFF;
1460 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA));
1464 pLed->BlinkingLedState = LED_ON;
1465 mod_timer(&(pLed->BlinkTimer), 0);
1469 case LED_CTL_STOP_WPS_FAIL:
1470 if(pLed->bLedWPSBlinkInProgress)
1472 del_timer_sync(&(pLed->BlinkTimer));
1473 pLed->bLedWPSBlinkInProgress = FALSE;
1476 pLed->bLedNoLinkBlinkInProgress = TRUE;
1477 pLed->CurrLedState = LED_BLINK_SLOWLY;
1479 pLed->BlinkingLedState = LED_OFF;
1481 pLed->BlinkingLedState = LED_ON;
1482 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
1485 case LED_CTL_POWER_OFF:
1486 pLed->CurrLedState = LED_OFF;
1487 if( pLed->bLedNoLinkBlinkInProgress)
1489 del_timer_sync(&(pLed->BlinkTimer));
1490 pLed->bLedNoLinkBlinkInProgress = FALSE;
1492 if( pLed->bLedLinkBlinkInProgress)
1494 del_timer_sync(&(pLed->BlinkTimer));
1495 pLed->bLedLinkBlinkInProgress = FALSE;
1497 if( pLed->bLedBlinkInProgress)
1499 del_timer_sync(&(pLed->BlinkTimer));
1500 pLed->bLedBlinkInProgress = FALSE;
1502 if( pLed->bLedWPSBlinkInProgress )
1504 del_timer_sync(&(pLed->BlinkTimer));
1505 pLed->bLedWPSBlinkInProgress = FALSE;
1507 if( pLed->bLedScanBlinkInProgress)
1509 del_timer_sync(&(pLed->BlinkTimer));
1510 pLed->bLedScanBlinkInProgress = FALSE;
1513 SwLedOff(dev, pLed);
1521 RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState);
1526 struct net_device *dev,
1527 LED_CTL_MODE LedAction
1530 struct r8192_priv *priv = ieee80211_priv(dev);
1531 PLED_819xUsb pLed = &(priv->SwLed0);
1535 case LED_CTL_SITE_SURVEY:
1536 if(priv->ieee80211->LinkDetectInfo.bBusyTraffic)
1538 else if(pLed->bLedScanBlinkInProgress ==FALSE)
1540 if(IS_LED_WPS_BLINKING(pLed))
1543 if(pLed->bLedBlinkInProgress ==TRUE)
1545 del_timer_sync(&(pLed->BlinkTimer));
1546 pLed->bLedBlinkInProgress = FALSE;
1548 pLed->bLedScanBlinkInProgress = TRUE;
1549 pLed->CurrLedState = LED_SCAN_BLINK;
1550 pLed->BlinkTimes = 24;
1552 pLed->BlinkingLedState = LED_OFF;
1554 pLed->BlinkingLedState = LED_ON;
1555 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1562 if((pLed->bLedBlinkInProgress ==FALSE) && (priv->ieee80211->state == IEEE80211_LINKED))
1564 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1569 pLed->bLedBlinkInProgress = TRUE;
1570 pLed->CurrLedState = LED_TXRX_BLINK;
1571 pLed->BlinkTimes = 2;
1573 pLed->BlinkingLedState = LED_OFF;
1575 pLed->BlinkingLedState = LED_ON;
1576 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1581 pLed->CurrLedState = LED_ON;
1582 pLed->BlinkingLedState = LED_ON;
1583 if( pLed->bLedBlinkInProgress)
1585 del_timer_sync(&(pLed->BlinkTimer));
1586 pLed->bLedBlinkInProgress = FALSE;
1588 if( pLed->bLedScanBlinkInProgress)
1590 del_timer_sync(&(pLed->BlinkTimer));
1591 pLed->bLedScanBlinkInProgress = FALSE;
1594 mod_timer(&(pLed->BlinkTimer), 0);
1597 case LED_CTL_START_WPS:
1598 case LED_CTL_START_WPS_BOTTON:
1599 if(pLed->bLedWPSBlinkInProgress ==FALSE)
1601 if(pLed->bLedBlinkInProgress ==TRUE)
1603 del_timer_sync(&(pLed->BlinkTimer));
1604 pLed->bLedBlinkInProgress = FALSE;
1606 if(pLed->bLedScanBlinkInProgress ==TRUE)
1608 del_timer_sync(&(pLed->BlinkTimer));
1609 pLed->bLedScanBlinkInProgress = FALSE;
1611 pLed->bLedWPSBlinkInProgress = TRUE;
1612 pLed->CurrLedState = LED_ON;
1613 pLed->BlinkingLedState = LED_ON;
1614 mod_timer(&(pLed->BlinkTimer), 0);
1618 case LED_CTL_STOP_WPS:
1619 pLed->bLedWPSBlinkInProgress = FALSE;
1620 if( priv->ieee80211->eRFPowerState != eRfOn )
1622 SwLedOff(dev, pLed);
1626 pLed->CurrLedState = LED_ON;
1627 pLed->BlinkingLedState = LED_ON;
1628 mod_timer(&(pLed->BlinkTimer), 0);
1629 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
1633 case LED_CTL_STOP_WPS_FAIL:
1634 pLed->bLedWPSBlinkInProgress = FALSE;
1635 if( priv->ieee80211->eRFPowerState != eRfOn )
1637 SwLedOff(dev, pLed);
1641 pLed->CurrLedState = LED_OFF;
1642 pLed->BlinkingLedState = LED_OFF;
1643 mod_timer(&(pLed->BlinkTimer), 0);
1644 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
1648 case LED_CTL_START_TO_LINK:
1649 case LED_CTL_NO_LINK:
1650 if(!IS_LED_BLINKING(pLed))
1652 pLed->CurrLedState = LED_OFF;
1653 pLed->BlinkingLedState = LED_OFF;
1654 mod_timer(&(pLed->BlinkTimer), 0);
1658 case LED_CTL_POWER_OFF:
1659 pLed->CurrLedState = LED_OFF;
1660 pLed->BlinkingLedState = LED_OFF;
1661 if( pLed->bLedBlinkInProgress)
1663 del_timer_sync(&(pLed->BlinkTimer));
1664 pLed->bLedBlinkInProgress = FALSE;
1666 if( pLed->bLedScanBlinkInProgress)
1668 del_timer_sync(&(pLed->BlinkTimer));
1669 pLed->bLedScanBlinkInProgress = FALSE;
1671 if( pLed->bLedWPSBlinkInProgress )
1673 del_timer_sync(&(pLed->BlinkTimer));
1674 pLed->bLedWPSBlinkInProgress = FALSE;
1677 mod_timer(&(pLed->BlinkTimer), 0);
1685 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
1690 struct net_device *dev,
1691 LED_CTL_MODE LedAction
1694 struct r8192_priv *priv = ieee80211_priv(dev);
1695 PLED_819xUsb pLed = &(priv->SwLed0);
1699 case LED_CTL_SITE_SURVEY:
1700 if(priv->ieee80211->LinkDetectInfo.bBusyTraffic)
1702 else if(pLed->bLedScanBlinkInProgress ==FALSE)
1704 if(IS_LED_WPS_BLINKING(pLed))
1707 if(pLed->bLedBlinkInProgress ==TRUE)
1709 del_timer_sync(&(pLed->BlinkTimer));
1710 pLed->bLedBlinkInProgress = FALSE;
1712 pLed->bLedScanBlinkInProgress = TRUE;
1713 pLed->CurrLedState = LED_SCAN_BLINK;
1714 pLed->BlinkTimes = 24;
1716 pLed->BlinkingLedState = LED_OFF;
1718 pLed->BlinkingLedState = LED_ON;
1719 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1726 if((pLed->bLedBlinkInProgress ==FALSE) && (priv->ieee80211->state == IEEE80211_LINKED))
1728 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1733 pLed->bLedBlinkInProgress = TRUE;
1734 pLed->CurrLedState = LED_TXRX_BLINK;
1735 pLed->BlinkTimes = 2;
1737 pLed->BlinkingLedState = LED_OFF;
1739 pLed->BlinkingLedState = LED_ON;
1740 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1745 if(IS_LED_WPS_BLINKING(pLed))
1748 pLed->CurrLedState = LED_ON;
1749 pLed->BlinkingLedState = LED_ON;
1750 if( pLed->bLedBlinkInProgress)
1752 del_timer_sync(&(pLed->BlinkTimer));
1753 pLed->bLedBlinkInProgress = FALSE;
1755 if( pLed->bLedScanBlinkInProgress)
1757 del_timer_sync(&(pLed->BlinkTimer));
1758 pLed->bLedScanBlinkInProgress = FALSE;
1761 mod_timer(&(pLed->BlinkTimer), 0);
1764 case LED_CTL_START_WPS:
1765 case LED_CTL_START_WPS_BOTTON:
1766 if(pLed->bLedWPSBlinkInProgress ==FALSE)
1768 if(pLed->bLedBlinkInProgress ==TRUE)
1770 del_timer_sync(&(pLed->BlinkTimer));
1771 pLed->bLedBlinkInProgress = FALSE;
1773 if(pLed->bLedScanBlinkInProgress ==TRUE)
1775 del_timer_sync(&(pLed->BlinkTimer));
1776 pLed->bLedScanBlinkInProgress = FALSE;
1778 pLed->bLedWPSBlinkInProgress = TRUE;
1779 pLed->CurrLedState = LED_BLINK_WPS;
1781 pLed->BlinkingLedState = LED_OFF;
1783 pLed->BlinkingLedState = LED_ON;
1784 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1789 case LED_CTL_STOP_WPS:
1790 if(pLed->bLedWPSBlinkInProgress)
1792 del_timer_sync(&(pLed->BlinkTimer));
1793 pLed->bLedWPSBlinkInProgress = FALSE;
1797 pLed->bLedWPSBlinkInProgress = TRUE;
1800 pLed->CurrLedState = LED_BLINK_WPS_STOP;
1803 pLed->BlinkingLedState = LED_OFF;
1804 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA));
1808 pLed->BlinkingLedState = LED_ON;
1809 mod_timer(&(pLed->BlinkTimer), 0);
1815 case LED_CTL_STOP_WPS_FAIL:
1816 if(pLed->bLedWPSBlinkInProgress)
1818 del_timer_sync(&(pLed->BlinkTimer));
1819 pLed->bLedWPSBlinkInProgress = FALSE;
1822 pLed->CurrLedState = LED_OFF;
1823 pLed->BlinkingLedState = LED_OFF;
1824 mod_timer(&(pLed->BlinkTimer), 0);
1827 case LED_CTL_START_TO_LINK:
1828 case LED_CTL_NO_LINK:
1829 if(!IS_LED_BLINKING(pLed))
1831 pLed->CurrLedState = LED_OFF;
1832 pLed->BlinkingLedState = LED_OFF;
1833 mod_timer(&(pLed->BlinkTimer), 0);
1837 case LED_CTL_POWER_OFF:
1838 pLed->CurrLedState = LED_OFF;
1839 pLed->BlinkingLedState = LED_OFF;
1840 if( pLed->bLedBlinkInProgress)
1842 del_timer_sync(&(pLed->BlinkTimer));
1843 pLed->bLedBlinkInProgress = FALSE;
1845 if( pLed->bLedScanBlinkInProgress)
1847 del_timer_sync(&(pLed->BlinkTimer));
1848 pLed->bLedScanBlinkInProgress = FALSE;
1850 if( pLed->bLedWPSBlinkInProgress )
1852 del_timer_sync(&(pLed->BlinkTimer));
1853 pLed->bLedWPSBlinkInProgress = FALSE;
1856 mod_timer(&(pLed->BlinkTimer), 0);
1864 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
1870 struct net_device *dev,
1871 LED_CTL_MODE LedAction
1874 struct r8192_priv *priv = ieee80211_priv(dev);
1875 PLED_819xUsb pLed = &(priv->SwLed0);
1876 PLED_819xUsb pLed1 = &(priv->SwLed1);
1880 case LED_CTL_START_TO_LINK:
1881 if(pLed1->bLedWPSBlinkInProgress)
1883 pLed1->bLedWPSBlinkInProgress = FALSE;
1884 del_timer_sync(&(pLed1->BlinkTimer));
1886 pLed1->BlinkingLedState = LED_OFF;
1887 pLed1->CurrLedState = LED_OFF;
1890 mod_timer(&(pLed1->BlinkTimer), 0);
1893 if( pLed->bLedStartToLinkBlinkInProgress == FALSE )
1895 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1899 if(pLed->bLedBlinkInProgress ==TRUE)
1901 del_timer_sync(&(pLed->BlinkTimer));
1902 pLed->bLedBlinkInProgress = FALSE;
1904 if(pLed->bLedNoLinkBlinkInProgress ==TRUE)
1906 del_timer_sync(&(pLed->BlinkTimer));
1907 pLed->bLedNoLinkBlinkInProgress = FALSE;
1910 pLed->bLedStartToLinkBlinkInProgress = TRUE;
1911 pLed->CurrLedState = LED_BLINK_StartToBlink;
1914 pLed->BlinkingLedState = LED_OFF;
1915 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
1919 pLed->BlinkingLedState = LED_ON;
1920 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
1926 case LED_CTL_NO_LINK:
1927 if(LedAction == LED_CTL_LINK)
1929 if(pLed1->bLedWPSBlinkInProgress)
1931 pLed1->bLedWPSBlinkInProgress = FALSE;
1932 del_timer_sync(&(pLed1->BlinkTimer));
1934 pLed1->BlinkingLedState = LED_OFF;
1935 pLed1->CurrLedState = LED_OFF;
1938 mod_timer(&(pLed1->BlinkTimer), 0);
1942 if( pLed->bLedNoLinkBlinkInProgress == FALSE )
1944 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1948 if(pLed->bLedBlinkInProgress ==TRUE)
1950 del_timer_sync(&(pLed->BlinkTimer));
1951 pLed->bLedBlinkInProgress = FALSE;
1954 pLed->bLedNoLinkBlinkInProgress = TRUE;
1955 pLed->CurrLedState = LED_BLINK_SLOWLY;
1957 pLed->BlinkingLedState = LED_OFF;
1959 pLed->BlinkingLedState = LED_ON;
1960 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
1965 case LED_CTL_SITE_SURVEY:
1966 if((priv->ieee80211->LinkDetectInfo.bBusyTraffic) && (priv->ieee80211->state == IEEE80211_LINKED))
1968 else if(pLed->bLedScanBlinkInProgress ==FALSE)
1970 if(IS_LED_WPS_BLINKING(pLed))
1973 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
1975 del_timer_sync(&(pLed->BlinkTimer));
1976 pLed->bLedNoLinkBlinkInProgress = FALSE;
1978 if(pLed->bLedBlinkInProgress ==TRUE)
1980 del_timer_sync(&(pLed->BlinkTimer));
1981 pLed->bLedBlinkInProgress = FALSE;
1983 pLed->bLedScanBlinkInProgress = TRUE;
1984 pLed->CurrLedState = LED_SCAN_BLINK;
1985 pLed->BlinkTimes = 24;
1987 pLed->BlinkingLedState = LED_OFF;
1989 pLed->BlinkingLedState = LED_ON;
1990 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1997 if(pLed->bLedBlinkInProgress ==FALSE)
1999 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
2003 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
2005 del_timer_sync(&(pLed->BlinkTimer));
2006 pLed->bLedNoLinkBlinkInProgress = FALSE;
2008 pLed->bLedBlinkInProgress = TRUE;
2009 pLed->CurrLedState = LED_TXRX_BLINK;
2010 pLed->BlinkTimes = 2;
2012 pLed->BlinkingLedState = LED_OFF;
2014 pLed->BlinkingLedState = LED_ON;
2015 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
2019 case LED_CTL_START_WPS:
2020 case LED_CTL_START_WPS_BOTTON:
2021 if(pLed1->bLedWPSBlinkInProgress)
2023 pLed1->bLedWPSBlinkInProgress = FALSE;
2024 del_timer_sync(&(pLed1->BlinkTimer));
2026 pLed1->BlinkingLedState = LED_OFF;
2027 pLed1->CurrLedState = LED_OFF;
2030 mod_timer(&(pLed1->BlinkTimer), 0);
2033 if(pLed->bLedWPSBlinkInProgress ==FALSE)
2035 if(pLed->bLedNoLinkBlinkInProgress == TRUE)
2037 del_timer_sync(&(pLed->BlinkTimer));
2038 pLed->bLedNoLinkBlinkInProgress = FALSE;
2040 if(pLed->bLedBlinkInProgress ==TRUE)
2042 del_timer_sync(&(pLed->BlinkTimer));
2043 pLed->bLedBlinkInProgress = FALSE;
2045 if(pLed->bLedScanBlinkInProgress ==TRUE)
2047 del_timer_sync(&(pLed->BlinkTimer));
2048 pLed->bLedScanBlinkInProgress = FALSE;
2050 pLed->bLedWPSBlinkInProgress = TRUE;
2051 pLed->CurrLedState = LED_BLINK_WPS;
2054 pLed->BlinkingLedState = LED_OFF;
2055 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
2059 pLed->BlinkingLedState = LED_ON;
2060 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
2066 case LED_CTL_STOP_WPS:
2067 if(pLed->bLedWPSBlinkInProgress)
2069 del_timer_sync(&(pLed->BlinkTimer));
2070 pLed->bLedWPSBlinkInProgress = FALSE;
2073 pLed->bLedNoLinkBlinkInProgress = TRUE;
2074 pLed->CurrLedState = LED_BLINK_SLOWLY;
2076 pLed->BlinkingLedState = LED_OFF;
2078 pLed->BlinkingLedState = LED_ON;
2079 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
2083 case LED_CTL_STOP_WPS_FAIL:
2084 if(pLed->bLedWPSBlinkInProgress)
2086 del_timer_sync(&(pLed->BlinkTimer));
2087 pLed->bLedWPSBlinkInProgress = FALSE;
2090 pLed->bLedNoLinkBlinkInProgress = TRUE;
2091 pLed->CurrLedState = LED_BLINK_SLOWLY;
2093 pLed->BlinkingLedState = LED_OFF;
2095 pLed->BlinkingLedState = LED_ON;
2096 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
2098 if(pLed1->bLedWPSBlinkInProgress)
2099 del_timer_sync(&(pLed1->BlinkTimer));
2101 pLed1->bLedWPSBlinkInProgress = TRUE;
2103 pLed1->CurrLedState = LED_BLINK_WPS_STOP;
2105 pLed1->BlinkingLedState = LED_OFF;
2107 pLed1->BlinkingLedState = LED_ON;
2108 mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
2112 case LED_CTL_STOP_WPS_FAIL_OVERLAP:
2113 if(pLed->bLedWPSBlinkInProgress)
2115 del_timer_sync(&(pLed->BlinkTimer));
2116 pLed->bLedWPSBlinkInProgress = FALSE;
2119 pLed->bLedNoLinkBlinkInProgress = TRUE;
2120 pLed->CurrLedState = LED_BLINK_SLOWLY;
2122 pLed->BlinkingLedState = LED_OFF;
2124 pLed->BlinkingLedState = LED_ON;
2125 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
2127 if(pLed1->bLedWPSBlinkInProgress)
2128 del_timer_sync(&(pLed1->BlinkTimer));
2130 pLed1->bLedWPSBlinkInProgress = TRUE;
2132 pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;
2133 pLed1->BlinkTimes = 10;
2135 pLed1->BlinkingLedState = LED_OFF;
2137 pLed1->BlinkingLedState = LED_ON;
2138 mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
2142 case LED_CTL_POWER_OFF:
2143 pLed->CurrLedState = LED_OFF;
2144 pLed->BlinkingLedState = LED_OFF;
2146 if( pLed->bLedNoLinkBlinkInProgress)
2148 del_timer_sync(&(pLed->BlinkTimer));
2149 pLed->bLedNoLinkBlinkInProgress = FALSE;
2151 if( pLed->bLedLinkBlinkInProgress)
2153 del_timer_sync(&(pLed->BlinkTimer));
2154 pLed->bLedLinkBlinkInProgress = FALSE;
2156 if( pLed->bLedBlinkInProgress)
2158 del_timer_sync(&(pLed->BlinkTimer));
2159 pLed->bLedBlinkInProgress = FALSE;
2161 if( pLed->bLedWPSBlinkInProgress )
2163 del_timer_sync(&(pLed->BlinkTimer));
2164 pLed->bLedWPSBlinkInProgress = FALSE;
2166 if( pLed->bLedScanBlinkInProgress)
2168 del_timer_sync(&(pLed->BlinkTimer));
2169 pLed->bLedScanBlinkInProgress = FALSE;
2171 if( pLed->bLedStartToLinkBlinkInProgress)
2173 del_timer_sync(&(pLed->BlinkTimer));
2174 pLed->bLedStartToLinkBlinkInProgress = FALSE;
2177 if( pLed1->bLedWPSBlinkInProgress )
2179 del_timer_sync(&(pLed1->BlinkTimer));
2180 pLed1->bLedWPSBlinkInProgress = FALSE;
2184 pLed1->BlinkingLedState = LED_UNKNOWN;
2185 SwLedOff(dev, pLed);
2186 SwLedOff(dev, pLed1);
2194 RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState);
2201 struct net_device *dev,
2202 LED_CTL_MODE LedAction
2205 struct r8192_priv *priv = ieee80211_priv(dev);
2206 PLED_819xUsb pLed = &(priv->SwLed0);
2208 if(priv->CustomerID == RT_CID_819x_CAMEO)
2209 pLed = &(priv->SwLed1);
2213 case LED_CTL_POWER_ON:
2214 case LED_CTL_NO_LINK:
2216 if(pLed->CurrLedState == LED_SCAN_BLINK)
2220 pLed->CurrLedState = LED_ON;
2221 pLed->BlinkingLedState = LED_ON;
2222 pLed->bLedBlinkInProgress = FALSE;
2223 mod_timer(&(pLed->BlinkTimer), 0);
2226 case LED_CTL_SITE_SURVEY:
2227 if((priv->ieee80211->LinkDetectInfo.bBusyTraffic) && (priv->ieee80211->state == IEEE80211_LINKED))
2229 else if(pLed->bLedScanBlinkInProgress ==FALSE)
2231 if(pLed->bLedBlinkInProgress ==TRUE)
2233 del_timer_sync(&(pLed->BlinkTimer));
2234 pLed->bLedBlinkInProgress = FALSE;
2236 pLed->bLedScanBlinkInProgress = TRUE;
2237 pLed->CurrLedState = LED_SCAN_BLINK;
2238 pLed->BlinkTimes = 24;
2240 pLed->BlinkingLedState = LED_OFF;
2242 pLed->BlinkingLedState = LED_ON;
2243 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
2250 if(pLed->bLedBlinkInProgress ==FALSE)
2252 if(pLed->CurrLedState == LED_SCAN_BLINK)
2256 pLed->bLedBlinkInProgress = TRUE;
2257 pLed->CurrLedState = LED_TXRX_BLINK;
2258 pLed->BlinkTimes = 2;
2260 pLed->BlinkingLedState = LED_OFF;
2262 pLed->BlinkingLedState = LED_ON;
2263 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
2267 case LED_CTL_POWER_OFF:
2268 pLed->CurrLedState = LED_OFF;
2269 pLed->BlinkingLedState = LED_OFF;
2271 if( pLed->bLedBlinkInProgress)
2273 del_timer_sync(&(pLed->BlinkTimer));
2274 pLed->bLedBlinkInProgress = FALSE;
2277 SwLedOff(dev, pLed);
2285 RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState);
2291 struct net_device *dev,
2292 LED_CTL_MODE LedAction
2295 struct r8192_priv *priv = ieee80211_priv(dev);
2297 if( priv->bRegUseLed == FALSE)
2303 if(priv->bInHctTest)
2306 if( priv->ieee80211->eRFPowerState != eRfOn &&
2307 (LedAction == LED_CTL_TX || LedAction == LED_CTL_RX ||
2308 LedAction == LED_CTL_SITE_SURVEY ||
2309 LedAction == LED_CTL_LINK ||
2310 LedAction == LED_CTL_NO_LINK ||
2311 LedAction == LED_CTL_POWER_ON) )
2316 switch(priv->LedStrategy)
2322 SwLedControlMode1(dev, LedAction);
2325 SwLedControlMode2(dev, LedAction);
2329 SwLedControlMode3(dev, LedAction);
2333 SwLedControlMode4(dev, LedAction);
2337 SwLedControlMode5(dev, LedAction);
2344 RT_TRACE(COMP_LED, "LedStrategy:%d, LedAction %d\n", priv->LedStrategy,LedAction);