devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/4] Allow to use leds-ns2 with n090401 boards
@ 2015-07-02 17:56 Simon Guinot
  2015-07-02 17:56 ` [PATCH v2 1/4] leds: leds-ns2: move LED modes mapping outside of the driver Simon Guinot
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: Simon Guinot @ 2015-07-02 17:56 UTC (permalink / raw)
  To: Jacek Anaszewski, Bryan Wu, Richard Purdie
  Cc: Jason Cooper, Andrew Lunn, Gregory Clement, Sebastian Hesselbarth,
	linux-leds-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Vincent Donnefort

Hello,

This patch series allows to use the leds-ns2 driver with the n090401
boards (Seagate NAS 4-Bay), based on an Armada-370 SoC.

Here is the list changes:

- Allow to configure the LED mode mapping.
- Handle can_sleep GPIOs. On n090401, the LEDs are connected to an I2C
  GPIO expander.
- Make leds-ns2 depends on MACH_ARMADA_370.

Changes for v2:
- Fix gpio_{get,set}_*_cansleep() usage while holding a spinlock:
  Holding a spinlock at this places was not needed.
- Add Acked-by from Jacek Anaszewski for patch 4.

Simon

Simon Guinot (2):
  leds: leds-ns2: handle can_sleep GPIOs
  leds: leds-ns2: depends on MACH_ARMADA_370

Vincent Donnefort (2):
  leds: leds-ns2: move LED modes mapping outside of the driver
  ARM: Kirkwood: add modes-map property to ns2-leds nodes

 .../devicetree/bindings/leds/leds-ns2.txt          |   9 ++
 arch/arm/boot/dts/kirkwood-d2net.dts               |   5 +
 arch/arm/boot/dts/kirkwood-is2.dts                 |   5 +
 arch/arm/boot/dts/kirkwood-ns2.dts                 |   5 +
 arch/arm/boot/dts/kirkwood-ns2max.dts              |   5 +
 arch/arm/boot/dts/kirkwood-ns2mini.dts             |   5 +
 drivers/leds/Kconfig                               |  12 +-
 drivers/leds/leds-ns2.c                            | 169 ++++++++++++---------
 include/dt-bindings/leds/leds-ns2.h                |   8 +
 include/linux/platform_data/leds-kirkwood-ns2.h    |  14 ++
 10 files changed, 165 insertions(+), 72 deletions(-)
 create mode 100644 include/dt-bindings/leds/leds-ns2.h

-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2 1/4] leds: leds-ns2: move LED modes mapping outside of the driver
  2015-07-02 17:56 [PATCH v2 0/4] Allow to use leds-ns2 with n090401 boards Simon Guinot
@ 2015-07-02 17:56 ` Simon Guinot
  2015-07-02 17:56 ` [PATCH v2 2/4] ARM: Kirkwood: add modes-map property to ns2-leds nodes Simon Guinot
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Simon Guinot @ 2015-07-02 17:56 UTC (permalink / raw)
  To: Jacek Anaszewski, Bryan Wu, Richard Purdie
  Cc: Jason Cooper, Andrew Lunn, Gregory Clement, Sebastian Hesselbarth,
	linux-leds, linux-arm-kernel, devicetree, Vincent Donnefort

From: Vincent Donnefort <vdonnefort@gmail.com>

On the board n090401 (Seagate NAS 4-Bay), the LED mode mapping (GPIO
values to LED mode) is different from the one used on other boards
supported by the leds-ns2 driver.

With this patch the hardcoded mapping is removed from leds-ns2. Now,
it must be defined either in the platform data (if an old-fashion board
setup file is used) or in the DT node. In order to allow the later, this
patch also introduces a modes-map property for the leds-ns2 DT binding.

Signed-off-by: Vincent Donnefort <vdonnefort@gmail.com>
---
 .../devicetree/bindings/leds/leds-ns2.txt          |   9 ++
 drivers/leds/leds-ns2.c                            | 102 +++++++++++----------
 include/dt-bindings/leds/leds-ns2.h                |   8 ++
 include/linux/platform_data/leds-kirkwood-ns2.h    |  14 +++
 4 files changed, 85 insertions(+), 48 deletions(-)
 create mode 100644 include/dt-bindings/leds/leds-ns2.h

diff --git a/Documentation/devicetree/bindings/leds/leds-ns2.txt b/Documentation/devicetree/bindings/leds/leds-ns2.txt
index aef3aca34d2d..9f81258a5b6e 100644
--- a/Documentation/devicetree/bindings/leds/leds-ns2.txt
+++ b/Documentation/devicetree/bindings/leds/leds-ns2.txt
@@ -8,6 +8,9 @@ Each LED is represented as a sub-node of the ns2-leds device.
 Required sub-node properties:
 - cmd-gpio: Command LED GPIO. See OF device-tree GPIO specification.
 - slow-gpio: Slow LED GPIO. See OF device-tree GPIO specification.
+- modes-map: A mapping between LED modes (off, on or SATA activity blinking) and
+  the corresponding cmd-gpio/slow-gpio values. All the GPIO values combinations
+  should be given in order to avoid having an unknown mode at driver probe time.
 
 Optional sub-node properties:
 - label: Name for this LED. If omitted, the label is taken from the node name.
@@ -15,6 +18,8 @@ Optional sub-node properties:
 
 Example:
 
+#include <dt-bindings/leds/leds-ns2.h>
+
 ns2-leds {
 	compatible = "lacie,ns2-leds";
 
@@ -22,5 +27,9 @@ ns2-leds {
 		label = "ns2:blue:sata";
 		slow-gpio = <&gpio0 29 0>;
 		cmd-gpio = <&gpio0 30 0>;
+		modes-map = <NS_V2_LED_OFF  0 1
+			     NS_V2_LED_ON   1 0
+			     NS_V2_LED_ON   0 0
+			     NS_V2_LED_SATA 1 1>;
 	};
 };
diff --git a/drivers/leds/leds-ns2.c b/drivers/leds/leds-ns2.c
index 1fd6adbb43b7..b0bc03539dbb 100644
--- a/drivers/leds/leds-ns2.c
+++ b/drivers/leds/leds-ns2.c
@@ -33,46 +33,20 @@
 #include <linux/of_gpio.h>
 
 /*
- * The Network Space v2 dual-GPIO LED is wired to a CPLD and can blink in
- * relation with the SATA activity. This capability is exposed through the
- * "sata" sysfs attribute.
- *
- * The following array detail the different LED registers and the combination
- * of their possible values:
- *
- *  cmd_led   |  slow_led  | /SATA active | LED state
- *            |            |              |
- *     1      |     0      |      x       |  off
- *     -      |     1      |      x       |  on
- *     0      |     0      |      1       |  on
- *     0      |     0      |      0       |  blink (rate 300ms)
+ * The Network Space v2 dual-GPIO LED is wired to a CPLD. Three different LED
+ * modes are available: off, on and SATA activity blinking. The LED modes are
+ * controlled through two GPIOs (command and slow): each combination of values
+ * for the command/slow GPIOs corresponds to a LED mode.
  */
 
-enum ns2_led_modes {
-	NS_V2_LED_OFF,
-	NS_V2_LED_ON,
-	NS_V2_LED_SATA,
-};
-
-struct ns2_led_mode_value {
-	enum ns2_led_modes	mode;
-	int			cmd_level;
-	int			slow_level;
-};
-
-static struct ns2_led_mode_value ns2_led_modval[] = {
-	{ NS_V2_LED_OFF	, 1, 0 },
-	{ NS_V2_LED_ON	, 0, 1 },
-	{ NS_V2_LED_ON	, 1, 1 },
-	{ NS_V2_LED_SATA, 0, 0 },
-};
-
 struct ns2_led_data {
 	struct led_classdev	cdev;
 	unsigned		cmd;
 	unsigned		slow;
 	unsigned char		sata; /* True when SATA mode active. */
 	rwlock_t		rw_lock; /* Lock GPIOs. */
+	int			num_modes;
+	struct ns2_led_modval	*modval;
 };
 
 static int ns2_led_get_mode(struct ns2_led_data *led_dat,
@@ -88,10 +62,10 @@ static int ns2_led_get_mode(struct ns2_led_data *led_dat,
 	cmd_level = gpio_get_value(led_dat->cmd);
 	slow_level = gpio_get_value(led_dat->slow);
 
-	for (i = 0; i < ARRAY_SIZE(ns2_led_modval); i++) {
-		if (cmd_level == ns2_led_modval[i].cmd_level &&
-		    slow_level == ns2_led_modval[i].slow_level) {
-			*mode = ns2_led_modval[i].mode;
+	for (i = 0; i < led_dat->num_modes; i++) {
+		if (cmd_level == led_dat->modval[i].cmd_level &&
+		    slow_level == led_dat->modval[i].slow_level) {
+			*mode = led_dat->modval[i].mode;
 			ret = 0;
 			break;
 		}
@@ -110,12 +84,12 @@ static void ns2_led_set_mode(struct ns2_led_data *led_dat,
 
 	write_lock_irqsave(&led_dat->rw_lock, flags);
 
-	for (i = 0; i < ARRAY_SIZE(ns2_led_modval); i++) {
-		if (mode == ns2_led_modval[i].mode) {
+	for (i = 0; i < led_dat->num_modes; i++) {
+		if (mode == led_dat->modval[i].mode) {
 			gpio_set_value(led_dat->cmd,
-				       ns2_led_modval[i].cmd_level);
+				       led_dat->modval[i].cmd_level);
 			gpio_set_value(led_dat->slow,
-				       ns2_led_modval[i].slow_level);
+				       led_dat->modval[i].slow_level);
 		}
 	}
 
@@ -228,6 +202,8 @@ create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat,
 	led_dat->cdev.groups = ns2_led_groups;
 	led_dat->cmd = template->cmd;
 	led_dat->slow = template->slow;
+	led_dat->modval = template->modval;
+	led_dat->num_modes = template->num_modes;
 
 	ret = ns2_led_get_mode(led_dat, &mode);
 	if (ret < 0)
@@ -259,9 +235,8 @@ ns2_leds_get_of_pdata(struct device *dev, struct ns2_led_platform_data *pdata)
 {
 	struct device_node *np = dev->of_node;
 	struct device_node *child;
-	struct ns2_led *leds;
+	struct ns2_led *led, *leds;
 	int num_leds = 0;
-	int i = 0;
 
 	num_leds = of_get_child_count(np);
 	if (!num_leds)
@@ -272,26 +247,57 @@ ns2_leds_get_of_pdata(struct device *dev, struct ns2_led_platform_data *pdata)
 	if (!leds)
 		return -ENOMEM;
 
+	led = leds;
 	for_each_child_of_node(np, child) {
 		const char *string;
-		int ret;
+		int ret, i, num_modes;
+		struct ns2_led_modval *modval;
 
 		ret = of_get_named_gpio(child, "cmd-gpio", 0);
 		if (ret < 0)
 			return ret;
-		leds[i].cmd = ret;
+		led->cmd = ret;
 		ret = of_get_named_gpio(child, "slow-gpio", 0);
 		if (ret < 0)
 			return ret;
-		leds[i].slow = ret;
+		led->slow = ret;
 		ret = of_property_read_string(child, "label", &string);
-		leds[i].name = (ret == 0) ? string : child->name;
+		led->name = (ret == 0) ? string : child->name;
 		ret = of_property_read_string(child, "linux,default-trigger",
 					      &string);
 		if (ret == 0)
-			leds[i].default_trigger = string;
+			led->default_trigger = string;
+
+		ret = of_property_count_u32_elems(child, "modes-map");
+		if (ret < 0 || ret % 3) {
+			dev_err(dev,
+				"Missing or malformed modes-map property\n");
+			return -EINVAL;
+		}
+
+		num_modes = ret / 3;
+		modval = devm_kzalloc(dev,
+				      num_modes * sizeof(struct ns2_led_modval),
+				      GFP_KERNEL);
+		if (!modval)
+			return -ENOMEM;
+
+		for (i = 0; i < num_modes; i++) {
+			of_property_read_u32_index(child,
+						"modes-map", 3 * i,
+						(u32 *) &modval[i].mode);
+			of_property_read_u32_index(child,
+						"modes-map", 3 * i + 1,
+						(u32 *) &modval[i].cmd_level);
+			of_property_read_u32_index(child,
+						"modes-map", 3 * i + 2,
+						(u32 *) &modval[i].slow_level);
+		}
+
+		led->num_modes = num_modes;
+		led->modval = modval;
 
-		i++;
+		led++;
 	}
 
 	pdata->leds = leds;
diff --git a/include/dt-bindings/leds/leds-ns2.h b/include/dt-bindings/leds/leds-ns2.h
new file mode 100644
index 000000000000..491c5f974a92
--- /dev/null
+++ b/include/dt-bindings/leds/leds-ns2.h
@@ -0,0 +1,8 @@
+#ifndef _DT_BINDINGS_LEDS_NS2_H
+#define _DT_BINDINGS_LEDS_NS2_H
+
+#define NS_V2_LED_OFF	0
+#define NS_V2_LED_ON	1
+#define NS_V2_LED_SATA	2
+
+#endif
diff --git a/include/linux/platform_data/leds-kirkwood-ns2.h b/include/linux/platform_data/leds-kirkwood-ns2.h
index 6a9fed57f346..eb8a6860e816 100644
--- a/include/linux/platform_data/leds-kirkwood-ns2.h
+++ b/include/linux/platform_data/leds-kirkwood-ns2.h
@@ -9,11 +9,25 @@
 #ifndef __LEDS_KIRKWOOD_NS2_H
 #define __LEDS_KIRKWOOD_NS2_H
 
+enum ns2_led_modes {
+	NS_V2_LED_OFF,
+	NS_V2_LED_ON,
+	NS_V2_LED_SATA,
+};
+
+struct ns2_led_modval {
+	enum ns2_led_modes	mode;
+	int			cmd_level;
+	int			slow_level;
+};
+
 struct ns2_led {
 	const char	*name;
 	const char	*default_trigger;
 	unsigned	cmd;
 	unsigned	slow;
+	int		num_modes;
+	struct ns2_led_modval *modval;
 };
 
 struct ns2_led_platform_data {
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 2/4] ARM: Kirkwood: add modes-map property to ns2-leds nodes
  2015-07-02 17:56 [PATCH v2 0/4] Allow to use leds-ns2 with n090401 boards Simon Guinot
  2015-07-02 17:56 ` [PATCH v2 1/4] leds: leds-ns2: move LED modes mapping outside of the driver Simon Guinot
@ 2015-07-02 17:56 ` Simon Guinot
  2015-07-25 14:42   ` Gregory CLEMENT
       [not found] ` <1435859803-19583-1-git-send-email-simon.guinot-jKBdWWKqtFpg9hUCZPvPmw@public.gmane.org>
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 9+ messages in thread
From: Simon Guinot @ 2015-07-02 17:56 UTC (permalink / raw)
  To: Jacek Anaszewski, Bryan Wu, Richard Purdie
  Cc: Jason Cooper, Andrew Lunn, Gregory Clement, Sebastian Hesselbarth,
	linux-leds, linux-arm-kernel, devicetree, Vincent Donnefort

From: Vincent Donnefort <vdonnefort@gmail.com>

Since the LED modes mapping is no longer hardcoded inside the leds-ns2
driver, then it must be provided through the modes-map property in the
ns2-leds nodes.

Signed-off-by: Vincent Donnefort <vdonnefort@gmail.com>
---
 arch/arm/boot/dts/kirkwood-d2net.dts   | 5 +++++
 arch/arm/boot/dts/kirkwood-is2.dts     | 5 +++++
 arch/arm/boot/dts/kirkwood-ns2.dts     | 5 +++++
 arch/arm/boot/dts/kirkwood-ns2max.dts  | 5 +++++
 arch/arm/boot/dts/kirkwood-ns2mini.dts | 5 +++++
 5 files changed, 25 insertions(+)

diff --git a/arch/arm/boot/dts/kirkwood-d2net.dts b/arch/arm/boot/dts/kirkwood-d2net.dts
index 6b7856025001..e1c25c35e9ce 100644
--- a/arch/arm/boot/dts/kirkwood-d2net.dts
+++ b/arch/arm/boot/dts/kirkwood-d2net.dts
@@ -10,6 +10,7 @@
 
 /dts-v1/;
 
+#include <dt-bindings/leds/leds-ns2.h>
 #include "kirkwood-netxbig.dtsi"
 
 / {
@@ -28,6 +29,10 @@
 			label = "d2net_v2:blue:sata";
 			slow-gpio = <&gpio0 29 GPIO_ACTIVE_HIGH>;
 			cmd-gpio = <&gpio0 30 GPIO_ACTIVE_HIGH>;
+			modes-map = <NS_V2_LED_OFF  1 0
+				     NS_V2_LED_ON   0 1
+				     NS_V2_LED_ON   1 1
+				     NS_V2_LED_SATA 0 0>;
 		};
 	};
 
diff --git a/arch/arm/boot/dts/kirkwood-is2.dts b/arch/arm/boot/dts/kirkwood-is2.dts
index da674bbd49a8..4121674abd1c 100644
--- a/arch/arm/boot/dts/kirkwood-is2.dts
+++ b/arch/arm/boot/dts/kirkwood-is2.dts
@@ -1,5 +1,6 @@
 /dts-v1/;
 
+#include <dt-bindings/leds/leds-ns2.h>
 #include "kirkwood-ns2-common.dtsi"
 
 / {
@@ -27,6 +28,10 @@
 			label = "ns2:blue:sata";
 			slow-gpio = <&gpio0 29 0>;
 			cmd-gpio = <&gpio0 30 0>;
+			modes-map = <NS_V2_LED_OFF  1 0
+				     NS_V2_LED_ON   0 1
+				     NS_V2_LED_ON   1 1
+				     NS_V2_LED_SATA 0 0>;
 		};
 	};
 };
diff --git a/arch/arm/boot/dts/kirkwood-ns2.dts b/arch/arm/boot/dts/kirkwood-ns2.dts
index 53368d1022cc..190189d235e6 100644
--- a/arch/arm/boot/dts/kirkwood-ns2.dts
+++ b/arch/arm/boot/dts/kirkwood-ns2.dts
@@ -1,5 +1,6 @@
 /dts-v1/;
 
+#include <dt-bindings/leds/leds-ns2.h>
 #include "kirkwood-ns2-common.dtsi"
 
 / {
@@ -27,6 +28,10 @@
 			label = "ns2:blue:sata";
 			slow-gpio = <&gpio0 29 0>;
 			cmd-gpio = <&gpio0 30 0>;
+			modes-map = <NS_V2_LED_OFF  1 0
+				     NS_V2_LED_ON   0 1
+				     NS_V2_LED_ON   1 1
+				     NS_V2_LED_SATA 0 0>;
 		};
 	};
 };
diff --git a/arch/arm/boot/dts/kirkwood-ns2max.dts b/arch/arm/boot/dts/kirkwood-ns2max.dts
index 72c78d0b1116..55cc41d9c80c 100644
--- a/arch/arm/boot/dts/kirkwood-ns2max.dts
+++ b/arch/arm/boot/dts/kirkwood-ns2max.dts
@@ -1,5 +1,6 @@
 /dts-v1/;
 
+#include <dt-bindings/leds/leds-ns2.h>
 #include "kirkwood-ns2-common.dtsi"
 
 / {
@@ -46,6 +47,10 @@
 			label = "ns2:blue:sata";
 			slow-gpio = <&gpio0 29 0>;
 			cmd-gpio = <&gpio0 30 0>;
+			modes-map = <NS_V2_LED_OFF  1 0
+				     NS_V2_LED_ON   0 1
+				     NS_V2_LED_ON   1 1
+				     NS_V2_LED_SATA 0 0>;
 		};
 	};
 };
diff --git a/arch/arm/boot/dts/kirkwood-ns2mini.dts b/arch/arm/boot/dts/kirkwood-ns2mini.dts
index c441bf62c09f..9935f3ec29b4 100644
--- a/arch/arm/boot/dts/kirkwood-ns2mini.dts
+++ b/arch/arm/boot/dts/kirkwood-ns2mini.dts
@@ -1,5 +1,6 @@
 /dts-v1/;
 
+#include <dt-bindings/leds/leds-ns2.h>
 #include "kirkwood-ns2-common.dtsi"
 
 / {
@@ -47,6 +48,10 @@
 			label = "ns2:blue:sata";
 			slow-gpio = <&gpio0 29 0>;
 			cmd-gpio = <&gpio0 30 0>;
+			modes-map = <NS_V2_LED_OFF  1 0
+				     NS_V2_LED_ON   0 1
+				     NS_V2_LED_ON   1 1
+				     NS_V2_LED_SATA 0 0>;
 		};
 	};
 };
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 3/4] leds: leds-ns2: handle can_sleep GPIOs
       [not found] ` <1435859803-19583-1-git-send-email-simon.guinot-jKBdWWKqtFpg9hUCZPvPmw@public.gmane.org>
@ 2015-07-02 17:56   ` Simon Guinot
  0 siblings, 0 replies; 9+ messages in thread
From: Simon Guinot @ 2015-07-02 17:56 UTC (permalink / raw)
  To: Jacek Anaszewski, Bryan Wu, Richard Purdie
  Cc: Jason Cooper, Andrew Lunn, Gregory Clement, Sebastian Hesselbarth,
	linux-leds-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Vincent Donnefort

On the board n090401 (Seagate NAS 4-Bay), some of the LEDs are handled
by the leds-ns2 driver. This LEDs are connected to an I2C GPIO expander
(PCA95554PW) which means that GPIO access may sleep. This patch makes
leds-ns2 compatible with such GPIOs by using the *_cansleep() variant of
the GPIO functions. As a drawback this functions can't be used safely in
a timer context (with the timer LED trigger for example). To fix this
issue, a workqueue mechanism (copied from the leds-gpio driver) is used.

Note that this patch also updates slightly the ns2_led_sata_store
function. The LED state is now retrieved from cached values instead of
reading the GPIOs previously. This prevents ns2_led_sata_store from
working with a stale LED state (which may happen when a delayed work
is pending).

Signed-off-by: Simon Guinot <simon.guinot-jKBdWWKqtFpg9hUCZPvPmw@public.gmane.org>
Signed-off-by: Vincent Donnefort <vdonnefort-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
 drivers/leds/leds-ns2.c | 75 +++++++++++++++++++++++++++++++++----------------
 1 file changed, 51 insertions(+), 24 deletions(-)

Changes for v2:
- Fix gpio_{get,set}_*_cansleep() usage while holding a spinlock:
  Holding a spinlock at this places was not needed.

diff --git a/drivers/leds/leds-ns2.c b/drivers/leds/leds-ns2.c
index b0bc03539dbb..b33514d9f427 100644
--- a/drivers/leds/leds-ns2.c
+++ b/drivers/leds/leds-ns2.c
@@ -31,6 +31,7 @@
 #include <linux/platform_data/leds-kirkwood-ns2.h>
 #include <linux/of.h>
 #include <linux/of_gpio.h>
+#include "leds.h"
 
 /*
  * The Network Space v2 dual-GPIO LED is wired to a CPLD. Three different LED
@@ -43,12 +44,25 @@ struct ns2_led_data {
 	struct led_classdev	cdev;
 	unsigned		cmd;
 	unsigned		slow;
+	bool			can_sleep;
+	int			mode_index;
 	unsigned char		sata; /* True when SATA mode active. */
 	rwlock_t		rw_lock; /* Lock GPIOs. */
+	struct work_struct	work;
 	int			num_modes;
 	struct ns2_led_modval	*modval;
 };
 
+static void ns2_led_work(struct work_struct *work)
+{
+	struct ns2_led_data *led_dat =
+		container_of(work, struct ns2_led_data, work);
+	int i = led_dat->mode_index;
+
+	gpio_set_value_cansleep(led_dat->cmd, led_dat->modval[i].cmd_level);
+	gpio_set_value_cansleep(led_dat->slow, led_dat->modval[i].slow_level);
+}
+
 static int ns2_led_get_mode(struct ns2_led_data *led_dat,
 			    enum ns2_led_modes *mode)
 {
@@ -57,10 +71,8 @@ static int ns2_led_get_mode(struct ns2_led_data *led_dat,
 	int cmd_level;
 	int slow_level;
 
-	read_lock_irq(&led_dat->rw_lock);
-
-	cmd_level = gpio_get_value(led_dat->cmd);
-	slow_level = gpio_get_value(led_dat->slow);
+	cmd_level = gpio_get_value_cansleep(led_dat->cmd);
+	slow_level = gpio_get_value_cansleep(led_dat->slow);
 
 	for (i = 0; i < led_dat->num_modes; i++) {
 		if (cmd_level == led_dat->modval[i].cmd_level &&
@@ -71,8 +83,6 @@ static int ns2_led_get_mode(struct ns2_led_data *led_dat,
 		}
 	}
 
-	read_unlock_irq(&led_dat->rw_lock);
-
 	return ret;
 }
 
@@ -80,19 +90,32 @@ static void ns2_led_set_mode(struct ns2_led_data *led_dat,
 			     enum ns2_led_modes mode)
 {
 	int i;
+	bool found = false;
 	unsigned long flags;
 
-	write_lock_irqsave(&led_dat->rw_lock, flags);
-
-	for (i = 0; i < led_dat->num_modes; i++) {
+	for (i = 0; i < led_dat->num_modes; i++)
 		if (mode == led_dat->modval[i].mode) {
-			gpio_set_value(led_dat->cmd,
-				       led_dat->modval[i].cmd_level);
-			gpio_set_value(led_dat->slow,
-				       led_dat->modval[i].slow_level);
+			found = true;
+			break;
 		}
+
+	if (!found)
+		return;
+
+	write_lock_irqsave(&led_dat->rw_lock, flags);
+
+	if (!led_dat->can_sleep) {
+		gpio_set_value(led_dat->cmd,
+			       led_dat->modval[i].cmd_level);
+		gpio_set_value(led_dat->slow,
+			       led_dat->modval[i].slow_level);
+		goto exit_unlock;
 	}
 
+	led_dat->mode_index = i;
+	schedule_work(&led_dat->work);
+
+exit_unlock:
 	write_unlock_irqrestore(&led_dat->rw_lock, flags);
 }
 
@@ -122,7 +145,6 @@ static ssize_t ns2_led_sata_store(struct device *dev,
 		container_of(led_cdev, struct ns2_led_data, cdev);
 	int ret;
 	unsigned long enable;
-	enum ns2_led_modes mode;
 
 	ret = kstrtoul(buff, 10, &enable);
 	if (ret < 0)
@@ -131,19 +153,19 @@ static ssize_t ns2_led_sata_store(struct device *dev,
 	enable = !!enable;
 
 	if (led_dat->sata == enable)
-		return count;
+		goto exit;
 
-	ret = ns2_led_get_mode(led_dat, &mode);
-	if (ret < 0)
-		return ret;
+	led_dat->sata = enable;
+
+	if (!led_get_brightness(led_cdev))
+		goto exit;
 
-	if (enable && mode == NS_V2_LED_ON)
+	if (enable)
 		ns2_led_set_mode(led_dat, NS_V2_LED_SATA);
-	if (!enable && mode == NS_V2_LED_SATA)
+	else
 		ns2_led_set_mode(led_dat, NS_V2_LED_ON);
 
-	led_dat->sata = enable;
-
+exit:
 	return count;
 }
 
@@ -173,7 +195,7 @@ create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat,
 	enum ns2_led_modes mode;
 
 	ret = devm_gpio_request_one(&pdev->dev, template->cmd,
-			gpio_get_value(template->cmd) ?
+			gpio_get_value_cansleep(template->cmd) ?
 			GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW,
 			template->name);
 	if (ret) {
@@ -183,7 +205,7 @@ create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat,
 	}
 
 	ret = devm_gpio_request_one(&pdev->dev, template->slow,
-			gpio_get_value(template->slow) ?
+			gpio_get_value_cansleep(template->slow) ?
 			GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW,
 			template->name);
 	if (ret) {
@@ -202,6 +224,8 @@ create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat,
 	led_dat->cdev.groups = ns2_led_groups;
 	led_dat->cmd = template->cmd;
 	led_dat->slow = template->slow;
+	led_dat->can_sleep = gpio_cansleep(led_dat->cmd) |
+				gpio_cansleep(led_dat->slow);
 	led_dat->modval = template->modval;
 	led_dat->num_modes = template->num_modes;
 
@@ -214,6 +238,8 @@ create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat,
 	led_dat->cdev.brightness =
 		(mode == NS_V2_LED_OFF) ? LED_OFF : LED_FULL;
 
+	INIT_WORK(&led_dat->work, ns2_led_work);
+
 	ret = led_classdev_register(&pdev->dev, &led_dat->cdev);
 	if (ret < 0)
 		return ret;
@@ -224,6 +250,7 @@ create_ns2_led(struct platform_device *pdev, struct ns2_led_data *led_dat,
 static void delete_ns2_led(struct ns2_led_data *led_dat)
 {
 	led_classdev_unregister(&led_dat->cdev);
+	cancel_work_sync(&led_dat->work);
 }
 
 #ifdef CONFIG_OF_GPIO
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 4/4] leds: leds-ns2: depends on MACH_ARMADA_370
  2015-07-02 17:56 [PATCH v2 0/4] Allow to use leds-ns2 with n090401 boards Simon Guinot
                   ` (2 preceding siblings ...)
       [not found] ` <1435859803-19583-1-git-send-email-simon.guinot-jKBdWWKqtFpg9hUCZPvPmw@public.gmane.org>
@ 2015-07-02 17:56 ` Simon Guinot
  2015-07-13 12:24 ` [PATCH v2 0/4] Allow to use leds-ns2 with n090401 boards Jacek Anaszewski
  4 siblings, 0 replies; 9+ messages in thread
From: Simon Guinot @ 2015-07-02 17:56 UTC (permalink / raw)
  To: Jacek Anaszewski, Bryan Wu, Richard Purdie
  Cc: Jason Cooper, Andrew Lunn, Gregory Clement, Sebastian Hesselbarth,
	linux-leds, linux-arm-kernel, devicetree, Vincent Donnefort

The leds-ns2 driver is also used by the n090401 board (Seagate NAS
4-Bay), which is based on the Marvell Armada-370 SoC.

Then this patch allows to select the leds-ns2 driver if MACH_ARMADA_370
is enabled. Additionally, this also updates the Kconfig help message.

Signed-off-by: Simon Guinot <simon.guinot@sequanux.org>
Acked-by: Jacek Anaszewski <j.anaszewski@samsung.com>
---
 drivers/leds/Kconfig | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
index 966b9605f5f0..68fd6b2b12be 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
@@ -431,12 +431,16 @@ config LEDS_MC13783
 config LEDS_NS2
 	tristate "LED support for Network Space v2 GPIO LEDs"
 	depends on LEDS_CLASS
-	depends on MACH_KIRKWOOD
+	depends on MACH_KIRKWOOD || MACH_ARMADA_370
 	default y
 	help
-	  This option enable support for the dual-GPIO LED found on the
-	  Network Space v2 board (and parents). This include Internet Space v2,
-	  Network Space (Max) v2 and d2 Network v2 boards.
+	  This option enables support for the dual-GPIO LEDs found on the
+	  following LaCie/Seagate boards:
+
+		Network Space v2 (and parents: Max, Mini)
+		Internet Space v2
+		d2 Network v2
+		n090401 (Seagate NAS 4-Bay)
 
 config LEDS_NETXBIG
 	tristate "LED support for Big Network series LEDs"
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 0/4] Allow to use leds-ns2 with n090401 boards
  2015-07-02 17:56 [PATCH v2 0/4] Allow to use leds-ns2 with n090401 boards Simon Guinot
                   ` (3 preceding siblings ...)
  2015-07-02 17:56 ` [PATCH v2 4/4] leds: leds-ns2: depends on MACH_ARMADA_370 Simon Guinot
@ 2015-07-13 12:24 ` Jacek Anaszewski
  4 siblings, 0 replies; 9+ messages in thread
From: Jacek Anaszewski @ 2015-07-13 12:24 UTC (permalink / raw)
  To: Simon Guinot
  Cc: Bryan Wu, Richard Purdie, Jason Cooper, Andrew Lunn,
	Gregory Clement, Sebastian Hesselbarth, linux-leds,
	linux-arm-kernel, devicetree, Vincent Donnefort

Hi Simon,

On 07/02/2015 07:56 PM, Simon Guinot wrote:
> Hello,
>
> This patch series allows to use the leds-ns2 driver with the n090401
> boards (Seagate NAS 4-Bay), based on an Armada-370 SoC.
>
> Here is the list changes:
>
> - Allow to configure the LED mode mapping.
> - Handle can_sleep GPIOs. On n090401, the LEDs are connected to an I2C
>    GPIO expander.
> - Make leds-ns2 depends on MACH_ARMADA_370.
>
> Changes for v2:
> - Fix gpio_{get,set}_*_cansleep() usage while holding a spinlock:
>    Holding a spinlock at this places was not needed.
> - Add Acked-by from Jacek Anaszewski for patch 4.
>
> Simon
>
> Simon Guinot (2):
>    leds: leds-ns2: handle can_sleep GPIOs
>    leds: leds-ns2: depends on MACH_ARMADA_370
>
> Vincent Donnefort (2):
>    leds: leds-ns2: move LED modes mapping outside of the driver
>    ARM: Kirkwood: add modes-map property to ns2-leds nodes
>
>   .../devicetree/bindings/leds/leds-ns2.txt          |   9 ++
>   arch/arm/boot/dts/kirkwood-d2net.dts               |   5 +
>   arch/arm/boot/dts/kirkwood-is2.dts                 |   5 +
>   arch/arm/boot/dts/kirkwood-ns2.dts                 |   5 +
>   arch/arm/boot/dts/kirkwood-ns2max.dts              |   5 +
>   arch/arm/boot/dts/kirkwood-ns2mini.dts             |   5 +
>   drivers/leds/Kconfig                               |  12 +-
>   drivers/leds/leds-ns2.c                            | 169 ++++++++++++---------
>   include/dt-bindings/leds/leds-ns2.h                |   8 +
>   include/linux/platform_data/leds-kirkwood-ns2.h    |  14 ++
>   10 files changed, 165 insertions(+), 72 deletions(-)
>   create mode 100644 include/dt-bindings/leds/leds-ns2.h
>

For the whole patch set:

Acked-by: Jacek Anaszewski <j.anaszewski@samsung.com>

-- 
Best Regards,
Jacek Anaszewski

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 2/4] ARM: Kirkwood: add modes-map property to ns2-leds nodes
  2015-07-02 17:56 ` [PATCH v2 2/4] ARM: Kirkwood: add modes-map property to ns2-leds nodes Simon Guinot
@ 2015-07-25 14:42   ` Gregory CLEMENT
  2015-07-28 10:32     ` Gregory CLEMENT
  0 siblings, 1 reply; 9+ messages in thread
From: Gregory CLEMENT @ 2015-07-25 14:42 UTC (permalink / raw)
  To: Simon Guinot, Jacek Anaszewski, Bryan Wu, Richard Purdie
  Cc: Jason Cooper, Andrew Lunn, Sebastian Hesselbarth, linux-leds,
	linux-arm-kernel, devicetree, Vincent Donnefort

Hi Simon, Jacek, Bryan, Richard,

On 02/07/2015 19:56, Simon Guinot wrote:
> From: Vincent Donnefort <vdonnefort@gmail.com>
> 
> Since the LED modes mapping is no longer hardcoded inside the leds-ns2
> driver, then it must be provided through the modes-map property in the
> ns2-leds nodes.
> 
> Signed-off-by: Vincent Donnefort <vdonnefort@gmail.com>

As the other patch of the series seem to be merged in the led branch,
then I can apply this patch on mvebu/dt.

It is OK for being in linux-next, however this patch depend on "leds:
leds-ns2: move LED modes mapping outside of the driver", so I will need
to find a way to express this dependency when I will do the pull request
to arm-soc.


Thanks,

Gregory


> ---
>  arch/arm/boot/dts/kirkwood-d2net.dts   | 5 +++++
>  arch/arm/boot/dts/kirkwood-is2.dts     | 5 +++++
>  arch/arm/boot/dts/kirkwood-ns2.dts     | 5 +++++
>  arch/arm/boot/dts/kirkwood-ns2max.dts  | 5 +++++
>  arch/arm/boot/dts/kirkwood-ns2mini.dts | 5 +++++
>  5 files changed, 25 insertions(+)
> 
> diff --git a/arch/arm/boot/dts/kirkwood-d2net.dts b/arch/arm/boot/dts/kirkwood-d2net.dts
> index 6b7856025001..e1c25c35e9ce 100644
> --- a/arch/arm/boot/dts/kirkwood-d2net.dts
> +++ b/arch/arm/boot/dts/kirkwood-d2net.dts
> @@ -10,6 +10,7 @@
>  
>  /dts-v1/;
>  
> +#include <dt-bindings/leds/leds-ns2.h>
>  #include "kirkwood-netxbig.dtsi"
>  
>  / {
> @@ -28,6 +29,10 @@
>  			label = "d2net_v2:blue:sata";
>  			slow-gpio = <&gpio0 29 GPIO_ACTIVE_HIGH>;
>  			cmd-gpio = <&gpio0 30 GPIO_ACTIVE_HIGH>;
> +			modes-map = <NS_V2_LED_OFF  1 0
> +				     NS_V2_LED_ON   0 1
> +				     NS_V2_LED_ON   1 1
> +				     NS_V2_LED_SATA 0 0>;
>  		};
>  	};
>  
> diff --git a/arch/arm/boot/dts/kirkwood-is2.dts b/arch/arm/boot/dts/kirkwood-is2.dts
> index da674bbd49a8..4121674abd1c 100644
> --- a/arch/arm/boot/dts/kirkwood-is2.dts
> +++ b/arch/arm/boot/dts/kirkwood-is2.dts
> @@ -1,5 +1,6 @@
>  /dts-v1/;
>  
> +#include <dt-bindings/leds/leds-ns2.h>
>  #include "kirkwood-ns2-common.dtsi"
>  
>  / {
> @@ -27,6 +28,10 @@
>  			label = "ns2:blue:sata";
>  			slow-gpio = <&gpio0 29 0>;
>  			cmd-gpio = <&gpio0 30 0>;
> +			modes-map = <NS_V2_LED_OFF  1 0
> +				     NS_V2_LED_ON   0 1
> +				     NS_V2_LED_ON   1 1
> +				     NS_V2_LED_SATA 0 0>;
>  		};
>  	};
>  };
> diff --git a/arch/arm/boot/dts/kirkwood-ns2.dts b/arch/arm/boot/dts/kirkwood-ns2.dts
> index 53368d1022cc..190189d235e6 100644
> --- a/arch/arm/boot/dts/kirkwood-ns2.dts
> +++ b/arch/arm/boot/dts/kirkwood-ns2.dts
> @@ -1,5 +1,6 @@
>  /dts-v1/;
>  
> +#include <dt-bindings/leds/leds-ns2.h>
>  #include "kirkwood-ns2-common.dtsi"
>  
>  / {
> @@ -27,6 +28,10 @@
>  			label = "ns2:blue:sata";
>  			slow-gpio = <&gpio0 29 0>;
>  			cmd-gpio = <&gpio0 30 0>;
> +			modes-map = <NS_V2_LED_OFF  1 0
> +				     NS_V2_LED_ON   0 1
> +				     NS_V2_LED_ON   1 1
> +				     NS_V2_LED_SATA 0 0>;
>  		};
>  	};
>  };
> diff --git a/arch/arm/boot/dts/kirkwood-ns2max.dts b/arch/arm/boot/dts/kirkwood-ns2max.dts
> index 72c78d0b1116..55cc41d9c80c 100644
> --- a/arch/arm/boot/dts/kirkwood-ns2max.dts
> +++ b/arch/arm/boot/dts/kirkwood-ns2max.dts
> @@ -1,5 +1,6 @@
>  /dts-v1/;
>  
> +#include <dt-bindings/leds/leds-ns2.h>
>  #include "kirkwood-ns2-common.dtsi"
>  
>  / {
> @@ -46,6 +47,10 @@
>  			label = "ns2:blue:sata";
>  			slow-gpio = <&gpio0 29 0>;
>  			cmd-gpio = <&gpio0 30 0>;
> +			modes-map = <NS_V2_LED_OFF  1 0
> +				     NS_V2_LED_ON   0 1
> +				     NS_V2_LED_ON   1 1
> +				     NS_V2_LED_SATA 0 0>;
>  		};
>  	};
>  };
> diff --git a/arch/arm/boot/dts/kirkwood-ns2mini.dts b/arch/arm/boot/dts/kirkwood-ns2mini.dts
> index c441bf62c09f..9935f3ec29b4 100644
> --- a/arch/arm/boot/dts/kirkwood-ns2mini.dts
> +++ b/arch/arm/boot/dts/kirkwood-ns2mini.dts
> @@ -1,5 +1,6 @@
>  /dts-v1/;
>  
> +#include <dt-bindings/leds/leds-ns2.h>
>  #include "kirkwood-ns2-common.dtsi"
>  
>  / {
> @@ -47,6 +48,10 @@
>  			label = "ns2:blue:sata";
>  			slow-gpio = <&gpio0 29 0>;
>  			cmd-gpio = <&gpio0 30 0>;
> +			modes-map = <NS_V2_LED_OFF  1 0
> +				     NS_V2_LED_ON   0 1
> +				     NS_V2_LED_ON   1 1
> +				     NS_V2_LED_SATA 0 0>;
>  		};
>  	};
>  };
> 


-- 
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 2/4] ARM: Kirkwood: add modes-map property to ns2-leds nodes
  2015-07-25 14:42   ` Gregory CLEMENT
@ 2015-07-28 10:32     ` Gregory CLEMENT
       [not found]       ` <55B75A2E.4080803-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
  0 siblings, 1 reply; 9+ messages in thread
From: Gregory CLEMENT @ 2015-07-28 10:32 UTC (permalink / raw)
  To: Simon Guinot, Jacek Anaszewski
  Cc: Bryan Wu, Richard Purdie, Jason Cooper, Andrew Lunn,
	Sebastian Hesselbarth, linux-leds, linux-arm-kernel, devicetree,
	Vincent Donnefort

Hi Simon, Jacek,

On 25/07/2015 16:42, Gregory CLEMENT wrote:
> Hi Simon, Jacek, Bryan, Richard,
> 
> On 02/07/2015 19:56, Simon Guinot wrote:
>> From: Vincent Donnefort <vdonnefort@gmail.com>
>>
>> Since the LED modes mapping is no longer hardcoded inside the leds-ns2
>> driver, then it must be provided through the modes-map property in the
>> ns2-leds nodes.
>>
>> Signed-off-by: Vincent Donnefort <vdonnefort@gmail.com>
> 
> As the other patch of the series seem to be merged in the led branch,
> then I can apply this patch on mvebu/dt.
> 
> It is OK for being in linux-next, however this patch depend on "leds:
> leds-ns2: move LED modes mapping outside of the driver", so I will need
> to find a way to express this dependency when I will do the pull request
> to arm-soc.
> 

Eventually I removed this patch from my branch.
Jacek, you can take it with my

Acked-by: Gregory CLEMENT <gregory.clement@free-electrons.com>


Thanks,

Gregory


> 
> Thanks,
> 
> Gregory
> 
> 
>> ---
>>  arch/arm/boot/dts/kirkwood-d2net.dts   | 5 +++++
>>  arch/arm/boot/dts/kirkwood-is2.dts     | 5 +++++
>>  arch/arm/boot/dts/kirkwood-ns2.dts     | 5 +++++
>>  arch/arm/boot/dts/kirkwood-ns2max.dts  | 5 +++++
>>  arch/arm/boot/dts/kirkwood-ns2mini.dts | 5 +++++
>>  5 files changed, 25 insertions(+)
>>
>> diff --git a/arch/arm/boot/dts/kirkwood-d2net.dts b/arch/arm/boot/dts/kirkwood-d2net.dts
>> index 6b7856025001..e1c25c35e9ce 100644
>> --- a/arch/arm/boot/dts/kirkwood-d2net.dts
>> +++ b/arch/arm/boot/dts/kirkwood-d2net.dts
>> @@ -10,6 +10,7 @@
>>  
>>  /dts-v1/;
>>  
>> +#include <dt-bindings/leds/leds-ns2.h>
>>  #include "kirkwood-netxbig.dtsi"
>>  
>>  / {
>> @@ -28,6 +29,10 @@
>>  			label = "d2net_v2:blue:sata";
>>  			slow-gpio = <&gpio0 29 GPIO_ACTIVE_HIGH>;
>>  			cmd-gpio = <&gpio0 30 GPIO_ACTIVE_HIGH>;
>> +			modes-map = <NS_V2_LED_OFF  1 0
>> +				     NS_V2_LED_ON   0 1
>> +				     NS_V2_LED_ON   1 1
>> +				     NS_V2_LED_SATA 0 0>;
>>  		};
>>  	};
>>  
>> diff --git a/arch/arm/boot/dts/kirkwood-is2.dts b/arch/arm/boot/dts/kirkwood-is2.dts
>> index da674bbd49a8..4121674abd1c 100644
>> --- a/arch/arm/boot/dts/kirkwood-is2.dts
>> +++ b/arch/arm/boot/dts/kirkwood-is2.dts
>> @@ -1,5 +1,6 @@
>>  /dts-v1/;
>>  
>> +#include <dt-bindings/leds/leds-ns2.h>
>>  #include "kirkwood-ns2-common.dtsi"
>>  
>>  / {
>> @@ -27,6 +28,10 @@
>>  			label = "ns2:blue:sata";
>>  			slow-gpio = <&gpio0 29 0>;
>>  			cmd-gpio = <&gpio0 30 0>;
>> +			modes-map = <NS_V2_LED_OFF  1 0
>> +				     NS_V2_LED_ON   0 1
>> +				     NS_V2_LED_ON   1 1
>> +				     NS_V2_LED_SATA 0 0>;
>>  		};
>>  	};
>>  };
>> diff --git a/arch/arm/boot/dts/kirkwood-ns2.dts b/arch/arm/boot/dts/kirkwood-ns2.dts
>> index 53368d1022cc..190189d235e6 100644
>> --- a/arch/arm/boot/dts/kirkwood-ns2.dts
>> +++ b/arch/arm/boot/dts/kirkwood-ns2.dts
>> @@ -1,5 +1,6 @@
>>  /dts-v1/;
>>  
>> +#include <dt-bindings/leds/leds-ns2.h>
>>  #include "kirkwood-ns2-common.dtsi"
>>  
>>  / {
>> @@ -27,6 +28,10 @@
>>  			label = "ns2:blue:sata";
>>  			slow-gpio = <&gpio0 29 0>;
>>  			cmd-gpio = <&gpio0 30 0>;
>> +			modes-map = <NS_V2_LED_OFF  1 0
>> +				     NS_V2_LED_ON   0 1
>> +				     NS_V2_LED_ON   1 1
>> +				     NS_V2_LED_SATA 0 0>;
>>  		};
>>  	};
>>  };
>> diff --git a/arch/arm/boot/dts/kirkwood-ns2max.dts b/arch/arm/boot/dts/kirkwood-ns2max.dts
>> index 72c78d0b1116..55cc41d9c80c 100644
>> --- a/arch/arm/boot/dts/kirkwood-ns2max.dts
>> +++ b/arch/arm/boot/dts/kirkwood-ns2max.dts
>> @@ -1,5 +1,6 @@
>>  /dts-v1/;
>>  
>> +#include <dt-bindings/leds/leds-ns2.h>
>>  #include "kirkwood-ns2-common.dtsi"
>>  
>>  / {
>> @@ -46,6 +47,10 @@
>>  			label = "ns2:blue:sata";
>>  			slow-gpio = <&gpio0 29 0>;
>>  			cmd-gpio = <&gpio0 30 0>;
>> +			modes-map = <NS_V2_LED_OFF  1 0
>> +				     NS_V2_LED_ON   0 1
>> +				     NS_V2_LED_ON   1 1
>> +				     NS_V2_LED_SATA 0 0>;
>>  		};
>>  	};
>>  };
>> diff --git a/arch/arm/boot/dts/kirkwood-ns2mini.dts b/arch/arm/boot/dts/kirkwood-ns2mini.dts
>> index c441bf62c09f..9935f3ec29b4 100644
>> --- a/arch/arm/boot/dts/kirkwood-ns2mini.dts
>> +++ b/arch/arm/boot/dts/kirkwood-ns2mini.dts
>> @@ -1,5 +1,6 @@
>>  /dts-v1/;
>>  
>> +#include <dt-bindings/leds/leds-ns2.h>
>>  #include "kirkwood-ns2-common.dtsi"
>>  
>>  / {
>> @@ -47,6 +48,10 @@
>>  			label = "ns2:blue:sata";
>>  			slow-gpio = <&gpio0 29 0>;
>>  			cmd-gpio = <&gpio0 30 0>;
>> +			modes-map = <NS_V2_LED_OFF  1 0
>> +				     NS_V2_LED_ON   0 1
>> +				     NS_V2_LED_ON   1 1
>> +				     NS_V2_LED_SATA 0 0>;
>>  		};
>>  	};
>>  };
>>
> 
> 


-- 
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 2/4] ARM: Kirkwood: add modes-map property to ns2-leds nodes
       [not found]       ` <55B75A2E.4080803-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
@ 2015-07-28 11:34         ` Jacek Anaszewski
  0 siblings, 0 replies; 9+ messages in thread
From: Jacek Anaszewski @ 2015-07-28 11:34 UTC (permalink / raw)
  To: Gregory CLEMENT, Simon Guinot, Jacek Anaszewski
  Cc: Bryan Wu, Richard Purdie, Jason Cooper, Andrew Lunn,
	Sebastian Hesselbarth, linux-leds-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	devicetree-u79uwXL29TY76Z2rM5mHXA, Vincent Donnefort



On 28.07.2015 12:32, Gregory CLEMENT wrote:
> Hi Simon, Jacek,
>
> On 25/07/2015 16:42, Gregory CLEMENT wrote:
>> Hi Simon, Jacek, Bryan, Richard,
>>
>> On 02/07/2015 19:56, Simon Guinot wrote:
>>> From: Vincent Donnefort <vdonnefort-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>>>
>>> Since the LED modes mapping is no longer hardcoded inside the leds-ns2
>>> driver, then it must be provided through the modes-map property in the
>>> ns2-leds nodes.
>>>
>>> Signed-off-by: Vincent Donnefort <vdonnefort-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>>
>> As the other patch of the series seem to be merged in the led branch,
>> then I can apply this patch on mvebu/dt.
>>
>> It is OK for being in linux-next, however this patch depend on "leds:
>> leds-ns2: move LED modes mapping outside of the driver", so I will need
>> to find a way to express this dependency when I will do the pull request
>> to arm-soc.
>>
>
> Eventually I removed this patch from my branch.
> Jacek, you can take it with my
>
> Acked-by: Gregory CLEMENT <gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
>

OK, I'll take it with your ack.

-- 
Best Regards,
Jacek Anaszewski
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-07-28 11:34 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-02 17:56 [PATCH v2 0/4] Allow to use leds-ns2 with n090401 boards Simon Guinot
2015-07-02 17:56 ` [PATCH v2 1/4] leds: leds-ns2: move LED modes mapping outside of the driver Simon Guinot
2015-07-02 17:56 ` [PATCH v2 2/4] ARM: Kirkwood: add modes-map property to ns2-leds nodes Simon Guinot
2015-07-25 14:42   ` Gregory CLEMENT
2015-07-28 10:32     ` Gregory CLEMENT
     [not found]       ` <55B75A2E.4080803-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2015-07-28 11:34         ` Jacek Anaszewski
     [not found] ` <1435859803-19583-1-git-send-email-simon.guinot-jKBdWWKqtFpg9hUCZPvPmw@public.gmane.org>
2015-07-02 17:56   ` [PATCH v2 3/4] leds: leds-ns2: handle can_sleep GPIOs Simon Guinot
2015-07-02 17:56 ` [PATCH v2 4/4] leds: leds-ns2: depends on MACH_ARMADA_370 Simon Guinot
2015-07-13 12:24 ` [PATCH v2 0/4] Allow to use leds-ns2 with n090401 boards Jacek Anaszewski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).