From 79267edd10fde0815c382157b9cb280166637fac Mon Sep 17 00:00:00 2001 From: Uri Mashiach Date: Thu, 19 Jan 2017 10:51:05 +0200 Subject: [PATCH] status_led: Kconfig migration - introduction Move all of the status LED feature to drivers/led/Kconfig. doc/README.LED updated to reflect the Kconfig implementation. Tested boards: CL-SOM-AM57x, CM-T335 Signed-off-by: Uri Mashiach --- README | 8 +- doc/README.LED | 58 +++++----- drivers/led/Kconfig | 323 +++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 355 insertions(+), 34 deletions(-) diff --git a/README b/README index 7e0dd35..a95348a 100644 --- a/README +++ b/README @@ -2033,7 +2033,7 @@ The following options need to be configured: A byte containing the id of the VLAN. -- Status LED: CONFIG_STATUS_LED +- Status LED: CONFIG_LED_STATUS Several configurations allow to display the current status using a LED. For instance, the LED will blink @@ -2041,15 +2041,15 @@ The following options need to be configured: soon as a reply to a BOOTP request was received, and start blinking slow once the Linux kernel is running (supported by a status LED driver in the Linux - kernel). Defining CONFIG_STATUS_LED enables this + kernel). Defining CONFIG_LED_STATUS enables this feature in U-Boot. Additional options: - CONFIG_GPIO_LED + CONFIG_LED_STATUS_GPIO The status LED can be connected to a GPIO pin. In such cases, the gpio_led driver can be used as a - status LED backend implementation. Define CONFIG_GPIO_LED + status LED backend implementation. Define CONFIG_LED_STATUS_GPIO to include the gpio_led driver in the U-Boot binary. CONFIG_GPIO_LED_INVERTED_TABLE diff --git a/doc/README.LED b/doc/README.LED index c3bcb3a..7aa95bd 100644 --- a/doc/README.LED +++ b/doc/README.LED @@ -5,48 +5,48 @@ This README describes the status LED API. The API is defined by the include file include/status_led.h -The first step is to define CONFIG_STATUS_LED in the board config file. +The first step is to enable CONFIG_LED_STATUS in menuconfig: +> Device Drivers > LED Support. -If the LED support is only for a single board, define CONFIG_BOARD_SPECIFIC_LED -in the board config file. +If the LED support is only for specific board, enable +CONFIG_LED_STATUS_BOARD_SPECIFIC in the menuconfig. -At a minimum, these macros must be defined at -STATUS_LED_BIT -STATUS_LED_STATE -STATUS_LED_PERIOD +Status LEDS 0 to 5 are enabled by the following configurations at menuconfig: +CONFIG_STATUS_LED0, CONFIG_STATUS_LED1, ... CONFIG_STATUS_LED5 -If there are multiple status LED's define -STATUS_LED_BIT -STATUS_LED_STATE -STATUS_LED_PERIOD +The following should be configured for each of the enabled LEDs: +CONFIG_STATUS_LED_BIT +CONFIG_STATUS_LED_STATE +CONFIG_STATUS_LED_FREQ +Where is an integer 1 through 5 (empty for 0). -Where can a integer 1 through 3. - -STATUS_LED_BIT is passed into the __led_* functions to identify which LED is -being acted on. As such, the value choose must be unique with with respect to -the other STATUS_LED_BIT's. Mapping the value to a physical LED is the +CONFIG_STATUS_LED_BIT is passed into the __led_* functions to identify which LED +is being acted on. As such, the value choose must be unique with with respect to +the other CONFIG_STATUS_LED_BIT's. Mapping the value to a physical LED is the reponsiblity of the __led_* function. -STATUS_LED_STATE is the initial state of the LED. It should be set to one of -these values: STATUS_LED_OFF or STATUS_LED_ON. +CONFIG_STATUS_LED_STATE is the initial state of the LED. It should be set to one +of these values: CONFIG_LED_STATUS_OFF or CONFIG_LED_STATUS_ON. -STATUS_LED_PERIOD is how long is the LED blink period. This usually set to -(CONFIG_SYS_HZ / ) where is the frequency of the blink. Typical values -range from 2 to 10. +CONFIG_STATUS_LED_FREQ determines the LED blink frequency. +Values range from 2 to 10. Some other LED macros +--------------------- -STATUS_LED_BOOT is the LED to light when the board is booting. This must be a -valid STATUS_LED_BIT value. +CONFIG_STATUS_LED_BOOT is the LED to light when the board is booting. +This must be a valid LED number (0-5). -STATUS_LED_RED is the red LED. It is used signal errors. This must be a valid -STATUS_LED_BIT value. Other similar color LED's are STATUS_LED_YELLOW and -STATUS_LED_BLUE. +CONFIG_STATUS_LED_RED is the red LED. It is used to signal errors. This must be +a valid LED number (0-5). Other similar color LED's macros are +CONFIG_STATUS_LED_GREEN, CONFIG_STATUS_LED_YELLOW and CONFIG_STATUS_LED_BLUE. -These board must define these functions +General LED functions +--------------------- +The following functions should be defined: -__led_init is called once to initialize the LED to STATUS_LED_STATE. One time -start up code should be placed here. +__led_init is called once to initialize the LED to CONFIG_STATUS_LED_STATE. +One time start up code should be placed here. __led_set is called to change the state of the LED. diff --git a/drivers/led/Kconfig b/drivers/led/Kconfig index fe74403..609b1fa 100644 --- a/drivers/led/Kconfig +++ b/drivers/led/Kconfig @@ -17,7 +17,6 @@ config SPL_LED If this is acceptable and you have a need to use LEDs in SPL, enable this option. You will need to enable device tree in SPL for this to work. - config LED_GPIO bool "LED support for GPIO-connected LEDs" depends on LED && DM_GPIO @@ -34,4 +33,326 @@ config SPL_LED_GPIO This option is an SPL-variant of the LED_GPIO option. See the help of LED_GPIO for details. +config LED_STATUS + bool "Enable status LED API" + help + Allows common u-boot commands to use a board's leds to + provide status for activities like booting and downloading files. + +if LED_STATUS + +# Hidden constants + +config LED_STATUS_OFF + int + default 0 + +config LED_STATUS_BLINKING + int + default 1 + +config LED_STATUS_ON + int + default 2 + +# Hidden constants end + +config LED_STATUS_GPIO + bool "GPIO status LED implementation" + help + The status LED can be connected to a GPIO pin. In such cases, the + gpio_led driver can be used as a status LED backend implementation. + +config LED_STATUS_BOARD_SPECIFIC + bool "Specific board" + default y + help + LED support is only for a specific board. + +comment "LEDs parameters" + +config LED_STATUS0 + bool "Enable status LED 0" + +if LED_STATUS0 + +config LED_STATUS_BIT + int "identification" + help + CONFIG_LED_STATUS_BIT is passed into the __led_* functions to identify + which LED is being acted on. As such, the chosen value must be unique + with respect to the other CONFIG_LED_STATUS_BIT's. Mapping the value + to a physical LED is the responsibility of the __led_* function. + +config LED_STATUS_STATE + int "initial state" + range LED_STATUS_OFF LED_STATUS_ON + default LED_STATUS_OFF + help + Should be set one of the following: + 0 - off + 1 - blinking + 2 - on + +config LED_STATUS_FREQ + int "blink frequency" + range 2 10 + default 2 + help + The LED blink period calculated from LED_STATUS_FREQ: + LED_STATUS_PERIOD = CONFIG_SYS_HZ/LED_STATUS_FREQ + Values range: 2 - 10 + +endif # LED_STATUS0 + +config LED_STATUS1 + bool "Enable status LED 1" + +if LED_STATUS1 + +config LED_STATUS_BIT1 + int "identification" + help + CONFIG_LED_STATUS_BIT1 is passed into the __led_* functions to + identify which LED is being acted on. As such, the chosen value must + be unique with respect to the other CONFIG_LED_STATUS_BIT's. Mapping + the value to a physical LED is the responsibility of the __led_* + function. + +config LED_STATUS_STATE1 + int "initial state" + range LED_STATUS_OFF LED_STATUS_ON + default LED_STATUS_OFF + help + Should be set one of the following: + 0 - off + 1 - blinking + 2 - on + +config LED_STATUS_FREQ1 + int "blink frequency" + range 2 10 + default 2 + help + The LED blink period calculated from LED_STATUS_FREQ1: + LED_STATUS_PERIOD1 = CONFIG_SYS_HZ/LED_STATUS_FREQ1 + Values range: 2 - 10 + +endif # LED_STATUS1 + +config LED_STATUS2 + bool "Enable status LED 2" + +if LED_STATUS2 + +config LED_STATUS_BIT2 + int "identification" + help + CONFIG_LED_STATUS_BIT2 is passed into the __led_* functions to + identify which LED is being acted on. As such, the chosen value must + be unique with respect to the other CONFIG_LED_STATUS_BIT's. Mapping + the value to a physical LED is the responsibility of the __led_* + function. + +config LED_STATUS_STATE2 + int "initial state" + range LED_STATUS_OFF LED_STATUS_ON + default LED_STATUS_OFF + help + Should be set one of the following: + 0 - off + 1 - blinking + 2 - on + +config LED_STATUS_FREQ2 + int "blink frequency" + range 2 10 + default 2 + help + The LED blink period calculated from LED_STATUS_FREQ2: + LED_STATUS_PERIOD2 = CONFIG_SYS_HZ/LED_STATUS_FREQ2 + Values range: 2 - 10 + +endif # LED_STATUS2 + +config LED_STATUS3 + bool "Enable status LED 3" + +if LED_STATUS3 + +config LED_STATUS_BIT3 + int "identification" + help + CONFIG_LED_STATUS_BIT3 is passed into the __led_* functions to + identify which LED is being acted on. As such, the chosen value must + be unique with respect to the other CONFIG_LED_STATUS_BIT's. Mapping + the value to a physical LED is the responsibility of the __led_* + function. + +config LED_STATUS_STATE3 + int "initial state" + range LED_STATUS_OFF LED_STATUS_ON + default LED_STATUS_OFF + help + Should be set one of the following: + 0 - off + 1 - blinking + 2 - on + +config LED_STATUS_FREQ3 + int "blink frequency" + range 2 10 + default 2 + help + The LED blink period calculated from LED_STATUS_FREQ3: + LED_STATUS_PERIOD3 = CONFIG_SYS_HZ/LED_STATUS_FREQ3 + Values range: 2 - 10 + +endif # LED_STATUS3 + +config LED_STATUS4 + bool "Enable status LED 4" + +if LED_STATUS4 + +config LED_STATUS_BIT4 + int "identification" + help + CONFIG_LED_STATUS_BIT4 is passed into the __led_* functions to + identify which LED is being acted on. As such, the chosen value must + be unique with respect to the other CONFIG_LED_STATUS_BIT's. Mapping + the value to a physical LED is the responsibility of the __led_* + function. + +config LED_STATUS_STATE4 + int "initial state" + range LED_STATUS_OFF LED_STATUS_ON + default LED_STATUS_OFF + help + Should be set one of the following: + 0 - off + 1 - blinking + 2 - on + +config LED_STATUS_FREQ4 + int "blink frequency" + range 2 10 + default 2 + help + The LED blink period calculated from LED_STATUS_FREQ4: + LED_STATUS_PERIOD4 = CONFIG_SYS_HZ/LED_STATUS_FREQ4 + Values range: 2 - 10 + +endif # LED_STATUS4 + +config LED_STATUS5 + bool "Enable status LED 5" + +if LED_STATUS5 + +config LED_STATUS_BIT5 + int "identification" + help + CONFIG_LED_STATUS_BIT5 is passed into the __led_* functions to + identify which LED is being acted on. As such, the chosen value must + be unique with respect to the other CONFIG_LED_STATUS_BIT's. Mapping + the value to a physical LED is the responsibility of the __led_* + function. + +config LED_STATUS_STATE5 + int "initial state" + range LED_STATUS_OFF LED_STATUS_ON + default LED_STATUS_OFF + help + Should be set one of the following: + 0 - off + 1 - blinking + 2 - on + +config LED_STATUS_FREQ5 + int "blink frequency" + range 2 10 + default 2 + help + The LED blink period calculated from LED_STATUS_FREQ5: + LED_STATUS_PERIOD5 = CONFIG_SYS_HZ/LED_STATUS_FREQ5 + Values range: 2 - 10 + +endif # LED_STATUS5 + +config LED_STATUS_BOOT_ENABLE + bool "Enable BOOT LED" + help + Enable to turn an LED on when the board is booting. + +if LED_STATUS_BOOT_ENABLE + +config LED_STATUS_BOOT + int "LED to light when the board is booting" + help + Valid enabled LED device number. + +endif # LED_STATUS_BOOT_ENABLE + +config LED_STATUS_RED_ENABLE + bool "Enable red LED" + help + Enable red status LED. + +if LED_STATUS_RED_ENABLE + +config LED_STATUS_RED + int "Red LED identification" + help + Valid enabled LED device number. + +endif # LED_STATUS_RED_ENABLE + +config LED_STATUS_YELLOW_ENABLE + bool "Enable yellow LED" + help + Enable yellow status LED. + +if LED_STATUS_YELLOW_ENABLE + +config LED_STATUS_YELLOW + int "Yellow LED identification" + help + Valid enabled LED device number. + +endif # LED_STATUS_YELLOW_ENABLE + +config LED_STATUS_BLUE_ENABLE + bool "Enable blue LED" + help + Enable blue status LED. + +if LED_STATUS_BLUE_ENABLE + +config LED_STATUS_BLUE + int "Blue LED identification" + help + Valid enabled LED device number. + +endif # LED_STATUS_BLUE_ENABLE + +config LED_STATUS_GREEN_ENABLE + bool "Enable green LED" + help + Enable green status LED. + +if LED_STATUS_GREEN_ENABLE + +config LED_STATUS_GREEN + int "Green LED identification" + help + Valid enabled LED device number (0-5). + +endif # LED_STATUS_GREEN_ENABLE + +config LED_STATUS_CMD + bool "Enable status LED commands" + +endif # LED_STATUS + endmenu