From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Walle Date: Tue, 31 Jul 2012 22:27:44 +0200 Subject: [U-Boot] [PATCH] lsxl: support power switch In-Reply-To: References: <1343681232-16812-1-git-send-email-michael@walle.cc> Message-ID: <201207312227.44609.michael@walle.cc> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Am Dienstag 31 Juli 2012, 13:12:19 schrieb Prafulla Wadaskar: > > -----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 > > >> Cc: Prafulla Wadaskar > > >> --- > > >> > > >> 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. ok thanks, can you apply it to your repository? -- michael