kernel: backport LED patch which will allow better DT integration
authorRafał Miłecki <rafal@milecki.pl>
Tue, 6 Dec 2016 18:48:20 +0000 (19:48 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Tue, 6 Dec 2016 18:50:20 +0000 (19:50 +0100)
It's not used by any driver yet, it may just simplify development and
testing new features.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
target/linux/generic/patches-4.4/085-0001-leds-leds-gpio-Set-of_node-for-created-LED-devices.patch [new file with mode: 0644]

diff --git a/target/linux/generic/patches-4.4/085-0001-leds-leds-gpio-Set-of_node-for-created-LED-devices.patch b/target/linux/generic/patches-4.4/085-0001-leds-leds-gpio-Set-of_node-for-created-LED-devices.patch
new file mode 100644 (file)
index 0000000..f60b1fc
--- /dev/null
@@ -0,0 +1,53 @@
+From bff23714bc36a1322d0f14519022df0d1a4b21f3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
+Date: Fri, 8 Jul 2016 14:53:38 +0200
+Subject: [PATCH] leds: leds-gpio: Set of_node for created LED devices
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When working with Device Tree we iterate over children of "gpio-leds"
+compatible node and create LED device for each of them. We take care of
+all common DT properties (label, default trigger, state, etc.), however
+some triggers may want to support more of them.
+
+It could be useful for timer trigger to support setting delay on/off
+values with Device Tree property. Or for transient trigger to support
+e.g. duration property.
+
+We obviously should handle such properties in triggers, not in generic
+code. To let trigger drivers read properties from DT node we need to set
+of_node to point the relevant node. This change allows using all kind of
+of helpers in e.g. "activate" callbacks.
+
+Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
+Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
+---
+ drivers/leds/leds-gpio.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/leds/leds-gpio.c
++++ b/drivers/leds/leds-gpio.c
+@@ -182,6 +182,7 @@ static struct gpio_leds_priv *gpio_leds_
+               return ERR_PTR(-ENOMEM);
+       device_for_each_child_node(dev, child) {
++              struct gpio_led_data *led_dat = &priv->leds[priv->num_leds];
+               struct gpio_led led = {};
+               const char *state = NULL;
+@@ -220,12 +221,12 @@ static struct gpio_leds_priv *gpio_leds_
+               if (fwnode_property_present(child, "retain-state-suspended"))
+                       led.retain_state_suspended = 1;
+-              ret = create_gpio_led(&led, &priv->leds[priv->num_leds],
+-                                    dev, NULL);
++              ret = create_gpio_led(&led, led_dat, dev, NULL);
+               if (ret < 0) {
+                       fwnode_handle_put(child);
+                       goto err;
+               }
++              led_dat->cdev.dev->of_node = np;
+               priv->num_leds++;
+       }