+++ /dev/null
---- a/drivers/net/wireless/rt2x00/rt2800lib.c
-+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
-@@ -935,6 +935,7 @@
- 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;
-@@ -947,24 +948,46 @@
- 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);
-+ }
- }
- }
-
--- /dev/null
+--- a/drivers/net/wireless/rt2x00/rt2800lib.c
++++ b/drivers/net/wireless/rt2x00/rt2800lib.c
+@@ -935,6 +935,7 @@
+ 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;
+@@ -947,24 +948,46 @@
+ 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);
++ }
+ }
+ }
+