Skip to contentSkip to conversation

rt2x00: Don't switch off LED on initialization

PATCH In review Ivo van Doorn 2 participants 3 messages Nov 15, 2008 Networking drivers (wireless)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 rt2x00: Don't switch off LED on initialization

When we switch off the LEDS during initialization we kill rt73usb from proper functioning. The immediate result after the first LED command are MCU failures and a complete breakdown of TX/RX.

---
 drivers/net/wireless/rt2x00/rt2x00leds.c |    6 ------
 1 files changed, 0 insertions(+), 6 deletions(-)
drivers/net/wireless/rt2x00/rt2x00leds.c +0 -6
index 66c61b1..68f4e0f 100644
@@ -111,12 +111,6 @@ static int rt2x00leds_register_led(struct rt2x00_dev *rt2x00dev,
 	led->led_dev.name = name;
 	led->led_dev.brightness = LED_OFF;
 
-	/*
-	 * Ensure the LED is off, it might have been enabled
-	 * by the hardware when the device was powered on.
-	 */
-	led->led_dev.brightness_set(&led->led_dev, LED_OFF);
-
 	retval = led_classdev_register(device, &led->led_dev);
 	if (retval) {
 		ERROR(rt2x00dev, "Failed to register led handler.\n");
Signature · 1 line
1.5.6.1
#1 lore raw
Quoted 17 lines · On Sunday 16 November 2008 00:08:50 Ivo van Doorn wrote:

When we switch off the LEDS during initialization we kill rt73usb from proper functioning. The immediate result after the first LED command are MCU failures and a complete breakdown of TX/RX.

---
 drivers/net/wireless/rt2x00/rt2x00leds.c |    6 ------
 1 files changed, 0 insertions(+), 6 deletions(-)
drivers/net/wireless/rt2x00/rt2x00leds.c +0 -0
index 66c61b1..68f4e0f 100644
@@ -111,12 +111,6 @@ static int rt2x00leds_register_led(struct rt2x00_dev *rt2x00dev,
 	led->led_dev.name = name;
 	led->led_dev.brightness = LED_OFF;

drivers/net/wireless/rt2x00/rt2x00leds.c static int rt2x00leds_register_led(struct rt2x00_dev *rt2x00dev, · line 116

Quoted 10 lines
drivers/net/wireless/rt2x00/rt2x00leds.c +0 -6
 
-	/*
-	 * Ensure the LED is off, it might have been enabled
-	 * by the hardware when the device was powered on.
-	 */
-	led->led_dev.brightness_set(&led->led_dev, LED_OFF);
-
 	retval = led_classdev_register(device, &led->led_dev);
 	if (retval) {
 		ERROR(rt2x00dev, "Failed to register led handler.\n");

But you know that a brightness_set event can trigger right after the dev was registered?
So a random LED event at the right time can kill the rt device?

Signature · 1 line
Greetings Michael.
#2 lore raw
Quoted 19 lines · Michael Buesch
Quoted 18 lines · On Sunday 16 November 2008 00:08:50 Ivo van Doorn wrote:

When we switch off the LEDS during initialization we kill rt73usb from proper functioning. The immediate result after the first LED command are MCU failures and a complete breakdown of TX/RX.

---
 drivers/net/wireless/rt2x00/rt2x00leds.c |    6 ------
 1 files changed, 0 insertions(+), 6 deletions(-)
drivers/net/wireless/rt2x00/rt2x00leds.c +0 -0
index 66c61b1..68f4e0f 100644
@@ -111,12 +111,6 @@ static int rt2x00leds_register_led(struct rt2x00_dev *rt2x00dev,
 	led->led_dev.name = name;
 	led->led_dev.brightness = LED_OFF;
 
Quoted 13 lines

drivers/net/wireless/rt2x00/rt2x00leds.c static int rt2x00leds_register_led(struct rt2x00_dev *rt2x00dev, · line 116

Quoted 9 lines
drivers/net/wireless/rt2x00/rt2x00leds.c +0 -6
-	/*
-	 * Ensure the LED is off, it might have been enabled
-	 * by the hardware when the device was powered on.
-	 */
-	led->led_dev.brightness_set(&led->led_dev, LED_OFF);
-
 	retval = led_classdev_register(device, &led->led_dev);
 	if (retval) {
 		ERROR(rt2x00dev, "Failed to register led handler.\n");

But you know that a brightness_set event can trigger right after the dev was registered?
So a random LED event at the right time can kill the rt device?

If the user manages to trigger the event right after registration
yes, then it might be possible (Note that the leds aren't controlled by any triggers, neither RFKill nor mac80211 triggers are attached to the rt2x00 leds). This is a quick hack, to get the device working by default again.
I still have to research why exactly the device dies when LED is switched off in an early initialization state.

But for the rare occasions the user might trigger the LED too early, the user just has to plugin the device again.

Ivo