void b43_leds_register(struct b43_wldev *dev) { unsigned int i; enum b43_led_behaviour behaviour; bool activelow; INIT_WORK(&dev->wl->leds.work, b43_leds_work); /* Register the LEDs to the LED subsystem. */ for (i = 0; i < B43_MAX_NR_LEDS; i++) { b43_led_get_sprominfo(dev, i, &behaviour, &activelow); b43_map_led(dev, i, behaviour, activelow); } }
void b43_leds_init(struct b43_wldev *dev) { struct ssb_bus *bus = dev->dev->bus; u8 sprom[4]; int i; enum b43_led_behaviour behaviour; bool activelow; sprom[0] = bus->sprom.gpio0; sprom[1] = bus->sprom.gpio1; sprom[2] = bus->sprom.gpio2; sprom[3] = bus->sprom.gpio3; for (i = 0; i < 4; i++) { if (sprom[i] == 0xFF) { /* There is no LED information in the SPROM * for this LED. Hardcode it here. */ activelow = 0; switch (i) { case 0: behaviour = B43_LED_ACTIVITY; activelow = 1; if (bus->boardinfo.vendor == PCI_VENDOR_ID_COMPAQ) behaviour = B43_LED_RADIO_ALL; break; case 1: behaviour = B43_LED_RADIO_B; if (bus->boardinfo.vendor == PCI_VENDOR_ID_ASUSTEK) behaviour = B43_LED_ASSOC; break; case 2: behaviour = B43_LED_RADIO_A; break; case 3: behaviour = B43_LED_OFF; break; default: B43_WARN_ON(1); return; } } else { behaviour = sprom[i] & B43_LED_BEHAVIOUR; activelow = !!(sprom[i] & B43_LED_ACTIVELOW); } b43_map_led(dev, i, behaviour, activelow); } }