[U-Boot] [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)) + ; + + /* 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();

-----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);
break; case LED_ALARM_ON: __set_led(0, 0, 0, 0, 1, 1);__set_led(0, 0, 0, 1, 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);
break; case LED_ALARM_ON: __set_led(0, 0, 0, 0, 1, 1);__set_led(0, 0, 0, 1, 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);
break; case LED_ALARM_ON: __set_led(0, 0, 0, 0, 1, 1);__set_led(0, 0, 0, 1, 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 . . .
participants (2)
-
Michael Walle
-
Prafulla Wadaskar