aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt73usb.c
diff options
context:
space:
mode:
authorIvo van Doorn <ivdoorn@gmail.com>2008-02-17 11:35:28 -0500
committerJohn W. Linville <linville@tuxdriver.com>2008-02-29 15:37:24 -0500
commit47b10cd1375855dbc6675a176c71a512ac4b7317 (patch)
treea86ed1c88ea00371935f1ac3cd684d49b561bba2 /drivers/net/wireless/rt2x00/rt73usb.c
parent31562e802a72caf0757f351fff563d558d48d087 (diff)
rt2x00: Remove async vendor request calls from rt2x00usb
The async vendor requests are a ugly hack which is not working correctly. The proper fix for the scheduling while atomic issue is finding out why we can't use led classes for USB drivers and fix that. Just replace all async calls with the regular ones and print an error for the disallowed LED configuration attempts. That will help in determining which led class is causing the problem. Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt73usb.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt73usb.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index bf2391b89571..6546b0d607b9 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -290,29 +290,38 @@ static void rt73usb_led_brightness(struct led_classdev *led_cdev,
290 unsigned int bg_mode = 290 unsigned int bg_mode =
291 (enabled && led->rt2x00dev->curr_band == IEEE80211_BAND_2GHZ); 291 (enabled && led->rt2x00dev->curr_band == IEEE80211_BAND_2GHZ);
292 292
293 if (in_atomic()) {
294 NOTICE(led->rt2x00dev,
295 "Ignoring LED brightness command for led %d", led->type);
296 return;
297 }
298
293 if (led->type == LED_TYPE_RADIO) { 299 if (led->type == LED_TYPE_RADIO) {
294 rt2x00_set_field16(&led->rt2x00dev->led_mcu_reg, 300 rt2x00_set_field16(&led->rt2x00dev->led_mcu_reg,
295 MCU_LEDCS_RADIO_STATUS, enabled); 301 MCU_LEDCS_RADIO_STATUS, enabled);
296 302
297 rt2x00usb_vendor_request_async(led->rt2x00dev, USB_LED_CONTROL, 303 rt2x00usb_vendor_request_sw(led->rt2x00dev, USB_LED_CONTROL,
298 0, led->rt2x00dev->led_mcu_reg); 304 0, led->rt2x00dev->led_mcu_reg,
305 REGISTER_TIMEOUT);
299 } else if (led->type == LED_TYPE_ASSOC) { 306 } else if (led->type == LED_TYPE_ASSOC) {
300 rt2x00_set_field16(&led->rt2x00dev->led_mcu_reg, 307 rt2x00_set_field16(&led->rt2x00dev->led_mcu_reg,
301 MCU_LEDCS_LINK_BG_STATUS, bg_mode); 308 MCU_LEDCS_LINK_BG_STATUS, bg_mode);
302 rt2x00_set_field16(&led->rt2x00dev->led_mcu_reg, 309 rt2x00_set_field16(&led->rt2x00dev->led_mcu_reg,
303 MCU_LEDCS_LINK_A_STATUS, a_mode); 310 MCU_LEDCS_LINK_A_STATUS, a_mode);
304 311
305 rt2x00usb_vendor_request_async(led->rt2x00dev, USB_LED_CONTROL, 312 rt2x00usb_vendor_request_sw(led->rt2x00dev, USB_LED_CONTROL,
306 0, led->rt2x00dev->led_mcu_reg); 313 0, led->rt2x00dev->led_mcu_reg,
314 REGISTER_TIMEOUT);
307 } else if (led->type == LED_TYPE_QUALITY) { 315 } else if (led->type == LED_TYPE_QUALITY) {
308 /* 316 /*
309 * The brightness is divided into 6 levels (0 - 5), 317 * The brightness is divided into 6 levels (0 - 5),
310 * this means we need to convert the brightness 318 * this means we need to convert the brightness
311 * argument into the matching level within that range. 319 * argument into the matching level within that range.
312 */ 320 */
313 rt2x00usb_vendor_request_async(led->rt2x00dev, USB_LED_CONTROL, 321 rt2x00usb_vendor_request_sw(led->rt2x00dev, USB_LED_CONTROL,
314 brightness / (LED_FULL / 6), 322 brightness / (LED_FULL / 6),
315 led->rt2x00dev->led_mcu_reg); 323 led->rt2x00dev->led_mcu_reg,
324 REGISTER_TIMEOUT);
316 } 325 }
317} 326}
318#else 327#else