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