mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 22:44:27 -05:00 
			
		
		
		
	adds some more pending patches which (among other things) fix the 'failed to stop RX DMA' messages SVN-Revision: 26506
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
 | 
						|
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
 | 
						|
@@ -938,6 +938,7 @@ EXPORT_SYMBOL_GPL(rt2800_rfkill_poll);
 | 
						|
 static void rt2800_brightness_set(struct led_classdev *led_cdev,
 | 
						|
 				  enum led_brightness brightness)
 | 
						|
 {
 | 
						|
+	u32 reg;
 | 
						|
 	struct rt2x00_led *led =
 | 
						|
 	    container_of(led_cdev, struct rt2x00_led, led_dev);
 | 
						|
 	unsigned int enabled = brightness != LED_OFF;
 | 
						|
@@ -950,24 +951,46 @@ static void rt2800_brightness_set(struct
 | 
						|
 		rt2x00_get_field16(led->rt2x00dev->led_mcu_reg,
 | 
						|
 				   EEPROM_FREQ_LED_MODE);
 | 
						|
 
 | 
						|
-	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);
 | 
						|
+	/* Check for SoC (SOC devices don't support MCU requests) */
 | 
						|
+	if (rt2x00_is_soc(led->rt2x00dev)) {
 | 
						|
+		rt2800_register_read(led->rt2x00dev, LED_CFG, ®);
 | 
						|
+
 | 
						|
+		/* Set LED Polarity */
 | 
						|
+		rt2x00_set_field32(®, LED_CFG_LED_POLAR, polarity);
 | 
						|
+
 | 
						|
+		/* Set LED Mode */
 | 
						|
+		if (led->type == LED_TYPE_RADIO) {
 | 
						|
+			rt2x00_set_field32(®, LED_CFG_G_LED_MODE,
 | 
						|
+					   enabled ? 3 : 0);
 | 
						|
+		} else if (led->type == LED_TYPE_ASSOC) {
 | 
						|
+			rt2x00_set_field32(®, LED_CFG_Y_LED_MODE,
 | 
						|
+					   enabled ? 3 : 0);
 | 
						|
+		} else if (led->type == LED_TYPE_QUALITY) {
 | 
						|
+			rt2x00_set_field32(®, LED_CFG_R_LED_MODE,
 | 
						|
+					   enabled ? 3 : 0);
 | 
						|
+		}
 | 
						|
+		rt2800_register_write(led->rt2x00dev, LED_CFG, 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);
 | 
						|
+		}
 | 
						|
 	}
 | 
						|
 }
 | 
						|
 
 |