aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt73usb.c
diff options
context:
space:
mode:
authorIvo van Doorn <ivdoorn@gmail.com>2008-03-31 09:53:44 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-04-01 17:14:09 -0400
commita2e1d52a32eab53f8ab03c4023310f65aaa054a7 (patch)
tree93f5f5692f220afbedc4512bdd372084097e5e54 /drivers/net/wireless/rt2x00/rt73usb.c
parente0b005fa1479045fe879944036268af3ebcd1835 (diff)
rt2x00: Remove MAC80211_LEDS dependency
Implement triggers inside rt2x00 itself based on input from mac80211. This replaces the method of using the mac80211 trigger events which do not work for USB drivers due to the scheduling requirement. After this patch RT2500USB_LEDS and RT73USB_LEDS no longer need to be tagged as broken since they now support LED handling again without having to check for in_atomic(). 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.c70
1 files changed, 41 insertions, 29 deletions
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index 796cf2990b72..a9efe25f1ea7 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -280,7 +280,7 @@ static const struct rt2x00debug rt73usb_rt2x00debug = {
280#endif /* CONFIG_RT2X00_LIB_DEBUGFS */ 280#endif /* CONFIG_RT2X00_LIB_DEBUGFS */
281 281
282#ifdef CONFIG_RT73USB_LEDS 282#ifdef CONFIG_RT73USB_LEDS
283static void rt73usb_led_brightness(struct led_classdev *led_cdev, 283static void rt73usb_brightness_set(struct led_classdev *led_cdev,
284 enum led_brightness brightness) 284 enum led_brightness brightness)
285{ 285{
286 struct rt2x00_led *led = 286 struct rt2x00_led *led =
@@ -291,13 +291,6 @@ static void rt73usb_led_brightness(struct led_classdev *led_cdev,
291 unsigned int bg_mode = 291 unsigned int bg_mode =
292 (enabled && led->rt2x00dev->curr_band == IEEE80211_BAND_2GHZ); 292 (enabled && led->rt2x00dev->curr_band == IEEE80211_BAND_2GHZ);
293 293
294 if (in_atomic()) {
295 NOTICE(led->rt2x00dev,
296 "Ignoring LED brightness command for led %d\n",
297 led->type);
298 return;
299 }
300
301 if (led->type == LED_TYPE_RADIO) { 294 if (led->type == LED_TYPE_RADIO) {
302 rt2x00_set_field16(&led->rt2x00dev->led_mcu_reg, 295 rt2x00_set_field16(&led->rt2x00dev->led_mcu_reg,
303 MCU_LEDCS_RADIO_STATUS, enabled); 296 MCU_LEDCS_RADIO_STATUS, enabled);
@@ -326,8 +319,22 @@ static void rt73usb_led_brightness(struct led_classdev *led_cdev,
326 REGISTER_TIMEOUT); 319 REGISTER_TIMEOUT);
327 } 320 }
328} 321}
329#else 322
330#define rt73usb_led_brightness NULL 323static int rt73usb_blink_set(struct led_classdev *led_cdev,
324 unsigned long *delay_on,
325 unsigned long *delay_off)
326{
327 struct rt2x00_led *led =
328 container_of(led_cdev, struct rt2x00_led, led_dev);
329 u32 reg;
330
331 rt73usb_register_read(led->rt2x00dev, MAC_CSR14, &reg);
332 rt2x00_set_field32(&reg, MAC_CSR14_ON_PERIOD, *delay_on);
333 rt2x00_set_field32(&reg, MAC_CSR14_OFF_PERIOD, *delay_off);
334 rt73usb_register_write(led->rt2x00dev, MAC_CSR14, reg);
335
336 return 0;
337}
331#endif /* CONFIG_RT73USB_LEDS */ 338#endif /* CONFIG_RT73USB_LEDS */
332 339
333/* 340/*
@@ -1006,11 +1013,6 @@ static int rt73usb_init_registers(struct rt2x00_dev *rt2x00dev)
1006 1013
1007 rt73usb_register_write(rt2x00dev, MAC_CSR13, 0x00007f00); 1014 rt73usb_register_write(rt2x00dev, MAC_CSR13, 0x00007f00);
1008 1015
1009 rt73usb_register_read(rt2x00dev, MAC_CSR14, &reg);
1010 rt2x00_set_field32(&reg, MAC_CSR14_ON_PERIOD, 70);
1011 rt2x00_set_field32(&reg, MAC_CSR14_OFF_PERIOD, 30);
1012 rt73usb_register_write(rt2x00dev, MAC_CSR14, reg);
1013
1014 /* 1016 /*
1015 * Invalidate all Shared Keys (SEC_CSR0), 1017 * Invalidate all Shared Keys (SEC_CSR0),
1016 * and clear the Shared key Cipher algorithms (SEC_CSR1 & SEC_CSR5) 1018 * and clear the Shared key Cipher algorithms (SEC_CSR1 & SEC_CSR5)
@@ -1627,19 +1629,30 @@ static int rt73usb_init_eeprom(struct rt2x00_dev *rt2x00dev)
1627#ifdef CONFIG_RT73USB_LEDS 1629#ifdef CONFIG_RT73USB_LEDS
1628 rt2x00_eeprom_read(rt2x00dev, EEPROM_LED, &eeprom); 1630 rt2x00_eeprom_read(rt2x00dev, EEPROM_LED, &eeprom);
1629 1631
1630 switch (value) { 1632 rt2x00dev->led_radio.rt2x00dev = rt2x00dev;
1631 case LED_MODE_TXRX_ACTIVITY: 1633 rt2x00dev->led_radio.type = LED_TYPE_RADIO;
1632 case LED_MODE_ASUS: 1634 rt2x00dev->led_radio.led_dev.brightness_set =
1633 case LED_MODE_ALPHA: 1635 rt73usb_brightness_set;
1634 case LED_MODE_DEFAULT: 1636 rt2x00dev->led_radio.led_dev.blink_set =
1635 rt2x00dev->led_flags = 1637 rt73usb_blink_set;
1636 LED_SUPPORT_RADIO | LED_SUPPORT_ASSOC; 1638 rt2x00dev->led_radio.flags = LED_INITIALIZED;
1637 break; 1639
1638 case LED_MODE_SIGNAL_STRENGTH: 1640 rt2x00dev->led_assoc.rt2x00dev = rt2x00dev;
1639 rt2x00dev->led_flags = 1641 rt2x00dev->led_assoc.type = LED_TYPE_ASSOC;
1640 LED_SUPPORT_RADIO | LED_SUPPORT_ASSOC | 1642 rt2x00dev->led_assoc.led_dev.brightness_set =
1641 LED_SUPPORT_QUALITY; 1643 rt73usb_brightness_set;
1642 break; 1644 rt2x00dev->led_assoc.led_dev.blink_set =
1645 rt73usb_blink_set;
1646 rt2x00dev->led_assoc.flags = LED_INITIALIZED;
1647
1648 if (value == LED_MODE_SIGNAL_STRENGTH) {
1649 rt2x00dev->led_qual.rt2x00dev = rt2x00dev;
1650 rt2x00dev->led_radio.type = LED_TYPE_QUALITY;
1651 rt2x00dev->led_qual.led_dev.brightness_set =
1652 rt73usb_brightness_set;
1653 rt2x00dev->led_qual.led_dev.blink_set =
1654 rt73usb_blink_set;
1655 rt2x00dev->led_qual.flags = LED_INITIALIZED;
1643 } 1656 }
1644 1657
1645 rt2x00_set_field16(&rt2x00dev->led_mcu_reg, MCU_LEDCS_LED_MODE, value); 1658 rt2x00_set_field16(&rt2x00dev->led_mcu_reg, MCU_LEDCS_LED_MODE, value);
@@ -2040,7 +2053,6 @@ static const struct rt2x00lib_ops rt73usb_rt2x00_ops = {
2040 .link_stats = rt73usb_link_stats, 2053 .link_stats = rt73usb_link_stats,
2041 .reset_tuner = rt73usb_reset_tuner, 2054 .reset_tuner = rt73usb_reset_tuner,
2042 .link_tuner = rt73usb_link_tuner, 2055 .link_tuner = rt73usb_link_tuner,
2043 .led_brightness = rt73usb_led_brightness,
2044 .write_tx_desc = rt73usb_write_tx_desc, 2056 .write_tx_desc = rt73usb_write_tx_desc,
2045 .write_tx_data = rt2x00usb_write_tx_data, 2057 .write_tx_data = rt2x00usb_write_tx_data,
2046 .get_tx_data_len = rt73usb_get_tx_data_len, 2058 .get_tx_data_len = rt73usb_get_tx_data_len,