aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43legacy/main.c
diff options
context:
space:
mode:
authorLarry Finger <Larry.Finger@lwfinger.net>2007-10-13 00:04:51 -0400
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:03:26 -0500
commitba48f7bb8062982ec916868cc8c90360aad82e53 (patch)
tree9f19ae7146c895d09b01ef7d1bbec0d44666c0bf /drivers/net/wireless/b43legacy/main.c
parentc8b0e6e19c0bcd30689cb6c6f64eb140f5d61894 (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.c40
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;
83module_param_named(long_retry, modparam_long_retry, int, 0444); 83module_param_named(long_retry, modparam_long_retry, int, 0444);
84MODULE_PARM_DESC(long_retry, "Long-Retry-Limit (0 - 15)"); 84MODULE_PARM_DESC(long_retry, "Long-Retry-Limit (0 - 15)");
85 85
86static int modparam_noleds;
87module_param_named(noleds, modparam_noleds, int, 0444);
88MODULE_PARM_DESC(noleds, "Turn off all LED activity");
89
90static char modparam_fwpostfix[16]; 86static char modparam_fwpostfix[16];
91module_param_string(fwpostfix, modparam_fwpostfix, 16, 0444); 87module_param_string(fwpostfix, modparam_fwpostfix, 16, 0444);
92MODULE_PARM_DESC(fwpostfix, "Postfix for the firmware files to load."); 88MODULE_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)
2008static void b43legacy_chip_exit(struct b43legacy_wldev *dev) 1994static 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
2121err_radio_off: 2108err_radio_off:
2122 b43legacy_radio_turn_off(dev); 2109 b43legacy_radio_turn_off(dev);
2123err_gpio_cleanup: 2110err_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)
3553out: 3535out:
3554 return err; 3536 return err;
3555 3537
3556err_leds_exit:
3557 b43legacy_leds_exit(dev);
3558err_powerdown: 3538err_powerdown:
3559 ssb_bus_may_powerdown(bus); 3539 ssb_bus_may_powerdown(bus);
3560 return err; 3540 return err;