--- rt2800lib.c	2012-10-18 14:02:11.628257540 +0800
+++ patch_rt2800lib.c	2012-10-18 14:00:52.208780445 +0800
@@ -948,7 +948,7 @@
                                    EEPROM_FREQ_LED_POLARITY);
         unsigned int ledmode =
                 rt2x00_get_field16(led->rt2x00dev->led_mcu_reg,
-                                  EEPROM_FREQ_LED_MODE);
+                                   EEPROM_FREQ_LED_MODE);
         u32 reg;
 
         /* Check for SoC (SOC devices don't support MCU requests) */
@@ -972,30 +972,58 @@
 
                 rt2800_register_write(led->rt2x00dev, LED_CFG, reg);
 
-        } else {
-                if (rt2x00_rt(led->rt2x00dev, RT3290)) {
-                        NOTICE(led->rt2x00dev, "Chip is RT3290 don't set led\n");
-                        //printk("don't set led\n");
-                } else {
-                        if (led->type == LED_TYPE_RADIO) {
-                                rt2800_mcu_request(led->rt2x00dev, MCU_LED, 0xff, ledmode,
-                                                      enabled ? 0x20 : 0);
-                        } else if (led->type == LED_TYPE_ASSOC) {
-                                rt2800_mcu_request(led->rt2x00dev, MCU_LED, 0xff, ledmode,
-                                                      enabled ? (bg_mode ? 0x60 : 0xa0) : 0x20);
-                        } else if (led->type == LED_TYPE_QUALITY) {
-                                /*
-                                * The brightness is divided into 6 levels (0 - 5),
-                                * The specs tell us the following levels:
-                                *     0, 1 ,3, 7, 15, 31
-                                * to determine the level in a simple way we can simply
-                                * work with bitshifting:
-                                *     (1 << level) - 1
-                                */
-                                rt2800_mcu_request(led->rt2x00dev, MCU_LED_STRENGTH, 0xff,
+        }
+        else {
+                if (rt2x00_rt(led->rt2x00dev,RT3290)) {
+                        
+                        rt2800_register_read(led->rt2x00dev, WLAN_FUN_CTRL, &reg);
+                        if (rt2x00_get_field32(reg,WLAN_GPIO_IN_BIT2))
+                        {
+                                rt2x00_set_field32(&reg,WLAN_GPIO_OUT_OE_BIT3,0);
+                                rt2x00_set_field32(&reg,WLAN_GPIO_OUT_BIT3,enabled);
+                                rt2800_register_write(led->rt2x00dev, WLAN_FUN_CTRL, reg);  
+                        } else
+                        {
+                                if (led->type == LED_TYPE_RADIO) {
+                                        rt2800_mcu_request(led->rt2x00dev, MCU_LED, 0xff, ledmode,
+                                                                        enabled ? 0x20 : 0);
+                                } else if (led->type == LED_TYPE_ASSOC) {
+                                        rt2800_mcu_request(led->rt2x00dev, MCU_LED, 0xff, ledmode,
+                                                                enabled ? (bg_mode ? 0x60 : 0xa0) : 0x20);
+                                } else if (led->type == LED_TYPE_QUALITY) {
+                                        /*
+                                        * The brightness is divided into 6 levels (0 - 5),
+                                       * The specs tell us the following levels:
+                                       *      0, 1 ,3, 7, 15, 31
+                                       * to determine the level in a simple way we can simply
+                                       * work with bitshifting:
+                                       *      (1 << level) - 1
+                                       */
+                                        rt2800_mcu_request(led->rt2x00dev, MCU_LED_STRENGTH, 0xff,
                                                       (1 << brightness / (LED_FULL / 6)) - 1,
-                                                      polarity);                   
-                        }
+                                                      polarity);
+                                }
+                        }               
+                } else {
+                if (led->type == LED_TYPE_RADIO) {
+                        rt2800_mcu_request(led->rt2x00dev, MCU_LED, 0xff, ledmode,
+                                              enabled ? 0x20 : 0);
+                } else if (led->type == LED_TYPE_ASSOC) {
+                        rt2800_mcu_request(led->rt2x00dev, MCU_LED, 0xff, ledmode,
+                                              enabled ? (bg_mode ? 0x60 : 0xa0) : 0x20);
+                } else if (led->type == LED_TYPE_QUALITY) {
+                        /*
+                        * The brightness is divided into 6 levels (0 - 5),
+                        * The specs tell us the following levels:
+                        *     0, 1 ,3, 7, 15, 31
+                        * to determine the level in a simple way we can simply
+                        * work with bitshifting:
+                        *     (1 << level) - 1
+                        */
+                        rt2800_mcu_request(led->rt2x00dev, MCU_LED_STRENGTH, 0xff,
+                                              (1 << brightness / (LED_FULL / 6)) - 1,
+                                              polarity);
+                }
                 }
         }
 }
