This series adds support for gpio-leds "default-state" property. The
v2 cover This series adds support for gpio-leds "default-state" property. The
From: Patrick Bruenn <[email protected]>
main usecase in mind are LEDs which indicate a state like "power on". With this patchset applied, all you have to do is:
Add a gpio-led node with 'default-state = "on";' property to your device tree. And the LED will automatically light up during U-Boot startup.
Changes in v2:
- rebase to v2018.05-rc1
- add dm_test_led_default_state() to tests/dm/led.c
Patrick Bruenn (3):
dm: led: Support "default-state" property
dm: led: auto probe() LEDs with "default-state"
dm: led: add testcase for "default-state" property
arch/sandbox/dts/test.dts | 12 ++++++++++++ drivers/led/led_gpio.c | 25 ++++++++++++++++++++++++- test/dm/led.c | 16 ++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-)
Signature · 1 line
2.11.0
PATCH v2 1/3 dm: led: Support "default-state" property
From: Patrick Bruenn <[email protected]>
Add support for the device tree property "default-state". This feature might be useful for LEDs indicating "power on" or similar states.
Note: Even with this commit gpio-leds remain in reset state. That's because the led_gpio is not probed until DM_FLAG_ACTIVATED is set.
---
Changes in v2:
- rebase to v2018.05-rc1
- add dm_test_led_default_state() to tests/dm/led.c
drivers/led/led_gpio.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)
drivers/led/led_gpio.c +15 -1
@@ -60,11 +60,25 @@ static int led_gpio_probe(struct udevice *dev) {struct led_uc_plat *uc_plat =dev_get_uclass_platdata (dev);struct led_gpio_priv *priv =dev_get_priv (dev); +const char *default_state; +int ret;/* Ignore the top-level LED node */ if (!uc_plat->label)return 0 ; -return gpio_request_by_name (dev,"gpios" ,0 , &priv->gpio,GPIOD_IS_OUT ); + + ret =gpio_request_by_name (dev,"gpios" ,0 , &priv->gpio,GPIOD_IS_OUT ); +if (ret) +return ret; + + default_state =dev_read_string (dev,"default-state" ); +if (default_state) { +if (!strncmp (default_state,"on" ,2 )) +gpio_led_set_state (dev,LEDST_ON ); +else if (!strncmp (default_state,"off" ,3 )) +gpio_led_set_state (dev,LEDST_OFF ); + } +return 0 ; }static int led_gpio_remove (struct udevice *dev)
Signature · 1 line
2.11.0
PATCH v2 2/3 dm: led: auto probe() LEDs with "default-state"
In reply to linux-kernel-dev at beckhoff.comFrom: Patrick Bruenn <[email protected]>
To avoid board specificy LED activation code, automatically activate gpio-leds with "default-state" property during bind().
---
Changes in v2: None
drivers/led/led_gpio.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/led/led_gpio.c +9 -0
@@ -11,6 +11,7 @@#include <led.h> #include <asm/gpio.h> #include <dm/lists.h> +#include <dm/uclass-internal.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -120,6 +121,14 @@ static int led_gpio_bind(struct udevice *parent)return ret; uc_plat =dev_get_uclass_platdata (dev); uc_plat->label = label; + +if (ofnode_read_string (node,"default-state" )) { +struct udevice *devp; + + ret =uclass_get_device_tail (dev,0 , &devp); +if (ret) +return ret; + } }return 0 ;
Signature · 1 line
2.11.0
PATCH v2 3/3 dm: led: add testcase for "default-state" property
In reply to linux-kernel-dev at beckhoff.comFrom: Patrick Bruenn <[email protected]>
Add two more gpio-leds to sandbox test device tree with default-state property set to "on"/"off".
Add dm_test_led_default_state() to check that these new LED's are set to LEDST_ON and LEDST_OFF.
---
patman complains about: test/dm/led.c:45: check: Please use a blank line after function/struct/union/enum declarations.
I compared with other DM_TEST() usage and decided to ignore this check. Should we fix the macro, patman or keep ignoring this?
Changes in v2: None
arch/sandbox/dts/test.dts | 12 ++++++++++++ test/dm/led.c | 16 ++++++++++++++++ 2 files changed, 28 insertions(+)
arch/sandbox/dts/test.dts +12 -0
@@ -254,6 +254,18 @@ gpios = <&gpio_a 2 0>; label = "sandbox:green"; }; + + default_on { + gpios = <&gpio_a 3 0>; + label = "sandbox:default_on"; + default-state = "on"; + }; + + default_off { + gpios = <&gpio_a 4 0>; + label = "sandbox:default_off"; + default-state = "off"; + }; }; mbox: mbox {
test/dm/led.c +16 -0
@@ -28,6 +28,22 @@ static int dm_test_led_base(struct unit_test_state *uts) }DM_TEST (dm_test_led_base,DM_TESTF_SCAN_PDATA |DM_TESTF_SCAN_FDT ); +/* Test of the LED 'default-state' device tree property */ +static int dm_test_led_default_state (struct unit_test_state *uts) +{ +struct udevice *dev; + +/* Check that we handle the default-state property correctly. */ +ut_assertok (led_get_by_label ("sandbox:default_on" , &dev)); +ut_asserteq (LEDST_ON ,led_get_state (dev)); + +ut_assertok (led_get_by_label ("sandbox:default_off" , &dev)); +ut_asserteq (LEDST_OFF ,led_get_state (dev)); + +return 0 ; +} +DM_TEST (dm_test_led_default_state,DM_TESTF_SCAN_PDATA |DM_TESTF_SCAN_FDT ); +/* Test of the led uclass using the led_gpio driver */ static int dm_test_led_gpio (struct unit_test_state *uts) {
Signature · 1 line
2.11.0
PATCH v2 1/3 dm: led: Support "default-state" property
In reply to linux-kernel-dev at beckhoff.comQuoted 10 lines · On 3 April 2018 at 15:31, <[email protected]> wrote:
From: Patrick Bruenn <[email protected]>
Add support for the device tree property "default-state". This feature might be useful for LEDs indicating "power on" or similar states.
Note: Even with this commit gpio-leds remain in reset state. That's because the
led_gpiois not probed untilDM_FLAG_ACTIVATEDis set.Signed-off-by Patrick Bruenn <[email protected]>
Quoted 8 lines
---
Changes in v2:
- rebase to v2018.05-rc1
- adddm_test_led_default_state()totests/dm/led.cdrivers/led/led_gpio.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)
PATCH v2 2/3 dm: led: auto probe() LEDs with "default-state"
In reply to linux-kernel-dev at beckhoff.comQuoted 5 lines · On 3 April 2018 at 15:31, <[email protected]> wrote:
From: Patrick Bruenn <[email protected]>
To avoid board specificy LED activation code, automatically activate gpio-leds with "default-state" property during
bind().
Quoted 7 lines
Signed-off-by Patrick Bruenn <[email protected]>---
Changes in v2: None
drivers/led/led_gpio.c | 9 +++++++++ 1 file changed, 9 insertions(+)
But please see below.
Quoted 14 lines
drivers/led/led_gpio.c +1
-0@@ -11,6 +11,7 @@#include <led.h> #include <asm/gpio.h> #include <dm/lists.h> +#include <dm/uclass-internal.h> DECLARE_GLOBAL_DATA_PTR ;
drivers/led/led_gpio.c static int led_gpio_bind(struct udevice *parent) · line 125
Quoted 5 lines
drivers/led/led_gpio.c +2
-0@@ -120,6 +121,14 @@ static int led_gpio_bind(struct udevice *parent)return ret; uc_plat =dev_get_uclass_platdata (dev); uc_plat->label = label; + +if (ofnode_read_string (node,"default-state" )) {
Here I think you mean ofnode_read_boot() ?
Quoted 10 lines
drivers/led/led_gpio.c +6
-1+struct udevice *devp; + + ret =uclass_get_device_tail (dev,0 , &devp); +if (ret) +return ret; + } }return 0 ; --
Quoted 3 lines
2.11.0
Regards,
Simon
PATCH v2 3/3 dm: led: add testcase for "default-state" property
In reply to linux-kernel-dev at beckhoff.comQuoted 14 lines · On 3 April 2018 at 15:31, <[email protected]> wrote:
From: Patrick Bruenn <[email protected]>
Add two more gpio-leds to sandbox test device tree with default-state property set to "on"/"off".
Adddm_test_led_default_state()to check that these new LED's are set toLEDST_ONandLEDST_OFF.Signed-off-by Patrick Bruenn <[email protected]>---
patman complains about:test/dm/led.c:45: check: Please use a blank line after function/struct/union/enum declarations.
I compared with otherDM_TEST()usage and decided to ignore this check. Should we fix the macro, patman or keep ignoring this?
Quoted 5 lines
Changes in v2: None
arch/sandbox/dts/test.dts | 12 ++++++++++++ test/dm/led.c | 16 ++++++++++++++++ 2 files changed, 28 insertions(+)
PATCH v2 2/3 dm: led: auto probe() LEDs with "default-state"
In reply to Simon GlassFrom: [email protected] [mailto:sjg at google.com] On Behalf Of Simon Glass
Quoted 9 lines
Sent: Dienstag, 3. April 2018 19:53
To: linux-kernel-dev <[email protected]>
Cc: U-Boot Mailing List <[email protected]>; Patrick Brünn <[email protected]>; Ziping Chen <[email protected]>
Subject: Re: [PATCH v2 2/3] dm: led: autoprobe()LEDs with "default-state"Quoted 2 lines · On 3 April 2018 at 15:31, <[email protected]> wrote:
From: Patrick Bruenn <[email protected]>
...
Quoted 13 lines
Quoted 13 lines
drivers/led/led_gpio.c +1
-0@@ -11,6 +11,7 @@#include <led.h> #include <asm/gpio.h> #include <dm/lists.h> +#include <dm/uclass-internal.h> DECLARE_GLOBAL_DATA_PTR ;
Quoted 9 lines
drivers/led/led_gpio.c static int led_gpio_bind(struct udevice *parent) · line 125
Quoted 6 lines
drivers/led/led_gpio.c +2
-0@@ -120,6 +121,14 @@ static int led_gpio_bind(struct udevice *parent)return ret; uc_plat =dev_get_uclass_platdata (dev); uc_plat->label = label; + +if (ofnode_read_string (node,"default-state" )) {Here I think you mean
ofnode_read_boot()?
Yes, you are right I will resend a v3 with ofnode_read_bool().
It took me quite a while to understand that "read_bool" means "has_property".
Thanks for your help!
Patrick
Beckhoff Automation GmbH & Co. KG | Managing Director: Dipl. Phys. Hans Beckhoff Registered office: Verl, Germany | Register court: Guetersloh HRA 7075