// turn led on and set the ledState static void setLed (PLED_CTRL pLed, unsigned short led_state, unsigned short led_type) { short led_gpio; unsigned short gpio_state; if (led_type == kLedRed) led_gpio = pLed->ledRedGpio; else led_gpio = pLed->ledGreenGpio; if (led_gpio == -1) return; if (((led_gpio & BP_ACTIVE_LOW) && (led_state == kLedOn)) || (!(led_gpio & BP_ACTIVE_LOW) && (led_state == kLedOff))) gpio_state = 0; else gpio_state = 1; #if defined(CONFIG_BCM96328) /* Enable LED controller to drive this GPIO */ if (!(led_gpio & BP_GPIO_SERIAL)) GPIO->GPIOMode |= GPIO_NUM_TO_MASK(led_gpio); #endif #if defined(CONFIG_BCM96362) /* Enable LED controller to drive this GPIO */ if (!(led_gpio & BP_GPIO_SERIAL)) GPIO->LEDCtrl |= GPIO_NUM_TO_MASK(led_gpio); #endif #if defined(CONFIG_BCM96328) || defined(CONFIG_BCM96362) LED->ledMode &= ~(LED_MODE_MASK << GPIO_NUM_TO_LED_MODE_SHIFT(led_gpio)); if( gpio_state ) LED->ledMode |= (LED_MODE_OFF << GPIO_NUM_TO_LED_MODE_SHIFT(led_gpio)); else LED->ledMode |= (LED_MODE_ON << GPIO_NUM_TO_LED_MODE_SHIFT(led_gpio)); #else if (led_gpio & BP_GPIO_SERIAL) { while (GPIO->SerialLedCtrl & SER_LED_BUSY); if( gpio_state ) GPIO->SerialLed |= GPIO_NUM_TO_MASK(led_gpio); else GPIO->SerialLed &= ~GPIO_NUM_TO_MASK(led_gpio); } else { GPIO->GPIODir |= GPIO_NUM_TO_MASK(led_gpio); if( gpio_state ) GPIO->GPIOio |= GPIO_NUM_TO_MASK(led_gpio); else GPIO->GPIOio &= ~GPIO_NUM_TO_MASK(led_gpio); } #endif }
// toggle the LED static void ledToggle(PLED_CTRL pLed) { short led_gpio; led_gpio = pLed->ledGreenGpio; if (led_gpio == -1) return; #if defined(CONFIG_BCM96328) || defined(CONFIG_BCM96362) || defined(CONFIG_BCM963268) || defined(CONFIG_BCM96318)|| defined(CONFIG_BCM96828) LED->ledMode ^= (LED_MODE_MASK << GPIO_NUM_TO_LED_MODE_SHIFT(led_gpio)); #else if (led_gpio & BP_GPIO_SERIAL) { while (GPIO->SerialLedCtrl & SER_LED_BUSY); GPIO->SerialLed ^= GPIO_NUM_TO_MASK(led_gpio); } else { unsigned long flags; spin_lock_irqsave(&bcm_gpio_spinlock, flags); GPIO->GPIODir |= GPIO_NUM_TO_MASK(led_gpio); GPIO->GPIOio ^= GPIO_NUM_TO_MASK(led_gpio); spin_unlock_irqrestore(&bcm_gpio_spinlock, flags); } #endif }
// toggle the LED static void ledToggle(PLED_CTRL pLed) { short led_gpio; led_gpio = pLed->ledGreenGpio; if (led_gpio == -1) return; #if defined(CONFIG_BCM96328) || defined(CONFIG_BCM96362) LED->ledMode ^= (LED_MODE_MASK << GPIO_NUM_TO_LED_MODE_SHIFT(led_gpio)); #else if (led_gpio & BP_GPIO_SERIAL) { while (GPIO->SerialLedCtrl & SER_LED_BUSY); GPIO->SerialLed ^= GPIO_NUM_TO_MASK(led_gpio); } else { GPIO->GPIODir |= GPIO_NUM_TO_MASK(led_gpio); GPIO->GPIOio ^= GPIO_NUM_TO_MASK(led_gpio); } #endif }