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.marti...@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. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot