linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] Add support for WL-ICLEDs from Wurth Elektronik
@ 2025-04-14 13:28 Ante Knezic
  2025-04-14 13:28 ` [PATCH 1/3] Documentation: leds: Add docs for Wurth Elektronik WL-ICLED Ante Knezic
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Ante Knezic @ 2025-04-14 13:28 UTC (permalink / raw)
  To: linux-leds
  Cc: lee, pavel, robh, krzk+dt, conor+dt, corbet, knezic, devicetree,
	linux-kernel, linux-doc

From: Ante Knezic <knezic@helmholz.com>

This patch adds support for WL-ICLED series of RGB Leds. These LEDs
are equipped with integrated controller and can be daisy chained to
arbitrary number of units. The MCU communicates with the first LED
in series via SPI. Interface can be regular SPI protocol or single
line only (MOSI connection only) depending on the model.

Ante Knezic (3):
  Documentation: leds: Add docs for Wurth Elektronik WL-ICLED
  dt-bindings: leds: add binding for WL-ICLED
  leds: add WL-ICLED SPI driver

 .../bindings/leds/leds-wl-icled.yaml          |  88 ++++
 Documentation/leds/index.rst                  |   1 +
 Documentation/leds/leds-wl-icled.rst          |  69 +++
 drivers/leds/Kconfig                          |  10 +
 drivers/leds/Makefile                         |   1 +
 drivers/leds/leds-wl-icled.c                  | 406 ++++++++++++++++++
 6 files changed, 575 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
 create mode 100644 Documentation/leds/leds-wl-icled.rst
 create mode 100644 drivers/leds/leds-wl-icled.c

-- 
2.48.1


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

* [PATCH 1/3] Documentation: leds: Add docs for Wurth Elektronik WL-ICLED
  2025-04-14 13:28 [PATCH 0/3] Add support for WL-ICLEDs from Wurth Elektronik Ante Knezic
@ 2025-04-14 13:28 ` Ante Knezic
  2025-04-15  2:27   ` Bagas Sanjaya
  2025-04-14 13:28 ` [PATCH 2/3] dt-bindings: leds: add binding for WL-ICLED Ante Knezic
  2025-04-14 13:28 ` [PATCH 3/3] leds: add WL-ICLED SPI driver Ante Knezic
  2 siblings, 1 reply; 9+ messages in thread
From: Ante Knezic @ 2025-04-14 13:28 UTC (permalink / raw)
  To: linux-leds
  Cc: lee, pavel, robh, krzk+dt, conor+dt, corbet, knezic, devicetree,
	linux-kernel, linux-doc

From: Ante Knezic <knezic@helmholz.com>

Basic description of WL-ICLED RGB LEDs from Wurth Elektronik

Signed-off-by: Ante Knezic <knezic@helmholz.com>
---
 Documentation/leds/index.rst         |  1 +
 Documentation/leds/leds-wl-icled.rst | 69 ++++++++++++++++++++++++++++
 2 files changed, 70 insertions(+)
 create mode 100644 Documentation/leds/leds-wl-icled.rst

diff --git a/Documentation/leds/index.rst b/Documentation/leds/index.rst
index 76fae171039c..b9a4db72cc26 100644
--- a/Documentation/leds/index.rst
+++ b/Documentation/leds/index.rst
@@ -30,3 +30,4 @@ LEDs
    leds-sc27xx
    leds-st1202
    leds-qcom-lpg
+   leds-wl-icled
diff --git a/Documentation/leds/leds-wl-icled.rst b/Documentation/leds/leds-wl-icled.rst
new file mode 100644
index 000000000000..0e55683e9468
--- /dev/null
+++ b/Documentation/leds/leds-wl-icled.rst
@@ -0,0 +1,69 @@
+=================================================
+Kernel driver for WL-ICLED from Wurth Elektronik
+=================================================
+
+Description
+-----------
+The WL-ICLEDs are RGB LEDs with integrated controller that can be
+daisy-chained to a arbitrary number of units. The MCU communicates
+with the first LED in chain via SPI interface and can be single or
+two wire connection, depending on  the model.
+
+Single wire models like 1315050930002, 1313210530000, 1312020030000 and
+1312121320437 are controlled with specific signal pattern on the
+input line. The MCU is connected to input line only via SPI MOSI signal.
+For example WE-1312121320437 uses following signal pattern per one LED:
+
+|          RED            |          GREEN          |           BLUE          |
+| GAIN:4bits | PWM:12bits | GAIN:4bits | PWM:12bits | GAIN:4bits | PWM:12bits |
+
+ where logical 1 is represented as:
+ (V)^
+    |          T
+    |<-------1.2us------->
+    |
+    +================+
+    | <---0.9us----> |
+    |                |
+    +----------------+===|------> t
+
+ and logical 0 is represented as:
+ (V)^
+    |          T
+    |<-------1.2us------->
+    |
+    +=====+
+    |0.3us|
+    |     |
+    +-----+==============|------> t
+
+To generate the required pattern with exact timings SPI clock is selected
+so that it devides T in 8 equal parts such that a logical true symbol can be
+represented as 1111 1100 and a logical false can be represented as 1100 0000.
+Single wire LEDs require the MOSI line to be set to low at idle and this should
+be provided by the chip driver if possible or by external HW circuit.
+
+Models 1313210530000, 1312020030000 and 1315050930002 require a slightly
+different signaling scheme where each color of the LED is encoded in
+8 bits.
+
+Two wire LED types do not require specific encoding of the input line as
+both clock and data are provided to each LED.
+
+Additionally, models differ by available controls:
+- WE 1312121320437 provide PWM and GAIN control per each RGB element.
+  Both GAIN and PWM values are calculated by normalising particular
+  multi_intensity value to 4 and 12 bits.
+
+- WE 1315050930246 and 1311610030140 provide PWM control per each
+  RGB element and one global GAIN control.
+  Global GAIN value is calculated by normalising global led brightness
+  value to 5 bits while PWM values are set by particular
+  multi_intensity values.
+
+- WE 1315050930002, 1313210530000 and 1312020030000 provide only PWM
+  control per each RGB element.
+  PWM values are set by particular multi_intensity value.
+
+For more product information please see the link below:
+https://www.we-online.com/en/components/products/WL-ICLED
-- 
2.48.1


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

* [PATCH 2/3] dt-bindings: leds: add binding for WL-ICLED
  2025-04-14 13:28 [PATCH 0/3] Add support for WL-ICLEDs from Wurth Elektronik Ante Knezic
  2025-04-14 13:28 ` [PATCH 1/3] Documentation: leds: Add docs for Wurth Elektronik WL-ICLED Ante Knezic
@ 2025-04-14 13:28 ` Ante Knezic
  2025-04-14 15:27   ` Rob Herring (Arm)
  2025-04-15  7:55   ` Krzysztof Kozlowski
  2025-04-14 13:28 ` [PATCH 3/3] leds: add WL-ICLED SPI driver Ante Knezic
  2 siblings, 2 replies; 9+ messages in thread
From: Ante Knezic @ 2025-04-14 13:28 UTC (permalink / raw)
  To: linux-leds
  Cc: lee, pavel, robh, krzk+dt, conor+dt, corbet, knezic, devicetree,
	linux-kernel, linux-doc

From: Ante Knezic <knezic@helmholz.com>

WL-ICLED is a RGB LED with integrated IC from Wurth Elektronik.
Individual color brightness can be controlled via SPI protocol.

Signed-off-by: Ante Knezic <knezic@helmholz.com>
---
 .../bindings/leds/leds-wl-icled.yaml          | 88 +++++++++++++++++++
 1 file changed, 88 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/leds/leds-wl-icled.yaml

diff --git a/Documentation/devicetree/bindings/leds/leds-wl-icled.yaml b/Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
new file mode 100644
index 000000000000..bf79c7a1719b
--- /dev/null
+++ b/Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
@@ -0,0 +1,88 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/leds/leds-wl-icled.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: LED driver for WL-ICLEDs from Wurth Elektronik.
+
+maintainers:
+  - Ante Knezic <ante.knezic@helmholz.de>
+
+description: |
+  The WL-ICLEDs are RGB LEDs with integrated controller that can be
+  daisy-chained to arbitrary number of LEDs. Communication with LEDs is
+  via SPI interface and can be single or two wire, depending on the model.
+  For more product information please see the link below:
+  https://www.we-online.com/en/components/products/WL-ICLED
+
+properties:
+  compatible:
+    enum:
+      - we,1315x246
+      - we,1315x002
+      - we,131x000
+      - we,131161x
+      - we,131212x
+
+  '#address-cells':
+    const: 1
+
+  '#size-cells':
+    const: 0
+
+patternProperties:
+  '^led@[0-9a-f]$':
+    type: object
+    $ref: leds-class-multicolor.yaml#
+    unevaluatedProperties: false
+
+    properties:
+      reg:
+        maxItems: 1
+        description:
+          This property denotes the LED position in the daisy chain
+          series. It is a zero based LED identifier.
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+    #include <dt-bindings/leds/common.h>
+
+    spi {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        icled@1 {
+            compatible = "we,131x000";
+            #address-cells = <1>;
+            #size-cells = <0>;
+            reg = <1>;
+            cs-gpios = <&gpio 1 GPIO_ACTIVE_HIGH>;
+
+            led@0 {
+                reg = <0>;
+                color = <LED_COLOR_ID_RGB>;
+                function = "error";
+            };
+
+            led@1 {
+                reg = <1>;
+                color = <LED_COLOR_ID_RGB>;
+                function = "warning";
+            };
+
+            led@2 {
+                reg = <2>;
+                color = <LED_COLOR_ID_RGB>;
+                function = "running";
+            };
+        };
+    };
+...
-- 
2.48.1


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

* [PATCH 3/3] leds: add WL-ICLED SPI driver
  2025-04-14 13:28 [PATCH 0/3] Add support for WL-ICLEDs from Wurth Elektronik Ante Knezic
  2025-04-14 13:28 ` [PATCH 1/3] Documentation: leds: Add docs for Wurth Elektronik WL-ICLED Ante Knezic
  2025-04-14 13:28 ` [PATCH 2/3] dt-bindings: leds: add binding for WL-ICLED Ante Knezic
@ 2025-04-14 13:28 ` Ante Knezic
  2 siblings, 0 replies; 9+ messages in thread
From: Ante Knezic @ 2025-04-14 13:28 UTC (permalink / raw)
  To: linux-leds
  Cc: lee, pavel, robh, krzk+dt, conor+dt, corbet, knezic, devicetree,
	linux-kernel, linux-doc

From: Ante Knezic <knezic@helmholz.com>

Add support for WL-ICLED RGB LEDs with integrated controller.
Device enables individual color control via SPI interface and
can be interfaced via single wire connection (MOSI line only)
or by two wire connection (MOSI and CLK).

Signed-off-by: Ante Knezic <knezic@helmholz.com>
---
 drivers/leds/Kconfig         |  10 +
 drivers/leds/Makefile        |   1 +
 drivers/leds/leds-wl-icled.c | 406 +++++++++++++++++++++++++++++++++++
 3 files changed, 417 insertions(+)
 create mode 100644 drivers/leds/leds-wl-icled.c

diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
index a104cbb0a001..a8100a7ee72b 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
@@ -950,6 +950,16 @@ config LEDS_SPI_BYTE
 	  for controlling the brightness. Currently the following controller is
 	  supported: Ubiquiti airCube ISP microcontroller based LED controller.
 
+config LEDS_WL_ICLED
+	tristate "LED Support for WL-ICLED RGB LEDs"
+	depends on LEDS_CLASS
+	depends on SPI
+	depends on OF
+	depends on LEDS_CLASS_MULTICOLOR
+	help
+	  Say yes to get support for the Wurth Elektronik WL-ICLED series RGB
+	  LEDs with integrated controller.
+
 config LEDS_TI_LMU_COMMON
 	tristate "LED driver for TI LMU" if COMPILE_TEST
 	select REGMAP
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
index 2f170d69dcbf..42e8849fa619 100644
--- a/drivers/leds/Makefile
+++ b/drivers/leds/Makefile
@@ -106,6 +106,7 @@ obj-$(CONFIG_LEDS_CR0014114)		+= leds-cr0014114.o
 obj-$(CONFIG_LEDS_DAC124S085)		+= leds-dac124s085.o
 obj-$(CONFIG_LEDS_EL15203000)		+= leds-el15203000.o
 obj-$(CONFIG_LEDS_SPI_BYTE)		+= leds-spi-byte.o
+obj-$(CONFIG_LEDS_WL_ICLED)		+= leds-wl-icled.o
 
 # LED Userspace Drivers
 obj-$(CONFIG_LEDS_USER)			+= uleds.o
diff --git a/drivers/leds/leds-wl-icled.c b/drivers/leds/leds-wl-icled.c
new file mode 100644
index 000000000000..ce44ed4d1fe5
--- /dev/null
+++ b/drivers/leds/leds-wl-icled.c
@@ -0,0 +1,406 @@
+// SPDX-License-Identifier: GPL-2.0-only
+// LED driver for Wurth Elektronik WL-ICLED
+// Copyright (C) Systeme Helmholz - https://www.helmholz.de
+
+#include <linux/leds.h>
+#include <linux/spi/spi.h>
+#include <linux/led-class-multicolor.h>
+
+#define WL_ICLED_LEDS_PER_IC 3
+#define WL_ICLED_MAX_BRIGHTNESS 255
+
+#define WL_ICLED_32E_CMD_WRITE 0x7
+#define WL_ICLED_32E_CMD_SLEEP 0x5
+#define WL_ICLED_32E_CMD_SHIFT 5
+#define WL_ICLED_32E_MAX_GAIN 31
+#define WL_ICLED_32E_GAIN_MASK 0x1f
+#define WL_ICLED_32E_START_FRAME_SIZE 4
+
+#define WL_ICLED_48E_MAX_GAIN 15
+#define WL_ICLED_48E_MAX_PWM 4095
+#define WL_ICLED_48E_GAIN_SHIFT 12
+#define WL_ICLED_48E_PWM_MASK 0xfff
+
+enum wl_icled_type {
+	WL_ICLED_SINGLE_WIRE,
+	WL_ICLED_TWO_WIRE,
+};
+
+struct wl_icled_led {
+	struct led_classdev_mc	mc_cdev;
+	struct wl_icled	*priv;
+	int brightness;
+};
+
+struct wl_icled_info {
+	int model_id;
+	int color_sequence[WL_ICLED_LEDS_PER_IC];
+	void (*encode)(u8 *buf, struct wl_icled_led *led);
+	enum wl_icled_type type;
+	size_t bytes_per_led;
+	unsigned int speed_hz;
+};
+
+enum wl_icled_model {
+	WL1315X246,     /*1315050930246 */
+	WL1315X002,     /*1315050930002*/
+	WL131X000,      /*1313210530000*/
+			/*1312020030000*/
+	WL131161X,      /*1311610030140 */
+	WL131212X,      /*1312121320437 */
+};
+
+struct wl_icled {
+	const struct wl_icled_info *icled_info;
+	struct device *dev;
+	struct mutex lock;
+	struct spi_device *spi;
+	size_t count;
+	u8 *buf;
+	struct wl_icled_led leds[];
+};
+
+static void wl_icled_encode_24bit(u8 *buf, struct wl_icled_led *led)
+{
+ /* WE 1315050930002, 1313210530000 and 1312020030000 control sequence:
+  * +---------------------------+---+----------------------------+
+  * |            LED 1          |...|         LED n              |
+  * +---------------------------+--------------------------------+
+  * |  GREEN  |  RED   |  BLUE  |...|  GREEN   |  RED   |  BLUE  |
+  * +---------+--------+--------+--------------+--------+--------+
+  * |    8    |   8    |    8   |...|     8    |   8    |    8   |
+  * +---------------------------+---+----------------------------+
+  */
+	u8 pattern_true, pattern_false;
+	int i, j;
+
+	pattern_false = 0xc0;
+	pattern_true = (led->priv->icled_info->model_id == WL1315X002) ?
+			0xf0 : 0xfc;
+
+	for (i = 0; i < WL_ICLED_LEDS_PER_IC; i++) {
+		for (j = 7; j >= 0; j--, buf++)
+			*buf = led->mc_cdev.subled_info[i].brightness & BIT(j) ?
+			       pattern_true : pattern_false;
+	}
+}
+
+static void wl_icled_encode_48bit(u8 *buf, struct wl_icled_led *led)
+{
+ /* WE-1312121320437 control sequence:
+  * +--------------------------+---+--------------------------+
+  * |            LED 1         |...|            LED n         |
+  * +--------------------------+---+--------------------------+
+  * |  RED   |  GREEN |  BLUE  |...|  RED   |  GREEN |  BLUE  |
+  * +--------+--------+--------+---+--------+--------+--------+
+  * |GAIN|PWM|GAIN|PWM|GAIN|PWM|...|GAIN|PWM|GAIN|PWM|GAIN|PWM|
+  * +----+---+----+---+----+---+---+----+---+----+---+----+---|
+  * | 4  |12 | 4  |12 | 4  |12 |...| 4  |12 | 4  |12 | 4  |12 |
+  * +---------------------------------------------------------+
+  */
+	u8 pattern_true, pattern_false;
+	int i, j;
+
+	pattern_false = 0xc0;
+	pattern_true = 0xfc;
+
+	for (i = 0; i < WL_ICLED_LEDS_PER_IC; i++) {
+		unsigned int brightness;
+		u16 led_sequence;
+
+		brightness = led->mc_cdev.subled_info[i].brightness;
+
+		led_sequence = ((brightness * WL_ICLED_48E_MAX_PWM)/
+				WL_ICLED_MAX_BRIGHTNESS) &
+				WL_ICLED_48E_PWM_MASK;
+		led_sequence |= ((brightness * WL_ICLED_48E_MAX_GAIN)/
+				WL_ICLED_MAX_BRIGHTNESS) <<
+				WL_ICLED_48E_GAIN_SHIFT;
+
+		for (j = 15; j >= 0; j--, buf++)
+			*buf = led_sequence & BIT(j) ?
+			       pattern_true : pattern_false;
+	}
+
+}
+
+static void wl_icled_encode_32bit(u8 *buf, struct wl_icled_led *led)
+{
+ /* WE 1315050930246 and 1311610030140 control sequence:
+  * |--------------+------+------+-----------------------+-------------+
+  * |  Start Frame | Flag | Gain |      PWM  level       |  End Frame  |
+  * +--------------+------+------+-----------------------+-------------+
+  * |              |             |LED1 | LED2| LED3| LEDn|             |
+  * |              +-------------+-----+-----+-----+-----+             |
+  * |              | 3bit | 5bit |B|G|R|B|G|R|B|G|R|B|G|R|             |
+  * +--------------+-------------+-----------------------+-------------+
+  * |   3 bytes    |    1 byte   |        n * 3 bytes    |(n+7)/8bytes |
+  * +--------------+-------------+-----------------------+-------------+
+  */
+	int i;
+
+	*buf = (WL_ICLED_32E_CMD_WRITE << WL_ICLED_32E_CMD_SHIFT) |
+	       (((led->brightness * WL_ICLED_32E_MAX_GAIN)/
+		WL_ICLED_MAX_BRIGHTNESS) & WL_ICLED_32E_GAIN_MASK);
+	buf++;
+
+	for (i = 0; i < WL_ICLED_LEDS_PER_IC; i++, buf++)
+		*buf = led->mc_cdev.subled_info[i].brightness;
+}
+
+static const struct wl_icled_info wl_icled_info_tbl[] = {
+
+	[WL1315X246] = {/* 1315050930246 */
+		.model_id = WL1315X246,
+		.color_sequence = { LED_COLOR_ID_BLUE,
+				    LED_COLOR_ID_GREEN,
+				    LED_COLOR_ID_RED },
+		.bytes_per_led = 4,
+		.encode = wl_icled_encode_32bit,
+		.type = WL_ICLED_TWO_WIRE,
+	},
+	[WL1315X002] = { /*1315050930002*/
+		.model_id = WL1315X002,
+		.color_sequence = { LED_COLOR_ID_GREEN,
+				    LED_COLOR_ID_RED,
+				    LED_COLOR_ID_BLUE },
+		.bytes_per_led = 24,
+		.encode = wl_icled_encode_24bit,
+		.speed_hz = 5333333,
+		.type = WL_ICLED_SINGLE_WIRE,
+	},
+	[WL131X000] = { /*1313210530000*/ /*1312020030000*/
+		.model_id = WL131X000,
+		.color_sequence = { LED_COLOR_ID_GREEN,
+				    LED_COLOR_ID_RED,
+				    LED_COLOR_ID_BLUE },
+		.bytes_per_led = 24,
+		.encode = wl_icled_encode_24bit,
+		.speed_hz = 6666666,
+		.type = WL_ICLED_SINGLE_WIRE,
+	},
+	[WL131161X] = { /*1311610030140 */
+		.model_id = WL131161X,
+		.color_sequence = { LED_COLOR_ID_GREEN,
+				    LED_COLOR_ID_BLUE,
+				    LED_COLOR_ID_RED },
+		.bytes_per_led = 4,
+		.encode = wl_icled_encode_32bit,
+		.type = WL_ICLED_TWO_WIRE,
+	},
+	[WL131212X] = { /*1312121320437 */
+		.model_id = WL131212X,
+		.color_sequence = { LED_COLOR_ID_RED,
+				    LED_COLOR_ID_GREEN,
+				    LED_COLOR_ID_BLUE },
+		.bytes_per_led = 48,
+		.encode = wl_icled_encode_48bit,
+		.speed_hz = 6666666,
+		.type = WL_ICLED_SINGLE_WIRE,
+	},
+};
+
+static int wl_icled_sync(struct wl_icled *priv)
+{
+	size_t i, len;
+	int ret;
+	u8 *buf;
+
+	buf = priv->buf;
+	len = priv->icled_info->bytes_per_led * priv->count;
+
+	if (priv->icled_info->type == WL_ICLED_TWO_WIRE) {
+		/* Prepare start frame: 4 bytes of 0 */
+		for (i = 0; i < WL_ICLED_32E_START_FRAME_SIZE; i++, buf++)
+			*buf = 0;
+
+		/* Prepare end frame: N/2 bits (rounded to first byte) of 1s */
+		buf += priv->icled_info->bytes_per_led * priv->count;
+		for (i = 0; i < (priv->count + 15)/16; i++, buf++)
+			*buf = 0xff;
+
+		len = buf - priv->buf;
+		buf = priv->buf + WL_ICLED_32E_START_FRAME_SIZE;
+	}
+
+	for (i = 0; i < priv->count; i++)
+		priv->icled_info->encode(buf +
+					(priv->icled_info->bytes_per_led * i),
+					 &priv->leds[i]);
+
+	if (priv->icled_info->type == WL_ICLED_SINGLE_WIRE) {
+		struct spi_transfer t = {
+			.tx_buf	= priv->buf,
+			.len = len,
+			.speed_hz = priv->icled_info->speed_hz,
+			.bits_per_word = SPI_NBITS_OCTAL,
+		};
+		struct spi_message m;
+
+		spi_message_init(&m);
+		spi_message_add_tail(&t, &m);
+
+		ret = spi_sync(priv->spi, &m);
+	} else {
+		ret = spi_write(priv->spi, priv->buf, len);
+	}
+
+	return ret;
+}
+
+static int wl_icled_set_brightness(struct led_classdev *cdev,
+				   enum led_brightness brightness)
+{
+	struct led_classdev_mc *mc_dev = lcdev_to_mccdev(cdev);
+	struct wl_icled_led *led = container_of(mc_dev,
+						struct wl_icled_led,
+						mc_cdev);
+	int ret;
+
+	mutex_lock(&led->priv->lock);
+	led->brightness = brightness;
+	led_mc_calc_color_components(&led->mc_cdev, brightness);
+	ret = wl_icled_sync(led->priv);
+	mutex_unlock(&led->priv->lock);
+
+	return ret;
+}
+
+static int wl_icled_probe_dt(struct wl_icled *priv, size_t count)
+{
+	struct led_init_data init_data = {};
+	struct mc_subled *mc_led_info;
+	struct fwnode_handle *child;
+	struct wl_icled_led *led;
+	int ret, i;
+	u32 reg;
+
+	device_for_each_child_node(priv->dev, child) {
+
+		ret = fwnode_property_read_u32(child, "reg", &reg);
+		if (ret < 0 || reg >= count) {
+			dev_err(priv->dev, "reg property is invalid\n");
+			fwnode_handle_put(child);
+
+			return ret ? -EINVAL : ret;
+		}
+
+		led = &priv->leds[reg];
+		led->priv = priv;
+		led->mc_cdev.num_colors = WL_ICLED_LEDS_PER_IC;
+		led->mc_cdev.led_cdev.brightness_set_blocking =
+							wl_icled_set_brightness;
+
+		mc_led_info = devm_kcalloc(priv->dev,
+					   led->mc_cdev.num_colors,
+					   sizeof(*mc_led_info), GFP_KERNEL);
+		if (!mc_led_info) {
+			fwnode_handle_put(child);
+			return -ENOMEM;
+		}
+
+		for (i = 0; i < WL_ICLED_LEDS_PER_IC; i++)
+			mc_led_info[i].color_index =
+				priv->icled_info->color_sequence[i];
+
+		led->mc_cdev.subled_info = mc_led_info;
+		init_data.fwnode = child;
+		ret = devm_led_classdev_multicolor_register_ext(priv->dev,
+								&led->mc_cdev,
+								&init_data);
+		if (ret) {
+			dev_err(priv->dev,
+				"failed to register LED device, err %d", ret);
+			fwnode_handle_put(child);
+			return ret;
+		}
+	}
+
+	for (i = 0; i < count; i++) {
+		/* make sure all leds got assigned */
+		if (priv->leds[i].priv != priv) {
+			dev_err(priv->dev, "reg property is invalid\n");
+			return -EINVAL;
+		}
+	}
+
+	return 0;
+}
+
+static int wl_icled_probe(struct spi_device *spi)
+{
+	struct wl_icled	*dev;
+	size_t count, buf_len;
+	int ret;
+
+	count = device_get_child_node_count(&spi->dev);
+	if (!count) {
+		dev_err(&spi->dev, "LEDs are not defined in device tree!");
+		return -ENODEV;
+	}
+
+	dev = devm_kzalloc(&spi->dev, struct_size(dev, leds, count),
+			    GFP_KERNEL);
+	if (!dev)
+		return -ENOMEM;
+
+	mutex_init(&dev->lock);
+	dev->count	= count;
+	dev->dev	= &spi->dev;
+	dev->spi	= spi;
+
+	dev->icled_info = device_get_match_data(&spi->dev);
+
+	buf_len = count * dev->icled_info->bytes_per_led;
+
+	if (dev->icled_info->model_id == WL131161X ||
+	    dev->icled_info->model_id == WL1315X246) {
+		/* account for START and END frames */
+		buf_len += WL_ICLED_32E_START_FRAME_SIZE;
+		buf_len += (count + 15)/16;
+	}
+
+	dev->buf = devm_kzalloc(&spi->dev, buf_len, GFP_KERNEL);
+	if (!dev->buf)
+		return -ENOMEM;
+
+	ret = wl_icled_probe_dt(dev, count);
+	if (ret)
+		return ret;
+
+	spi_set_drvdata(spi, dev);
+
+	return 0;
+}
+
+static void wl_icled_remove(struct spi_device *spi)
+{
+	struct wl_icled *priv = spi_get_drvdata(spi);
+
+	mutex_destroy(&priv->lock);
+}
+
+static const struct of_device_id wl_icled_dt_ids[] = {
+	{ .compatible = "we,1315x246", .data = &wl_icled_info_tbl[WL1315X246]},
+	{ .compatible = "we,1315x002", .data = &wl_icled_info_tbl[WL1315X002]},
+	{ .compatible = "we,131x000", .data = &wl_icled_info_tbl[WL131X000]},
+	{ .compatible = "we,131161x", .data = &wl_icled_info_tbl[WL131161X]},
+	{ .compatible = "we,131212x", .data = &wl_icled_info_tbl[WL131212X]},
+	{},
+};
+MODULE_DEVICE_TABLE(of, wl_icled_dt_ids);
+
+static struct spi_driver wl_icled_driver = {
+	.probe		= wl_icled_probe,
+	.remove		= wl_icled_remove,
+	.driver = {
+		.name		= KBUILD_MODNAME,
+		.of_match_table	= wl_icled_dt_ids,
+	},
+};
+
+module_spi_driver(wl_icled_driver);
+
+MODULE_DESCRIPTION("LED driver for Wurth Elektronik WL-ICLEDs");
+MODULE_AUTHOR("Ante Knezic <knezic@helmholz.com>");
+MODULE_LICENSE("GPL");
-- 
2.48.1


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

* Re: [PATCH 2/3] dt-bindings: leds: add binding for WL-ICLED
  2025-04-14 13:28 ` [PATCH 2/3] dt-bindings: leds: add binding for WL-ICLED Ante Knezic
@ 2025-04-14 15:27   ` Rob Herring (Arm)
  2025-04-15  7:55   ` Krzysztof Kozlowski
  1 sibling, 0 replies; 9+ messages in thread
From: Rob Herring (Arm) @ 2025-04-14 15:27 UTC (permalink / raw)
  To: Ante Knezic
  Cc: devicetree, conor+dt, lee, pavel, linux-doc, linux-leds, knezic,
	corbet, linux-kernel, krzk+dt


On Mon, 14 Apr 2025 15:28:50 +0200, Ante Knezic wrote:
> From: Ante Knezic <knezic@helmholz.com>
> 
> WL-ICLED is a RGB LED with integrated IC from Wurth Elektronik.
> Individual color brightness can be controlled via SPI protocol.
> 
> Signed-off-by: Ante Knezic <knezic@helmholz.com>
> ---
>  .../bindings/leds/leds-wl-icled.yaml          | 88 +++++++++++++++++++
>  1 file changed, 88 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
> 

My bot found errors running 'make dt_binding_check' on your patch:

yamllint warnings/errors:

dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/leds/leds-wl-icled.example.dtb: icled@1 (we,131x000): 'cs-gpios', 'reg' do not match any of the regexes: '^led@[0-9a-f]$', 'pinctrl-[0-9]+'
	from schema $id: http://devicetree.org/schemas/leds/leds-wl-icled.yaml#

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/35c7f697070b3939727f1115d3a279e280f72cd6.1744636666.git.knezic@helmholz.com

The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.


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

* Re: [PATCH 1/3] Documentation: leds: Add docs for Wurth Elektronik WL-ICLED
  2025-04-14 13:28 ` [PATCH 1/3] Documentation: leds: Add docs for Wurth Elektronik WL-ICLED Ante Knezic
@ 2025-04-15  2:27   ` Bagas Sanjaya
  0 siblings, 0 replies; 9+ messages in thread
From: Bagas Sanjaya @ 2025-04-15  2:27 UTC (permalink / raw)
  To: Ante Knezic, linux-leds
  Cc: lee, pavel, robh, krzk+dt, conor+dt, corbet, knezic, devicetree,
	linux-kernel, linux-doc

[-- Attachment #1: Type: text/plain, Size: 5340 bytes --]

On Mon, Apr 14, 2025 at 03:28:49PM +0200, Ante Knezic wrote:
> +Description
> +-----------
> +The WL-ICLEDs are RGB LEDs with integrated controller that can be
> +daisy-chained to a arbitrary number of units. The MCU communicates
> +with the first LED in chain via SPI interface and can be single or
> +two wire connection, depending on  the model.
> +
> +Single wire models like 1315050930002, 1313210530000, 1312020030000 and
> +1312121320437 are controlled with specific signal pattern on the
> +input line. The MCU is connected to input line only via SPI MOSI signal.
> +For example WE-1312121320437 uses following signal pattern per one LED:
> +
> +|          RED            |          GREEN          |           BLUE          |
> +| GAIN:4bits | PWM:12bits | GAIN:4bits | PWM:12bits | GAIN:4bits | PWM:12bits |
> +
> + where logical 1 is represented as:
> + (V)^
> +    |          T
> +    |<-------1.2us------->
> +    |
> +    +================+
> +    | <---0.9us----> |
> +    |                |
> +    +----------------+===|------> t
> +
> + and logical 0 is represented as:
> + (V)^
> +    |          T
> +    |<-------1.2us------->
> +    |
> +    +=====+
> +    |0.3us|
> +    |     |
> +    +-----+==============|------> t

I get htmldocs indentation warnings from Sphinx:

Documentation/leds/leds-wl-icled.rst:22: ERROR: Unexpected indentation. [docutils]
Documentation/leds/leds-wl-icled.rst:23: WARNING: Line block ends without a blank line. [docutils]
Documentation/leds/leds-wl-icled.rst:32: ERROR: Unexpected indentation. [docutils]
Documentation/leds/leds-wl-icled.rst:33: WARNING: Line block ends without a blank line. [docutils]
Documentation/leds/leds-wl-icled.rst:55: ERROR: Unexpected indentation. [docutils]
Documentation/leds/leds-wl-icled.rst:23: ERROR: Undefined substitution referenced: "<-------1.2us-------> | +================+ | <---0.9us----> | | | +----------------+===". [docutils]
Documentation/leds/leds-wl-icled.rst:33: ERROR: Undefined substitution referenced: "<-------1.2us-------> | +=====+ |0.3us". [docutils]

I have to wrap the signal logics diagram in literal code block:

---- >8 ----
diff --git a/Documentation/leds/leds-wl-icled.rst b/Documentation/leds/leds-wl-icled.rst
index 0e55683e946894..78ee2df33df2f5 100644
--- a/Documentation/leds/leds-wl-icled.rst
+++ b/Documentation/leds/leds-wl-icled.rst
@@ -12,12 +12,13 @@ two wire connection, depending on  the model.
 Single wire models like 1315050930002, 1313210530000, 1312020030000 and
 1312121320437 are controlled with specific signal pattern on the
 input line. The MCU is connected to input line only via SPI MOSI signal.
-For example WE-1312121320437 uses following signal pattern per one LED:
+For example WE-1312121320437 uses following signal pattern per one LED::
 
-|          RED            |          GREEN          |           BLUE          |
-| GAIN:4bits | PWM:12bits | GAIN:4bits | PWM:12bits | GAIN:4bits | PWM:12bits |
+  |          RED            |          GREEN          |           BLUE          |
+  | GAIN:4bits | PWM:12bits | GAIN:4bits | PWM:12bits | GAIN:4bits | PWM:12bits |
+
+where logical 1 is represented as::
 
- where logical 1 is represented as:
  (V)^
     |          T
     |<-------1.2us------->
@@ -27,7 +28,8 @@ For example WE-1312121320437 uses following signal pattern per one LED:
     |                |
     +----------------+===|------> t
 
- and logical 0 is represented as:
+and logical 0 is represented as::
+
  (V)^
     |          T
     |<-------1.2us------->

> +
> +To generate the required pattern with exact timings SPI clock is selected
> +so that it devides T in 8 equal parts such that a logical true symbol can be
> +represented as 1111 1100 and a logical false can be represented as 1100 0000.
> +Single wire LEDs require the MOSI line to be set to low at idle and this should
> +be provided by the chip driver if possible or by external HW circuit.
> +
> +Models 1313210530000, 1312020030000 and 1315050930002 require a slightly
> +different signaling scheme where each color of the LED is encoded in
> +8 bits.
> +
> +Two wire LED types do not require specific encoding of the input line as
> +both clock and data are provided to each LED.
> +
> +Additionally, models differ by available controls:
> +- WE 1312121320437 provide PWM and GAIN control per each RGB element.
> +  Both GAIN and PWM values are calculated by normalising particular
> +  multi_intensity value to 4 and 12 bits.

Separate the first bullet item from previous paragraph so that all three
items are outputted as in bullet list.

> +
> +- WE 1315050930246 and 1311610030140 provide PWM control per each
> +  RGB element and one global GAIN control.
> +  Global GAIN value is calculated by normalising global led brightness
> +  value to 5 bits while PWM values are set by particular
> +  multi_intensity values.
> +
> +- WE 1315050930002, 1313210530000 and 1312020030000 provide only PWM
> +  control per each RGB element.
> +  PWM values are set by particular multi_intensity value.
> +
> +For more product information please see the link below:
> +https://www.we-online.com/en/components/products/WL-ICLED

Thanks.

-- 
An old man doll... just what I always wanted! - Clara

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

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

* Re: [PATCH 2/3] dt-bindings: leds: add binding for WL-ICLED
  2025-04-14 13:28 ` [PATCH 2/3] dt-bindings: leds: add binding for WL-ICLED Ante Knezic
  2025-04-14 15:27   ` Rob Herring (Arm)
@ 2025-04-15  7:55   ` Krzysztof Kozlowski
  2025-04-16  9:06     ` Ante Knezic
  1 sibling, 1 reply; 9+ messages in thread
From: Krzysztof Kozlowski @ 2025-04-15  7:55 UTC (permalink / raw)
  To: Ante Knezic
  Cc: linux-leds, lee, pavel, robh, krzk+dt, conor+dt, corbet, knezic,
	devicetree, linux-kernel, linux-doc

On Mon, Apr 14, 2025 at 03:28:50PM GMT, Ante Knezic wrote:
> From: Ante Knezic <knezic@helmholz.com>
> 
> WL-ICLED is a RGB LED with integrated IC from Wurth Elektronik.
> Individual color brightness can be controlled via SPI protocol.
> 
> Signed-off-by: Ante Knezic <knezic@helmholz.com>
> ---
>  .../bindings/leds/leds-wl-icled.yaml          | 88 +++++++++++++++++++

Filename based on compatible. Choose one compatible and use it here.

>  1 file changed, 88 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
> 
> diff --git a/Documentation/devicetree/bindings/leds/leds-wl-icled.yaml b/Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
> new file mode 100644
> index 000000000000..bf79c7a1719b
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
> @@ -0,0 +1,88 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/leds/leds-wl-icled.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: LED driver for WL-ICLEDs from Wurth Elektronik.

driver as Linux driver? Then drop and describe hardware.

Also drop full stop

> +
> +maintainers:
> +  - Ante Knezic <ante.knezic@helmholz.de>
> +
> +description: |
> +  The WL-ICLEDs are RGB LEDs with integrated controller that can be
> +  daisy-chained to arbitrary number of LEDs. Communication with LEDs is
> +  via SPI interface and can be single or two wire, depending on the model.
> +  For more product information please see the link below:
> +  https://www.we-online.com/en/components/products/WL-ICLED
> +
> +properties:
> +  compatible:
> +    enum:
> +      - we,1315x246
> +      - we,1315x002
> +      - we,131x000
> +      - we,131161x
> +      - we,131212x

Is that a wildcard in each compatible?

> +
> +  '#address-cells':
> +    const: 1
> +
> +  '#size-cells':
> +    const: 0
> +
> +patternProperties:
> +  '^led@[0-9a-f]$':
> +    type: object
> +    $ref: leds-class-multicolor.yaml#
> +    unevaluatedProperties: false
> +
> +    properties:
> +      reg:
> +        maxItems: 1
> +        description:
> +          This property denotes the LED position in the daisy chain
> +          series. It is a zero based LED identifier.
> +
> +required:
> +  - compatible
> +  - reg
> +

Missing ref to spi periph schema. See other bindings.

> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/gpio/gpio.h>
> +    #include <dt-bindings/leds/common.h>
> +
> +    spi {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +
> +        icled@1 {


Node names should be generic. See also an explanation and list of
examples (not exhaustive) in DT specification:
https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation

led-controller

> +            compatible = "we,131x000";
> +            #address-cells = <1>;
> +            #size-cells = <0>;
> +            reg = <1>;
> +            cs-gpios = <&gpio 1 GPIO_ACTIVE_HIGH>;
> +
> +            led@0 {
> +                reg = <0>;
> +                color = <LED_COLOR_ID_RGB>;
> +                function = "error";

Use standard defines.

> +            };
> +
> +            led@1 {
> +                reg = <1>;
> +                color = <LED_COLOR_ID_RGB>;
> +                function = "warning";

Best regards,
Krzysztof


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

* Re: [PATCH 2/3] dt-bindings: leds: add binding for WL-ICLED
  2025-04-15  7:55   ` Krzysztof Kozlowski
@ 2025-04-16  9:06     ` Ante Knezic
  2025-04-16 10:21       ` Krzysztof Kozlowski
  0 siblings, 1 reply; 9+ messages in thread
From: Ante Knezic @ 2025-04-16  9:06 UTC (permalink / raw)
  To: krzk
  Cc: ante.knezic, conor+dt, corbet, devicetree, knezic, krzk+dt, lee,
	linux-doc, linux-kernel, linux-leds, pavel, robh

On Tue, Apr 15, 2025 Krzysztof Kozlowski wrote:
> >  1 file changed, 88 insertions(+)
> >  create mode 100644 Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
> > 
> > diff --git a/Documentation/devicetree/bindings/leds/leds-wl-icled.yaml b/Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
> > new file mode 100644
> > index 000000000000..bf79c7a1719b
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
> > @@ -0,0 +1,88 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/leds/leds-wl-icled.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: LED driver for WL-ICLEDs from Wurth Elektronik.
> 
> driver as Linux driver? Then drop and describe hardware.
Sorry, I am not sure I quite understand what you mean here? Add "linux LED driver" to
title?

> Also drop full stop
Ok, understood.

> > +
> > +maintainers:
> > +  - Ante Knezic <ante.knezic@helmholz.de>
> > +
> > +description: |
> > +  The WL-ICLEDs are RGB LEDs with integrated controller that can be
> > +  daisy-chained to arbitrary number of LEDs. Communication with LEDs is
> > +  via SPI interface and can be single or two wire, depending on the model.
> > +  For more product information please see the link below:
> > +  https://www.we-online.com/en/components/products/WL-ICLED
> > +
> > +properties:
> > +  compatible:
> > +    enum:
> > +      - we,1315x246
> > +      - we,1315x002
> > +      - we,131x000
> > +      - we,131161x
> > +      - we,131212x
> 
> Is that a wildcard in each compatible?
Unfortunatelly, yes. Exact model names are quite elaborate, yet similar enough:
1315050930246   --> we,1315x246
1315050930002   --> we,1315x002
1313210530000   --> we,131x000
1312020030000       we,131x000
1311610030140   --> we,131161x
1312121320437   --> we,131212x

This seemed easier than writing complete model number... You want compatible
expanded to full number anyway?

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

* Re: [PATCH 2/3] dt-bindings: leds: add binding for WL-ICLED
  2025-04-16  9:06     ` Ante Knezic
@ 2025-04-16 10:21       ` Krzysztof Kozlowski
  0 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2025-04-16 10:21 UTC (permalink / raw)
  To: Ante Knezic
  Cc: conor+dt, corbet, devicetree, knezic, krzk+dt, lee, linux-doc,
	linux-kernel, linux-leds, pavel, robh

On 16/04/2025 11:06, Ante Knezic wrote:
> On Tue, Apr 15, 2025 Krzysztof Kozlowski wrote:
>>>  1 file changed, 88 insertions(+)
>>>  create mode 100644 Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
>>>
>>> diff --git a/Documentation/devicetree/bindings/leds/leds-wl-icled.yaml b/Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
>>> new file mode 100644
>>> index 000000000000..bf79c7a1719b
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/leds/leds-wl-icled.yaml
>>> @@ -0,0 +1,88 @@
>>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>>> +%YAML 1.2
>>> +---
>>> +$id: http://devicetree.org/schemas/leds/leds-wl-icled.yaml#
>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>> +
>>> +title: LED driver for WL-ICLEDs from Wurth Elektronik.
>>
>> driver as Linux driver? Then drop and describe hardware.
> Sorry, I am not sure I quite understand what you mean here? Add "linux LED driver" to
> title?

I am asking to drop it and instead describe the hardware.

> 
>> Also drop full stop
> Ok, understood.
> 
>>> +
>>> +maintainers:
>>> +  - Ante Knezic <ante.knezic@helmholz.de>
>>> +
>>> +description: |
>>> +  The WL-ICLEDs are RGB LEDs with integrated controller that can be
>>> +  daisy-chained to arbitrary number of LEDs. Communication with LEDs is
>>> +  via SPI interface and can be single or two wire, depending on the model.
>>> +  For more product information please see the link below:
>>> +  https://www.we-online.com/en/components/products/WL-ICLED
>>> +
>>> +properties:
>>> +  compatible:
>>> +    enum:
>>> +      - we,1315x246
>>> +      - we,1315x002
>>> +      - we,131x000
>>> +      - we,131161x
>>> +      - we,131212x
>>
>> Is that a wildcard in each compatible?
> Unfortunatelly, yes. Exact model names are quite elaborate, yet similar enough:
> 1315050930246   --> we,1315x246
> 1315050930002   --> we,1315x002
> 1313210530000   --> we,131x000
> 1312020030000       we,131x000
> 1311610030140   --> we,131161x
> 1312121320437   --> we,131212x
> 
> This seemed easier than writing complete model number... You want compatible
> expanded to full number anyway?

Yes, otherwise git grep for model won't work.


Best regards,
Krzysztof

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

end of thread, other threads:[~2025-04-16 10:21 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-14 13:28 [PATCH 0/3] Add support for WL-ICLEDs from Wurth Elektronik Ante Knezic
2025-04-14 13:28 ` [PATCH 1/3] Documentation: leds: Add docs for Wurth Elektronik WL-ICLED Ante Knezic
2025-04-15  2:27   ` Bagas Sanjaya
2025-04-14 13:28 ` [PATCH 2/3] dt-bindings: leds: add binding for WL-ICLED Ante Knezic
2025-04-14 15:27   ` Rob Herring (Arm)
2025-04-15  7:55   ` Krzysztof Kozlowski
2025-04-16  9:06     ` Ante Knezic
2025-04-16 10:21       ` Krzysztof Kozlowski
2025-04-14 13:28 ` [PATCH 3/3] leds: add WL-ICLED SPI driver Ante Knezic

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).