aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt2500pci.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/rt2500pci.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/rt2500pci.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt2500pci.c63
1 files changed, 36 insertions, 27 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
index 54c9a75b549b..5ade097ed45e 100644
--- a/drivers/net/wireless/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/rt2x00/rt2500pci.c
@@ -244,27 +244,39 @@ static int rt2500pci_rfkill_poll(struct rt2x00_dev *rt2x00dev)
244#endif /* CONFIG_RT2500PCI_RFKILL */ 244#endif /* CONFIG_RT2500PCI_RFKILL */
245 245
246#ifdef CONFIG_RT2500PCI_LEDS 246#ifdef CONFIG_RT2500PCI_LEDS
247static void rt2500pci_led_brightness(struct led_classdev *led_cdev, 247static void rt2500pci_brightness_set(struct led_classdev *led_cdev,
248 enum led_brightness brightness) 248 enum led_brightness brightness)
249{ 249{
250 struct rt2x00_led *led = 250 struct rt2x00_led *led =
251 container_of(led_cdev, struct rt2x00_led, led_dev); 251 container_of(led_cdev, struct rt2x00_led, led_dev);
252 unsigned int enabled = brightness != LED_OFF; 252 unsigned int enabled = brightness != LED_OFF;
253 unsigned int activity =
254 led->rt2x00dev->led_flags & LED_SUPPORT_ACTIVITY;
255 u32 reg; 253 u32 reg;
256 254
257 rt2x00pci_register_read(led->rt2x00dev, LEDCSR, &reg); 255 rt2x00pci_register_read(led->rt2x00dev, LEDCSR, &reg);
258 256
259 if (led->type == LED_TYPE_RADIO || led->type == LED_TYPE_ASSOC) { 257 if (led->type == LED_TYPE_RADIO || led->type == LED_TYPE_ASSOC)
260 rt2x00_set_field32(&reg, LEDCSR_LINK, enabled); 258 rt2x00_set_field32(&reg, LEDCSR_LINK, enabled);
261 rt2x00_set_field32(&reg, LEDCSR_ACTIVITY, enabled && activity); 259 else if (led->type == LED_TYPE_ACTIVITY)
262 } 260 rt2x00_set_field32(&reg, LEDCSR_ACTIVITY, enabled);
263 261
264 rt2x00pci_register_write(led->rt2x00dev, LEDCSR, reg); 262 rt2x00pci_register_write(led->rt2x00dev, LEDCSR, reg);
265} 263}
266#else 264
267#define rt2500pci_led_brightness NULL 265static int rt2500pci_blink_set(struct led_classdev *led_cdev,
266 unsigned long *delay_on,
267 unsigned long *delay_off)
268{
269 struct rt2x00_led *led =
270 container_of(led_cdev, struct rt2x00_led, led_dev);
271 u32 reg;
272
273 rt2x00pci_register_read(led->rt2x00dev, LEDCSR, &reg);
274 rt2x00_set_field32(&reg, LEDCSR_ON_PERIOD, *delay_on);
275 rt2x00_set_field32(&reg, LEDCSR_OFF_PERIOD, *delay_off);
276 rt2x00pci_register_write(led->rt2x00dev, LEDCSR, reg);
277
278 return 0;
279}
268#endif /* CONFIG_RT2500PCI_LEDS */ 280#endif /* CONFIG_RT2500PCI_LEDS */
269 281
270/* 282/*
@@ -812,11 +824,6 @@ static int rt2500pci_init_registers(struct rt2x00_dev *rt2x00dev)
812 rt2x00_set_field32(&reg, CSR11_CW_SELECT, 0); 824 rt2x00_set_field32(&reg, CSR11_CW_SELECT, 0);
813 rt2x00pci_register_write(rt2x00dev, CSR11, reg); 825 rt2x00pci_register_write(rt2x00dev, CSR11, reg);
814 826
815 rt2x00pci_register_read(rt2x00dev, LEDCSR, &reg);
816 rt2x00_set_field32(&reg, LEDCSR_ON_PERIOD, 70);
817 rt2x00_set_field32(&reg, LEDCSR_OFF_PERIOD, 30);
818 rt2x00pci_register_write(rt2x00dev, LEDCSR, reg);
819
820 rt2x00pci_register_write(rt2x00dev, CNT3, 0); 827 rt2x00pci_register_write(rt2x00dev, CNT3, 0);
821 828
822 rt2x00pci_register_read(rt2x00dev, TXCSR8, &reg); 829 rt2x00pci_register_read(rt2x00dev, TXCSR8, &reg);
@@ -1468,19 +1475,22 @@ static int rt2500pci_init_eeprom(struct rt2x00_dev *rt2x00dev)
1468#ifdef CONFIG_RT2500PCI_LEDS 1475#ifdef CONFIG_RT2500PCI_LEDS
1469 value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_LED_MODE); 1476 value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_LED_MODE);
1470 1477
1471 switch (value) { 1478 rt2x00dev->led_radio.rt2x00dev = rt2x00dev;
1472 case LED_MODE_ASUS: 1479 rt2x00dev->led_radio.type = LED_TYPE_RADIO;
1473 case LED_MODE_ALPHA: 1480 rt2x00dev->led_radio.led_dev.brightness_set =
1474 case LED_MODE_DEFAULT: 1481 rt2500pci_brightness_set;
1475 rt2x00dev->led_flags = LED_SUPPORT_RADIO; 1482 rt2x00dev->led_radio.led_dev.blink_set =
1476 break; 1483 rt2500pci_blink_set;
1477 case LED_MODE_TXRX_ACTIVITY: 1484 rt2x00dev->led_radio.flags = LED_INITIALIZED;
1478 rt2x00dev->led_flags = 1485
1479 LED_SUPPORT_RADIO | LED_SUPPORT_ACTIVITY; 1486 if (value == LED_MODE_TXRX_ACTIVITY) {
1480 break; 1487 rt2x00dev->led_qual.rt2x00dev = rt2x00dev;
1481 case LED_MODE_SIGNAL_STRENGTH: 1488 rt2x00dev->led_radio.type = LED_TYPE_ACTIVITY;
1482 rt2x00dev->led_flags = LED_SUPPORT_RADIO; 1489 rt2x00dev->led_qual.led_dev.brightness_set =
1483 break; 1490 rt2500pci_brightness_set;
1491 rt2x00dev->led_qual.led_dev.blink_set =
1492 rt2500pci_blink_set;
1493 rt2x00dev->led_qual.flags = LED_INITIALIZED;
1484 } 1494 }
1485#endif /* CONFIG_RT2500PCI_LEDS */ 1495#endif /* CONFIG_RT2500PCI_LEDS */
1486 1496
@@ -1882,7 +1892,6 @@ static const struct rt2x00lib_ops rt2500pci_rt2x00_ops = {
1882 .link_stats = rt2500pci_link_stats, 1892 .link_stats = rt2500pci_link_stats,
1883 .reset_tuner = rt2500pci_reset_tuner, 1893 .reset_tuner = rt2500pci_reset_tuner,
1884 .link_tuner = rt2500pci_link_tuner, 1894 .link_tuner = rt2500pci_link_tuner,
1885 .led_brightness = rt2500pci_led_brightness,
1886 .write_tx_desc = rt2500pci_write_tx_desc, 1895 .write_tx_desc = rt2500pci_write_tx_desc,
1887 .write_tx_data = rt2x00pci_write_tx_data, 1896 .write_tx_data = rt2x00pci_write_tx_data,
1888 .kick_tx_queue = rt2500pci_kick_tx_queue, 1897 .kick_tx_queue = rt2500pci_kick_tx_queue,