[U-Boot] [PATCH 1/1] OMAP3: add boot status GPIO LED for IGEP boards
Igor Grinberg
grinberg at compulab.co.il
Sun Dec 23 08:59:32 CET 2012
On 12/22/12 03:49, Javier Martinez Canillas wrote:
> This patch adds an GPIO LED boot status for IGEP boards.
>
> The GPIO LED used is the red LED0 while the Linux kernel
> uses the green LED0 as the boot status.
>
> By using different GPIO LEDs, the user can know in which
> step of the boot process the board currently is.
>
> Signed-off-by: Javier Martinez Canillas <javier.martinez at collabora.co.uk>
> ---
> board/isee/igep0020/Makefile | 4 ++-
> board/isee/igep0020/igep0020.c | 9 +++++
> board/isee/igep0030/Makefile | 4 ++-
> board/isee/igep0030/igep0030.c | 9 +++++
> board/isee/led.c | 74 ++++++++++++++++++++++++++++++++++++++++
> include/configs/igep00x0.h | 11 ++++++
> 6 files changed, 109 insertions(+), 2 deletions(-)
> create mode 100644 board/isee/led.c
[...]
> diff --git a/board/isee/igep0020/igep0020.c b/board/isee/igep0020/igep0020.c
> index a8257a3..7930f4e 100644
> --- a/board/isee/igep0020/igep0020.c
> +++ b/board/isee/igep0020/igep0020.c
[...]
> @@ -52,9 +55,15 @@ static const u32 gpmc_lan_config[] = {
> int board_init(void)
> {
> gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
> + /* machine type for kernel */
> + gd->bd->bi_arch_number = MACH_TYPE_IGEP0020;
Please, use CONFIG_MACH_TYPE instead.
[...]
> diff --git a/board/isee/igep0030/igep0030.c b/board/isee/igep0030/igep0030.c
> index 107cb7f..394a6cf 100644
> --- a/board/isee/igep0030/igep0030.c
> +++ b/board/isee/igep0030/igep0030.c
[...]
> @@ -39,9 +42,15 @@ DECLARE_GLOBAL_DATA_PTR;
> int board_init(void)
> {
> gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
> + /* machine type for kernel */
> + gd->bd->bi_arch_number = MACH_TYPE_IGEP0030;
same here
[...]
> diff --git a/board/isee/led.c b/board/isee/led.c
> new file mode 100644
> index 0000000..b7a9a02
> --- /dev/null
> +++ b/board/isee/led.c
[...]
> +
> +/* GPIO pins for the LED */
> +#define IGEP0020_GPIO_LED 27
> +#define IGEP0030_GPIO_LED 16
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +static int __get_gpio()
> +{
> + if (gd->bd->bi_arch_number == MACH_TYPE_IGEP0020)
> + return IGEP0020_GPIO_LED;
> + else
> + return IGEP0030_GPIO_LED;
> +}
Once you define the CONFIG_MACH_TYPE in your board config file,
you can then just do something like:
#if (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0020)
#define IGEP_GPIO_LED 27
#else /* MACH_TYPE_IGEP0030 */
#define IGEP_GPIO_LED 16
#endif
remove the above function completely and just use IGEP_GPIO_LED define.
This will also probably simplify the below code.
What do you think?
> +
> +void __led_init(led_id_t mask, int state)
> +{
> + __led_set(mask, state);
> +}
> +
> +void __led_toggle(led_id_t mask)
> +{
> + int state, toggle_gpio = 0;
> +
> + toggle_gpio = __get_gpio();
> +
> + if (!gpio_request(toggle_gpio, "")) {
> + gpio_direction_output(toggle_gpio, 0);
> + state = gpio_get_value(toggle_gpio);
> + gpio_set_value(toggle_gpio, !state);
> + }
> +}
> +
> +void __led_set(led_id_t mask, int state)
> +{
> + int gpio = __get_gpio();
> +
> + if (!gpio_request(gpio, "")) {
> + gpio_direction_output(gpio, 0);
> + gpio_set_value(gpio, state);
> + }
> +}
> diff --git a/include/configs/igep00x0.h b/include/configs/igep00x0.h
> index be7937d..a583be2 100644
> --- a/include/configs/igep00x0.h
> +++ b/include/configs/igep00x0.h
> @@ -82,6 +82,17 @@
> #define CONFIG_OMAP_HSMMC 1
> #define CONFIG_DOS_PARTITION 1
>
> +/* Status LED */
> +#define CONFIG_STATUS_LED 1
> +#define CONFIG_BOARD_SPECIFIC_LED 1
> +#define STATUS_LED_BIT 0x01
> +#define STATUS_LED_STATE STATUS_LED_ON
> +#define STATUS_LED_PERIOD (CONFIG_SYS_HZ / 2)
> +#define STATUS_LED_BIT1 0x02
> +#define STATUS_LED_STATE1 STATUS_LED_ON
> +#define STATUS_LED_PERIOD1 (CONFIG_SYS_HZ / 2)
> +#define STATUS_LED_BOOT STATUS_LED_BIT
> +
> /* USB */
> #define CONFIG_MUSB_UDC 1
> #define CONFIG_USB_OMAP3 1
--
Regards,
Igor.
More information about the U-Boot
mailing list