RT-AC56 3.0.0.4.374.37 core
[tomato.git] / release / src-rt-6.x.4708 / linux / linux-2.6.36 / drivers / staging / rtl8192su / r8192SU_led.c
blob6d545b62b249eda09a10a3ccbd10f71611d39a9b
1 /*
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
7 * more details.
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>
20 #include "r8192U.h"
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);
45 pLed->dev = dev;
46 pLed->LedPin = LedPin;
47 pLed->CurrLedState = LED_OFF;
48 pLed->bLedOn = FALSE;
50 pLed->bLedBlinkInProgress = FALSE;
51 pLed->BlinkTimes = 0;
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);
59 priv->pLed = pLed;
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)
71 u8 LedCfg;
73 LedCfg = read_nic_byte(dev, LEDCFG);
74 switch (pLed->LedPin) {
75 case LED_PIN_GPIO0:
76 break;
77 case LED_PIN_LED0:
78 write_nic_byte(dev, LEDCFG, LedCfg&0xf0);
79 break;
80 case LED_PIN_LED1:
81 write_nic_byte(dev, LEDCFG, LedCfg&0x0f);
82 break;
83 default:
84 break;
86 pLed->bLedOn = TRUE;
89 void SwLedOff (struct net_device *dev, PLED_819xUsb pLed)
91 u8 LedCfg;
93 LedCfg = read_nic_byte(dev, LEDCFG);
94 switch (pLed->LedPin) {
95 case LED_PIN_GPIO0:
96 break;
97 case LED_PIN_LED0:
98 LedCfg &= 0xf0;
99 write_nic_byte(dev, LEDCFG, (LedCfg|BIT3));
100 break;
101 case LED_PIN_LED1:
102 LedCfg &= 0x0f;
103 write_nic_byte(dev, LEDCFG, (LedCfg|BIT7));
104 break;
105 default:
106 break;
108 pLed->bLedOn = FALSE;
112 void
113 InitSwLeds(
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);
125 void
126 DeInitSwLeds(
127 struct net_device *dev
130 struct r8192_priv *priv = ieee80211_priv(dev);
132 DeInitLed819xUsb( &(priv->SwLed0) );
133 DeInitLed819xUsb( &(priv->SwLed1) );
137 void
138 SwLedBlink(
139 PLED_819xUsb pLed
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 )
148 SwLedOn(dev, pLed);
149 RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);
151 else
153 SwLedOff(dev, pLed);
154 RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);
157 pLed->BlinkTimes--;
158 switch(pLed->CurrLedState)
161 case LED_BLINK_NORMAL:
162 if(pLed->BlinkTimes == 0)
164 bStopBlinking = TRUE;
166 break;
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;
181 break;
183 case LED_BLINK_WPS:
184 if( pLed->BlinkTimes == 0 )
186 bStopBlinking = TRUE;
188 break;
191 default:
192 bStopBlinking = TRUE;
193 break;
197 if(bStopBlinking)
199 if( priv->ieee80211->eRFPowerState != eRfOn )
201 SwLedOff(dev, pLed);
203 else if( (priv->ieee80211->state == IEEE80211_LINKED) && (pLed->bLedOn == false))
205 SwLedOn(dev, pLed);
207 else if( (priv->ieee80211->state != IEEE80211_LINKED) && pLed->bLedOn == true)
209 SwLedOff(dev, pLed);
212 pLed->BlinkTimes = 0;
213 pLed->bLedBlinkInProgress = FALSE;
215 else
217 if( pLed->BlinkingLedState == LED_ON )
218 pLed->BlinkingLedState = LED_OFF;
219 else
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));
226 break;
228 case LED_BLINK_SLOWLY:
229 case LED_BLINK_StartToBlink:
230 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
231 break;
233 case LED_BLINK_WPS:
235 if( pLed->BlinkingLedState == LED_ON )
236 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL));
237 else
238 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL));
240 break;
242 default:
243 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
244 break;
250 void
251 SwLedBlink1(
252 PLED_819xUsb pLed
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 )
265 SwLedOn(dev, pLed);
266 RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);
268 else
270 SwLedOff(dev, pLed);
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)
281 SwLedOn(dev, pLed1);
282 pLed1->bSWLedCtrl = TRUE;
284 else if(!pLed1->bLedOn)
285 SwLedOn(dev, pLed1);
286 RT_TRACE(COMP_LED, "Blinktimes (): turn on pLed1\n");
288 else
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:
304 if( pLed->bLedOn )
305 pLed->BlinkingLedState = LED_OFF;
306 else
307 pLed->BlinkingLedState = LED_ON;
308 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
309 break;
311 case LED_BLINK_NORMAL:
312 if( pLed->bLedOn )
313 pLed->BlinkingLedState = LED_OFF;
314 else
315 pLed->BlinkingLedState = LED_ON;
316 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA));
317 break;
319 case LED_SCAN_BLINK:
320 pLed->BlinkTimes--;
321 if( pLed->BlinkTimes == 0 )
323 bStopBlinking = TRUE;
326 if(bStopBlinking)
328 if( priv->ieee80211->eRFPowerState != eRfOn )
330 SwLedOff(dev, pLed);
332 else if(priv->ieee80211->state == IEEE80211_LINKED)
334 pLed->bLedLinkBlinkInProgress = TRUE;
335 pLed->CurrLedState = LED_BLINK_NORMAL;
336 if( pLed->bLedOn )
337 pLed->BlinkingLedState = LED_OFF;
338 else
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;
348 if( pLed->bLedOn )
349 pLed->BlinkingLedState = LED_OFF;
350 else
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;
357 else
359 if( priv->ieee80211->eRFPowerState != eRfOn )
361 SwLedOff(dev, pLed);
363 else
365 if( pLed->bLedOn )
366 pLed->BlinkingLedState = LED_OFF;
367 else
368 pLed->BlinkingLedState = LED_ON;
369 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
372 break;
374 case LED_TXRX_BLINK:
375 pLed->BlinkTimes--;
376 if( pLed->BlinkTimes == 0 )
378 bStopBlinking = TRUE;
380 if(bStopBlinking)
382 if( priv->ieee80211->eRFPowerState != eRfOn )
384 SwLedOff(dev, pLed);
386 else if(priv->ieee80211->state == IEEE80211_LINKED)
388 pLed->bLedLinkBlinkInProgress = TRUE;
389 pLed->CurrLedState = LED_BLINK_NORMAL;
390 if( pLed->bLedOn )
391 pLed->BlinkingLedState = LED_OFF;
392 else
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;
401 if( pLed->bLedOn )
402 pLed->BlinkingLedState = LED_OFF;
403 else
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;
411 else
413 if( priv->ieee80211->eRFPowerState != eRfOn )
415 SwLedOff(dev, pLed);
417 else
419 if( pLed->bLedOn )
420 pLed->BlinkingLedState = LED_OFF;
421 else
422 pLed->BlinkingLedState = LED_ON;
423 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
426 break;
428 case LED_BLINK_WPS:
429 if( pLed->bLedOn )
430 pLed->BlinkingLedState = LED_OFF;
431 else
432 pLed->BlinkingLedState = LED_ON;
433 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
434 break;
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;
443 else
445 bStopBlinking = TRUE;
448 if(bStopBlinking)
450 if( priv->ieee80211->eRFPowerState != eRfOn )
452 SwLedOff(dev, pLed);
454 else
456 pLed->bLedLinkBlinkInProgress = TRUE;
457 pLed->CurrLedState = LED_BLINK_NORMAL;
458 if( pLed->bLedOn )
459 pLed->BlinkingLedState = LED_OFF;
460 else
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;
467 break;
469 default:
470 break;
475 void
476 SwLedBlink2(
477 PLED_819xUsb pLed
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)
486 SwLedOn(dev, pLed);
487 RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);
489 else
491 SwLedOff(dev, pLed);
492 RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);
495 switch(pLed->CurrLedState)
497 case LED_SCAN_BLINK:
498 pLed->BlinkTimes--;
499 if( pLed->BlinkTimes == 0 )
501 bStopBlinking = TRUE;
504 if(bStopBlinking)
506 if( priv->ieee80211->eRFPowerState != eRfOn )
508 SwLedOff(dev, pLed);
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;
515 SwLedOn(dev, pLed);
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;
523 SwLedOff(dev, pLed);
524 RT_TRACE(COMP_LED, "stop scan blink CurrLedState %d\n", pLed->CurrLedState);
526 pLed->bLedScanBlinkInProgress = FALSE;
528 else
530 if( priv->ieee80211->eRFPowerState != eRfOn )
532 SwLedOff(dev, pLed);
534 else
536 if( pLed->bLedOn )
537 pLed->BlinkingLedState = LED_OFF;
538 else
539 pLed->BlinkingLedState = LED_ON;
540 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
543 break;
545 case LED_TXRX_BLINK:
546 pLed->BlinkTimes--;
547 if( pLed->BlinkTimes == 0 )
549 bStopBlinking = TRUE;
551 if(bStopBlinking)
553 if( priv->ieee80211->eRFPowerState != eRfOn )
555 SwLedOff(dev, pLed);
557 else if(priv->ieee80211->state == IEEE80211_LINKED)
559 pLed->CurrLedState = LED_ON;
560 pLed->BlinkingLedState = LED_ON;
561 SwLedOn(dev, pLed);
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;
569 SwLedOff(dev, pLed);
570 RT_TRACE(COMP_LED, "stop CurrLedState %d\n", pLed->CurrLedState);
572 pLed->bLedBlinkInProgress = FALSE;
574 else
576 if( priv->ieee80211->eRFPowerState != eRfOn )
578 SwLedOff(dev, pLed);
580 else
582 if( pLed->bLedOn )
583 pLed->BlinkingLedState = LED_OFF;
584 else
585 pLed->BlinkingLedState = LED_ON;
586 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
589 break;
591 default:
592 break;
597 void
598 SwLedBlink3(
599 PLED_819xUsb pLed
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 )
608 SwLedOn(dev, pLed);
609 RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);
611 else
613 if(pLed->CurrLedState != LED_BLINK_WPS_STOP)
614 SwLedOff(dev, pLed);
615 RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);
618 switch(pLed->CurrLedState)
620 case LED_SCAN_BLINK:
621 pLed->BlinkTimes--;
622 if( pLed->BlinkTimes == 0 )
624 bStopBlinking = TRUE;
627 if(bStopBlinking)
629 if( priv->ieee80211->eRFPowerState != eRfOn )
631 SwLedOff(dev, pLed);
633 else if(priv->ieee80211->state == IEEE80211_LINKED)
635 pLed->CurrLedState = LED_ON;
636 pLed->BlinkingLedState = LED_ON;
637 if( !pLed->bLedOn )
638 SwLedOn(dev, pLed);
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;
646 if( pLed->bLedOn )
647 SwLedOff(dev, pLed);
649 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
651 pLed->bLedScanBlinkInProgress = FALSE;
653 else
655 if( priv->ieee80211->eRFPowerState != eRfOn )
657 SwLedOff(dev, pLed);
659 else
661 if( pLed->bLedOn )
662 pLed->BlinkingLedState = LED_OFF;
663 else
664 pLed->BlinkingLedState = LED_ON;
665 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
668 break;
670 case LED_TXRX_BLINK:
671 pLed->BlinkTimes--;
672 if( pLed->BlinkTimes == 0 )
674 bStopBlinking = TRUE;
676 if(bStopBlinking)
678 if( priv->ieee80211->eRFPowerState != eRfOn )
680 SwLedOff(dev, pLed);
682 else if(priv->ieee80211->state == IEEE80211_LINKED)
684 pLed->CurrLedState = LED_ON;
685 pLed->BlinkingLedState = LED_ON;
687 if( !pLed->bLedOn )
688 SwLedOn(dev, pLed);
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;
697 if( pLed->bLedOn )
698 SwLedOff(dev, pLed);
701 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
703 pLed->bLedBlinkInProgress = FALSE;
705 else
707 if( priv->ieee80211->eRFPowerState != eRfOn )
709 SwLedOff(dev, pLed);
711 else
713 if( pLed->bLedOn )
714 pLed->BlinkingLedState = LED_OFF;
715 else
716 pLed->BlinkingLedState = LED_ON;
717 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
720 break;
722 case LED_BLINK_WPS:
723 if( pLed->bLedOn )
724 pLed->BlinkingLedState = LED_OFF;
725 else
726 pLed->BlinkingLedState = LED_ON;
727 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
728 break;
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;
737 else
739 bStopBlinking = TRUE;
742 if(bStopBlinking)
744 if( priv->ieee80211->eRFPowerState != eRfOn )
746 SwLedOff(dev, pLed);
748 else
750 pLed->CurrLedState = LED_ON;
751 pLed->BlinkingLedState = LED_ON;
752 SwLedOn(dev, pLed);
753 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
755 pLed->bLedWPSBlinkInProgress = FALSE;
757 break;
760 default:
761 break;
767 void
768 SwLedBlink4(
769 PLED_819xUsb pLed
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 )
779 SwLedOn(dev, pLed);
780 RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);
782 else
784 SwLedOff(dev, pLed);
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:
798 if( pLed->bLedOn )
799 pLed->BlinkingLedState = LED_OFF;
800 else
801 pLed->BlinkingLedState = LED_ON;
802 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
803 break;
805 case LED_BLINK_StartToBlink:
806 if( pLed->bLedOn )
808 pLed->BlinkingLedState = LED_OFF;
809 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
811 else
813 pLed->BlinkingLedState = LED_ON;
814 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
816 break;
818 case LED_SCAN_BLINK:
819 pLed->BlinkTimes--;
820 if( pLed->BlinkTimes == 0 )
822 bStopBlinking = TRUE;
825 if(bStopBlinking)
827 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
829 SwLedOff(dev, pLed);
831 else
833 pLed->bLedNoLinkBlinkInProgress = TRUE;
834 pLed->CurrLedState = LED_BLINK_SLOWLY;
835 if( pLed->bLedOn )
836 pLed->BlinkingLedState = LED_OFF;
837 else
838 pLed->BlinkingLedState = LED_ON;
839 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
841 pLed->bLedScanBlinkInProgress = FALSE;
843 else
845 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
847 SwLedOff(dev, pLed);
849 else
851 if( pLed->bLedOn )
852 pLed->BlinkingLedState = LED_OFF;
853 else
854 pLed->BlinkingLedState = LED_ON;
855 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
858 break;
860 case LED_TXRX_BLINK:
861 pLed->BlinkTimes--;
862 if( pLed->BlinkTimes == 0 )
864 bStopBlinking = TRUE;
866 if(bStopBlinking)
868 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
870 SwLedOff(dev, pLed);
872 else
874 pLed->bLedNoLinkBlinkInProgress = TRUE;
875 pLed->CurrLedState = LED_BLINK_SLOWLY;
876 if( pLed->bLedOn )
877 pLed->BlinkingLedState = LED_OFF;
878 else
879 pLed->BlinkingLedState = LED_ON;
880 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
882 pLed->bLedBlinkInProgress = FALSE;
884 else
886 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
888 SwLedOff(dev, pLed);
890 else
892 if( pLed->bLedOn )
893 pLed->BlinkingLedState = LED_OFF;
894 else
895 pLed->BlinkingLedState = LED_ON;
896 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
899 break;
901 case LED_BLINK_WPS:
902 if( pLed->bLedOn )
904 pLed->BlinkingLedState = LED_OFF;
905 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
907 else
909 pLed->BlinkingLedState = LED_ON;
910 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
912 break;
914 case LED_BLINK_WPS_STOP:
915 if( pLed->bLedOn )
916 pLed->BlinkingLedState = LED_OFF;
917 else
918 pLed->BlinkingLedState = LED_ON;
920 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
921 break;
923 case LED_BLINK_WPS_STOP_OVERLAP:
924 pLed->BlinkTimes--;
925 if(pLed->BlinkTimes == 0)
927 if(pLed->bLedOn)
929 pLed->BlinkTimes = 1;
931 else
933 bStopBlinking = TRUE;
937 if(bStopBlinking)
939 pLed->BlinkTimes = 10;
940 pLed->BlinkingLedState = LED_ON;
941 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA));
943 else
945 if( pLed->bLedOn )
946 pLed->BlinkingLedState = LED_OFF;
947 else
948 pLed->BlinkingLedState = LED_ON;
950 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
952 break;
955 default:
956 break;
959 RT_TRACE(COMP_LED, "SwLedBlink4 CurrLedState %d\n", pLed->CurrLedState);
964 void
965 SwLedBlink5(
966 PLED_819xUsb pLed
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 )
975 SwLedOn(dev, pLed);
976 RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes);
978 else
980 SwLedOff(dev, pLed);
981 RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes);
984 switch(pLed->CurrLedState)
986 case LED_SCAN_BLINK:
987 pLed->BlinkTimes--;
988 if( pLed->BlinkTimes == 0 )
990 bStopBlinking = TRUE;
993 if(bStopBlinking)
995 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
997 pLed->CurrLedState = LED_OFF;
998 pLed->BlinkingLedState = LED_OFF;
999 if(pLed->bLedOn)
1000 SwLedOff(dev, pLed);
1002 else
1003 { pLed->CurrLedState = LED_ON;
1004 pLed->BlinkingLedState = LED_ON;
1005 if(!pLed->bLedOn)
1006 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1009 pLed->bLedScanBlinkInProgress = FALSE;
1011 else
1013 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
1015 SwLedOff(dev, pLed);
1017 else
1019 if( pLed->bLedOn )
1020 pLed->BlinkingLedState = LED_OFF;
1021 else
1022 pLed->BlinkingLedState = LED_ON;
1023 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1026 break;
1029 case LED_TXRX_BLINK:
1030 pLed->BlinkTimes--;
1031 if( pLed->BlinkTimes == 0 )
1033 bStopBlinking = TRUE;
1036 if(bStopBlinking)
1038 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
1040 pLed->CurrLedState = LED_OFF;
1041 pLed->BlinkingLedState = LED_OFF;
1042 if(pLed->bLedOn)
1043 SwLedOff(dev, pLed);
1045 else
1047 pLed->CurrLedState = LED_ON;
1048 pLed->BlinkingLedState = LED_ON;
1049 if(!pLed->bLedOn)
1050 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1053 pLed->bLedBlinkInProgress = FALSE;
1055 else
1057 if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS)
1059 SwLedOff(dev, pLed);
1061 else
1063 if( pLed->bLedOn )
1064 pLed->BlinkingLedState = LED_OFF;
1065 else
1066 pLed->BlinkingLedState = LED_ON;
1067 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1070 break;
1072 default:
1073 break;
1076 RT_TRACE(COMP_LED, "SwLedBlink5 CurrLedState %d\n", pLed->CurrLedState);
1082 void
1083 BlinkTimerCallback(
1084 unsigned long data
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)
1102 case SW_LED_MODE0:
1103 SwLedBlink(pLed);
1104 break;
1106 case SW_LED_MODE1:
1107 SwLedBlink1(pLed);
1108 break;
1110 case SW_LED_MODE2:
1111 SwLedBlink2(pLed);
1112 break;
1114 case SW_LED_MODE3:
1115 SwLedBlink3(pLed);
1116 break;
1118 case SW_LED_MODE4:
1119 SwLedBlink4(pLed);
1120 break;
1122 case SW_LED_MODE5:
1123 SwLedBlink5(pLed);
1124 break;
1126 default:
1127 SwLedBlink(pLed);
1128 break;
1135 void
1136 SwLedControlMode0(
1137 struct net_device *dev,
1138 LED_CTL_MODE LedAction
1141 struct r8192_priv *priv = ieee80211_priv(dev);
1142 PLED_819xUsb pLed = &(priv->SwLed1);
1144 switch(LedAction)
1146 case LED_CTL_TX:
1147 case LED_CTL_RX:
1148 if( pLed->bLedBlinkInProgress == FALSE )
1150 pLed->bLedBlinkInProgress = TRUE;
1152 pLed->CurrLedState = LED_BLINK_NORMAL;
1153 pLed->BlinkTimes = 2;
1155 if( pLed->bLedOn )
1156 pLed->BlinkingLedState = LED_OFF;
1157 else
1158 pLed->BlinkingLedState = LED_ON;
1159 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
1161 break;
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;
1171 if( pLed->bLedOn )
1172 pLed->BlinkingLedState = LED_OFF;
1173 else
1174 pLed->BlinkingLedState = LED_ON;
1175 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
1177 else
1179 pLed->CurrLedState = LED_BLINK_StartToBlink;
1181 break;
1183 case LED_CTL_LINK:
1184 pLed->CurrLedState = LED_ON;
1185 if( pLed->bLedBlinkInProgress == FALSE )
1187 SwLedOn(dev, pLed);
1189 break;
1191 case LED_CTL_NO_LINK:
1192 pLed->CurrLedState = LED_OFF;
1193 if( pLed->bLedBlinkInProgress == FALSE )
1195 SwLedOff(dev, pLed);
1197 break;
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);
1207 break;
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;
1217 if( pLed->bLedOn )
1219 pLed->BlinkingLedState = LED_OFF;
1220 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL));
1222 else
1224 pLed->BlinkingLedState = LED_ON;
1225 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL));
1228 break;
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;
1237 break;
1240 default:
1241 break;
1244 RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState);
1248 void
1249 SwLedControlMode1(
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);
1260 switch(LedAction)
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))
1268 return;
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;
1283 if( pLed->bLedOn )
1284 pLed->BlinkingLedState = LED_OFF;
1285 else
1286 pLed->BlinkingLedState = LED_ON;
1287 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
1289 break;
1291 case LED_CTL_LINK:
1292 if( pLed->bLedLinkBlinkInProgress == FALSE )
1294 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1296 return;
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;
1310 if( pLed->bLedOn )
1311 pLed->BlinkingLedState = LED_OFF;
1312 else
1313 pLed->BlinkingLedState = LED_ON;
1314 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA));
1316 break;
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))
1324 return;
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;
1344 if( pLed->bLedOn )
1345 pLed->BlinkingLedState = LED_OFF;
1346 else
1347 pLed->BlinkingLedState = LED_ON;
1348 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1351 break;
1353 case LED_CTL_TX:
1354 case LED_CTL_RX:
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;
1373 if( pLed->bLedOn )
1374 pLed->BlinkingLedState = LED_OFF;
1375 else
1376 pLed->BlinkingLedState = LED_ON;
1377 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1379 break;
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;
1407 if( pLed->bLedOn )
1408 pLed->BlinkingLedState = LED_OFF;
1409 else
1410 pLed->BlinkingLedState = LED_ON;
1411 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1414 break;
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));
1442 else
1444 pLed->bLedWPSBlinkInProgress = TRUE;
1447 pLed->CurrLedState = LED_BLINK_WPS_STOP;
1448 if(pLed->bLedOn)
1450 pLed->BlinkingLedState = LED_OFF;
1451 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA));
1453 else
1455 pLed->BlinkingLedState = LED_ON;
1456 mod_timer(&(pLed->BlinkTimer), 0);
1458 break;
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;
1469 if( pLed->bLedOn )
1470 pLed->BlinkingLedState = LED_OFF;
1471 else
1472 pLed->BlinkingLedState = LED_ON;
1473 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
1474 break;
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);
1505 break;
1507 default:
1508 break;
1512 RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState);
1515 void
1516 SwLedControlMode2(
1517 struct net_device *dev,
1518 LED_CTL_MODE LedAction
1521 struct r8192_priv *priv = ieee80211_priv(dev);
1522 PLED_819xUsb pLed = &(priv->SwLed0);
1524 switch(LedAction)
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))
1532 return;
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;
1542 if( pLed->bLedOn )
1543 pLed->BlinkingLedState = LED_OFF;
1544 else
1545 pLed->BlinkingLedState = LED_ON;
1546 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1549 break;
1551 case LED_CTL_TX:
1552 case LED_CTL_RX:
1553 if((pLed->bLedBlinkInProgress ==FALSE) && (priv->ieee80211->state == IEEE80211_LINKED))
1555 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1557 return;
1560 pLed->bLedBlinkInProgress = TRUE;
1561 pLed->CurrLedState = LED_TXRX_BLINK;
1562 pLed->BlinkTimes = 2;
1563 if( pLed->bLedOn )
1564 pLed->BlinkingLedState = LED_OFF;
1565 else
1566 pLed->BlinkingLedState = LED_ON;
1567 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1569 break;
1571 case LED_CTL_LINK:
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);
1586 break;
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);
1607 break;
1609 case LED_CTL_STOP_WPS:
1610 pLed->bLedWPSBlinkInProgress = FALSE;
1611 if( priv->ieee80211->eRFPowerState != eRfOn )
1613 SwLedOff(dev, pLed);
1615 else
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);
1622 break;
1624 case LED_CTL_STOP_WPS_FAIL:
1625 pLed->bLedWPSBlinkInProgress = FALSE;
1626 if( priv->ieee80211->eRFPowerState != eRfOn )
1628 SwLedOff(dev, pLed);
1630 else
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);
1637 break;
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);
1647 break;
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);
1669 break;
1671 default:
1672 break;
1676 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
1679 void
1680 SwLedControlMode3(
1681 struct net_device *dev,
1682 LED_CTL_MODE LedAction
1685 struct r8192_priv *priv = ieee80211_priv(dev);
1686 PLED_819xUsb pLed = &(priv->SwLed0);
1688 switch(LedAction)
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))
1696 return;
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;
1706 if( pLed->bLedOn )
1707 pLed->BlinkingLedState = LED_OFF;
1708 else
1709 pLed->BlinkingLedState = LED_ON;
1710 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1713 break;
1715 case LED_CTL_TX:
1716 case LED_CTL_RX:
1717 if((pLed->bLedBlinkInProgress ==FALSE) && (priv->ieee80211->state == IEEE80211_LINKED))
1719 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1721 return;
1724 pLed->bLedBlinkInProgress = TRUE;
1725 pLed->CurrLedState = LED_TXRX_BLINK;
1726 pLed->BlinkTimes = 2;
1727 if( pLed->bLedOn )
1728 pLed->BlinkingLedState = LED_OFF;
1729 else
1730 pLed->BlinkingLedState = LED_ON;
1731 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
1733 break;
1735 case LED_CTL_LINK:
1736 if(IS_LED_WPS_BLINKING(pLed))
1737 return;
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);
1753 break;
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;
1771 if( pLed->bLedOn )
1772 pLed->BlinkingLedState = LED_OFF;
1773 else
1774 pLed->BlinkingLedState = LED_ON;
1775 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1778 break;
1780 case LED_CTL_STOP_WPS:
1781 if(pLed->bLedWPSBlinkInProgress)
1783 del_timer_sync(&(pLed->BlinkTimer));
1784 pLed->bLedWPSBlinkInProgress = FALSE;
1786 else
1788 pLed->bLedWPSBlinkInProgress = TRUE;
1791 pLed->CurrLedState = LED_BLINK_WPS_STOP;
1792 if(pLed->bLedOn)
1794 pLed->BlinkingLedState = LED_OFF;
1795 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA));
1797 else
1799 pLed->BlinkingLedState = LED_ON;
1800 mod_timer(&(pLed->BlinkTimer), 0);
1803 break;
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);
1816 break;
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);
1826 break;
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);
1848 break;
1850 default:
1851 break;
1855 RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState);
1859 void
1860 SwLedControlMode4(
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);
1869 switch(LedAction)
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;
1880 if(pLed1->bLedOn)
1881 mod_timer(&(pLed1->BlinkTimer), 0);
1884 if( pLed->bLedStartToLinkBlinkInProgress == FALSE )
1886 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1888 return;
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;
1903 if( pLed->bLedOn )
1905 pLed->BlinkingLedState = LED_OFF;
1906 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
1908 else
1910 pLed->BlinkingLedState = LED_ON;
1911 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
1914 break;
1916 case LED_CTL_LINK:
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;
1928 if(pLed1->bLedOn)
1929 mod_timer(&(pLed1->BlinkTimer), 0);
1933 if( pLed->bLedNoLinkBlinkInProgress == FALSE )
1935 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1937 return;
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;
1947 if( pLed->bLedOn )
1948 pLed->BlinkingLedState = LED_OFF;
1949 else
1950 pLed->BlinkingLedState = LED_ON;
1951 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
1954 break;
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))
1962 return;
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;
1977 if( pLed->bLedOn )
1978 pLed->BlinkingLedState = LED_OFF;
1979 else
1980 pLed->BlinkingLedState = LED_ON;
1981 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
1984 break;
1986 case LED_CTL_TX:
1987 case LED_CTL_RX:
1988 if(pLed->bLedBlinkInProgress ==FALSE)
1990 if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed))
1992 return;
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;
2002 if( pLed->bLedOn )
2003 pLed->BlinkingLedState = LED_OFF;
2004 else
2005 pLed->BlinkingLedState = LED_ON;
2006 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
2008 break;
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;
2020 if(pLed1->bLedOn)
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;
2043 if( pLed->bLedOn )
2045 pLed->BlinkingLedState = LED_OFF;
2046 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL));
2048 else
2050 pLed->BlinkingLedState = LED_ON;
2051 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
2055 break;
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;
2066 if( pLed->bLedOn )
2067 pLed->BlinkingLedState = LED_OFF;
2068 else
2069 pLed->BlinkingLedState = LED_ON;
2070 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA));
2072 break;
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;
2083 if( pLed->bLedOn )
2084 pLed->BlinkingLedState = LED_OFF;
2085 else
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));
2091 else
2092 pLed1->bLedWPSBlinkInProgress = TRUE;
2094 pLed1->CurrLedState = LED_BLINK_WPS_STOP;
2095 if( pLed1->bLedOn )
2096 pLed1->BlinkingLedState = LED_OFF;
2097 else
2098 pLed1->BlinkingLedState = LED_ON;
2099 mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
2101 break;
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;
2112 if( pLed->bLedOn )
2113 pLed->BlinkingLedState = LED_OFF;
2114 else
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));
2120 else
2121 pLed1->bLedWPSBlinkInProgress = TRUE;
2123 pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;
2124 pLed1->BlinkTimes = 10;
2125 if( pLed1->bLedOn )
2126 pLed1->BlinkingLedState = LED_OFF;
2127 else
2128 pLed1->BlinkingLedState = LED_ON;
2129 mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL));
2131 break;
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);
2178 break;
2180 default:
2181 break;
2185 RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState);
2190 void
2191 SwLedControlMode5(
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);
2202 switch(LedAction)
2204 case LED_CTL_POWER_ON:
2205 case LED_CTL_NO_LINK:
2206 case LED_CTL_LINK:
2207 if(pLed->CurrLedState == LED_SCAN_BLINK)
2209 return;
2211 pLed->CurrLedState = LED_ON;
2212 pLed->BlinkingLedState = LED_ON;
2213 pLed->bLedBlinkInProgress = FALSE;
2214 mod_timer(&(pLed->BlinkTimer), 0);
2215 break;
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;
2230 if( pLed->bLedOn )
2231 pLed->BlinkingLedState = LED_OFF;
2232 else
2233 pLed->BlinkingLedState = LED_ON;
2234 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA));
2237 break;
2239 case LED_CTL_TX:
2240 case LED_CTL_RX:
2241 if(pLed->bLedBlinkInProgress ==FALSE)
2243 if(pLed->CurrLedState == LED_SCAN_BLINK)
2245 return;
2247 pLed->bLedBlinkInProgress = TRUE;
2248 pLed->CurrLedState = LED_TXRX_BLINK;
2249 pLed->BlinkTimes = 2;
2250 if( pLed->bLedOn )
2251 pLed->BlinkingLedState = LED_OFF;
2252 else
2253 pLed->BlinkingLedState = LED_ON;
2254 mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA));
2256 break;
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);
2269 break;
2271 default:
2272 break;
2276 RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState);
2280 void
2281 LedControl8192SUsb(
2282 struct net_device *dev,
2283 LED_CTL_MODE LedAction
2286 struct r8192_priv *priv = ieee80211_priv(dev);
2288 if( priv->bRegUseLed == FALSE)
2289 return;
2291 if (!priv->up)
2292 return;
2294 if(priv->bInHctTest)
2295 return;
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) )
2304 return;
2307 switch(priv->LedStrategy)
2309 case SW_LED_MODE0:
2310 break;
2312 case SW_LED_MODE1:
2313 SwLedControlMode1(dev, LedAction);
2314 break;
2315 case SW_LED_MODE2:
2316 SwLedControlMode2(dev, LedAction);
2317 break;
2319 case SW_LED_MODE3:
2320 SwLedControlMode3(dev, LedAction);
2321 break;
2323 case SW_LED_MODE4:
2324 SwLedControlMode4(dev, LedAction);
2325 break;
2327 case SW_LED_MODE5:
2328 SwLedControlMode5(dev, LedAction);
2329 break;
2331 default:
2332 break;
2335 RT_TRACE(COMP_LED, "LedStrategy:%d, LedAction %d\n", priv->LedStrategy,LedAction);