diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2400pci.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2400pci.c | 63 |
1 files changed, 36 insertions, 27 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c index 9abdfb84697c..b41187af1306 100644 --- a/drivers/net/wireless/rt2x00/rt2400pci.c +++ b/drivers/net/wireless/rt2x00/rt2400pci.c | |||
@@ -244,27 +244,39 @@ static int rt2400pci_rfkill_poll(struct rt2x00_dev *rt2x00dev) | |||
244 | #endif /* CONFIG_RT2400PCI_RFKILL */ | 244 | #endif /* CONFIG_RT2400PCI_RFKILL */ |
245 | 245 | ||
246 | #ifdef CONFIG_RT2400PCI_LEDS | 246 | #ifdef CONFIG_RT2400PCI_LEDS |
247 | static void rt2400pci_led_brightness(struct led_classdev *led_cdev, | 247 | static void rt2400pci_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, ®); | 255 | rt2x00pci_register_read(led->rt2x00dev, LEDCSR, ®); |
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(®, LEDCSR_LINK, enabled); | 258 | rt2x00_set_field32(®, LEDCSR_LINK, enabled); |
261 | rt2x00_set_field32(®, LEDCSR_ACTIVITY, enabled && activity); | 259 | else if (led->type == LED_TYPE_ACTIVITY) |
262 | } | 260 | rt2x00_set_field32(®, 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 rt2400pci_led_brightness NULL | 265 | static int rt2400pci_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, ®); | ||
274 | rt2x00_set_field32(®, LEDCSR_ON_PERIOD, *delay_on); | ||
275 | rt2x00_set_field32(®, LEDCSR_OFF_PERIOD, *delay_off); | ||
276 | rt2x00pci_register_write(led->rt2x00dev, LEDCSR, reg); | ||
277 | |||
278 | return 0; | ||
279 | } | ||
268 | #endif /* CONFIG_RT2400PCI_LEDS */ | 280 | #endif /* CONFIG_RT2400PCI_LEDS */ |
269 | 281 | ||
270 | /* | 282 | /* |
@@ -719,11 +731,6 @@ static int rt2400pci_init_registers(struct rt2x00_dev *rt2x00dev) | |||
719 | (rt2x00dev->rx->data_size / 128)); | 731 | (rt2x00dev->rx->data_size / 128)); |
720 | rt2x00pci_register_write(rt2x00dev, CSR9, reg); | 732 | rt2x00pci_register_write(rt2x00dev, CSR9, reg); |
721 | 733 | ||
722 | rt2x00pci_register_read(rt2x00dev, LEDCSR, ®); | ||
723 | rt2x00_set_field32(®, LEDCSR_ON_PERIOD, 70); | ||
724 | rt2x00_set_field32(®, LEDCSR_OFF_PERIOD, 30); | ||
725 | rt2x00pci_register_write(rt2x00dev, LEDCSR, reg); | ||
726 | |||
727 | rt2x00pci_register_write(rt2x00dev, CNT3, 0x3f080000); | 734 | rt2x00pci_register_write(rt2x00dev, CNT3, 0x3f080000); |
728 | 735 | ||
729 | rt2x00pci_register_read(rt2x00dev, ARCSR0, ®); | 736 | rt2x00pci_register_read(rt2x00dev, ARCSR0, ®); |
@@ -1291,19 +1298,22 @@ static int rt2400pci_init_eeprom(struct rt2x00_dev *rt2x00dev) | |||
1291 | #ifdef CONFIG_RT2400PCI_LEDS | 1298 | #ifdef CONFIG_RT2400PCI_LEDS |
1292 | value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_LED_MODE); | 1299 | value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_LED_MODE); |
1293 | 1300 | ||
1294 | switch (value) { | 1301 | rt2x00dev->led_radio.rt2x00dev = rt2x00dev; |
1295 | case LED_MODE_ASUS: | 1302 | rt2x00dev->led_radio.type = LED_TYPE_RADIO; |
1296 | case LED_MODE_ALPHA: | 1303 | rt2x00dev->led_radio.led_dev.brightness_set = |
1297 | case LED_MODE_DEFAULT: | 1304 | rt2400pci_brightness_set; |
1298 | rt2x00dev->led_flags = LED_SUPPORT_RADIO; | 1305 | rt2x00dev->led_radio.led_dev.blink_set = |
1299 | break; | 1306 | rt2400pci_blink_set; |
1300 | case LED_MODE_TXRX_ACTIVITY: | 1307 | rt2x00dev->led_radio.flags = LED_INITIALIZED; |
1301 | rt2x00dev->led_flags = | 1308 | |
1302 | LED_SUPPORT_RADIO | LED_SUPPORT_ACTIVITY; | 1309 | if (value == LED_MODE_TXRX_ACTIVITY) { |
1303 | break; | 1310 | rt2x00dev->led_qual.rt2x00dev = rt2x00dev; |
1304 | case LED_MODE_SIGNAL_STRENGTH: | 1311 | rt2x00dev->led_radio.type = LED_TYPE_ACTIVITY; |
1305 | rt2x00dev->led_flags = LED_SUPPORT_RADIO; | 1312 | rt2x00dev->led_qual.led_dev.brightness_set = |
1306 | break; | 1313 | rt2400pci_brightness_set; |
1314 | rt2x00dev->led_qual.led_dev.blink_set = | ||
1315 | rt2400pci_blink_set; | ||
1316 | rt2x00dev->led_qual.flags = LED_INITIALIZED; | ||
1307 | } | 1317 | } |
1308 | #endif /* CONFIG_RT2400PCI_LEDS */ | 1318 | #endif /* CONFIG_RT2400PCI_LEDS */ |
1309 | 1319 | ||
@@ -1569,7 +1579,6 @@ static const struct rt2x00lib_ops rt2400pci_rt2x00_ops = { | |||
1569 | .link_stats = rt2400pci_link_stats, | 1579 | .link_stats = rt2400pci_link_stats, |
1570 | .reset_tuner = rt2400pci_reset_tuner, | 1580 | .reset_tuner = rt2400pci_reset_tuner, |
1571 | .link_tuner = rt2400pci_link_tuner, | 1581 | .link_tuner = rt2400pci_link_tuner, |
1572 | .led_brightness = rt2400pci_led_brightness, | ||
1573 | .write_tx_desc = rt2400pci_write_tx_desc, | 1582 | .write_tx_desc = rt2400pci_write_tx_desc, |
1574 | .write_tx_data = rt2x00pci_write_tx_data, | 1583 | .write_tx_data = rt2x00pci_write_tx_data, |
1575 | .kick_tx_queue = rt2400pci_kick_tx_queue, | 1584 | .kick_tx_queue = rt2400pci_kick_tx_queue, |