Skip to contentSkip to conversation

This series adds support for gpio-leds "default-state" property. The

PATCH Superseded linux-kernel-dev at beckhoff.com 3 participants 8 messages Apr 4, 2018 – Apr 10, 2018

v3 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

v3 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 v3:
- use ofnode_read_bool() instead of ofnode_read_string() to determine if LED node has the default-state property

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
#1 lore raw

PATCH v3 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 v3:
- use ofnode_read_bool() instead of ofnode_read_string() to determine if LED node has the default-state property

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
index 9976635887..e68d8d3864 100644
@@ -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
#3 lore raw

PATCH v3 2/3 dm: led: auto probe() LEDs with "default-state"

In reply to linux-kernel-dev at beckhoff.com

From: Patrick Bruenn <[email protected]>

To avoid board specificy LED activation code, automatically activate gpio-leds with "default-state" property during bind().

---

Changes in v3: None
Changes in v2: None

 drivers/led/led_gpio.c | 9 +++++++++
 1 file changed, 9 insertions(+)
drivers/led/led_gpio.c +9 -0
index e68d8d3864..f5b3b63493 100644
@@ -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_bool(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
#5 lore raw

PATCH v3 3/3 dm: led: add testcase for "default-state" property

In reply to linux-kernel-dev at beckhoff.com

From: 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 v3: None
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
index 06d0e8ce85..07f9bad258 100644
@@ -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
index fde700be38..c560abc4fb 100644
@@ -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
#6 lore raw

PATCH v3 3/3 dm: led: add testcase for "default-state" property

Quoted 7 lines · On 4 April 2018 at 04:01, <[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".
Add dm_test_led_default_state() to check that these new LED's are set to LEDST_ON and LEDST_OFF.

Quoted 6 lines

---
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?

Yes you can ignore it. The warning is coming from checkpatch.pl. I suppose we could update that. I think the macro should be next to the function it references, otherwise it gets a bit confusing.

Quoted 7 lines

Changes in v3: None
Changes in v2: None

 arch/sandbox/dts/test.dts | 12 ++++++++++++
 test/dm/led.c             | 16 ++++++++++++++++
 2 files changed, 28 insertions(+)
#2 lore raw

PATCH v3 1/3 dm: led: Support "default-state" property

In reply to linux-kernel-dev at beckhoff.com
Quoted 16 lines · On 4 April 2018 at 04:01, <[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_gpio is not probed until DM_FLAG_ACTIVATED is set.

---

Changes in v3:
- use ofnode_read_bool() instead of ofnode_read_string() to determine if LED node has the default-state property

Quoted 6 lines

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(-)
#4 lore raw

PATCH v3 2/3 dm: led: auto probe() LEDs with "default-state"

In reply to linux-kernel-dev at beckhoff.com
Quoted 5 lines · On 4 April 2018 at 04:01, <[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 8 lines

---

Changes in v3: None
Changes in v2: None

 drivers/led/led_gpio.c | 9 +++++++++
 1 file changed, 9 insertions(+)
#7 lore raw

PATCH v3 3/3 dm: led: add testcase for "default-state" property

In reply to linux-kernel-dev at beckhoff.com
Quoted 7 lines · linux-kernel-dev at beckhoff.com

From: 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.

Quoted 7 lines

---
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?

This breaks tests actually, please try running 'make tests' after this (and the rest of your series) is applied, thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180410/c0bdbaaa/attachment.sig>