Message ID | 1343681232-16812-1-git-send-email-michael@walle.cc |
---|---|
State | Accepted |
Delegated to: | Prafulla Wadaskar |
Headers | show |
> -----Original Message----- > From: Michael Walle [mailto:michael@walle.cc] > Sent: 31 July 2012 02:17 > To: u-boot@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@walle.cc> > Cc: Prafulla Wadaskar <prafulla@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 . . .
On Tue, July 31, 2012 07:59, Prafulla Wadaskar wrote: > > >> -----Original Message----- >> From: Michael Walle [mailto:michael@walle.cc] >> Sent: 31 July 2012 02:17 >> To: u-boot@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@walle.cc> >> Cc: Prafulla Wadaskar <prafulla@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. > >> + >> + /* 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. Thanks for the review.
> -----Original Message----- > From: Michael Walle [mailto:michael@walle.cc] > Sent: 31 July 2012 16:22 > To: Prafulla Wadaskar > Cc: Michael Walle; u-boot@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@walle.cc] > >> Sent: 31 July 2012 02:17 > >> To: u-boot@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@walle.cc> > >> Cc: Prafulla Wadaskar <prafulla@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 . . .
Am Dienstag 31 Juli 2012, 13:12:19 schrieb Prafulla Wadaskar: > > -----Original Message----- > > From: Michael Walle [mailto:michael@walle.cc] > > Sent: 31 July 2012 16:22 > > To: Prafulla Wadaskar > > Cc: Michael Walle; u-boot@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@walle.cc] > > >> Sent: 31 July 2012 02:17 > > >> To: u-boot@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@walle.cc> > > >> Cc: Prafulla Wadaskar <prafulla@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. ok thanks, can you apply it to your repository?
> -----Original Message----- > From: Michael Walle [mailto:michael@walle.cc] > Sent: 01 August 2012 01:58 > To: Prafulla Wadaskar > Cc: u-boot@lists.denx.de > Subject: Re: [PATCH] lsxl: support power switch > > Am Dienstag 31 Juli 2012, 13:12:19 schrieb Prafulla Wadaskar: > > > -----Original Message----- > > > From: Michael Walle [mailto:michael@walle.cc] > > > Sent: 31 July 2012 16:22 > > > To: Prafulla Wadaskar > > > Cc: Michael Walle; u-boot@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@walle.cc] > > > >> Sent: 31 July 2012 02:17 > > > >> To: u-boot@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@walle.cc> > > > >> Cc: Prafulla Wadaskar <prafulla@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. > > ok thanks, can you apply it to your repository? > Sure.. Regards... Prafulla . . .
> -----Original Message----- > From: Prafulla Wadaskar > Sent: 01 August 2012 12:58 > To: 'Michael Walle' > Cc: u-boot@lists.denx.de > Subject: RE: [PATCH] lsxl: support power switch > > > > > -----Original Message----- > > From: Michael Walle [mailto:michael@walle.cc] > > Sent: 01 August 2012 01:58 > > To: Prafulla Wadaskar > > Cc: u-boot@lists.denx.de > > Subject: Re: [PATCH] lsxl: support power switch > > > > Am Dienstag 31 Juli 2012, 13:12:19 schrieb Prafulla Wadaskar: > > > > -----Original Message----- > > > > From: Michael Walle [mailto:michael@walle.cc] > > > > Sent: 31 July 2012 16:22 > > > > To: Prafulla Wadaskar > > > > Cc: Michael Walle; u-boot@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@walle.cc] > > > > >> Sent: 31 July 2012 02:17 > > > > >> To: u-boot@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@walle.cc> > > > > >> Cc: Prafulla Wadaskar <prafulla@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. > > > > ok thanks, can you apply it to your repository? > > > > Sure.. Applied to u-boot-marvell.git master branch Regards... Prafulla . . .
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)) + ; + + /* 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();
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@walle.cc> Cc: Prafulla Wadaskar <prafulla@marvell.com> --- board/buffalo/lsxl/lsxl.c | 22 +++++++++++++++++++++- 1 files changed, 21 insertions(+), 1 deletions(-)