diff options
author | Larry Finger <Larry.Finger@lwfinger.net> | 2007-10-13 00:04:51 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 18:03:26 -0500 |
commit | ba48f7bb8062982ec916868cc8c90360aad82e53 (patch) | |
tree | 9f19ae7146c895d09b01ef7d1bbec0d44666c0bf /drivers/net/wireless/b43legacy/main.c | |
parent | c8b0e6e19c0bcd30689cb6c6f64eb140f5d61894 (diff) |
b43legacy: LED triggers support
Drive the LEDs through the generic LED triggers.
The patch to b43 by Michael Buesch <mb@bu3sch.de> has been ported to b43legacy.
Signed-off-by: Larry Finger <larry.finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43legacy/main.c')
-rw-r--r-- | drivers/net/wireless/b43legacy/main.c | 40 |
1 files changed, 10 insertions, 30 deletions
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c index 32d5e1785bda..43edd08297a4 100644 --- a/drivers/net/wireless/b43legacy/main.c +++ b/drivers/net/wireless/b43legacy/main.c | |||
@@ -83,10 +83,6 @@ static int modparam_long_retry = B43legacy_DEFAULT_LONG_RETRY_LIMIT; | |||
83 | module_param_named(long_retry, modparam_long_retry, int, 0444); | 83 | module_param_named(long_retry, modparam_long_retry, int, 0444); |
84 | MODULE_PARM_DESC(long_retry, "Long-Retry-Limit (0 - 15)"); | 84 | MODULE_PARM_DESC(long_retry, "Long-Retry-Limit (0 - 15)"); |
85 | 85 | ||
86 | static int modparam_noleds; | ||
87 | module_param_named(noleds, modparam_noleds, int, 0444); | ||
88 | MODULE_PARM_DESC(noleds, "Turn off all LED activity"); | ||
89 | |||
90 | static char modparam_fwpostfix[16]; | 86 | static char modparam_fwpostfix[16]; |
91 | module_param_string(fwpostfix, modparam_fwpostfix, 16, 0444); | 87 | module_param_string(fwpostfix, modparam_fwpostfix, 16, 0444); |
92 | MODULE_PARM_DESC(fwpostfix, "Postfix for the firmware files to load."); | 88 | MODULE_PARM_DESC(fwpostfix, "Postfix for the firmware files to load."); |
@@ -1217,7 +1213,6 @@ static void b43legacy_interrupt_tasklet(struct b43legacy_wldev *dev) | |||
1217 | u32 dma_reason[ARRAY_SIZE(dev->dma_reason)]; | 1213 | u32 dma_reason[ARRAY_SIZE(dev->dma_reason)]; |
1218 | u32 merged_dma_reason = 0; | 1214 | u32 merged_dma_reason = 0; |
1219 | int i; | 1215 | int i; |
1220 | int activity = 0; | ||
1221 | unsigned long flags; | 1216 | unsigned long flags; |
1222 | 1217 | ||
1223 | spin_lock_irqsave(&dev->wl->irq_lock, flags); | 1218 | spin_lock_irqsave(&dev->wl->irq_lock, flags); |
@@ -1281,7 +1276,6 @@ static void b43legacy_interrupt_tasklet(struct b43legacy_wldev *dev) | |||
1281 | b43legacy_pio_rx(dev->pio.queue0); | 1276 | b43legacy_pio_rx(dev->pio.queue0); |
1282 | else | 1277 | else |
1283 | b43legacy_dma_rx(dev->dma.rx_ring0); | 1278 | b43legacy_dma_rx(dev->dma.rx_ring0); |
1284 | /* We intentionally don't set "activity" to 1, here. */ | ||
1285 | } | 1279 | } |
1286 | B43legacy_WARN_ON(dma_reason[1] & B43legacy_DMAIRQ_RX_DONE); | 1280 | B43legacy_WARN_ON(dma_reason[1] & B43legacy_DMAIRQ_RX_DONE); |
1287 | B43legacy_WARN_ON(dma_reason[2] & B43legacy_DMAIRQ_RX_DONE); | 1281 | B43legacy_WARN_ON(dma_reason[2] & B43legacy_DMAIRQ_RX_DONE); |
@@ -1290,20 +1284,13 @@ static void b43legacy_interrupt_tasklet(struct b43legacy_wldev *dev) | |||
1290 | b43legacy_pio_rx(dev->pio.queue3); | 1284 | b43legacy_pio_rx(dev->pio.queue3); |
1291 | else | 1285 | else |
1292 | b43legacy_dma_rx(dev->dma.rx_ring3); | 1286 | b43legacy_dma_rx(dev->dma.rx_ring3); |
1293 | activity = 1; | ||
1294 | } | 1287 | } |
1295 | B43legacy_WARN_ON(dma_reason[4] & B43legacy_DMAIRQ_RX_DONE); | 1288 | B43legacy_WARN_ON(dma_reason[4] & B43legacy_DMAIRQ_RX_DONE); |
1296 | B43legacy_WARN_ON(dma_reason[5] & B43legacy_DMAIRQ_RX_DONE); | 1289 | B43legacy_WARN_ON(dma_reason[5] & B43legacy_DMAIRQ_RX_DONE); |
1297 | 1290 | ||
1298 | if (reason & B43legacy_IRQ_TX_OK) { | 1291 | if (reason & B43legacy_IRQ_TX_OK) |
1299 | handle_irq_transmit_status(dev); | 1292 | handle_irq_transmit_status(dev); |
1300 | activity = 1; | ||
1301 | /* TODO: In AP mode, this also causes sending of powersave | ||
1302 | responses. */ | ||
1303 | } | ||
1304 | 1293 | ||
1305 | if (!modparam_noleds) | ||
1306 | b43legacy_leds_update(dev, activity); | ||
1307 | b43legacy_interrupt_enable(dev, dev->irq_savedstate); | 1294 | b43legacy_interrupt_enable(dev, dev->irq_savedstate); |
1308 | mmiowb(); | 1295 | mmiowb(); |
1309 | spin_unlock_irqrestore(&dev->wl->irq_lock, flags); | 1296 | spin_unlock_irqrestore(&dev->wl->irq_lock, flags); |
@@ -1755,7 +1742,6 @@ static int b43legacy_gpio_init(struct b43legacy_wldev *dev) | |||
1755 | B43legacy_MMIO_STATUS_BITFIELD) | 1742 | B43legacy_MMIO_STATUS_BITFIELD) |
1756 | & 0xFFFF3FFF); | 1743 | & 0xFFFF3FFF); |
1757 | 1744 | ||
1758 | b43legacy_leds_switch_all(dev, 0); | ||
1759 | b43legacy_write16(dev, B43legacy_MMIO_GPIO_MASK, | 1745 | b43legacy_write16(dev, B43legacy_MMIO_GPIO_MASK, |
1760 | b43legacy_read16(dev, | 1746 | b43legacy_read16(dev, |
1761 | B43legacy_MMIO_GPIO_MASK) | 1747 | B43legacy_MMIO_GPIO_MASK) |
@@ -2008,8 +1994,7 @@ static bool b43legacy_is_hw_radio_enabled(struct b43legacy_wldev *dev) | |||
2008 | static void b43legacy_chip_exit(struct b43legacy_wldev *dev) | 1994 | static void b43legacy_chip_exit(struct b43legacy_wldev *dev) |
2009 | { | 1995 | { |
2010 | b43legacy_radio_turn_off(dev); | 1996 | b43legacy_radio_turn_off(dev); |
2011 | if (!modparam_noleds) | 1997 | b43legacy_leds_exit(dev); |
2012 | b43legacy_leds_exit(dev); | ||
2013 | b43legacy_gpio_cleanup(dev); | 1998 | b43legacy_gpio_cleanup(dev); |
2014 | /* firmware is released later */ | 1999 | /* firmware is released later */ |
2015 | } | 2000 | } |
@@ -2039,9 +2024,11 @@ static int b43legacy_chip_init(struct b43legacy_wldev *dev) | |||
2039 | err = b43legacy_gpio_init(dev); | 2024 | err = b43legacy_gpio_init(dev); |
2040 | if (err) | 2025 | if (err) |
2041 | goto out; /* firmware is released later */ | 2026 | goto out; /* firmware is released later */ |
2027 | b43legacy_leds_init(dev); | ||
2028 | |||
2042 | err = b43legacy_upload_initvals(dev); | 2029 | err = b43legacy_upload_initvals(dev); |
2043 | if (err) | 2030 | if (err) |
2044 | goto err_gpio_cleanup; | 2031 | goto err_leds_exit; |
2045 | b43legacy_radio_turn_on(dev); | 2032 | b43legacy_radio_turn_on(dev); |
2046 | 2033 | ||
2047 | b43legacy_write16(dev, 0x03E6, 0x0000); | 2034 | b43legacy_write16(dev, 0x03E6, 0x0000); |
@@ -2120,7 +2107,8 @@ out: | |||
2120 | 2107 | ||
2121 | err_radio_off: | 2108 | err_radio_off: |
2122 | b43legacy_radio_turn_off(dev); | 2109 | b43legacy_radio_turn_off(dev); |
2123 | err_gpio_cleanup: | 2110 | err_leds_exit: |
2111 | b43legacy_leds_exit(dev); | ||
2124 | b43legacy_gpio_cleanup(dev); | 2112 | b43legacy_gpio_cleanup(dev); |
2125 | goto out; | 2113 | goto out; |
2126 | } | 2114 | } |
@@ -2168,7 +2156,6 @@ static void b43legacy_periodic_every1sec(struct b43legacy_wldev *dev) | |||
2168 | dev->radio_hw_enable = radio_hw_enable; | 2156 | dev->radio_hw_enable = radio_hw_enable; |
2169 | b43legacyinfo(dev->wl, "Radio hardware status changed to %s\n", | 2157 | b43legacyinfo(dev->wl, "Radio hardware status changed to %s\n", |
2170 | (radio_hw_enable) ? "enabled" : "disabled"); | 2158 | (radio_hw_enable) ? "enabled" : "disabled"); |
2171 | b43legacy_leds_update(dev, 0); | ||
2172 | } | 2159 | } |
2173 | } | 2160 | } |
2174 | 2161 | ||
@@ -3498,18 +3485,13 @@ static int b43legacy_wireless_core_attach(struct b43legacy_wldev *dev) | |||
3498 | else | 3485 | else |
3499 | have_bphy = 1; | 3486 | have_bphy = 1; |
3500 | 3487 | ||
3501 | /* Initialize LEDs structs. */ | ||
3502 | err = b43legacy_leds_init(dev); | ||
3503 | if (err) | ||
3504 | goto err_powerdown; | ||
3505 | |||
3506 | dev->phy.gmode = (have_gphy || have_bphy); | 3488 | dev->phy.gmode = (have_gphy || have_bphy); |
3507 | tmp = dev->phy.gmode ? B43legacy_TMSLOW_GMODE : 0; | 3489 | tmp = dev->phy.gmode ? B43legacy_TMSLOW_GMODE : 0; |
3508 | b43legacy_wireless_core_reset(dev, tmp); | 3490 | b43legacy_wireless_core_reset(dev, tmp); |
3509 | 3491 | ||
3510 | err = b43legacy_phy_versioning(dev); | 3492 | err = b43legacy_phy_versioning(dev); |
3511 | if (err) | 3493 | if (err) |
3512 | goto err_leds_exit; | 3494 | goto err_powerdown; |
3513 | /* Check if this device supports multiband. */ | 3495 | /* Check if this device supports multiband. */ |
3514 | if (!pdev || | 3496 | if (!pdev || |
3515 | (pdev->device != 0x4312 && | 3497 | (pdev->device != 0x4312 && |
@@ -3535,10 +3517,10 @@ static int b43legacy_wireless_core_attach(struct b43legacy_wldev *dev) | |||
3535 | 3517 | ||
3536 | err = b43legacy_validate_chipaccess(dev); | 3518 | err = b43legacy_validate_chipaccess(dev); |
3537 | if (err) | 3519 | if (err) |
3538 | goto err_leds_exit; | 3520 | goto err_powerdown; |
3539 | err = b43legacy_setup_modes(dev, have_bphy, have_gphy); | 3521 | err = b43legacy_setup_modes(dev, have_bphy, have_gphy); |
3540 | if (err) | 3522 | if (err) |
3541 | goto err_leds_exit; | 3523 | goto err_powerdown; |
3542 | 3524 | ||
3543 | /* Now set some default "current_dev" */ | 3525 | /* Now set some default "current_dev" */ |
3544 | if (!wl->current_dev) | 3526 | if (!wl->current_dev) |
@@ -3553,8 +3535,6 @@ static int b43legacy_wireless_core_attach(struct b43legacy_wldev *dev) | |||
3553 | out: | 3535 | out: |
3554 | return err; | 3536 | return err; |
3555 | 3537 | ||
3556 | err_leds_exit: | ||
3557 | b43legacy_leds_exit(dev); | ||
3558 | err_powerdown: | 3538 | err_powerdown: |
3559 | ssb_bus_may_powerdown(bus); | 3539 | ssb_bus_may_powerdown(bus); |
3560 | return err; | 3540 | return err; |