All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v9 0/5] Add a generic driver for LED-based backlight
@ 2019-10-07 12:44 ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-07 12:44 UTC (permalink / raw)
  To: jacek.anaszewski, pavel, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson
  Cc: dmurphy, linux-leds, linux-kernel, dri-devel, tomi.valkeinen,
	Jean-Jacques Hiblot

This series aims to add a led-backlight driver, similar to pwm-backlight,
but using a LED class device underneath.

A few years ago (2015), Tomi Valkeinen posted a series implementing a
backlight driver on top of a LED device:
https://patchwork.kernel.org/patch/7293991/
https://patchwork.kernel.org/patch/7294001/
https://patchwork.kernel.org/patch/7293981/

The discussion stopped because Tomi lacked the time to work on it.

changes in v9:
- let to_of_node() check if the fwnode is actually a of_node
- add some checks in of_led_get()
- let dev_of_node() do the check about OF availabilty
- refactor led_bl_probe() to register a cleanup function with
  devm_add_action_or_reset(). This simplifies the error handling (which
  was not 100% done in v7) and allows to get rid of led_bl_remove()

changes in v8:
- use class_find_device_by_of_node() instead of class_find_device()
- renamed devm_led_get() as devm_of_led_get()

changes in v7:
- rebased on top of linux-leds/for-next
- populate the of_node member of the LED device if fwnode is a of_node
  (this is a new patch and the first of the series).
- devm_led_get() works only when the device tree is used. Add a few checks
  for that.  

changes in v6:
- trim the list of included headers
- remove useless definition of BKL_FULL_BRIGHTNESS

changes in v5:
- removed LED brightness scaling
- disable sysfs the interface of the LEDs when used by the backlight device

changes in v4:
- fix dev_err() messages and commit logs following the advices of Pavel
- cosmetic changes (indents, getting rid of  "? 1 : 0" in
  led_match_led_node())

changes in v3:
- dt binding: don't limit the brightness range to 0-255. Use the range of
  the underlying LEDs. as a side-effect, all LEDs must now have the same
  range
- driver: Adapt to dt binding update.
- driver: rework probe() for clarity and remove the remaining goto.

changes in v2:
- handle more than one LED.
- don't make the backlight device a child of the LED controller.
- make brightness-levels and default-brightness-level optional
- removed the option to use a GPIO enable.
- removed the option to use a regulator. It should be handled by the LED
  core
- don't make any change to the LED core (not needed anymore)

Jean-Jacques Hiblot (3):
  leds: populate the device's of_node
  leds: Add managed API to get a LED from a device driver
  dt-bindings: backlight: Add led-backlight binding

Tomi Valkeinen (2):
  leds: Add of_led_get() and led_put()
  backlight: add led-backlight driver

 .../bindings/leds/backlight/led-backlight.txt |  28 ++
 drivers/leds/led-class.c                      | 103 ++++++-
 drivers/video/backlight/Kconfig               |   7 +
 drivers/video/backlight/Makefile              |   1 +
 drivers/video/backlight/led_bl.c              | 258 ++++++++++++++++++
 include/linux/leds.h                          |   6 +
 6 files changed, 402 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
 create mode 100644 drivers/video/backlight/led_bl.c

-- 
2.17.1


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

* [PATCH v9 0/5] Add a generic driver for LED-based backlight
@ 2019-10-07 12:44 ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-07 12:44 UTC (permalink / raw)
  To: jacek.anaszewski, pavel, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson
  Cc: dmurphy, linux-leds, linux-kernel, dri-devel, tomi.valkeinen,
	Jean-Jacques Hiblot

This series aims to add a led-backlight driver, similar to pwm-backlight,
but using a LED class device underneath.

A few years ago (2015), Tomi Valkeinen posted a series implementing a
backlight driver on top of a LED device:
https://patchwork.kernel.org/patch/7293991/
https://patchwork.kernel.org/patch/7294001/
https://patchwork.kernel.org/patch/7293981/

The discussion stopped because Tomi lacked the time to work on it.

changes in v9:
- let to_of_node() check if the fwnode is actually a of_node
- add some checks in of_led_get()
- let dev_of_node() do the check about OF availabilty
- refactor led_bl_probe() to register a cleanup function with
  devm_add_action_or_reset(). This simplifies the error handling (which
  was not 100% done in v7) and allows to get rid of led_bl_remove()

changes in v8:
- use class_find_device_by_of_node() instead of class_find_device()
- renamed devm_led_get() as devm_of_led_get()

changes in v7:
- rebased on top of linux-leds/for-next
- populate the of_node member of the LED device if fwnode is a of_node
  (this is a new patch and the first of the series).
- devm_led_get() works only when the device tree is used. Add a few checks
  for that.  

changes in v6:
- trim the list of included headers
- remove useless definition of BKL_FULL_BRIGHTNESS

changes in v5:
- removed LED brightness scaling
- disable sysfs the interface of the LEDs when used by the backlight device

changes in v4:
- fix dev_err() messages and commit logs following the advices of Pavel
- cosmetic changes (indents, getting rid of  "? 1 : 0" in
  led_match_led_node())

changes in v3:
- dt binding: don't limit the brightness range to 0-255. Use the range of
  the underlying LEDs. as a side-effect, all LEDs must now have the same
  range
- driver: Adapt to dt binding update.
- driver: rework probe() for clarity and remove the remaining goto.

changes in v2:
- handle more than one LED.
- don't make the backlight device a child of the LED controller.
- make brightness-levels and default-brightness-level optional
- removed the option to use a GPIO enable.
- removed the option to use a regulator. It should be handled by the LED
  core
- don't make any change to the LED core (not needed anymore)

Jean-Jacques Hiblot (3):
  leds: populate the device's of_node
  leds: Add managed API to get a LED from a device driver
  dt-bindings: backlight: Add led-backlight binding

Tomi Valkeinen (2):
  leds: Add of_led_get() and led_put()
  backlight: add led-backlight driver

 .../bindings/leds/backlight/led-backlight.txt |  28 ++
 drivers/leds/led-class.c                      | 103 ++++++-
 drivers/video/backlight/Kconfig               |   7 +
 drivers/video/backlight/Makefile              |   1 +
 drivers/video/backlight/led_bl.c              | 258 ++++++++++++++++++
 include/linux/leds.h                          |   6 +
 6 files changed, 402 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
 create mode 100644 drivers/video/backlight/led_bl.c

-- 
2.17.1

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

* [PATCH v9 1/5] leds: populate the device's of_node
  2019-10-07 12:44 ` Jean-Jacques Hiblot
@ 2019-10-07 12:44   ` Jean-Jacques Hiblot
  -1 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-07 12:44 UTC (permalink / raw)
  To: jacek.anaszewski, pavel, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson
  Cc: dmurphy, linux-leds, linux-kernel, dri-devel, tomi.valkeinen,
	Jean-Jacques Hiblot

If initialization data is available and its fwnode is actually a of_node,
store this information in the led device's structure. This will allow the
device to use or provide OF-based API such (devm_xxx).

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
 drivers/leds/led-class.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 647b1263c579..bfa1b1033274 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -276,8 +276,10 @@ int led_classdev_register_ext(struct device *parent,
 		mutex_unlock(&led_cdev->led_access);
 		return PTR_ERR(led_cdev->dev);
 	}
-	if (init_data && init_data->fwnode)
+	if (init_data && init_data->fwnode) {
 		led_cdev->dev->fwnode = init_data->fwnode;
+		led_cdev->dev->of_node = to_of_node(init_data->fwnode);
+	}
 
 	if (ret)
 		dev_warn(parent, "Led %s renamed to %s due to name collision",
-- 
2.17.1


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

* [PATCH v9 1/5] leds: populate the device's of_node
@ 2019-10-07 12:44   ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-07 12:44 UTC (permalink / raw)
  To: jacek.anaszewski, pavel, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson
  Cc: dmurphy, linux-leds, linux-kernel, dri-devel, tomi.valkeinen,
	Jean-Jacques Hiblot

If initialization data is available and its fwnode is actually a of_node,
store this information in the led device's structure. This will allow the
device to use or provide OF-based API such (devm_xxx).

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---
 drivers/leds/led-class.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 647b1263c579..bfa1b1033274 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -276,8 +276,10 @@ int led_classdev_register_ext(struct device *parent,
 		mutex_unlock(&led_cdev->led_access);
 		return PTR_ERR(led_cdev->dev);
 	}
-	if (init_data && init_data->fwnode)
+	if (init_data && init_data->fwnode) {
 		led_cdev->dev->fwnode = init_data->fwnode;
+		led_cdev->dev->of_node = to_of_node(init_data->fwnode);
+	}
 
 	if (ret)
 		dev_warn(parent, "Led %s renamed to %s due to name collision",
-- 
2.17.1

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

* [PATCH v9 2/5] leds: Add of_led_get() and led_put()
  2019-10-07 12:44 ` Jean-Jacques Hiblot
@ 2019-10-07 12:44   ` Jean-Jacques Hiblot
  -1 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-07 12:44 UTC (permalink / raw)
  To: jacek.anaszewski, pavel, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson
  Cc: dmurphy, linux-leds, linux-kernel, dri-devel, tomi.valkeinen,
	Jean-Jacques Hiblot

From: Tomi Valkeinen <tomi.valkeinen@ti.com>

This patch adds basic support for a kernel driver to get a LED device.
This will be used by the led-backlight driver.

Only OF version is implemented for now, and the behavior is similar to
PWM's of_pwm_get() and pwm_put().

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
---
 drivers/leds/led-class.c | 50 ++++++++++++++++++++++++++++++++++++++++
 include/linux/leds.h     |  4 ++++
 2 files changed, 54 insertions(+)

diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index bfa1b1033274..1d1f1d546dc7 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -19,6 +19,7 @@
 #include <linux/spinlock.h>
 #include <linux/timer.h>
 #include <uapi/linux/uleds.h>
+#include <linux/of.h>
 #include "leds.h"
 
 static struct class *leds_class;
@@ -214,6 +215,55 @@ static int led_resume(struct device *dev)
 
 static SIMPLE_DEV_PM_OPS(leds_class_dev_pm_ops, led_suspend, led_resume);
 
+/**
+ * of_led_get() - request a LED device via the LED framework
+ * @np: device node to get the LED device from
+ * @index: the index of the LED
+ *
+ * Returns the LED device parsed from the phandle specified in the "leds"
+ * property of a device tree node or a negative error-code on failure.
+ */
+struct led_classdev *of_led_get(struct device_node *np, int index)
+{
+	struct device *led_dev;
+	struct led_classdev *led_cdev;
+	struct device_node *led_node;
+
+	/* Not using device tree? */
+	if (!IS_ENABLED(CONFIG_OF))
+		return ERR_PTR(-ENOTSUPP);
+	if (!np)
+		return ERR_PTR(-EINVAL);
+
+	led_node = of_parse_phandle(np, "leds", index);
+	if (!led_node)
+		return ERR_PTR(-ENOENT);
+
+	led_dev = class_find_device_by_of_node(leds_class, led_node);
+	of_node_put(led_node);
+
+	if (!led_dev)
+		return ERR_PTR(-EPROBE_DEFER);
+
+	led_cdev = dev_get_drvdata(led_dev);
+
+	if (!try_module_get(led_cdev->dev->parent->driver->owner))
+		return ERR_PTR(-ENODEV);
+
+	return led_cdev;
+}
+EXPORT_SYMBOL_GPL(of_led_get);
+
+/**
+ * led_put() - release a LED device
+ * @led_cdev: LED device
+ */
+void led_put(struct led_classdev *led_cdev)
+{
+	module_put(led_cdev->dev->parent->driver->owner);
+}
+EXPORT_SYMBOL_GPL(led_put);
+
 static int led_classdev_next_name(const char *init_name, char *name,
 				  size_t len)
 {
diff --git a/include/linux/leds.h b/include/linux/leds.h
index b8df71193329..6f7371bc7757 100644
--- a/include/linux/leds.h
+++ b/include/linux/leds.h
@@ -20,6 +20,7 @@
 
 struct device;
 struct led_pattern;
+struct device_node;
 /*
  * LED Core
  */
@@ -196,6 +197,9 @@ extern void devm_led_classdev_unregister(struct device *parent,
 extern void led_classdev_suspend(struct led_classdev *led_cdev);
 extern void led_classdev_resume(struct led_classdev *led_cdev);
 
+extern struct led_classdev *of_led_get(struct device_node *np, int index);
+extern void led_put(struct led_classdev *led_cdev);
+
 /**
  * led_blink_set - set blinking with software fallback
  * @led_cdev: the LED to start blinking
-- 
2.17.1


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

* [PATCH v9 2/5] leds: Add of_led_get() and led_put()
@ 2019-10-07 12:44   ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-07 12:44 UTC (permalink / raw)
  To: jacek.anaszewski, pavel, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson
  Cc: linux-kernel, dri-devel, tomi.valkeinen, dmurphy,
	Jean-Jacques Hiblot, linux-leds

From: Tomi Valkeinen <tomi.valkeinen@ti.com>

This patch adds basic support for a kernel driver to get a LED device.
This will be used by the led-backlight driver.

Only OF version is implemented for now, and the behavior is similar to
PWM's of_pwm_get() and pwm_put().

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
---
 drivers/leds/led-class.c | 50 ++++++++++++++++++++++++++++++++++++++++
 include/linux/leds.h     |  4 ++++
 2 files changed, 54 insertions(+)

diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index bfa1b1033274..1d1f1d546dc7 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -19,6 +19,7 @@
 #include <linux/spinlock.h>
 #include <linux/timer.h>
 #include <uapi/linux/uleds.h>
+#include <linux/of.h>
 #include "leds.h"
 
 static struct class *leds_class;
@@ -214,6 +215,55 @@ static int led_resume(struct device *dev)
 
 static SIMPLE_DEV_PM_OPS(leds_class_dev_pm_ops, led_suspend, led_resume);
 
+/**
+ * of_led_get() - request a LED device via the LED framework
+ * @np: device node to get the LED device from
+ * @index: the index of the LED
+ *
+ * Returns the LED device parsed from the phandle specified in the "leds"
+ * property of a device tree node or a negative error-code on failure.
+ */
+struct led_classdev *of_led_get(struct device_node *np, int index)
+{
+	struct device *led_dev;
+	struct led_classdev *led_cdev;
+	struct device_node *led_node;
+
+	/* Not using device tree? */
+	if (!IS_ENABLED(CONFIG_OF))
+		return ERR_PTR(-ENOTSUPP);
+	if (!np)
+		return ERR_PTR(-EINVAL);
+
+	led_node = of_parse_phandle(np, "leds", index);
+	if (!led_node)
+		return ERR_PTR(-ENOENT);
+
+	led_dev = class_find_device_by_of_node(leds_class, led_node);
+	of_node_put(led_node);
+
+	if (!led_dev)
+		return ERR_PTR(-EPROBE_DEFER);
+
+	led_cdev = dev_get_drvdata(led_dev);
+
+	if (!try_module_get(led_cdev->dev->parent->driver->owner))
+		return ERR_PTR(-ENODEV);
+
+	return led_cdev;
+}
+EXPORT_SYMBOL_GPL(of_led_get);
+
+/**
+ * led_put() - release a LED device
+ * @led_cdev: LED device
+ */
+void led_put(struct led_classdev *led_cdev)
+{
+	module_put(led_cdev->dev->parent->driver->owner);
+}
+EXPORT_SYMBOL_GPL(led_put);
+
 static int led_classdev_next_name(const char *init_name, char *name,
 				  size_t len)
 {
diff --git a/include/linux/leds.h b/include/linux/leds.h
index b8df71193329..6f7371bc7757 100644
--- a/include/linux/leds.h
+++ b/include/linux/leds.h
@@ -20,6 +20,7 @@
 
 struct device;
 struct led_pattern;
+struct device_node;
 /*
  * LED Core
  */
@@ -196,6 +197,9 @@ extern void devm_led_classdev_unregister(struct device *parent,
 extern void led_classdev_suspend(struct led_classdev *led_cdev);
 extern void led_classdev_resume(struct led_classdev *led_cdev);
 
+extern struct led_classdev *of_led_get(struct device_node *np, int index);
+extern void led_put(struct led_classdev *led_cdev);
+
 /**
  * led_blink_set - set blinking with software fallback
  * @led_cdev: the LED to start blinking
-- 
2.17.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v9 3/5] leds: Add managed API to get a LED from a device driver
  2019-10-07 12:44 ` Jean-Jacques Hiblot
@ 2019-10-07 12:44   ` Jean-Jacques Hiblot
  -1 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-07 12:44 UTC (permalink / raw)
  To: jacek.anaszewski, pavel, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson
  Cc: dmurphy, linux-leds, linux-kernel, dri-devel, tomi.valkeinen,
	Jean-Jacques Hiblot

If the LED is acquired by a consumer device with devm_led_get(), it is
automatically released when the device is detached.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
---
 drivers/leds/led-class.c | 49 ++++++++++++++++++++++++++++++++++++++++
 include/linux/leds.h     |  2 ++
 2 files changed, 51 insertions(+)

diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 1d1f1d546dc7..639224392ffa 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -264,6 +264,55 @@ void led_put(struct led_classdev *led_cdev)
 }
 EXPORT_SYMBOL_GPL(led_put);
 
+static void devm_led_release(struct device *dev, void *res)
+{
+	struct led_classdev **p = res;
+
+	led_put(*p);
+}
+
+/**
+ * devm_of_led_get - Resource-managed request of a LED device
+ * @dev:	LED consumer
+ * @index:	index of the LED to obtain in the consumer
+ *
+ * The device node of the device is parse to find the request LED device.
+ * The LED device returned from this function is automatically released
+ * on driver detach.
+ *
+ * @return a pointer to a LED device or ERR_PTR(errno) on failure.
+ */
+struct led_classdev *__must_check devm_of_led_get(struct device *dev,
+						  int index)
+{
+	struct led_classdev *led;
+	struct led_classdev **dr;
+
+	if (!dev)
+		return ERR_PTR(-EINVAL);
+
+	/* Consummer not using device tree? */
+	if (!dev_of_node(dev))
+		return ERR_PTR(-ENOTSUPP);
+
+	led = of_led_get(dev_of_node(dev), index);
+	if (IS_ERR(led))
+		return led;
+
+	dr = devres_alloc(devm_led_release, sizeof(struct led_classdev *),
+			  GFP_KERNEL);
+	if (!dr) {
+		led_put(led);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	*dr = led;
+	devres_add(dev, dr);
+
+	return led;
+}
+EXPORT_SYMBOL_GPL(devm_of_led_get);
+
 static int led_classdev_next_name(const char *init_name, char *name,
 				  size_t len)
 {
diff --git a/include/linux/leds.h b/include/linux/leds.h
index 6f7371bc7757..9b94cf752012 100644
--- a/include/linux/leds.h
+++ b/include/linux/leds.h
@@ -199,6 +199,8 @@ extern void led_classdev_resume(struct led_classdev *led_cdev);
 
 extern struct led_classdev *of_led_get(struct device_node *np, int index);
 extern void led_put(struct led_classdev *led_cdev);
+struct led_classdev *__must_check devm_of_led_get(struct device *dev,
+						  int index);
 
 /**
  * led_blink_set - set blinking with software fallback
-- 
2.17.1


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

* [PATCH v9 3/5] leds: Add managed API to get a LED from a device driver
@ 2019-10-07 12:44   ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-07 12:44 UTC (permalink / raw)
  To: jacek.anaszewski, pavel, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson
  Cc: linux-kernel, dri-devel, tomi.valkeinen, dmurphy,
	Jean-Jacques Hiblot, linux-leds

If the LED is acquired by a consumer device with devm_led_get(), it is
automatically released when the device is detached.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
---
 drivers/leds/led-class.c | 49 ++++++++++++++++++++++++++++++++++++++++
 include/linux/leds.h     |  2 ++
 2 files changed, 51 insertions(+)

diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index 1d1f1d546dc7..639224392ffa 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -264,6 +264,55 @@ void led_put(struct led_classdev *led_cdev)
 }
 EXPORT_SYMBOL_GPL(led_put);
 
+static void devm_led_release(struct device *dev, void *res)
+{
+	struct led_classdev **p = res;
+
+	led_put(*p);
+}
+
+/**
+ * devm_of_led_get - Resource-managed request of a LED device
+ * @dev:	LED consumer
+ * @index:	index of the LED to obtain in the consumer
+ *
+ * The device node of the device is parse to find the request LED device.
+ * The LED device returned from this function is automatically released
+ * on driver detach.
+ *
+ * @return a pointer to a LED device or ERR_PTR(errno) on failure.
+ */
+struct led_classdev *__must_check devm_of_led_get(struct device *dev,
+						  int index)
+{
+	struct led_classdev *led;
+	struct led_classdev **dr;
+
+	if (!dev)
+		return ERR_PTR(-EINVAL);
+
+	/* Consummer not using device tree? */
+	if (!dev_of_node(dev))
+		return ERR_PTR(-ENOTSUPP);
+
+	led = of_led_get(dev_of_node(dev), index);
+	if (IS_ERR(led))
+		return led;
+
+	dr = devres_alloc(devm_led_release, sizeof(struct led_classdev *),
+			  GFP_KERNEL);
+	if (!dr) {
+		led_put(led);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	*dr = led;
+	devres_add(dev, dr);
+
+	return led;
+}
+EXPORT_SYMBOL_GPL(devm_of_led_get);
+
 static int led_classdev_next_name(const char *init_name, char *name,
 				  size_t len)
 {
diff --git a/include/linux/leds.h b/include/linux/leds.h
index 6f7371bc7757..9b94cf752012 100644
--- a/include/linux/leds.h
+++ b/include/linux/leds.h
@@ -199,6 +199,8 @@ extern void led_classdev_resume(struct led_classdev *led_cdev);
 
 extern struct led_classdev *of_led_get(struct device_node *np, int index);
 extern void led_put(struct led_classdev *led_cdev);
+struct led_classdev *__must_check devm_of_led_get(struct device *dev,
+						  int index);
 
 /**
  * led_blink_set - set blinking with software fallback
-- 
2.17.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
  2019-10-07 12:44 ` Jean-Jacques Hiblot
@ 2019-10-07 12:44   ` Jean-Jacques Hiblot
  -1 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-07 12:44 UTC (permalink / raw)
  To: jacek.anaszewski, pavel, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson
  Cc: dmurphy, linux-leds, linux-kernel, dri-devel, tomi.valkeinen,
	Jean-Jacques Hiblot

Add DT binding for led-backlight.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 .../bindings/leds/backlight/led-backlight.txt | 28 +++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/leds/backlight/led-backlight.txt

diff --git a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
new file mode 100644
index 000000000000..4c7dfbe7f67a
--- /dev/null
+++ b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
@@ -0,0 +1,28 @@
+led-backlight bindings
+
+This binding is used to describe a basic backlight device made of LEDs.
+It can also be used to describe a backlight device controlled by the output of
+a LED driver.
+
+Required properties:
+  - compatible: "led-backlight"
+  - leds: a list of LEDs
+
+Optional properties:
+  - brightness-levels: Array of distinct brightness levels. The levels must be
+                       in the range accepted by the underlying LED devices.
+                       This is used to translate a backlight brightness level
+                       into a LED brightness level. If it is not provided, the
+                       identity mapping is used.
+
+  - default-brightness-level: The default brightness level.
+
+Example:
+
+	backlight {
+		compatible = "led-backlight";
+
+		leds = <&led1>, <&led2>;
+		brightness-levels = <0 4 8 16 32 64 128 255>;
+		default-brightness-level = <6>;
+	};
-- 
2.17.1


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

* [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
@ 2019-10-07 12:44   ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-07 12:44 UTC (permalink / raw)
  To: jacek.anaszewski, pavel, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson
  Cc: linux-kernel, dri-devel, tomi.valkeinen, dmurphy,
	Jean-Jacques Hiblot, linux-leds

Add DT binding for led-backlight.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 .../bindings/leds/backlight/led-backlight.txt | 28 +++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/leds/backlight/led-backlight.txt

diff --git a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
new file mode 100644
index 000000000000..4c7dfbe7f67a
--- /dev/null
+++ b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
@@ -0,0 +1,28 @@
+led-backlight bindings
+
+This binding is used to describe a basic backlight device made of LEDs.
+It can also be used to describe a backlight device controlled by the output of
+a LED driver.
+
+Required properties:
+  - compatible: "led-backlight"
+  - leds: a list of LEDs
+
+Optional properties:
+  - brightness-levels: Array of distinct brightness levels. The levels must be
+                       in the range accepted by the underlying LED devices.
+                       This is used to translate a backlight brightness level
+                       into a LED brightness level. If it is not provided, the
+                       identity mapping is used.
+
+  - default-brightness-level: The default brightness level.
+
+Example:
+
+	backlight {
+		compatible = "led-backlight";
+
+		leds = <&led1>, <&led2>;
+		brightness-levels = <0 4 8 16 32 64 128 255>;
+		default-brightness-level = <6>;
+	};
-- 
2.17.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH v9 5/5] backlight: add led-backlight driver
  2019-10-07 12:44 ` Jean-Jacques Hiblot
@ 2019-10-07 12:44   ` Jean-Jacques Hiblot
  -1 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-07 12:44 UTC (permalink / raw)
  To: jacek.anaszewski, pavel, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson
  Cc: dmurphy, linux-leds, linux-kernel, dri-devel, tomi.valkeinen,
	Jean-Jacques Hiblot

From: Tomi Valkeinen <tomi.valkeinen@ti.com>

This patch adds a led-backlight driver (led_bl), which is similar to
pwm_bl except the driver uses a LED class driver to adjust the
brightness in the HW. Multiple LEDs can be used for a single backlight.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 drivers/video/backlight/Kconfig  |   7 +
 drivers/video/backlight/Makefile |   1 +
 drivers/video/backlight/led_bl.c | 258 +++++++++++++++++++++++++++++++
 3 files changed, 266 insertions(+)
 create mode 100644 drivers/video/backlight/led_bl.c

diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
index 8b081d61773e..585a1787618c 100644
--- a/drivers/video/backlight/Kconfig
+++ b/drivers/video/backlight/Kconfig
@@ -458,6 +458,13 @@ config BACKLIGHT_RAVE_SP
 	help
 	  Support for backlight control on RAVE SP device.
 
+config BACKLIGHT_LED
+	tristate "Generic LED based Backlight Driver"
+	depends on LEDS_CLASS && OF
+	help
+	  If you have a LCD backlight adjustable by LED class driver, say Y
+	  to enable this driver.
+
 endif # BACKLIGHT_CLASS_DEVICE
 
 endmenu
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
index 63c507c07437..2a67642966a5 100644
--- a/drivers/video/backlight/Makefile
+++ b/drivers/video/backlight/Makefile
@@ -57,3 +57,4 @@ obj-$(CONFIG_BACKLIGHT_TPS65217)	+= tps65217_bl.o
 obj-$(CONFIG_BACKLIGHT_WM831X)		+= wm831x_bl.o
 obj-$(CONFIG_BACKLIGHT_ARCXCNN) 	+= arcxcnn_bl.o
 obj-$(CONFIG_BACKLIGHT_RAVE_SP)		+= rave-sp-backlight.o
+obj-$(CONFIG_BACKLIGHT_LED)		+= led_bl.o
diff --git a/drivers/video/backlight/led_bl.c b/drivers/video/backlight/led_bl.c
new file mode 100644
index 000000000000..b89ba20c1d16
--- /dev/null
+++ b/drivers/video/backlight/led_bl.c
@@ -0,0 +1,258 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Texas Instruments Incorporated -  http://www.ti.com/
+ * Authors: Tomi Valkeinen <tomi.valkeinen@ti.com>
+ *          Jean-Jacques Hiblot <jjhiblot@ti.com>
+ */
+
+#include <linux/backlight.h>
+#include <linux/leds.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+
+struct led_bl_data {
+	struct device		*dev;
+	struct backlight_device	*bl_dev;
+	struct led_classdev	**leds;
+	bool			enabled;
+	int			nb_leds;
+	unsigned int		*levels;
+	unsigned int		default_brightness;
+	unsigned int		max_brightness;
+};
+
+static void led_bl_set_brightness(struct led_bl_data *priv, int level)
+{
+	int i;
+	int bkl_brightness;
+
+	if (priv->levels)
+		bkl_brightness = priv->levels[level];
+	else
+		bkl_brightness = level;
+
+	for (i = 0; i < priv->nb_leds; i++)
+		led_set_brightness(priv->leds[i], bkl_brightness);
+
+	priv->enabled = true;
+}
+
+static void led_bl_power_off(struct led_bl_data *priv)
+{
+	int i;
+
+	if (!priv->enabled)
+		return;
+
+	for (i = 0; i < priv->nb_leds; i++)
+		led_set_brightness(priv->leds[i], LED_OFF);
+
+	priv->enabled = false;
+}
+
+static int led_bl_update_status(struct backlight_device *bl)
+{
+	struct led_bl_data *priv = bl_get_data(bl);
+	int brightness = bl->props.brightness;
+
+	if (bl->props.power != FB_BLANK_UNBLANK ||
+	    bl->props.fb_blank != FB_BLANK_UNBLANK ||
+	    bl->props.state & BL_CORE_FBBLANK)
+		brightness = 0;
+
+	if (brightness > 0)
+		led_bl_set_brightness(priv, brightness);
+	else
+		led_bl_power_off(priv);
+
+	return 0;
+}
+
+static const struct backlight_ops led_bl_ops = {
+	.update_status	= led_bl_update_status,
+};
+
+static int led_bl_get_leds(struct device *dev,
+			   struct led_bl_data *priv)
+{
+	int i, nb_leds, ret;
+	struct device_node *node = dev->of_node;
+	struct led_classdev **leds;
+	unsigned int max_brightness;
+	unsigned int default_brightness;
+
+	ret = of_count_phandle_with_args(node, "leds", NULL);
+	if (ret < 0) {
+		dev_err(dev, "Unable to get led count\n");
+		return -EINVAL;
+	}
+
+	nb_leds = ret;
+	if (nb_leds < 1) {
+		dev_err(dev, "At least one LED must be specified!\n");
+		return -EINVAL;
+	}
+
+	leds = devm_kzalloc(dev, sizeof(struct led_classdev *) * nb_leds,
+			    GFP_KERNEL);
+	if (!leds)
+		return -ENOMEM;
+
+	for (i = 0; i < nb_leds; i++) {
+		leds[i] = devm_of_led_get(dev, i);
+		if (IS_ERR(leds[i]))
+			return PTR_ERR(leds[i]);
+	}
+
+	/* check that the LEDs all have the same brightness range */
+	max_brightness = leds[0]->max_brightness;
+	for (i = 1; i < nb_leds; i++) {
+		if (max_brightness != leds[i]->max_brightness) {
+			dev_err(dev, "LEDs must have identical ranges\n");
+			return -EINVAL;
+		}
+	}
+
+	/* get the default brightness from the first LED from the list */
+	default_brightness = leds[0]->brightness;
+
+	priv->nb_leds = nb_leds;
+	priv->leds = leds;
+	priv->max_brightness = max_brightness;
+	priv->default_brightness = default_brightness;
+
+	return 0;
+}
+
+static int led_bl_parse_levels(struct device *dev,
+			   struct led_bl_data *priv)
+{
+	struct device_node *node = dev->of_node;
+	int num_levels;
+	u32 value;
+	int ret;
+
+	if (!node)
+		return -ENODEV;
+
+	num_levels = of_property_count_u32_elems(node, "brightness-levels");
+	if (num_levels > 1) {
+		int i;
+		unsigned int db;
+		u32 *levels = NULL;
+
+		levels = devm_kzalloc(dev, sizeof(u32) * num_levels,
+				      GFP_KERNEL);
+		if (!levels)
+			return -ENOMEM;
+
+		ret = of_property_read_u32_array(node, "brightness-levels",
+						levels,
+						num_levels);
+		if (ret < 0)
+			return ret;
+
+		/*
+		 * Try to map actual LED brightness to backlight brightness
+		 * level
+		 */
+		db = priv->default_brightness;
+		for (i = 0 ; i < num_levels; i++) {
+			if ((i && db > levels[i-1]) && db <= levels[i])
+				break;
+		}
+		priv->default_brightness = i;
+		priv->max_brightness = num_levels - 1;
+		priv->levels = levels;
+	} else if (num_levels >= 0)
+		dev_warn(dev, "Not enough levels defined\n");
+
+	ret = of_property_read_u32(node, "default-brightness-level", &value);
+	if (!ret && value <= priv->max_brightness)
+		priv->default_brightness = value;
+	else if (!ret  && value > priv->max_brightness)
+		dev_warn(dev, "Invalid default brightness. Ignoring it\n");
+
+	return 0;
+}
+
+static void led_bl_cleanup(void *data)
+{
+	struct led_bl_data *priv = data;
+	int i;
+
+	led_bl_power_off(priv);
+	for (i = 0; i < priv->nb_leds; i++)
+		led_sysfs_enable(priv->leds[i]);
+}
+
+static int led_bl_probe(struct platform_device *pdev)
+{
+	struct backlight_properties props;
+	struct led_bl_data *priv;
+	int ret, i;
+
+	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	platform_set_drvdata(pdev, priv);
+
+	priv->dev = &pdev->dev;
+
+	ret = led_bl_get_leds(&pdev->dev, priv);
+	if (ret)
+		return ret;
+
+	ret = led_bl_parse_levels(&pdev->dev, priv);
+	if (ret < 0) {
+		dev_err(&pdev->dev, "Failed to parse DT data\n");
+		return ret;
+	}
+
+	ret = devm_add_action_or_reset(&pdev->dev, led_bl_cleanup, priv);
+	if (ret)
+		return ret;
+
+	for (i = 0; i < priv->nb_leds; i++)
+		led_sysfs_disable(priv->leds[i]);
+
+	memset(&props, 0, sizeof(struct backlight_properties));
+	props.type = BACKLIGHT_RAW;
+	props.max_brightness = priv->max_brightness;
+	props.brightness = priv->default_brightness;
+	props.power = (priv->default_brightness > 0) ? FB_BLANK_POWERDOWN :
+		      FB_BLANK_UNBLANK;
+	priv->bl_dev = devm_backlight_device_register(&pdev->dev,
+			dev_name(&pdev->dev), &pdev->dev, priv, &led_bl_ops,
+			&props);
+	if (IS_ERR(priv->bl_dev)) {
+		dev_err(&pdev->dev, "Failed to register backlight\n");
+		return PTR_ERR(priv->bl_dev);
+	}
+
+	backlight_update_status(priv->bl_dev);
+
+	return 0;
+}
+
+static const struct of_device_id led_bl_of_match[] = {
+	{ .compatible = "led-backlight" },
+	{ }
+};
+
+MODULE_DEVICE_TABLE(of, led_bl_of_match);
+
+static struct platform_driver led_bl_driver = {
+	.driver		= {
+		.name		= "led-backlight",
+		.of_match_table	= led_bl_of_match,
+	},
+	.probe		= led_bl_probe,
+};
+
+module_platform_driver(led_bl_driver);
+
+MODULE_DESCRIPTION("LED based Backlight Driver");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:led-backlight");
-- 
2.17.1


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

* [PATCH v9 5/5] backlight: add led-backlight driver
@ 2019-10-07 12:44   ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-07 12:44 UTC (permalink / raw)
  To: jacek.anaszewski, pavel, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson
  Cc: linux-kernel, dri-devel, tomi.valkeinen, dmurphy,
	Jean-Jacques Hiblot, linux-leds

From: Tomi Valkeinen <tomi.valkeinen@ti.com>

This patch adds a led-backlight driver (led_bl), which is similar to
pwm_bl except the driver uses a LED class driver to adjust the
brightness in the HW. Multiple LEDs can be used for a single backlight.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 drivers/video/backlight/Kconfig  |   7 +
 drivers/video/backlight/Makefile |   1 +
 drivers/video/backlight/led_bl.c | 258 +++++++++++++++++++++++++++++++
 3 files changed, 266 insertions(+)
 create mode 100644 drivers/video/backlight/led_bl.c

diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
index 8b081d61773e..585a1787618c 100644
--- a/drivers/video/backlight/Kconfig
+++ b/drivers/video/backlight/Kconfig
@@ -458,6 +458,13 @@ config BACKLIGHT_RAVE_SP
 	help
 	  Support for backlight control on RAVE SP device.
 
+config BACKLIGHT_LED
+	tristate "Generic LED based Backlight Driver"
+	depends on LEDS_CLASS && OF
+	help
+	  If you have a LCD backlight adjustable by LED class driver, say Y
+	  to enable this driver.
+
 endif # BACKLIGHT_CLASS_DEVICE
 
 endmenu
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
index 63c507c07437..2a67642966a5 100644
--- a/drivers/video/backlight/Makefile
+++ b/drivers/video/backlight/Makefile
@@ -57,3 +57,4 @@ obj-$(CONFIG_BACKLIGHT_TPS65217)	+= tps65217_bl.o
 obj-$(CONFIG_BACKLIGHT_WM831X)		+= wm831x_bl.o
 obj-$(CONFIG_BACKLIGHT_ARCXCNN) 	+= arcxcnn_bl.o
 obj-$(CONFIG_BACKLIGHT_RAVE_SP)		+= rave-sp-backlight.o
+obj-$(CONFIG_BACKLIGHT_LED)		+= led_bl.o
diff --git a/drivers/video/backlight/led_bl.c b/drivers/video/backlight/led_bl.c
new file mode 100644
index 000000000000..b89ba20c1d16
--- /dev/null
+++ b/drivers/video/backlight/led_bl.c
@@ -0,0 +1,258 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Texas Instruments Incorporated -  http://www.ti.com/
+ * Authors: Tomi Valkeinen <tomi.valkeinen@ti.com>
+ *          Jean-Jacques Hiblot <jjhiblot@ti.com>
+ */
+
+#include <linux/backlight.h>
+#include <linux/leds.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+
+struct led_bl_data {
+	struct device		*dev;
+	struct backlight_device	*bl_dev;
+	struct led_classdev	**leds;
+	bool			enabled;
+	int			nb_leds;
+	unsigned int		*levels;
+	unsigned int		default_brightness;
+	unsigned int		max_brightness;
+};
+
+static void led_bl_set_brightness(struct led_bl_data *priv, int level)
+{
+	int i;
+	int bkl_brightness;
+
+	if (priv->levels)
+		bkl_brightness = priv->levels[level];
+	else
+		bkl_brightness = level;
+
+	for (i = 0; i < priv->nb_leds; i++)
+		led_set_brightness(priv->leds[i], bkl_brightness);
+
+	priv->enabled = true;
+}
+
+static void led_bl_power_off(struct led_bl_data *priv)
+{
+	int i;
+
+	if (!priv->enabled)
+		return;
+
+	for (i = 0; i < priv->nb_leds; i++)
+		led_set_brightness(priv->leds[i], LED_OFF);
+
+	priv->enabled = false;
+}
+
+static int led_bl_update_status(struct backlight_device *bl)
+{
+	struct led_bl_data *priv = bl_get_data(bl);
+	int brightness = bl->props.brightness;
+
+	if (bl->props.power != FB_BLANK_UNBLANK ||
+	    bl->props.fb_blank != FB_BLANK_UNBLANK ||
+	    bl->props.state & BL_CORE_FBBLANK)
+		brightness = 0;
+
+	if (brightness > 0)
+		led_bl_set_brightness(priv, brightness);
+	else
+		led_bl_power_off(priv);
+
+	return 0;
+}
+
+static const struct backlight_ops led_bl_ops = {
+	.update_status	= led_bl_update_status,
+};
+
+static int led_bl_get_leds(struct device *dev,
+			   struct led_bl_data *priv)
+{
+	int i, nb_leds, ret;
+	struct device_node *node = dev->of_node;
+	struct led_classdev **leds;
+	unsigned int max_brightness;
+	unsigned int default_brightness;
+
+	ret = of_count_phandle_with_args(node, "leds", NULL);
+	if (ret < 0) {
+		dev_err(dev, "Unable to get led count\n");
+		return -EINVAL;
+	}
+
+	nb_leds = ret;
+	if (nb_leds < 1) {
+		dev_err(dev, "At least one LED must be specified!\n");
+		return -EINVAL;
+	}
+
+	leds = devm_kzalloc(dev, sizeof(struct led_classdev *) * nb_leds,
+			    GFP_KERNEL);
+	if (!leds)
+		return -ENOMEM;
+
+	for (i = 0; i < nb_leds; i++) {
+		leds[i] = devm_of_led_get(dev, i);
+		if (IS_ERR(leds[i]))
+			return PTR_ERR(leds[i]);
+	}
+
+	/* check that the LEDs all have the same brightness range */
+	max_brightness = leds[0]->max_brightness;
+	for (i = 1; i < nb_leds; i++) {
+		if (max_brightness != leds[i]->max_brightness) {
+			dev_err(dev, "LEDs must have identical ranges\n");
+			return -EINVAL;
+		}
+	}
+
+	/* get the default brightness from the first LED from the list */
+	default_brightness = leds[0]->brightness;
+
+	priv->nb_leds = nb_leds;
+	priv->leds = leds;
+	priv->max_brightness = max_brightness;
+	priv->default_brightness = default_brightness;
+
+	return 0;
+}
+
+static int led_bl_parse_levels(struct device *dev,
+			   struct led_bl_data *priv)
+{
+	struct device_node *node = dev->of_node;
+	int num_levels;
+	u32 value;
+	int ret;
+
+	if (!node)
+		return -ENODEV;
+
+	num_levels = of_property_count_u32_elems(node, "brightness-levels");
+	if (num_levels > 1) {
+		int i;
+		unsigned int db;
+		u32 *levels = NULL;
+
+		levels = devm_kzalloc(dev, sizeof(u32) * num_levels,
+				      GFP_KERNEL);
+		if (!levels)
+			return -ENOMEM;
+
+		ret = of_property_read_u32_array(node, "brightness-levels",
+						levels,
+						num_levels);
+		if (ret < 0)
+			return ret;
+
+		/*
+		 * Try to map actual LED brightness to backlight brightness
+		 * level
+		 */
+		db = priv->default_brightness;
+		for (i = 0 ; i < num_levels; i++) {
+			if ((i && db > levels[i-1]) && db <= levels[i])
+				break;
+		}
+		priv->default_brightness = i;
+		priv->max_brightness = num_levels - 1;
+		priv->levels = levels;
+	} else if (num_levels >= 0)
+		dev_warn(dev, "Not enough levels defined\n");
+
+	ret = of_property_read_u32(node, "default-brightness-level", &value);
+	if (!ret && value <= priv->max_brightness)
+		priv->default_brightness = value;
+	else if (!ret  && value > priv->max_brightness)
+		dev_warn(dev, "Invalid default brightness. Ignoring it\n");
+
+	return 0;
+}
+
+static void led_bl_cleanup(void *data)
+{
+	struct led_bl_data *priv = data;
+	int i;
+
+	led_bl_power_off(priv);
+	for (i = 0; i < priv->nb_leds; i++)
+		led_sysfs_enable(priv->leds[i]);
+}
+
+static int led_bl_probe(struct platform_device *pdev)
+{
+	struct backlight_properties props;
+	struct led_bl_data *priv;
+	int ret, i;
+
+	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	platform_set_drvdata(pdev, priv);
+
+	priv->dev = &pdev->dev;
+
+	ret = led_bl_get_leds(&pdev->dev, priv);
+	if (ret)
+		return ret;
+
+	ret = led_bl_parse_levels(&pdev->dev, priv);
+	if (ret < 0) {
+		dev_err(&pdev->dev, "Failed to parse DT data\n");
+		return ret;
+	}
+
+	ret = devm_add_action_or_reset(&pdev->dev, led_bl_cleanup, priv);
+	if (ret)
+		return ret;
+
+	for (i = 0; i < priv->nb_leds; i++)
+		led_sysfs_disable(priv->leds[i]);
+
+	memset(&props, 0, sizeof(struct backlight_properties));
+	props.type = BACKLIGHT_RAW;
+	props.max_brightness = priv->max_brightness;
+	props.brightness = priv->default_brightness;
+	props.power = (priv->default_brightness > 0) ? FB_BLANK_POWERDOWN :
+		      FB_BLANK_UNBLANK;
+	priv->bl_dev = devm_backlight_device_register(&pdev->dev,
+			dev_name(&pdev->dev), &pdev->dev, priv, &led_bl_ops,
+			&props);
+	if (IS_ERR(priv->bl_dev)) {
+		dev_err(&pdev->dev, "Failed to register backlight\n");
+		return PTR_ERR(priv->bl_dev);
+	}
+
+	backlight_update_status(priv->bl_dev);
+
+	return 0;
+}
+
+static const struct of_device_id led_bl_of_match[] = {
+	{ .compatible = "led-backlight" },
+	{ }
+};
+
+MODULE_DEVICE_TABLE(of, led_bl_of_match);
+
+static struct platform_driver led_bl_driver = {
+	.driver		= {
+		.name		= "led-backlight",
+		.of_match_table	= led_bl_of_match,
+	},
+	.probe		= led_bl_probe,
+};
+
+module_platform_driver(led_bl_driver);
+
+MODULE_DESCRIPTION("LED based Backlight Driver");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:led-backlight");
-- 
2.17.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
  2019-10-07 12:44   ` Jean-Jacques Hiblot
@ 2019-10-07 16:15     ` Rob Herring
  -1 siblings, 0 replies; 28+ messages in thread
From: Rob Herring @ 2019-10-07 16:15 UTC (permalink / raw)
  To: Jean-Jacques Hiblot
  Cc: Jacek Anaszewski, Pavel Machek, Sebastian Reichel, Mark Rutland,
	Lee Jones, Daniel Thompson, Dan Murphy, Linux LED Subsystem,
	linux-kernel, dri-devel, Tomi Valkeinen

Please send DT bindings to DT list or it's never in my queue. IOW,
send patches to the lists that get_maintainers.pl tells you to.

On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>
> Add DT binding for led-backlight.
>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> ---
>  .../bindings/leds/backlight/led-backlight.txt | 28 +++++++++++++++++++
>  1 file changed, 28 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/leds/backlight/led-backlight.txt

Please make this a DT schema.

> diff --git a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> new file mode 100644
> index 000000000000..4c7dfbe7f67a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> @@ -0,0 +1,28 @@
> +led-backlight bindings
> +
> +This binding is used to describe a basic backlight device made of LEDs.
> +It can also be used to describe a backlight device controlled by the output of
> +a LED driver.
> +
> +Required properties:
> +  - compatible: "led-backlight"
> +  - leds: a list of LEDs

'leds' is already used as a node name and mixing is not ideal.

We already have 'flash-leds' in use and with the same definition, so
lets continue that and use 'backlight-leds'.

> +
> +Optional properties:
> +  - brightness-levels: Array of distinct brightness levels. The levels must be
> +                       in the range accepted by the underlying LED devices.
> +                       This is used to translate a backlight brightness level
> +                       into a LED brightness level. If it is not provided, the
> +                       identity mapping is used.
> +
> +  - default-brightness-level: The default brightness level.

You can just assume these 2 get a common schema at some point. So just
need to define any additional constraints if possible.

Rob

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
@ 2019-10-07 16:15     ` Rob Herring
  0 siblings, 0 replies; 28+ messages in thread
From: Rob Herring @ 2019-10-07 16:15 UTC (permalink / raw)
  To: Jean-Jacques Hiblot
  Cc: Mark Rutland, Daniel Thompson, Sebastian Reichel, dri-devel,
	linux-kernel, Tomi Valkeinen, Jacek Anaszewski, Pavel Machek,
	Lee Jones, Linux LED Subsystem, Dan Murphy

Please send DT bindings to DT list or it's never in my queue. IOW,
send patches to the lists that get_maintainers.pl tells you to.

On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>
> Add DT binding for led-backlight.
>
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> ---
>  .../bindings/leds/backlight/led-backlight.txt | 28 +++++++++++++++++++
>  1 file changed, 28 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/leds/backlight/led-backlight.txt

Please make this a DT schema.

> diff --git a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> new file mode 100644
> index 000000000000..4c7dfbe7f67a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> @@ -0,0 +1,28 @@
> +led-backlight bindings
> +
> +This binding is used to describe a basic backlight device made of LEDs.
> +It can also be used to describe a backlight device controlled by the output of
> +a LED driver.
> +
> +Required properties:
> +  - compatible: "led-backlight"
> +  - leds: a list of LEDs

'leds' is already used as a node name and mixing is not ideal.

We already have 'flash-leds' in use and with the same definition, so
lets continue that and use 'backlight-leds'.

> +
> +Optional properties:
> +  - brightness-levels: Array of distinct brightness levels. The levels must be
> +                       in the range accepted by the underlying LED devices.
> +                       This is used to translate a backlight brightness level
> +                       into a LED brightness level. If it is not provided, the
> +                       identity mapping is used.
> +
> +  - default-brightness-level: The default brightness level.

You can just assume these 2 get a common schema at some point. So just
need to define any additional constraints if possible.

Rob
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
  2019-10-07 16:15     ` Rob Herring
@ 2019-10-08 12:51       ` Jean-Jacques Hiblot
  -1 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-08 12:51 UTC (permalink / raw)
  To: Rob Herring
  Cc: Jacek Anaszewski, Pavel Machek, Sebastian Reichel, Mark Rutland,
	Lee Jones, Daniel Thompson, Dan Murphy, Linux LED Subsystem,
	linux-kernel, dri-devel, Tomi Valkeinen

Hi Rob,

On 07/10/2019 18:15, Rob Herring wrote:
> Please send DT bindings to DT list or it's never in my queue. IOW,
> send patches to the lists that get_maintainers.pl tells you to.
>
> On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>> Add DT binding for led-backlight.
>>
>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
>> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
>> ---
>>   .../bindings/leds/backlight/led-backlight.txt | 28 +++++++++++++++++++
>>   1 file changed, 28 insertions(+)
>>   create mode 100644 Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> Please make this a DT schema.

OK.

BTW I used "make dt_binding_check" but had to fix a couple of YAMLs file 
to get it to work. Do you have a kernel tree with already all the YAML 
files in good shape ? Or do you want me to post the changes to 
devicetree@vger.kernel.org ?


>
>> diff --git a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>> new file mode 100644
>> index 000000000000..4c7dfbe7f67a
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>> @@ -0,0 +1,28 @@
>> +led-backlight bindings
>> +
>> +This binding is used to describe a basic backlight device made of LEDs.
>> +It can also be used to describe a backlight device controlled by the output of
>> +a LED driver.
>> +
>> +Required properties:
>> +  - compatible: "led-backlight"
>> +  - leds: a list of LEDs
> 'leds' is already used as a node name and mixing is not ideal.
>
> We already have 'flash-leds' in use and with the same definition, so
> lets continue that and use 'backlight-leds'.
OK
>
>> +
>> +Optional properties:
>> +  - brightness-levels: Array of distinct brightness levels. The levels must be
>> +                       in the range accepted by the underlying LED devices.
>> +                       This is used to translate a backlight brightness level
>> +                       into a LED brightness level. If it is not provided, the
>> +                       identity mapping is used.
>> +
>> +  - default-brightness-level: The default brightness level.
> You can just assume these 2 get a common schema at some point. So just
> need to define any additional constraints if possible.

Maybe we should keep them until such a common schema is written ?

JJ

>
> Rob

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
@ 2019-10-08 12:51       ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-08 12:51 UTC (permalink / raw)
  To: Rob Herring
  Cc: Mark Rutland, Daniel Thompson, Sebastian Reichel, dri-devel,
	linux-kernel, Tomi Valkeinen, Jacek Anaszewski, Pavel Machek,
	Lee Jones, Linux LED Subsystem, Dan Murphy

Hi Rob,

On 07/10/2019 18:15, Rob Herring wrote:
> Please send DT bindings to DT list or it's never in my queue. IOW,
> send patches to the lists that get_maintainers.pl tells you to.
>
> On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>> Add DT binding for led-backlight.
>>
>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
>> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
>> ---
>>   .../bindings/leds/backlight/led-backlight.txt | 28 +++++++++++++++++++
>>   1 file changed, 28 insertions(+)
>>   create mode 100644 Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> Please make this a DT schema.

OK.

BTW I used "make dt_binding_check" but had to fix a couple of YAMLs file 
to get it to work. Do you have a kernel tree with already all the YAML 
files in good shape ? Or do you want me to post the changes to 
devicetree@vger.kernel.org ?


>
>> diff --git a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>> new file mode 100644
>> index 000000000000..4c7dfbe7f67a
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>> @@ -0,0 +1,28 @@
>> +led-backlight bindings
>> +
>> +This binding is used to describe a basic backlight device made of LEDs.
>> +It can also be used to describe a backlight device controlled by the output of
>> +a LED driver.
>> +
>> +Required properties:
>> +  - compatible: "led-backlight"
>> +  - leds: a list of LEDs
> 'leds' is already used as a node name and mixing is not ideal.
>
> We already have 'flash-leds' in use and with the same definition, so
> lets continue that and use 'backlight-leds'.
OK
>
>> +
>> +Optional properties:
>> +  - brightness-levels: Array of distinct brightness levels. The levels must be
>> +                       in the range accepted by the underlying LED devices.
>> +                       This is used to translate a backlight brightness level
>> +                       into a LED brightness level. If it is not provided, the
>> +                       identity mapping is used.
>> +
>> +  - default-brightness-level: The default brightness level.
> You can just assume these 2 get a common schema at some point. So just
> need to define any additional constraints if possible.

Maybe we should keep them until such a common schema is written ?

JJ

>
> Rob
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
  2019-10-08 12:51       ` Jean-Jacques Hiblot
@ 2019-10-08 13:30         ` Jean-Jacques Hiblot
  -1 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-08 13:30 UTC (permalink / raw)
  To: Rob Herring
  Cc: Jacek Anaszewski, Pavel Machek, Sebastian Reichel, Mark Rutland,
	Lee Jones, Daniel Thompson, Dan Murphy, Linux LED Subsystem,
	linux-kernel, dri-devel, Tomi Valkeinen

Rob,

On 08/10/2019 14:51, Jean-Jacques Hiblot wrote:
> Hi Rob,
>
> On 07/10/2019 18:15, Rob Herring wrote:
>> Please send DT bindings to DT list or it's never in my queue. IOW,
>> send patches to the lists that get_maintainers.pl tells you to.
>>
>> On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com> 
>> wrote:
>>> Add DT binding for led-backlight.
>>>
>>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>>> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
>>> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
>>> ---
>>>   .../bindings/leds/backlight/led-backlight.txt | 28 
>>> +++++++++++++++++++
>>>   1 file changed, 28 insertions(+)
>>>   create mode 100644 
>>> Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>> Please make this a DT schema.
>
> OK.
>
> BTW I used "make dt_binding_check" but had to fix a couple of YAMLs 
> file to get it to work. Do you have a kernel tree with already all the 
> YAML files in good shape ? Or do you want me to post the changes to 
> devicetree@vger.kernel.org ?
>
>
>>
>>> diff --git 
>>> a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt 
>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>> new file mode 100644
>>> index 000000000000..4c7dfbe7f67a
>>> --- /dev/null
>>> +++ 
>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>> @@ -0,0 +1,28 @@
>>> +led-backlight bindings
>>> +
>>> +This binding is used to describe a basic backlight device made of 
>>> LEDs.
>>> +It can also be used to describe a backlight device controlled by 
>>> the output of
>>> +a LED driver.
>>> +
>>> +Required properties:
>>> +  - compatible: "led-backlight"
>>> +  - leds: a list of LEDs
>> 'leds' is already used as a node name and mixing is not ideal.
>>
>> We already have 'flash-leds' in use and with the same definition, so
>> lets continue that and use 'backlight-leds'.
> OK

I am taking that back. I have added of_get_led() and devm_of_get_led() 
to the LED core to make it easier to get a LED from the DT. I modeled 
the interface like it is done for PWM, PHYs or clocks. The property 
containing list/array of phandle  is always named the same. To get one 
particular PWM/PHY/clock, a identifier (name or integer) must be provided.

So unless there is a strong incentive to do otherwise I's rather keep 
this name here.


JJ


>>> +
>>> +Optional properties:
>>> +  - brightness-levels: Array of distinct brightness levels. The 
>>> levels must be
>>> +                       in the range accepted by the underlying LED 
>>> devices.
>>> +                       This is used to translate a backlight 
>>> brightness level
>>> +                       into a LED brightness level. If it is not 
>>> provided, the
>>> +                       identity mapping is used.
>>> +
>>> +  - default-brightness-level: The default brightness level.
>> You can just assume these 2 get a common schema at some point. So just
>> need to define any additional constraints if possible.
>
> Maybe we should keep them until such a common schema is written ?
>
> JJ
>
>>
>> Rob

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
@ 2019-10-08 13:30         ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 28+ messages in thread
From: Jean-Jacques Hiblot @ 2019-10-08 13:30 UTC (permalink / raw)
  To: Rob Herring
  Cc: Mark Rutland, Daniel Thompson, Sebastian Reichel, dri-devel,
	linux-kernel, Tomi Valkeinen, Jacek Anaszewski, Pavel Machek,
	Lee Jones, Linux LED Subsystem, Dan Murphy

Rob,

On 08/10/2019 14:51, Jean-Jacques Hiblot wrote:
> Hi Rob,
>
> On 07/10/2019 18:15, Rob Herring wrote:
>> Please send DT bindings to DT list or it's never in my queue. IOW,
>> send patches to the lists that get_maintainers.pl tells you to.
>>
>> On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com> 
>> wrote:
>>> Add DT binding for led-backlight.
>>>
>>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>>> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
>>> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
>>> ---
>>>   .../bindings/leds/backlight/led-backlight.txt | 28 
>>> +++++++++++++++++++
>>>   1 file changed, 28 insertions(+)
>>>   create mode 100644 
>>> Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>> Please make this a DT schema.
>
> OK.
>
> BTW I used "make dt_binding_check" but had to fix a couple of YAMLs 
> file to get it to work. Do you have a kernel tree with already all the 
> YAML files in good shape ? Or do you want me to post the changes to 
> devicetree@vger.kernel.org ?
>
>
>>
>>> diff --git 
>>> a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt 
>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>> new file mode 100644
>>> index 000000000000..4c7dfbe7f67a
>>> --- /dev/null
>>> +++ 
>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>> @@ -0,0 +1,28 @@
>>> +led-backlight bindings
>>> +
>>> +This binding is used to describe a basic backlight device made of 
>>> LEDs.
>>> +It can also be used to describe a backlight device controlled by 
>>> the output of
>>> +a LED driver.
>>> +
>>> +Required properties:
>>> +  - compatible: "led-backlight"
>>> +  - leds: a list of LEDs
>> 'leds' is already used as a node name and mixing is not ideal.
>>
>> We already have 'flash-leds' in use and with the same definition, so
>> lets continue that and use 'backlight-leds'.
> OK

I am taking that back. I have added of_get_led() and devm_of_get_led() 
to the LED core to make it easier to get a LED from the DT. I modeled 
the interface like it is done for PWM, PHYs or clocks. The property 
containing list/array of phandle  is always named the same. To get one 
particular PWM/PHY/clock, a identifier (name or integer) must be provided.

So unless there is a strong incentive to do otherwise I's rather keep 
this name here.


JJ


>>> +
>>> +Optional properties:
>>> +  - brightness-levels: Array of distinct brightness levels. The 
>>> levels must be
>>> +                       in the range accepted by the underlying LED 
>>> devices.
>>> +                       This is used to translate a backlight 
>>> brightness level
>>> +                       into a LED brightness level. If it is not 
>>> provided, the
>>> +                       identity mapping is used.
>>> +
>>> +  - default-brightness-level: The default brightness level.
>> You can just assume these 2 get a common schema at some point. So just
>> need to define any additional constraints if possible.
>
> Maybe we should keep them until such a common schema is written ?
>
> JJ
>
>>
>> Rob
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
  2019-10-08 12:51       ` Jean-Jacques Hiblot
  (?)
  (?)
@ 2019-10-08 14:52       ` Rob Herring
  -1 siblings, 0 replies; 28+ messages in thread
From: Rob Herring @ 2019-10-08 14:52 UTC (permalink / raw)
  To: Jean-Jacques Hiblot
  Cc: Jacek Anaszewski, Pavel Machek, Sebastian Reichel, Mark Rutland,
	Lee Jones, Daniel Thompson, Dan Murphy, Linux LED Subsystem,
	linux-kernel, dri-devel, Tomi Valkeinen

On Tue, Oct 8, 2019 at 7:51 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>
> Hi Rob,
>
> On 07/10/2019 18:15, Rob Herring wrote:
> > Please send DT bindings to DT list or it's never in my queue. IOW,
> > send patches to the lists that get_maintainers.pl tells you to.
> >
> > On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
> >> Add DT binding for led-backlight.
> >>
> >> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> >> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
> >> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> >> ---
> >>   .../bindings/leds/backlight/led-backlight.txt | 28 +++++++++++++++++++
> >>   1 file changed, 28 insertions(+)
> >>   create mode 100644 Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> > Please make this a DT schema.
>
> OK.
>
> BTW I used "make dt_binding_check" but had to fix a couple of YAMLs file
> to get it to work. Do you have a kernel tree with already all the YAML
> files in good shape ? Or do you want me to post the changes to
> devicetree@vger.kernel.org ?

linux-next is fixed now.

> >> diff --git a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >> new file mode 100644
> >> index 000000000000..4c7dfbe7f67a
> >> --- /dev/null
> >> +++ b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >> @@ -0,0 +1,28 @@
> >> +led-backlight bindings
> >> +
> >> +This binding is used to describe a basic backlight device made of LEDs.
> >> +It can also be used to describe a backlight device controlled by the output of
> >> +a LED driver.
> >> +
> >> +Required properties:
> >> +  - compatible: "led-backlight"
> >> +  - leds: a list of LEDs
> > 'leds' is already used as a node name and mixing is not ideal.
> >
> > We already have 'flash-leds' in use and with the same definition, so
> > lets continue that and use 'backlight-leds'.
> OK
> >
> >> +
> >> +Optional properties:
> >> +  - brightness-levels: Array of distinct brightness levels. The levels must be
> >> +                       in the range accepted by the underlying LED devices.
> >> +                       This is used to translate a backlight brightness level
> >> +                       into a LED brightness level. If it is not provided, the
> >> +                       identity mapping is used.
> >> +
> >> +  - default-brightness-level: The default brightness level.
> > You can just assume these 2 get a common schema at some point. So just
> > need to define any additional constraints if possible.
>
> Maybe we should keep them until such a common schema is written ?

I'm not saying to remove them, but you can just have a description if
there are no other constraints.

Rob

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
  2019-10-08 13:30         ` Jean-Jacques Hiblot
@ 2019-10-08 15:00           ` Rob Herring
  -1 siblings, 0 replies; 28+ messages in thread
From: Rob Herring @ 2019-10-08 15:00 UTC (permalink / raw)
  To: Jean-Jacques Hiblot
  Cc: Jacek Anaszewski, Pavel Machek, Sebastian Reichel, Mark Rutland,
	Lee Jones, Daniel Thompson, Dan Murphy, Linux LED Subsystem,
	linux-kernel, dri-devel, Tomi Valkeinen

On Tue, Oct 8, 2019 at 8:30 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>
> Rob,
>
> On 08/10/2019 14:51, Jean-Jacques Hiblot wrote:
> > Hi Rob,
> >
> > On 07/10/2019 18:15, Rob Herring wrote:
> >> Please send DT bindings to DT list or it's never in my queue. IOW,
> >> send patches to the lists that get_maintainers.pl tells you to.
> >>
> >> On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com>
> >> wrote:
> >>> Add DT binding for led-backlight.
> >>>
> >>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> >>> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
> >>> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> >>> ---
> >>>   .../bindings/leds/backlight/led-backlight.txt | 28
> >>> +++++++++++++++++++
> >>>   1 file changed, 28 insertions(+)
> >>>   create mode 100644
> >>> Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >> Please make this a DT schema.
> >
> > OK.
> >
> > BTW I used "make dt_binding_check" but had to fix a couple of YAMLs
> > file to get it to work. Do you have a kernel tree with already all the
> > YAML files in good shape ? Or do you want me to post the changes to
> > devicetree@vger.kernel.org ?
> >
> >
> >>
> >>> diff --git
> >>> a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>> new file mode 100644
> >>> index 000000000000..4c7dfbe7f67a
> >>> --- /dev/null
> >>> +++
> >>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>> @@ -0,0 +1,28 @@
> >>> +led-backlight bindings
> >>> +
> >>> +This binding is used to describe a basic backlight device made of
> >>> LEDs.
> >>> +It can also be used to describe a backlight device controlled by
> >>> the output of
> >>> +a LED driver.
> >>> +
> >>> +Required properties:
> >>> +  - compatible: "led-backlight"
> >>> +  - leds: a list of LEDs
> >> 'leds' is already used as a node name and mixing is not ideal.
> >>
> >> We already have 'flash-leds' in use and with the same definition, so
> >> lets continue that and use 'backlight-leds'.
> > OK
>
> I am taking that back. I have added of_get_led() and devm_of_get_led()
> to the LED core to make it easier to get a LED from the DT. I modeled
> the interface like it is done for PWM, PHYs or clocks. The property
> containing list/array of phandle  is always named the same. To get one
> particular PWM/PHY/clock, a identifier (name or integer) must be provided.

It can be done as we do support that with '-gpios', but yes, it is a
bit more painful to deal with.

> So unless there is a strong incentive to do otherwise I's rather keep
> this name here.

In that case, this needs to be documented as a common LED binding, not
something hidden away in this binding.

Rob

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
@ 2019-10-08 15:00           ` Rob Herring
  0 siblings, 0 replies; 28+ messages in thread
From: Rob Herring @ 2019-10-08 15:00 UTC (permalink / raw)
  To: Jean-Jacques Hiblot
  Cc: Mark Rutland, Daniel Thompson, Sebastian Reichel, dri-devel,
	linux-kernel, Tomi Valkeinen, Jacek Anaszewski, Pavel Machek,
	Lee Jones, Linux LED Subsystem, Dan Murphy

On Tue, Oct 8, 2019 at 8:30 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>
> Rob,
>
> On 08/10/2019 14:51, Jean-Jacques Hiblot wrote:
> > Hi Rob,
> >
> > On 07/10/2019 18:15, Rob Herring wrote:
> >> Please send DT bindings to DT list or it's never in my queue. IOW,
> >> send patches to the lists that get_maintainers.pl tells you to.
> >>
> >> On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com>
> >> wrote:
> >>> Add DT binding for led-backlight.
> >>>
> >>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> >>> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
> >>> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> >>> ---
> >>>   .../bindings/leds/backlight/led-backlight.txt | 28
> >>> +++++++++++++++++++
> >>>   1 file changed, 28 insertions(+)
> >>>   create mode 100644
> >>> Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >> Please make this a DT schema.
> >
> > OK.
> >
> > BTW I used "make dt_binding_check" but had to fix a couple of YAMLs
> > file to get it to work. Do you have a kernel tree with already all the
> > YAML files in good shape ? Or do you want me to post the changes to
> > devicetree@vger.kernel.org ?
> >
> >
> >>
> >>> diff --git
> >>> a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>> new file mode 100644
> >>> index 000000000000..4c7dfbe7f67a
> >>> --- /dev/null
> >>> +++
> >>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>> @@ -0,0 +1,28 @@
> >>> +led-backlight bindings
> >>> +
> >>> +This binding is used to describe a basic backlight device made of
> >>> LEDs.
> >>> +It can also be used to describe a backlight device controlled by
> >>> the output of
> >>> +a LED driver.
> >>> +
> >>> +Required properties:
> >>> +  - compatible: "led-backlight"
> >>> +  - leds: a list of LEDs
> >> 'leds' is already used as a node name and mixing is not ideal.
> >>
> >> We already have 'flash-leds' in use and with the same definition, so
> >> lets continue that and use 'backlight-leds'.
> > OK
>
> I am taking that back. I have added of_get_led() and devm_of_get_led()
> to the LED core to make it easier to get a LED from the DT. I modeled
> the interface like it is done for PWM, PHYs or clocks. The property
> containing list/array of phandle  is always named the same. To get one
> particular PWM/PHY/clock, a identifier (name or integer) must be provided.

It can be done as we do support that with '-gpios', but yes, it is a
bit more painful to deal with.

> So unless there is a strong incentive to do otherwise I's rather keep
> this name here.

In that case, this needs to be documented as a common LED binding, not
something hidden away in this binding.

Rob
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
  2019-10-08 15:00           ` Rob Herring
  (?)
  (?)
@ 2019-10-08 17:17           ` Jacek Anaszewski
  2019-10-08 20:00               ` Rob Herring
  -1 siblings, 1 reply; 28+ messages in thread
From: Jacek Anaszewski @ 2019-10-08 17:17 UTC (permalink / raw)
  To: Rob Herring, Jean-Jacques Hiblot
  Cc: Pavel Machek, Sebastian Reichel, Mark Rutland, Lee Jones,
	Daniel Thompson, Dan Murphy, Linux LED Subsystem, linux-kernel,
	dri-devel, Tomi Valkeinen

On 10/8/19 5:00 PM, Rob Herring wrote:
> On Tue, Oct 8, 2019 at 8:30 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>>
>> Rob,
>>
>> On 08/10/2019 14:51, Jean-Jacques Hiblot wrote:
>>> Hi Rob,
>>>
>>> On 07/10/2019 18:15, Rob Herring wrote:
>>>> Please send DT bindings to DT list or it's never in my queue. IOW,
>>>> send patches to the lists that get_maintainers.pl tells you to.
>>>>
>>>> On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com>
>>>> wrote:
>>>>> Add DT binding for led-backlight.
>>>>>
>>>>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>>>>> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
>>>>> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
>>>>> ---
>>>>>   .../bindings/leds/backlight/led-backlight.txt | 28
>>>>> +++++++++++++++++++
>>>>>   1 file changed, 28 insertions(+)
>>>>>   create mode 100644
>>>>> Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>>> Please make this a DT schema.
>>>
>>> OK.
>>>
>>> BTW I used "make dt_binding_check" but had to fix a couple of YAMLs
>>> file to get it to work. Do you have a kernel tree with already all the
>>> YAML files in good shape ? Or do you want me to post the changes to
>>> devicetree@vger.kernel.org ?
>>>
>>>
>>>>
>>>>> diff --git
>>>>> a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>>>> new file mode 100644
>>>>> index 000000000000..4c7dfbe7f67a
>>>>> --- /dev/null
>>>>> +++
>>>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>>>> @@ -0,0 +1,28 @@
>>>>> +led-backlight bindings
>>>>> +
>>>>> +This binding is used to describe a basic backlight device made of
>>>>> LEDs.
>>>>> +It can also be used to describe a backlight device controlled by
>>>>> the output of
>>>>> +a LED driver.
>>>>> +
>>>>> +Required properties:
>>>>> +  - compatible: "led-backlight"
>>>>> +  - leds: a list of LEDs
>>>> 'leds' is already used as a node name and mixing is not ideal.

for the record: child node names (if that was what you had on mind)
have singular form 'led'.

>>>> We already have 'flash-leds' in use and with the same definition, so
>>>> lets continue that and use 'backlight-leds'.
>>> OK
>>
>> I am taking that back. I have added of_get_led() and devm_of_get_led()
>> to the LED core to make it easier to get a LED from the DT. I modeled
>> the interface like it is done for PWM, PHYs or clocks. The property
>> containing list/array of phandle  is always named the same. To get one
>> particular PWM/PHY/clock, a identifier (name or integer) must be provided.
> 
> It can be done as we do support that with '-gpios', but yes, it is a
> bit more painful to deal with.
> 
>> So unless there is a strong incentive to do otherwise I's rather keep
>> this name here.
> 
> In that case, this needs to be documented as a common LED binding, not
> something hidden away in this binding.
> 
> Rob
> 

-- 
Best regards,
Jacek Anaszewski

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
  2019-10-08 15:00           ` Rob Herring
  (?)
@ 2019-10-08 17:17           ` Jacek Anaszewski
  -1 siblings, 0 replies; 28+ messages in thread
From: Jacek Anaszewski @ 2019-10-08 17:17 UTC (permalink / raw)
  To: Rob Herring, Jean-Jacques Hiblot
  Cc: Pavel Machek, Sebastian Reichel, Mark Rutland, Lee Jones,
	Daniel Thompson, Dan Murphy, Linux LED Subsystem, linux-kernel,
	dri-devel, Tomi Valkeinen

On 10/8/19 5:00 PM, Rob Herring wrote:
> On Tue, Oct 8, 2019 at 8:30 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>>
>> Rob,
>>
>> On 08/10/2019 14:51, Jean-Jacques Hiblot wrote:
>>> Hi Rob,
>>>
>>> On 07/10/2019 18:15, Rob Herring wrote:
>>>> Please send DT bindings to DT list or it's never in my queue. IOW,
>>>> send patches to the lists that get_maintainers.pl tells you to.
>>>>
>>>> On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com>
>>>> wrote:
>>>>> Add DT binding for led-backlight.
>>>>>
>>>>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>>>>> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
>>>>> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
>>>>> ---
>>>>>   .../bindings/leds/backlight/led-backlight.txt | 28
>>>>> +++++++++++++++++++
>>>>>   1 file changed, 28 insertions(+)
>>>>>   create mode 100644
>>>>> Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>>> Please make this a DT schema.
>>>
>>> OK.
>>>
>>> BTW I used "make dt_binding_check" but had to fix a couple of YAMLs
>>> file to get it to work. Do you have a kernel tree with already all the
>>> YAML files in good shape ? Or do you want me to post the changes to
>>> devicetree@vger.kernel.org ?
>>>
>>>
>>>>
>>>>> diff --git
>>>>> a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>>>> new file mode 100644
>>>>> index 000000000000..4c7dfbe7f67a
>>>>> --- /dev/null
>>>>> +++
>>>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>>>> @@ -0,0 +1,28 @@
>>>>> +led-backlight bindings
>>>>> +
>>>>> +This binding is used to describe a basic backlight device made of
>>>>> LEDs.
>>>>> +It can also be used to describe a backlight device controlled by
>>>>> the output of
>>>>> +a LED driver.
>>>>> +
>>>>> +Required properties:
>>>>> +  - compatible: "led-backlight"
>>>>> +  - leds: a list of LEDs
>>>> 'leds' is already used as a node name and mixing is not ideal.

for the record: child node names (if that was what you had on mind)
have singular form 'led'.

>>>> We already have 'flash-leds' in use and with the same definition, so
>>>> lets continue that and use 'backlight-leds'.
>>> OK
>>
>> I am taking that back. I have added of_get_led() and devm_of_get_led()
>> to the LED core to make it easier to get a LED from the DT. I modeled
>> the interface like it is done for PWM, PHYs or clocks. The property
>> containing list/array of phandle  is always named the same. To get one
>> particular PWM/PHY/clock, a identifier (name or integer) must be provided.
> 
> It can be done as we do support that with '-gpios', but yes, it is a
> bit more painful to deal with.
> 
>> So unless there is a strong incentive to do otherwise I's rather keep
>> this name here.
> 
> In that case, this needs to be documented as a common LED binding, not
> something hidden away in this binding.
> 
> Rob
> 

-- 
Best regards,
Jacek Anaszewski

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
  2019-10-08 17:17           ` Jacek Anaszewski
@ 2019-10-08 20:00               ` Rob Herring
  0 siblings, 0 replies; 28+ messages in thread
From: Rob Herring @ 2019-10-08 20:00 UTC (permalink / raw)
  To: Jacek Anaszewski
  Cc: Jean-Jacques Hiblot, Pavel Machek, Sebastian Reichel,
	Mark Rutland, Lee Jones, Daniel Thompson, Dan Murphy,
	Linux LED Subsystem, linux-kernel, dri-devel, Tomi Valkeinen

On Tue, Oct 8, 2019 at 12:17 PM Jacek Anaszewski
<jacek.anaszewski@gmail.com> wrote:
>
> On 10/8/19 5:00 PM, Rob Herring wrote:
> > On Tue, Oct 8, 2019 at 8:30 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
> >>
> >> Rob,
> >>
> >> On 08/10/2019 14:51, Jean-Jacques Hiblot wrote:
> >>> Hi Rob,
> >>>
> >>> On 07/10/2019 18:15, Rob Herring wrote:
> >>>> Please send DT bindings to DT list or it's never in my queue. IOW,
> >>>> send patches to the lists that get_maintainers.pl tells you to.
> >>>>
> >>>> On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com>
> >>>> wrote:
> >>>>> Add DT binding for led-backlight.
> >>>>>
> >>>>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> >>>>> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
> >>>>> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> >>>>> ---
> >>>>>   .../bindings/leds/backlight/led-backlight.txt | 28
> >>>>> +++++++++++++++++++
> >>>>>   1 file changed, 28 insertions(+)
> >>>>>   create mode 100644
> >>>>> Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>>> Please make this a DT schema.
> >>>
> >>> OK.
> >>>
> >>> BTW I used "make dt_binding_check" but had to fix a couple of YAMLs
> >>> file to get it to work. Do you have a kernel tree with already all the
> >>> YAML files in good shape ? Or do you want me to post the changes to
> >>> devicetree@vger.kernel.org ?
> >>>
> >>>
> >>>>
> >>>>> diff --git
> >>>>> a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>>>> new file mode 100644
> >>>>> index 000000000000..4c7dfbe7f67a
> >>>>> --- /dev/null
> >>>>> +++
> >>>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>>>> @@ -0,0 +1,28 @@
> >>>>> +led-backlight bindings
> >>>>> +
> >>>>> +This binding is used to describe a basic backlight device made of
> >>>>> LEDs.
> >>>>> +It can also be used to describe a backlight device controlled by
> >>>>> the output of
> >>>>> +a LED driver.
> >>>>> +
> >>>>> +Required properties:
> >>>>> +  - compatible: "led-backlight"
> >>>>> +  - leds: a list of LEDs
> >>>> 'leds' is already used as a node name and mixing is not ideal.
>
> for the record: child node names (if that was what you had on mind)
> have singular form 'led'.

I did actually grep this and not rely on my somewhat faulty memory:

$ git grep '\sleds {' | wc -l
463

These are mostly gpio-leds I think.

Rob

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
@ 2019-10-08 20:00               ` Rob Herring
  0 siblings, 0 replies; 28+ messages in thread
From: Rob Herring @ 2019-10-08 20:00 UTC (permalink / raw)
  To: Jacek Anaszewski
  Cc: Mark Rutland, Daniel Thompson, Sebastian Reichel, dri-devel,
	linux-kernel, Tomi Valkeinen, Dan Murphy, Pavel Machek,
	Jean-Jacques Hiblot, Lee Jones, Linux LED Subsystem

On Tue, Oct 8, 2019 at 12:17 PM Jacek Anaszewski
<jacek.anaszewski@gmail.com> wrote:
>
> On 10/8/19 5:00 PM, Rob Herring wrote:
> > On Tue, Oct 8, 2019 at 8:30 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
> >>
> >> Rob,
> >>
> >> On 08/10/2019 14:51, Jean-Jacques Hiblot wrote:
> >>> Hi Rob,
> >>>
> >>> On 07/10/2019 18:15, Rob Herring wrote:
> >>>> Please send DT bindings to DT list or it's never in my queue. IOW,
> >>>> send patches to the lists that get_maintainers.pl tells you to.
> >>>>
> >>>> On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com>
> >>>> wrote:
> >>>>> Add DT binding for led-backlight.
> >>>>>
> >>>>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> >>>>> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
> >>>>> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
> >>>>> ---
> >>>>>   .../bindings/leds/backlight/led-backlight.txt | 28
> >>>>> +++++++++++++++++++
> >>>>>   1 file changed, 28 insertions(+)
> >>>>>   create mode 100644
> >>>>> Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>>> Please make this a DT schema.
> >>>
> >>> OK.
> >>>
> >>> BTW I used "make dt_binding_check" but had to fix a couple of YAMLs
> >>> file to get it to work. Do you have a kernel tree with already all the
> >>> YAML files in good shape ? Or do you want me to post the changes to
> >>> devicetree@vger.kernel.org ?
> >>>
> >>>
> >>>>
> >>>>> diff --git
> >>>>> a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>>>> new file mode 100644
> >>>>> index 000000000000..4c7dfbe7f67a
> >>>>> --- /dev/null
> >>>>> +++
> >>>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
> >>>>> @@ -0,0 +1,28 @@
> >>>>> +led-backlight bindings
> >>>>> +
> >>>>> +This binding is used to describe a basic backlight device made of
> >>>>> LEDs.
> >>>>> +It can also be used to describe a backlight device controlled by
> >>>>> the output of
> >>>>> +a LED driver.
> >>>>> +
> >>>>> +Required properties:
> >>>>> +  - compatible: "led-backlight"
> >>>>> +  - leds: a list of LEDs
> >>>> 'leds' is already used as a node name and mixing is not ideal.
>
> for the record: child node names (if that was what you had on mind)
> have singular form 'led'.

I did actually grep this and not rely on my somewhat faulty memory:

$ git grep '\sleds {' | wc -l
463

These are mostly gpio-leds I think.

Rob
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding
  2019-10-08 20:00               ` Rob Herring
  (?)
@ 2019-10-09 18:31               ` Jacek Anaszewski
  -1 siblings, 0 replies; 28+ messages in thread
From: Jacek Anaszewski @ 2019-10-09 18:31 UTC (permalink / raw)
  To: Rob Herring
  Cc: Jean-Jacques Hiblot, Pavel Machek, Sebastian Reichel,
	Mark Rutland, Lee Jones, Daniel Thompson, Dan Murphy,
	Linux LED Subsystem, linux-kernel, dri-devel, Tomi Valkeinen

On 10/8/19 10:00 PM, Rob Herring wrote:
> On Tue, Oct 8, 2019 at 12:17 PM Jacek Anaszewski
> <jacek.anaszewski@gmail.com> wrote:
>>
>> On 10/8/19 5:00 PM, Rob Herring wrote:
>>> On Tue, Oct 8, 2019 at 8:30 AM Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>>>>
>>>> Rob,
>>>>
>>>> On 08/10/2019 14:51, Jean-Jacques Hiblot wrote:
>>>>> Hi Rob,
>>>>>
>>>>> On 07/10/2019 18:15, Rob Herring wrote:
>>>>>> Please send DT bindings to DT list or it's never in my queue. IOW,
>>>>>> send patches to the lists that get_maintainers.pl tells you to.
>>>>>>
>>>>>> On Mon, Oct 7, 2019 at 7:45 AM Jean-Jacques Hiblot <jjhiblot@ti.com>
>>>>>> wrote:
>>>>>>> Add DT binding for led-backlight.
>>>>>>>
>>>>>>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>>>>>>> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
>>>>>>> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
>>>>>>> ---
>>>>>>>   .../bindings/leds/backlight/led-backlight.txt | 28
>>>>>>> +++++++++++++++++++
>>>>>>>   1 file changed, 28 insertions(+)
>>>>>>>   create mode 100644
>>>>>>> Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>>>>> Please make this a DT schema.
>>>>>
>>>>> OK.
>>>>>
>>>>> BTW I used "make dt_binding_check" but had to fix a couple of YAMLs
>>>>> file to get it to work. Do you have a kernel tree with already all the
>>>>> YAML files in good shape ? Or do you want me to post the changes to
>>>>> devicetree@vger.kernel.org ?
>>>>>
>>>>>
>>>>>>
>>>>>>> diff --git
>>>>>>> a/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>>>>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>>>>>> new file mode 100644
>>>>>>> index 000000000000..4c7dfbe7f67a
>>>>>>> --- /dev/null
>>>>>>> +++
>>>>>>> b/Documentation/devicetree/bindings/leds/backlight/led-backlight.txt
>>>>>>> @@ -0,0 +1,28 @@
>>>>>>> +led-backlight bindings
>>>>>>> +
>>>>>>> +This binding is used to describe a basic backlight device made of
>>>>>>> LEDs.
>>>>>>> +It can also be used to describe a backlight device controlled by
>>>>>>> the output of
>>>>>>> +a LED driver.
>>>>>>> +
>>>>>>> +Required properties:
>>>>>>> +  - compatible: "led-backlight"
>>>>>>> +  - leds: a list of LEDs
>>>>>> 'leds' is already used as a node name and mixing is not ideal.
>>
>> for the record: child node names (if that was what you had on mind)
>> have singular form 'led'.
> 
> I did actually grep this and not rely on my somewhat faulty memory:
> 
> $ git grep '\sleds {' | wc -l
> 463
> 
> These are mostly gpio-leds I think.

Indeed. So this is legacy, but common LED bindings have never stated
that. If should be OK to add leds property to common bindings with
proper description.

-- 
Best regards,
Jacek Anaszewski

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

* Re: [PATCH v9 3/5] leds: Add managed API to get a LED from a device driver
  2019-10-07 12:44   ` Jean-Jacques Hiblot
@ 2019-10-13 12:09     ` Pavel Machek
  -1 siblings, 0 replies; 28+ messages in thread
From: Pavel Machek @ 2019-10-13 12:09 UTC (permalink / raw)
  To: Jean-Jacques Hiblot
  Cc: jacek.anaszewski, sre, robh+dt, mark.rutland, lee.jones,
	daniel.thompson, dmurphy, linux-leds, linux-kernel, dri-devel,
	tomi.valkeinen

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

Hi!

> If the LED is acquired by a consumer device with devm_led_get(), it is
> automatically released when the device is detached.
> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> Acked-by: Pavel Machek <pavel@ucw.cz>
> ---
>  drivers/leds/led-class.c | 49 ++++++++++++++++++++++++++++++++++++++++
>  include/linux/leds.h     |  2 ++
>  2 files changed, 51 insertions(+)
> 
> diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
> index 1d1f1d546dc7..639224392ffa 100644
> --- a/drivers/leds/led-class.c
> +++ b/drivers/leds/led-class.c
> @@ -264,6 +264,55 @@ void led_put(struct led_classdev *led_cdev)
>  }
>  EXPORT_SYMBOL_GPL(led_put);
>  
> +static void devm_led_release(struct device *dev, void *res)
> +{
> +	struct led_classdev **p = res;
> +
> +	led_put(*p);
> +}
> +
> +/**
> + * devm_of_led_get - Resource-managed request of a LED device
> + * @dev:	LED consumer
> + * @index:	index of the LED to obtain in the consumer
> + *
> + * The device node of the device is parse to find the request LED device.
> + * The LED device returned from this function is automatically released
> + * on driver detach.
> + *
> + * @return a pointer to a LED device or ERR_PTR(errno) on failure.
> + */
> +struct led_classdev *__must_check devm_of_led_get(struct device *dev,
> +						  int index)
> +{
> +	struct led_classdev *led;
> +	struct led_classdev **dr;
> +
> +	if (!dev)
> +		return ERR_PTR(-EINVAL);
> +
> +	/* Consummer not using device tree? */

Typo "consumer". I may fix it before applying the patch.

Best regards,
									Pavel

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

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

* Re: [PATCH v9 3/5] leds: Add managed API to get a LED from a device driver
@ 2019-10-13 12:09     ` Pavel Machek
  0 siblings, 0 replies; 28+ messages in thread
From: Pavel Machek @ 2019-10-13 12:09 UTC (permalink / raw)
  To: Jean-Jacques Hiblot
  Cc: mark.rutland, daniel.thompson, tomi.valkeinen, sre, dri-devel,
	linux-kernel, robh+dt, jacek.anaszewski, lee.jones, linux-leds,
	dmurphy


[-- Attachment #1.1: Type: text/plain, Size: 1757 bytes --]

Hi!

> If the LED is acquired by a consumer device with devm_led_get(), it is
> automatically released when the device is detached.
> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> Acked-by: Pavel Machek <pavel@ucw.cz>
> ---
>  drivers/leds/led-class.c | 49 ++++++++++++++++++++++++++++++++++++++++
>  include/linux/leds.h     |  2 ++
>  2 files changed, 51 insertions(+)
> 
> diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
> index 1d1f1d546dc7..639224392ffa 100644
> --- a/drivers/leds/led-class.c
> +++ b/drivers/leds/led-class.c
> @@ -264,6 +264,55 @@ void led_put(struct led_classdev *led_cdev)
>  }
>  EXPORT_SYMBOL_GPL(led_put);
>  
> +static void devm_led_release(struct device *dev, void *res)
> +{
> +	struct led_classdev **p = res;
> +
> +	led_put(*p);
> +}
> +
> +/**
> + * devm_of_led_get - Resource-managed request of a LED device
> + * @dev:	LED consumer
> + * @index:	index of the LED to obtain in the consumer
> + *
> + * The device node of the device is parse to find the request LED device.
> + * The LED device returned from this function is automatically released
> + * on driver detach.
> + *
> + * @return a pointer to a LED device or ERR_PTR(errno) on failure.
> + */
> +struct led_classdev *__must_check devm_of_led_get(struct device *dev,
> +						  int index)
> +{
> +	struct led_classdev *led;
> +	struct led_classdev **dr;
> +
> +	if (!dev)
> +		return ERR_PTR(-EINVAL);
> +
> +	/* Consummer not using device tree? */

Typo "consumer". I may fix it before applying the patch.

Best regards,
									Pavel

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

end of thread, other threads:[~2019-10-13 12:10 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-07 12:44 [PATCH v9 0/5] Add a generic driver for LED-based backlight Jean-Jacques Hiblot
2019-10-07 12:44 ` Jean-Jacques Hiblot
2019-10-07 12:44 ` [PATCH v9 1/5] leds: populate the device's of_node Jean-Jacques Hiblot
2019-10-07 12:44   ` Jean-Jacques Hiblot
2019-10-07 12:44 ` [PATCH v9 2/5] leds: Add of_led_get() and led_put() Jean-Jacques Hiblot
2019-10-07 12:44   ` Jean-Jacques Hiblot
2019-10-07 12:44 ` [PATCH v9 3/5] leds: Add managed API to get a LED from a device driver Jean-Jacques Hiblot
2019-10-07 12:44   ` Jean-Jacques Hiblot
2019-10-13 12:09   ` Pavel Machek
2019-10-13 12:09     ` Pavel Machek
2019-10-07 12:44 ` [PATCH v9 4/5] dt-bindings: backlight: Add led-backlight binding Jean-Jacques Hiblot
2019-10-07 12:44   ` Jean-Jacques Hiblot
2019-10-07 16:15   ` Rob Herring
2019-10-07 16:15     ` Rob Herring
2019-10-08 12:51     ` Jean-Jacques Hiblot
2019-10-08 12:51       ` Jean-Jacques Hiblot
2019-10-08 13:30       ` Jean-Jacques Hiblot
2019-10-08 13:30         ` Jean-Jacques Hiblot
2019-10-08 15:00         ` Rob Herring
2019-10-08 15:00           ` Rob Herring
2019-10-08 17:17           ` Jacek Anaszewski
2019-10-08 17:17           ` Jacek Anaszewski
2019-10-08 20:00             ` Rob Herring
2019-10-08 20:00               ` Rob Herring
2019-10-09 18:31               ` Jacek Anaszewski
2019-10-08 14:52       ` Rob Herring
2019-10-07 12:44 ` [PATCH v9 5/5] backlight: add led-backlight driver Jean-Jacques Hiblot
2019-10-07 12:44   ` Jean-Jacques Hiblot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.