[U-Boot] [PATCH] lsxl: support power switch

Prafulla Wadaskar prafulla at marvell.com
Tue Jul 31 07:59:19 CEST 2012



> -----Original Message-----
> From: Michael Walle [mailto:michael at walle.cc]
> Sent: 31 July 2012 02:17
> To: u-boot at lists.denx.de
> Cc: Michael Walle; Prafulla Wadaskar
> Subject: [PATCH] lsxl: support power switch
> 
> This patch restores the Linkstation's original behaviour when powering
> off.
> Once the (soft) power switch is turned off, linux will reboot and the
> bootloader turns off HDD and USB power. Then it loops as long as the
> switch
> is in the off position, before continuing the boot process again.
> 
> Additionally, this patch fixes the board function set_led(LED_OFF).
> 
> Signed-off-by: Michael Walle <michael at walle.cc>
> Cc: Prafulla Wadaskar <prafulla at marvell.com>
> ---
>  board/buffalo/lsxl/lsxl.c |   22 +++++++++++++++++++++-
>  1 files changed, 21 insertions(+), 1 deletions(-)
> 
> diff --git a/board/buffalo/lsxl/lsxl.c b/board/buffalo/lsxl/lsxl.c
> index fe15511..b3f31d6 100644
> --- a/board/buffalo/lsxl/lsxl.c
> +++ b/board/buffalo/lsxl/lsxl.c
> @@ -158,7 +158,7 @@ static void set_led(int state)
>  {
>  	switch (state) {
>  	case LED_OFF:
> -		__set_led(0, 0, 0, 0, 0, 0);
> +		__set_led(0, 0, 0, 1, 1, 1);
>  		break;
>  	case LED_ALARM_ON:
>  		__set_led(0, 0, 0, 0, 1, 1);
> @@ -192,6 +192,25 @@ int board_init(void)
>  }
> 
>  #ifdef CONFIG_MISC_INIT_R
> +static void check_power_switch(void)
> +{
> +	if (kw_gpio_get_value(GPIO_POWER_SWITCH)) {
> +		/* turn off HDD and USB power */
> +		kw_gpio_set_value(GPIO_HDD_POWER, 0);
> +		kw_gpio_set_value(GPIO_USB_VBUS, 0);
> +		set_led(LED_OFF);
> +
> +		/* loop until released */
> +		while (kw_gpio_get_value(GPIO_POWER_SWITCH))
> +			;

Please avoid infinite loop, may you introduce timeout?

> +
> +		/* turn power on again */
> +		kw_gpio_set_value(GPIO_HDD_POWER, 1);
> +		kw_gpio_set_value(GPIO_USB_VBUS, 1);
> +		set_led(LED_POWER_BLINKING);
> +	}
> +}
> +
>  void check_enetaddr(void)
>  {
>  	uchar enetaddr[6];
> @@ -261,6 +280,7 @@ static void check_push_button(void)
> 
>  int misc_init_r(void)
>  {
> +	check_power_switch();
>  	check_enetaddr();
>  	check_push_button();

Ack for rest of the code.

Regards...
Prafulla . . .


More information about the U-Boot mailing list