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

Prafulla Wadaskar prafulla at marvell.com
Tue Jul 31 13:12:19 CEST 2012



> -----Original Message-----
> From: Michael Walle [mailto:michael at walle.cc]
> Sent: 31 July 2012 16:22
> To: Prafulla Wadaskar
> Cc: Michael Walle; u-boot at lists.denx.de
> Subject: RE: [PATCH] lsxl: support power switch
> 
> On Tue, July 31, 2012 07:59, Prafulla Wadaskar wrote:
> >
> >
> >> -----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?
> 
> actually, thats the use case, to loop indefinitely ;) See the commit
> message. The GPIO is a switch not a button. As long as it is switched
> to
> "Power Off" uboot should loop.

Okay got it.
Ack for this patch.

Regards...
Prafulla . . .


More information about the U-Boot mailing list