public inbox for devicetree@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 0/5] media: lm3560: convert to use OF bindings
@ 2026-04-17 11:42 Svyatoslav Ryhel
  2026-04-17 11:42 ` [PATCH v1 1/5] media: lm3560: Add HWEN pin support Svyatoslav Ryhel
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: Svyatoslav Ryhel @ 2026-04-17 11:42 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Sakari Ailus, Mauro Carvalho Chehab,
	Svyatoslav Ryhel
  Cc: linux-leds, devicetree, linux-kernel, linux-media

Add missing HWEN input pin and IN supply. Fix v4l2 subdev registration.
Remove platform data and switch to OF device tree bindings.

Svyatoslav Ryhel (5):
  media: lm3560: Add HWEN pin support
  media: lm3560: Add IN supply support
  media: lm3560: Fix v4l2 subdev registration
  media: lm3560: convert to use OF bindings
  dt-bindings: leds: Document TI LM3560 Synchronous Boost Flash Driver

 .../devicetree/bindings/leds/ti,lm3560.yaml   | 134 +++++++++++++++++
 drivers/media/i2c/lm3560.c                    | 139 ++++++++++++++----
 include/media/i2c/lm3560.h                    |  15 --
 3 files changed, 243 insertions(+), 45 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/leds/ti,lm3560.yaml

-- 
2.51.0


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

* [PATCH v1 1/5] media: lm3560: Add HWEN pin support
  2026-04-17 11:42 [PATCH v1 0/5] media: lm3560: convert to use OF bindings Svyatoslav Ryhel
@ 2026-04-17 11:42 ` Svyatoslav Ryhel
  2026-04-17 12:15   ` Sakari Ailus
  2026-04-17 11:42 ` [PATCH v1 2/5] media: lm3560: Add IN supply support Svyatoslav Ryhel
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 13+ messages in thread
From: Svyatoslav Ryhel @ 2026-04-17 11:42 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Sakari Ailus, Mauro Carvalho Chehab,
	Svyatoslav Ryhel
  Cc: linux-leds, devicetree, linux-kernel, linux-media

Add HWEN - logic high hardware enable input found in LM3560 to ensure its
proper operation.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
 drivers/media/i2c/lm3560.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/media/i2c/lm3560.c b/drivers/media/i2c/lm3560.c
index f4cc844f4e3c..e6af61415821 100644
--- a/drivers/media/i2c/lm3560.c
+++ b/drivers/media/i2c/lm3560.c
@@ -11,6 +11,7 @@
 
 #include <linux/delay.h>
 #include <linux/module.h>
+#include <linux/gpio.h>
 #include <linux/i2c.h>
 #include <linux/slab.h>
 #include <linux/mutex.h>
@@ -45,6 +46,7 @@ enum led_enable {
  * @dev: pointer to &struct device
  * @pdata: platform data
  * @regmap: reg. map for i2c
+ * @hwen_gpio: line connected to hwen pin
  * @lock: muxtex for serial access.
  * @led_mode: V4L2 LED mode
  * @ctrls_led: V4L2 controls
@@ -54,6 +56,7 @@ struct lm3560_flash {
 	struct device *dev;
 	struct lm3560_platform_data *pdata;
 	struct regmap *regmap;
+	struct gpio_desc *hwen_gpio;
 	struct mutex lock;
 
 	enum v4l2_flash_led_mode led_mode;
@@ -425,6 +428,12 @@ static int lm3560_probe(struct i2c_client *client)
 	flash->dev = &client->dev;
 	mutex_init(&flash->lock);
 
+	flash->hwen_gpio = devm_gpiod_get_optional(&client->dev, "enable",
+						   GPIOD_OUT_HIGH);
+	if (IS_ERR(flash->hwen_gpio))
+		return dev_err_probe(&client->dev, PTR_ERR(flash->hwen_gpio),
+				     "failed to get hwen gpio\n");
+
 	rval = lm3560_subdev_init(flash, LM3560_LED0, "lm3560-led0");
 	if (rval < 0)
 		return rval;
@@ -452,6 +461,8 @@ static void lm3560_remove(struct i2c_client *client)
 		v4l2_ctrl_handler_free(&flash->ctrls_led[i]);
 		media_entity_cleanup(&flash->subdev_led[i].entity);
 	}
+
+	gpiod_set_value_cansleep(flash->hwen_gpio, 0);
 }
 
 static const struct i2c_device_id lm3560_id_table[] = {
-- 
2.51.0


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

* [PATCH v1 2/5] media: lm3560: Add IN supply support
  2026-04-17 11:42 [PATCH v1 0/5] media: lm3560: convert to use OF bindings Svyatoslav Ryhel
  2026-04-17 11:42 ` [PATCH v1 1/5] media: lm3560: Add HWEN pin support Svyatoslav Ryhel
@ 2026-04-17 11:42 ` Svyatoslav Ryhel
  2026-04-17 12:17   ` Sakari Ailus
  2026-04-17 11:42 ` [PATCH v1 3/5] media: lm3560: Fix v4l2 subdev registration Svyatoslav Ryhel
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 13+ messages in thread
From: Svyatoslav Ryhel @ 2026-04-17 11:42 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Sakari Ailus, Mauro Carvalho Chehab,
	Svyatoslav Ryhel
  Cc: linux-leds, devicetree, linux-kernel, linux-media

Add IN supply (2.5V - 5.5V) found in LM3560 to ensure its proper work.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
 drivers/media/i2c/lm3560.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/media/i2c/lm3560.c b/drivers/media/i2c/lm3560.c
index e6af61415821..a2674af6c9fb 100644
--- a/drivers/media/i2c/lm3560.c
+++ b/drivers/media/i2c/lm3560.c
@@ -16,6 +16,7 @@
 #include <linux/slab.h>
 #include <linux/mutex.h>
 #include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
 #include <linux/videodev2.h>
 #include <media/i2c/lm3560.h>
 #include <media/v4l2-ctrls.h>
@@ -434,6 +435,11 @@ static int lm3560_probe(struct i2c_client *client)
 		return dev_err_probe(&client->dev, PTR_ERR(flash->hwen_gpio),
 				     "failed to get hwen gpio\n");
 
+	rval = devm_regulator_get_enable(&client->dev, "vin");
+	if (rval)
+		return dev_err_probe(&client->dev, rval,
+				     "failed to enable regulator\n");
+
 	rval = lm3560_subdev_init(flash, LM3560_LED0, "lm3560-led0");
 	if (rval < 0)
 		return rval;
-- 
2.51.0


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

* [PATCH v1 3/5] media: lm3560: Fix v4l2 subdev registration
  2026-04-17 11:42 [PATCH v1 0/5] media: lm3560: convert to use OF bindings Svyatoslav Ryhel
  2026-04-17 11:42 ` [PATCH v1 1/5] media: lm3560: Add HWEN pin support Svyatoslav Ryhel
  2026-04-17 11:42 ` [PATCH v1 2/5] media: lm3560: Add IN supply support Svyatoslav Ryhel
@ 2026-04-17 11:42 ` Svyatoslav Ryhel
  2026-04-17 11:42 ` [PATCH v1 4/5] media: lm3560: convert to use OF bindings Svyatoslav Ryhel
  2026-04-17 11:42 ` [PATCH v1 5/5] dt-bindings: leds: Document TI LM3560 Synchronous Boost Flash Driver Svyatoslav Ryhel
  4 siblings, 0 replies; 13+ messages in thread
From: Svyatoslav Ryhel @ 2026-04-17 11:42 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Sakari Ailus, Mauro Carvalho Chehab,
	Svyatoslav Ryhel
  Cc: linux-leds, devicetree, linux-kernel, linux-media

The existing driver does not call media subdev registration, making it
invisible to the media framework. Since the LM3560 supports two
independent LEDs, register each LED as a separate media entity.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
 drivers/media/i2c/lm3560.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/media/i2c/lm3560.c b/drivers/media/i2c/lm3560.c
index a2674af6c9fb..bee1681a1603 100644
--- a/drivers/media/i2c/lm3560.c
+++ b/drivers/media/i2c/lm3560.c
@@ -368,10 +368,16 @@ static int lm3560_subdev_init(struct lm3560_flash *flash,
 		goto err_out;
 	flash->subdev_led[led_no].entity.function = MEDIA_ENT_F_FLASH;
 
+	rval = v4l2_async_register_subdev(&flash->subdev_led[led_no]);
+	if (rval < 0)
+		goto err_out;
+
 	return rval;
 
 err_out:
 	v4l2_ctrl_handler_free(&flash->ctrls_led[led_no]);
+	media_entity_cleanup(&flash->subdev_led[led_no].entity);
+
 	return rval;
 }
 
-- 
2.51.0


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

* [PATCH v1 4/5] media: lm3560: convert to use OF bindings
  2026-04-17 11:42 [PATCH v1 0/5] media: lm3560: convert to use OF bindings Svyatoslav Ryhel
                   ` (2 preceding siblings ...)
  2026-04-17 11:42 ` [PATCH v1 3/5] media: lm3560: Fix v4l2 subdev registration Svyatoslav Ryhel
@ 2026-04-17 11:42 ` Svyatoslav Ryhel
  2026-04-17 11:42 ` [PATCH v1 5/5] dt-bindings: leds: Document TI LM3560 Synchronous Boost Flash Driver Svyatoslav Ryhel
  4 siblings, 0 replies; 13+ messages in thread
From: Svyatoslav Ryhel @ 2026-04-17 11:42 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Sakari Ailus, Mauro Carvalho Chehab,
	Svyatoslav Ryhel
  Cc: linux-leds, devicetree, linux-kernel, linux-media

Since there are no users of this driver via platform data, remove platform
data and switch to using device tree bindings.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
 drivers/media/i2c/lm3560.c | 118 +++++++++++++++++++++++++++----------
 include/media/i2c/lm3560.h |  15 -----
 2 files changed, 87 insertions(+), 46 deletions(-)

diff --git a/drivers/media/i2c/lm3560.c b/drivers/media/i2c/lm3560.c
index bee1681a1603..dab2da87331d 100644
--- a/drivers/media/i2c/lm3560.c
+++ b/drivers/media/i2c/lm3560.c
@@ -14,7 +14,9 @@
 #include <linux/gpio.h>
 #include <linux/i2c.h>
 #include <linux/slab.h>
+#include <linux/mod_devicetable.h>
 #include <linux/mutex.h>
+#include <linux/property.h>
 #include <linux/regmap.h>
 #include <linux/regulator/consumer.h>
 #include <linux/videodev2.h>
@@ -45,17 +47,19 @@ enum led_enable {
  * struct lm3560_flash
  *
  * @dev: pointer to &struct device
- * @pdata: platform data
  * @regmap: reg. map for i2c
  * @hwen_gpio: line connected to hwen pin
  * @lock: muxtex for serial access.
  * @led_mode: V4L2 LED mode
  * @ctrls_led: V4L2 controls
  * @subdev_led: V4L2 subdev
+ * @peak: peak current
+ * @max_flash_timeout: flash timeout
+ * @max_flash_brt: flash mode led brightness
+ * @max_torch_brt: torch mode led brightness
  */
 struct lm3560_flash {
 	struct device *dev;
-	struct lm3560_platform_data *pdata;
 	struct regmap *regmap;
 	struct gpio_desc *hwen_gpio;
 	struct mutex lock;
@@ -63,6 +67,12 @@ struct lm3560_flash {
 	enum v4l2_flash_led_mode led_mode;
 	struct v4l2_ctrl_handler ctrls_led[LM3560_LED_MAX];
 	struct v4l2_subdev subdev_led[LM3560_LED_MAX];
+
+	enum lm3560_peak_current peak;
+	u32 max_flash_timeout;
+
+	u32 max_flash_brt[LM3560_LED_MAX];
+	u32 max_torch_brt[LM3560_LED_MAX];
 };
 
 #define to_lm3560_flash(_ctrl, _no)	\
@@ -283,8 +293,8 @@ static int lm3560_init_controls(struct lm3560_flash *flash,
 				enum lm3560_led_id led_no)
 {
 	struct v4l2_ctrl *fault;
-	u32 max_flash_brt = flash->pdata->max_flash_brt[led_no];
-	u32 max_torch_brt = flash->pdata->max_torch_brt[led_no];
+	u32 max_flash_brt = flash->max_flash_brt[led_no];
+	u32 max_torch_brt = flash->max_torch_brt[led_no];
 	struct v4l2_ctrl_handler *hdl = &flash->ctrls_led[led_no];
 	const struct v4l2_ctrl_ops *ops = &lm3560_led_ctrl_ops[led_no];
 
@@ -309,9 +319,9 @@ static int lm3560_init_controls(struct lm3560_flash *flash,
 	/* flash strobe timeout */
 	v4l2_ctrl_new_std(hdl, ops, V4L2_CID_FLASH_TIMEOUT,
 			  LM3560_FLASH_TOUT_MIN,
-			  flash->pdata->max_flash_timeout,
+			  flash->max_flash_timeout,
 			  LM3560_FLASH_TOUT_STEP,
-			  flash->pdata->max_flash_timeout);
+			  flash->max_flash_timeout);
 
 	/* flash brt */
 	v4l2_ctrl_new_std(hdl, ops, V4L2_CID_FLASH_INTENSITY,
@@ -351,15 +361,17 @@ static const struct regmap_config lm3560_regmap = {
 };
 
 static int lm3560_subdev_init(struct lm3560_flash *flash,
-			      enum lm3560_led_id led_no, char *led_name)
+			      enum lm3560_led_id led_no,
+			      struct fwnode_handle *fwnode)
 {
 	struct i2c_client *client = to_i2c_client(flash->dev);
 	int rval;
 
 	v4l2_i2c_subdev_init(&flash->subdev_led[led_no], client, &lm3560_ops);
 	flash->subdev_led[led_no].flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
-	strscpy(flash->subdev_led[led_no].name, led_name,
-		sizeof(flash->subdev_led[led_no].name));
+	snprintf(flash->subdev_led[led_no].name,
+		 sizeof(flash->subdev_led[led_no].name),
+		 "lm3560-led%d", led_no);
 	rval = lm3560_init_controls(flash, led_no);
 	if (rval)
 		goto err_out;
@@ -367,6 +379,7 @@ static int lm3560_subdev_init(struct lm3560_flash *flash,
 	if (rval < 0)
 		goto err_out;
 	flash->subdev_led[led_no].entity.function = MEDIA_ENT_F_FLASH;
+	flash->subdev_led[led_no].fwnode = fwnode;
 
 	rval = v4l2_async_register_subdev(&flash->subdev_led[led_no]);
 	if (rval < 0)
@@ -388,7 +401,7 @@ static int lm3560_init_device(struct lm3560_flash *flash)
 
 	/* set peak current */
 	rval = regmap_update_bits(flash->regmap,
-				  REG_FLASH_TOUT, 0x60, flash->pdata->peak);
+				  REG_FLASH_TOUT, 0x60, flash->peak);
 	if (rval < 0)
 		return rval;
 	/* output disable */
@@ -401,10 +414,64 @@ static int lm3560_init_device(struct lm3560_flash *flash)
 	return rval;
 }
 
+static int lm3560_of_probe(struct lm3560_flash *flash)
+{
+	struct fwnode_handle *node;
+	u32 peak_ua;
+	int rval, reg;
+
+	flash->peak = LM3560_PEAK_3600mA;
+	rval = device_property_read_u32(flash->dev,
+					"ti,peak-current-microamp", &peak_ua);
+	if (!rval) {
+		switch (peak_ua) {
+		case 16000000:
+			flash->peak = LM3560_PEAK_1600mA;
+			break;
+		case 23000000:
+			flash->peak = LM3560_PEAK_2300mA;
+			break;
+		case 30000000:
+			flash->peak = LM3560_PEAK_3000mA;
+			break;
+		case 36000000:
+			flash->peak = LM3560_PEAK_3600mA;
+			break;
+		default:
+			return -EINVAL;
+		}
+	}
+
+	flash->max_flash_timeout = LM3560_FLASH_TOUT_MAX;
+	device_property_read_u32(flash->dev, "ti,max-flash-timeout-ms",
+				 &flash->max_flash_timeout);
+
+	device_for_each_child_node(flash->dev, node) {
+		fwnode_property_read_u32(node, "reg", &reg);
+
+		if (reg == LM3560_LED0 || reg == LM3560_LED1) {
+			flash->max_flash_brt[reg] = LM3560_FLASH_BRT_MAX;
+			fwnode_property_read_u32(node, "ti,max-flash-current-microamp",
+						 &flash->max_flash_brt[reg]);
+
+			flash->max_torch_brt[reg] = LM3560_TORCH_BRT_MAX;
+			fwnode_property_read_u32(node, "ti,max-torch-current-microamp",
+						 &flash->max_torch_brt[reg]);
+
+			rval = lm3560_subdev_init(flash, reg, node);
+			if (rval < 0)
+				return dev_err_probe(flash->dev, rval,
+						    "failed to register led%d\n",
+						    reg);
+		}
+	}
+
+	return 0;
+}
+
 static int lm3560_probe(struct i2c_client *client)
 {
 	struct lm3560_flash *flash;
-	struct lm3560_platform_data *pdata = dev_get_platdata(&client->dev);
 	int rval;
 
 	flash = devm_kzalloc(&client->dev, sizeof(*flash), GFP_KERNEL);
@@ -417,21 +484,6 @@ static int lm3560_probe(struct i2c_client *client)
 		return rval;
 	}
 
-	/* if there is no platform data, use chip default value */
-	if (pdata == NULL) {
-		pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
-		if (pdata == NULL)
-			return -ENODEV;
-		pdata->peak = LM3560_PEAK_3600mA;
-		pdata->max_flash_timeout = LM3560_FLASH_TOUT_MAX;
-		/* led 1 */
-		pdata->max_flash_brt[LM3560_LED0] = LM3560_FLASH_BRT_MAX;
-		pdata->max_torch_brt[LM3560_LED0] = LM3560_TORCH_BRT_MAX;
-		/* led 2 */
-		pdata->max_flash_brt[LM3560_LED1] = LM3560_FLASH_BRT_MAX;
-		pdata->max_torch_brt[LM3560_LED1] = LM3560_TORCH_BRT_MAX;
-	}
-	flash->pdata = pdata;
 	flash->dev = &client->dev;
 	mutex_init(&flash->lock);
 
@@ -446,11 +498,7 @@ static int lm3560_probe(struct i2c_client *client)
 		return dev_err_probe(&client->dev, rval,
 				     "failed to enable regulator\n");
 
-	rval = lm3560_subdev_init(flash, LM3560_LED0, "lm3560-led0");
-	if (rval < 0)
-		return rval;
-
-	rval = lm3560_subdev_init(flash, LM3560_LED1, "lm3560-led1");
+	rval = lm3560_of_probe(flash);
 	if (rval < 0)
 		return rval;
 
@@ -477,6 +525,13 @@ static void lm3560_remove(struct i2c_client *client)
 	gpiod_set_value_cansleep(flash->hwen_gpio, 0);
 }
 
+static const struct of_device_id lm3560_of_match[] = {
+	{ .compatible = "ti,lm3559" },
+	{ .compatible = "ti,lm3560" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, lm3560_of_match);
+
 static const struct i2c_device_id lm3560_id_table[] = {
 	{ LM3559_NAME },
 	{ LM3560_NAME },
@@ -489,6 +544,7 @@ static struct i2c_driver lm3560_i2c_driver = {
 	.driver = {
 		   .name = LM3560_NAME,
 		   .pm = NULL,
+		   .of_match_table = lm3560_of_match,
 		   },
 	.probe = lm3560_probe,
 	.remove = lm3560_remove,
diff --git a/include/media/i2c/lm3560.h b/include/media/i2c/lm3560.h
index 770d8c72c94a..b56c1ff8fd49 100644
--- a/include/media/i2c/lm3560.h
+++ b/include/media/i2c/lm3560.h
@@ -66,19 +66,4 @@ enum lm3560_peak_current {
 	LM3560_PEAK_3600mA = 0x60
 };
 
-/* struct lm3560_platform_data
- *
- * @peak :  peak current
- * @max_flash_timeout: flash timeout
- * @max_flash_brt: flash mode led brightness
- * @max_torch_brt: torch mode led brightness
- */
-struct lm3560_platform_data {
-	enum lm3560_peak_current peak;
-
-	u32 max_flash_timeout;
-	u32 max_flash_brt[LM3560_LED_MAX];
-	u32 max_torch_brt[LM3560_LED_MAX];
-};
-
 #endif /* __LM3560_H__ */
-- 
2.51.0


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

* [PATCH v1 5/5] dt-bindings: leds: Document TI LM3560 Synchronous Boost Flash Driver
  2026-04-17 11:42 [PATCH v1 0/5] media: lm3560: convert to use OF bindings Svyatoslav Ryhel
                   ` (3 preceding siblings ...)
  2026-04-17 11:42 ` [PATCH v1 4/5] media: lm3560: convert to use OF bindings Svyatoslav Ryhel
@ 2026-04-17 11:42 ` Svyatoslav Ryhel
  2026-04-17 12:13   ` Sakari Ailus
  4 siblings, 1 reply; 13+ messages in thread
From: Svyatoslav Ryhel @ 2026-04-17 11:42 UTC (permalink / raw)
  To: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Sakari Ailus, Mauro Carvalho Chehab,
	Svyatoslav Ryhel
  Cc: linux-leds, devicetree, linux-kernel, linux-media

Document TI LM3560 Synchronous Boost Flash Driver used for camera flash
LEDs.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
 .../devicetree/bindings/leds/ti,lm3560.yaml   | 134 ++++++++++++++++++
 1 file changed, 134 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/leds/ti,lm3560.yaml

diff --git a/Documentation/devicetree/bindings/leds/ti,lm3560.yaml b/Documentation/devicetree/bindings/leds/ti,lm3560.yaml
new file mode 100644
index 000000000000..460ea1fbc1e5
--- /dev/null
+++ b/Documentation/devicetree/bindings/leds/ti,lm3560.yaml
@@ -0,0 +1,134 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/leds/ti,lm3560.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: TI LM3560 Synchronous Boost Flash Driver
+
+maintainers:
+  - Svyatoslav Ryhel <clamor95@gmail.com>
+
+description:
+  The LM3560 is a 2-MHz fixed frequency synchronous boost converter with two
+  1000-mA constant current drivers for high-current white LEDs. The dual high-
+  side current sources allow for grounded cathode LED operation and can be
+  tied together for providing flash currents at up to 2 A through a single LED.
+  An adaptive regulation method ensures the current for each LED remains in
+  regulation and maximizes efficiency.
+
+properties:
+  compatible:
+    enum:
+      - ti,lm3559
+      - ti,lm3560
+
+  reg:
+    maxItems: 1
+
+  '#address-cells':
+    const: 1
+
+  '#size-cells':
+    const: 0
+
+  enable-gpios:
+    description: GPIO connected to the HWEN pin.
+    maxItems: 1
+
+  vin-supply:
+    description: Supply connected to the IN line.
+
+  ti,peak-current-microamp:
+    description:
+      The LM3560 features 4 selectable current limits 1.6A, 2.3A, 3A, and 3.6A.
+      When the current limit is reached, the LM3560 stops switching for the
+      remainder of the switching cycle.
+    enum: [16000000, 23000000, 30000000, 36000000]
+    default: 36000000
+
+  ti,max-flash-timeout-ms:
+    description:
+      Maximum flash timeout in ms with step 32ms.
+    minimum: 32
+    maximum: 1024
+    default: 1024
+
+patternProperties:
+  '^led@[01]$':
+    description: LED control bank nodes.
+    $ref: /schemas/leds/common.yaml#
+    unevaluatedProperties: false
+
+    properties:
+      reg:
+        description: Control bank selection (0 = bank A, 1 = bank B).
+        maximum: 1
+
+      ti,max-flash-current-microamp:
+        description:
+          Maximum flash current in uA with step 62500uA.
+        minimum: 62500
+        maximum: 1000000
+        default: 1000000
+
+      ti,max-torch-current-microamp:
+        description:
+          Maximum flash current in uA with step 31250uA.
+        minimum: 31250
+        maximum: 250000
+        default: 250000
+
+    required:
+      - reg
+
+required:
+  - compatible
+  - reg
+  - '#address-cells'
+  - '#size-cells'
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        led-controller@53 {
+            compatible = "ti,lm3560";
+            reg = <0x53>;
+
+            enable-gpios = <&gpio 28 GPIO_ACTIVE_HIGH>;
+            vin-supply = <&vdd_3v3_sys>;
+
+            ti,peak-current-microamp = <16000000>;
+            ti,max-flash-timeout-ms = <1024>;
+
+            #address-cells = <1>;
+            #size-cells = <0>;
+
+            led@0 {
+                reg = <0>;
+
+                label = "white::flash";
+                linux,default-trigger = "flash";
+
+                ti,max-flash-current-microamp = <562500>;
+                ti,max-torch-current-microamp = <156250>;
+            };
+
+            led@1 {
+                reg = <1>;
+
+                label = "yellow::flash";
+                linux,default-trigger = "flash";
+
+                ti,max-flash-current-microamp = <562500>;
+                ti,max-torch-current-microamp = <156250>;
+            };
+        };
+    };
-- 
2.51.0


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

* Re: [PATCH v1 5/5] dt-bindings: leds: Document TI LM3560 Synchronous Boost Flash Driver
  2026-04-17 11:42 ` [PATCH v1 5/5] dt-bindings: leds: Document TI LM3560 Synchronous Boost Flash Driver Svyatoslav Ryhel
@ 2026-04-17 12:13   ` Sakari Ailus
  2026-04-17 12:30     ` Svyatoslav Ryhel
  0 siblings, 1 reply; 13+ messages in thread
From: Sakari Ailus @ 2026-04-17 12:13 UTC (permalink / raw)
  To: Svyatoslav Ryhel
  Cc: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Mauro Carvalho Chehab, linux-leds, devicetree,
	linux-kernel, linux-media

Hi Svyatoslav,

Thanks for the set.

This patch should be the first one in the set, or at least before those
using the bindings defined here.

On Fri, Apr 17, 2026 at 02:42:26PM +0300, Svyatoslav Ryhel wrote:
> Document TI LM3560 Synchronous Boost Flash Driver used for camera flash
> LEDs.
> 
> Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
> ---
>  .../devicetree/bindings/leds/ti,lm3560.yaml   | 134 ++++++++++++++++++
>  1 file changed, 134 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/leds/ti,lm3560.yaml
> 
> diff --git a/Documentation/devicetree/bindings/leds/ti,lm3560.yaml b/Documentation/devicetree/bindings/leds/ti,lm3560.yaml
> new file mode 100644
> index 000000000000..460ea1fbc1e5
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/leds/ti,lm3560.yaml
> @@ -0,0 +1,134 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/leds/ti,lm3560.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: TI LM3560 Synchronous Boost Flash Driver
> +
> +maintainers:
> +  - Svyatoslav Ryhel <clamor95@gmail.com>
> +
> +description:
> +  The LM3560 is a 2-MHz fixed frequency synchronous boost converter with two
> +  1000-mA constant current drivers for high-current white LEDs. The dual high-
> +  side current sources allow for grounded cathode LED operation and can be
> +  tied together for providing flash currents at up to 2 A through a single LED.
> +  An adaptive regulation method ensures the current for each LED remains in
> +  regulation and maximizes efficiency.
> +
> +properties:
> +  compatible:
> +    enum:
> +      - ti,lm3559
> +      - ti,lm3560
> +
> +  reg:
> +    maxItems: 1
> +
> +  '#address-cells':
> +    const: 1
> +
> +  '#size-cells':
> +    const: 0
> +
> +  enable-gpios:
> +    description: GPIO connected to the HWEN pin.
> +    maxItems: 1
> +
> +  vin-supply:
> +    description: Supply connected to the IN line.
> +
> +  ti,peak-current-microamp:
> +    description:
> +      The LM3560 features 4 selectable current limits 1.6A, 2.3A, 3A, and 3.6A.
> +      When the current limit is reached, the LM3560 stops switching for the
> +      remainder of the switching cycle.
> +    enum: [16000000, 23000000, 30000000, 36000000]
> +    default: 36000000
> +
> +  ti,max-flash-timeout-ms:
> +    description:
> +      Maximum flash timeout in ms with step 32ms.
> +    minimum: 32
> +    maximum: 1024
> +    default: 1024
> +
> +patternProperties:
> +  '^led@[01]$':
> +    description: LED control bank nodes.
> +    $ref: /schemas/leds/common.yaml#
> +    unevaluatedProperties: false
> +
> +    properties:
> +      reg:
> +        description: Control bank selection (0 = bank A, 1 = bank B).
> +        maximum: 1
> +
> +      ti,max-flash-current-microamp:
> +        description:
> +          Maximum flash current in uA with step 62500uA.
> +        minimum: 62500
> +        maximum: 1000000
> +        default: 1000000
> +
> +      ti,max-torch-current-microamp:

Don't the LED flash bindings already have standardised properties for
these?

> +        description:
> +          Maximum flash current in uA with step 31250uA.
> +        minimum: 31250
> +        maximum: 250000
> +        default: 250000
> +
> +    required:
> +      - reg

I'd say the max current properties are required as well, same for the
timeouts. Or make the lowest the default. The lowest values are very seldom
used in practice though.

> +
> +required:
> +  - compatible
> +  - reg
> +  - '#address-cells'
> +  - '#size-cells'
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/gpio/gpio.h>
> +
> +    i2c {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +
> +        led-controller@53 {
> +            compatible = "ti,lm3560";
> +            reg = <0x53>;
> +
> +            enable-gpios = <&gpio 28 GPIO_ACTIVE_HIGH>;
> +            vin-supply = <&vdd_3v3_sys>;
> +
> +            ti,peak-current-microamp = <16000000>;
> +            ti,max-flash-timeout-ms = <1024>;
> +
> +            #address-cells = <1>;
> +            #size-cells = <0>;
> +
> +            led@0 {
> +                reg = <0>;
> +
> +                label = "white::flash";
> +                linux,default-trigger = "flash";
> +
> +                ti,max-flash-current-microamp = <562500>;
> +                ti,max-torch-current-microamp = <156250>;
> +            };
> +
> +            led@1 {
> +                reg = <1>;
> +
> +                label = "yellow::flash";
> +                linux,default-trigger = "flash";
> +
> +                ti,max-flash-current-microamp = <562500>;
> +                ti,max-torch-current-microamp = <156250>;
> +            };
> +        };
> +    };

-- 
Kind regards,

Sakari Ailus

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

* Re: [PATCH v1 1/5] media: lm3560: Add HWEN pin support
  2026-04-17 11:42 ` [PATCH v1 1/5] media: lm3560: Add HWEN pin support Svyatoslav Ryhel
@ 2026-04-17 12:15   ` Sakari Ailus
  0 siblings, 0 replies; 13+ messages in thread
From: Sakari Ailus @ 2026-04-17 12:15 UTC (permalink / raw)
  To: Svyatoslav Ryhel
  Cc: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Mauro Carvalho Chehab, linux-leds, devicetree,
	linux-kernel, linux-media

Hi Svyatoslav,

On Fri, Apr 17, 2026 at 02:42:22PM +0300, Svyatoslav Ryhel wrote:
> Add HWEN - logic high hardware enable input found in LM3560 to ensure its
> proper operation.
> 
> Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
> ---
>  drivers/media/i2c/lm3560.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/drivers/media/i2c/lm3560.c b/drivers/media/i2c/lm3560.c
> index f4cc844f4e3c..e6af61415821 100644
> --- a/drivers/media/i2c/lm3560.c
> +++ b/drivers/media/i2c/lm3560.c
> @@ -11,6 +11,7 @@
>  
>  #include <linux/delay.h>
>  #include <linux/module.h>
> +#include <linux/gpio.h>
>  #include <linux/i2c.h>
>  #include <linux/slab.h>
>  #include <linux/mutex.h>
> @@ -45,6 +46,7 @@ enum led_enable {
>   * @dev: pointer to &struct device
>   * @pdata: platform data
>   * @regmap: reg. map for i2c
> + * @hwen_gpio: line connected to hwen pin
>   * @lock: muxtex for serial access.
>   * @led_mode: V4L2 LED mode
>   * @ctrls_led: V4L2 controls
> @@ -54,6 +56,7 @@ struct lm3560_flash {
>  	struct device *dev;
>  	struct lm3560_platform_data *pdata;
>  	struct regmap *regmap;
> +	struct gpio_desc *hwen_gpio;
>  	struct mutex lock;
>  
>  	enum v4l2_flash_led_mode led_mode;
> @@ -425,6 +428,12 @@ static int lm3560_probe(struct i2c_client *client)
>  	flash->dev = &client->dev;
>  	mutex_init(&flash->lock);
>  
> +	flash->hwen_gpio = devm_gpiod_get_optional(&client->dev, "enable",
> +						   GPIOD_OUT_HIGH);

Please add runtime PM support for this so it can be powered on when needed.

> +	if (IS_ERR(flash->hwen_gpio))
> +		return dev_err_probe(&client->dev, PTR_ERR(flash->hwen_gpio),
> +				     "failed to get hwen gpio\n");
> +
>  	rval = lm3560_subdev_init(flash, LM3560_LED0, "lm3560-led0");
>  	if (rval < 0)
>  		return rval;
> @@ -452,6 +461,8 @@ static void lm3560_remove(struct i2c_client *client)
>  		v4l2_ctrl_handler_free(&flash->ctrls_led[i]);
>  		media_entity_cleanup(&flash->subdev_led[i].entity);
>  	}
> +
> +	gpiod_set_value_cansleep(flash->hwen_gpio, 0);
>  }
>  
>  static const struct i2c_device_id lm3560_id_table[] = {

-- 
Kind regards,

Sakari Ailus

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

* Re: [PATCH v1 2/5] media: lm3560: Add IN supply support
  2026-04-17 11:42 ` [PATCH v1 2/5] media: lm3560: Add IN supply support Svyatoslav Ryhel
@ 2026-04-17 12:17   ` Sakari Ailus
  2026-04-17 12:37     ` Svyatoslav Ryhel
  0 siblings, 1 reply; 13+ messages in thread
From: Sakari Ailus @ 2026-04-17 12:17 UTC (permalink / raw)
  To: Svyatoslav Ryhel
  Cc: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Mauro Carvalho Chehab, linux-leds, devicetree,
	linux-kernel, linux-media

Hi Svyatoslav,

On Fri, Apr 17, 2026 at 02:42:23PM +0300, Svyatoslav Ryhel wrote:
> Add IN supply (2.5V - 5.5V) found in LM3560 to ensure its proper work.
> 
> Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
> ---
>  drivers/media/i2c/lm3560.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/media/i2c/lm3560.c b/drivers/media/i2c/lm3560.c
> index e6af61415821..a2674af6c9fb 100644
> --- a/drivers/media/i2c/lm3560.c
> +++ b/drivers/media/i2c/lm3560.c
> @@ -16,6 +16,7 @@
>  #include <linux/slab.h>
>  #include <linux/mutex.h>
>  #include <linux/regmap.h>
> +#include <linux/regulator/consumer.h>
>  #include <linux/videodev2.h>
>  #include <media/i2c/lm3560.h>
>  #include <media/v4l2-ctrls.h>
> @@ -434,6 +435,11 @@ static int lm3560_probe(struct i2c_client *client)
>  		return dev_err_probe(&client->dev, PTR_ERR(flash->hwen_gpio),
>  				     "failed to get hwen gpio\n");
>  
> +	rval = devm_regulator_get_enable(&client->dev, "vin");

I'd also enable this via runtime PM.

Sensor drivers such as imx219 serve as a good example here.

> +	if (rval)
> +		return dev_err_probe(&client->dev, rval,
> +				     "failed to enable regulator\n");
> +
>  	rval = lm3560_subdev_init(flash, LM3560_LED0, "lm3560-led0");
>  	if (rval < 0)
>  		return rval;

-- 
Kind regards,

Sakari Ailus

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

* Re: [PATCH v1 5/5] dt-bindings: leds: Document TI LM3560 Synchronous Boost Flash Driver
  2026-04-17 12:13   ` Sakari Ailus
@ 2026-04-17 12:30     ` Svyatoslav Ryhel
  2026-04-17 12:36       ` Sakari Ailus
  0 siblings, 1 reply; 13+ messages in thread
From: Svyatoslav Ryhel @ 2026-04-17 12:30 UTC (permalink / raw)
  To: Sakari Ailus
  Cc: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Mauro Carvalho Chehab, linux-leds, devicetree,
	linux-kernel, linux-media

пт, 17 квіт. 2026 р. о 15:13 Sakari Ailus <sakari.ailus@linux.intel.com> пише:
>
> Hi Svyatoslav,
>
> Thanks for the set.
>
> This patch should be the first one in the set, or at least before those
> using the bindings defined here.
>

Maybe before conversion, but definitely not the first. I would like to
avoid patch multiplication caused by schema adjustments after every
single commit if possible.

> On Fri, Apr 17, 2026 at 02:42:26PM +0300, Svyatoslav Ryhel wrote:
> > Document TI LM3560 Synchronous Boost Flash Driver used for camera flash
> > LEDs.
> >
> > Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
> > ---
> >  .../devicetree/bindings/leds/ti,lm3560.yaml   | 134 ++++++++++++++++++
> >  1 file changed, 134 insertions(+)
> >  create mode 100644 Documentation/devicetree/bindings/leds/ti,lm3560.yaml
> >
> > diff --git a/Documentation/devicetree/bindings/leds/ti,lm3560.yaml b/Documentation/devicetree/bindings/leds/ti,lm3560.yaml
> > new file mode 100644
> > index 000000000000..460ea1fbc1e5
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/leds/ti,lm3560.yaml
> > @@ -0,0 +1,134 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/leds/ti,lm3560.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: TI LM3560 Synchronous Boost Flash Driver
> > +
> > +maintainers:
> > +  - Svyatoslav Ryhel <clamor95@gmail.com>
> > +
> > +description:
> > +  The LM3560 is a 2-MHz fixed frequency synchronous boost converter with two
> > +  1000-mA constant current drivers for high-current white LEDs. The dual high-
> > +  side current sources allow for grounded cathode LED operation and can be
> > +  tied together for providing flash currents at up to 2 A through a single LED.
> > +  An adaptive regulation method ensures the current for each LED remains in
> > +  regulation and maximizes efficiency.
> > +
> > +properties:
> > +  compatible:
> > +    enum:
> > +      - ti,lm3559
> > +      - ti,lm3560
> > +
> > +  reg:
> > +    maxItems: 1
> > +
> > +  '#address-cells':
> > +    const: 1
> > +
> > +  '#size-cells':
> > +    const: 0
> > +
> > +  enable-gpios:
> > +    description: GPIO connected to the HWEN pin.
> > +    maxItems: 1
> > +
> > +  vin-supply:
> > +    description: Supply connected to the IN line.
> > +
> > +  ti,peak-current-microamp:
> > +    description:
> > +      The LM3560 features 4 selectable current limits 1.6A, 2.3A, 3A, and 3.6A.
> > +      When the current limit is reached, the LM3560 stops switching for the
> > +      remainder of the switching cycle.
> > +    enum: [16000000, 23000000, 30000000, 36000000]
> > +    default: 36000000
> > +
> > +  ti,max-flash-timeout-ms:
> > +    description:
> > +      Maximum flash timeout in ms with step 32ms.
> > +    minimum: 32
> > +    maximum: 1024
> > +    default: 1024
> > +
> > +patternProperties:
> > +  '^led@[01]$':
> > +    description: LED control bank nodes.
> > +    $ref: /schemas/leds/common.yaml#
> > +    unevaluatedProperties: false
> > +
> > +    properties:
> > +      reg:
> > +        description: Control bank selection (0 = bank A, 1 = bank B).
> > +        maximum: 1
> > +
> > +      ti,max-flash-current-microamp:
> > +        description:
> > +          Maximum flash current in uA with step 62500uA.
> > +        minimum: 62500
> > +        maximum: 1000000
> > +        default: 1000000
> > +
> > +      ti,max-torch-current-microamp:
>
> Don't the LED flash bindings already have standardised properties for
> these?
>

Oh, they do! Thanks for pointing out. led-max-microamp,
flash-max-microamp and flash-max-timeout-us. Very nice, I will adjust
in the v2.

> > +        description:
> > +          Maximum flash current in uA with step 31250uA.
> > +        minimum: 31250
> > +        maximum: 250000
> > +        default: 250000
> > +
> > +    required:
> > +      - reg
>
> I'd say the max current properties are required as well, same for the
> timeouts. Or make the lowest the default. The lowest values are very seldom
> used in practice though.
>

I have transferred from the driver which uses maximum values as
default one. I can change to minimum if needed, that is not a big
deal.

> > +
> > +required:
> > +  - compatible
> > +  - reg
> > +  - '#address-cells'
> > +  - '#size-cells'
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > +  - |
> > +    #include <dt-bindings/gpio/gpio.h>
> > +
> > +    i2c {
> > +        #address-cells = <1>;
> > +        #size-cells = <0>;
> > +
> > +        led-controller@53 {
> > +            compatible = "ti,lm3560";
> > +            reg = <0x53>;
> > +
> > +            enable-gpios = <&gpio 28 GPIO_ACTIVE_HIGH>;
> > +            vin-supply = <&vdd_3v3_sys>;
> > +
> > +            ti,peak-current-microamp = <16000000>;
> > +            ti,max-flash-timeout-ms = <1024>;
> > +
> > +            #address-cells = <1>;
> > +            #size-cells = <0>;
> > +
> > +            led@0 {
> > +                reg = <0>;
> > +
> > +                label = "white::flash";
> > +                linux,default-trigger = "flash";
> > +
> > +                ti,max-flash-current-microamp = <562500>;
> > +                ti,max-torch-current-microamp = <156250>;
> > +            };
> > +
> > +            led@1 {
> > +                reg = <1>;
> > +
> > +                label = "yellow::flash";
> > +                linux,default-trigger = "flash";
> > +
> > +                ti,max-flash-current-microamp = <562500>;
> > +                ti,max-torch-current-microamp = <156250>;
> > +            };
> > +        };
> > +    };
>
> --
> Kind regards,
>
> Sakari Ailus

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

* Re: [PATCH v1 5/5] dt-bindings: leds: Document TI LM3560 Synchronous Boost Flash Driver
  2026-04-17 12:30     ` Svyatoslav Ryhel
@ 2026-04-17 12:36       ` Sakari Ailus
  0 siblings, 0 replies; 13+ messages in thread
From: Sakari Ailus @ 2026-04-17 12:36 UTC (permalink / raw)
  To: Svyatoslav Ryhel
  Cc: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Mauro Carvalho Chehab, linux-leds, devicetree,
	linux-kernel, linux-media

Hi Svyatoslav,

On Fri, Apr 17, 2026 at 03:30:30PM +0300, Svyatoslav Ryhel wrote:
> пт, 17 квіт. 2026 р. о 15:13 Sakari Ailus <sakari.ailus@linux.intel.com> пише:
> >
> > Hi Svyatoslav,
> >
> > Thanks for the set.
> >
> > This patch should be the first one in the set, or at least before those
> > using the bindings defined here.
> >
> 
> Maybe before conversion, but definitely not the first. I would like to
> avoid patch multiplication caused by schema adjustments after every
> single commit if possible.

You don't have to use all the properties defined but you can't use
properties in drivers not yet defined in bindings.

> 
> > On Fri, Apr 17, 2026 at 02:42:26PM +0300, Svyatoslav Ryhel wrote:
> > > Document TI LM3560 Synchronous Boost Flash Driver used for camera flash
> > > LEDs.
> > >
> > > Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
> > > ---
> > >  .../devicetree/bindings/leds/ti,lm3560.yaml   | 134 ++++++++++++++++++
> > >  1 file changed, 134 insertions(+)
> > >  create mode 100644 Documentation/devicetree/bindings/leds/ti,lm3560.yaml
> > >
> > > diff --git a/Documentation/devicetree/bindings/leds/ti,lm3560.yaml b/Documentation/devicetree/bindings/leds/ti,lm3560.yaml
> > > new file mode 100644
> > > index 000000000000..460ea1fbc1e5
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/leds/ti,lm3560.yaml
> > > @@ -0,0 +1,134 @@
> > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > > +%YAML 1.2
> > > +---
> > > +$id: http://devicetree.org/schemas/leds/ti,lm3560.yaml#
> > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > +
> > > +title: TI LM3560 Synchronous Boost Flash Driver
> > > +
> > > +maintainers:
> > > +  - Svyatoslav Ryhel <clamor95@gmail.com>
> > > +
> > > +description:
> > > +  The LM3560 is a 2-MHz fixed frequency synchronous boost converter with two
> > > +  1000-mA constant current drivers for high-current white LEDs. The dual high-
> > > +  side current sources allow for grounded cathode LED operation and can be
> > > +  tied together for providing flash currents at up to 2 A through a single LED.
> > > +  An adaptive regulation method ensures the current for each LED remains in
> > > +  regulation and maximizes efficiency.
> > > +
> > > +properties:
> > > +  compatible:
> > > +    enum:
> > > +      - ti,lm3559
> > > +      - ti,lm3560
> > > +
> > > +  reg:
> > > +    maxItems: 1
> > > +
> > > +  '#address-cells':
> > > +    const: 1
> > > +
> > > +  '#size-cells':
> > > +    const: 0
> > > +
> > > +  enable-gpios:
> > > +    description: GPIO connected to the HWEN pin.
> > > +    maxItems: 1
> > > +
> > > +  vin-supply:
> > > +    description: Supply connected to the IN line.
> > > +
> > > +  ti,peak-current-microamp:
> > > +    description:
> > > +      The LM3560 features 4 selectable current limits 1.6A, 2.3A, 3A, and 3.6A.
> > > +      When the current limit is reached, the LM3560 stops switching for the
> > > +      remainder of the switching cycle.
> > > +    enum: [16000000, 23000000, 30000000, 36000000]
> > > +    default: 36000000
> > > +
> > > +  ti,max-flash-timeout-ms:
> > > +    description:
> > > +      Maximum flash timeout in ms with step 32ms.
> > > +    minimum: 32
> > > +    maximum: 1024
> > > +    default: 1024
> > > +
> > > +patternProperties:
> > > +  '^led@[01]$':
> > > +    description: LED control bank nodes.
> > > +    $ref: /schemas/leds/common.yaml#
> > > +    unevaluatedProperties: false
> > > +
> > > +    properties:
> > > +      reg:
> > > +        description: Control bank selection (0 = bank A, 1 = bank B).
> > > +        maximum: 1
> > > +
> > > +      ti,max-flash-current-microamp:
> > > +        description:
> > > +          Maximum flash current in uA with step 62500uA.
> > > +        minimum: 62500
> > > +        maximum: 1000000
> > > +        default: 1000000
> > > +
> > > +      ti,max-torch-current-microamp:
> >
> > Don't the LED flash bindings already have standardised properties for
> > these?
> >
> 
> Oh, they do! Thanks for pointing out. led-max-microamp,
> flash-max-microamp and flash-max-timeout-us. Very nice, I will adjust
> in the v2.

Sounds good, thanks!

I think it'd be worth standardising maximum input current, too, as other
devices use it, too.

> 
> > > +        description:
> > > +          Maximum flash current in uA with step 31250uA.
> > > +        minimum: 31250
> > > +        maximum: 250000
> > > +        default: 250000
> > > +
> > > +    required:
> > > +      - reg
> >
> > I'd say the max current properties are required as well, same for the
> > timeouts. Or make the lowest the default. The lowest values are very seldom
> > used in practice though.
> >
> 
> I have transferred from the driver which uses maximum values as
> default one. I can change to minimum if needed, that is not a big
> deal.

I'd just make these mandatory.

> 
> > > +
> > > +required:
> > > +  - compatible
> > > +  - reg
> > > +  - '#address-cells'
> > > +  - '#size-cells'
> > > +
> > > +additionalProperties: false
> > > +
> > > +examples:
> > > +  - |
> > > +    #include <dt-bindings/gpio/gpio.h>
> > > +
> > > +    i2c {
> > > +        #address-cells = <1>;
> > > +        #size-cells = <0>;
> > > +
> > > +        led-controller@53 {
> > > +            compatible = "ti,lm3560";
> > > +            reg = <0x53>;
> > > +
> > > +            enable-gpios = <&gpio 28 GPIO_ACTIVE_HIGH>;
> > > +            vin-supply = <&vdd_3v3_sys>;
> > > +
> > > +            ti,peak-current-microamp = <16000000>;
> > > +            ti,max-flash-timeout-ms = <1024>;
> > > +
> > > +            #address-cells = <1>;
> > > +            #size-cells = <0>;
> > > +
> > > +            led@0 {
> > > +                reg = <0>;
> > > +
> > > +                label = "white::flash";
> > > +                linux,default-trigger = "flash";
> > > +
> > > +                ti,max-flash-current-microamp = <562500>;
> > > +                ti,max-torch-current-microamp = <156250>;
> > > +            };
> > > +
> > > +            led@1 {
> > > +                reg = <1>;
> > > +
> > > +                label = "yellow::flash";
> > > +                linux,default-trigger = "flash";
> > > +
> > > +                ti,max-flash-current-microamp = <562500>;
> > > +                ti,max-torch-current-microamp = <156250>;
> > > +            };
> > > +        };
> > > +    };
> >
> > --
> > Kind regards,
> >
> > Sakari Ailus

-- 
Kind regards,

Sakari Ailus

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

* Re: [PATCH v1 2/5] media: lm3560: Add IN supply support
  2026-04-17 12:17   ` Sakari Ailus
@ 2026-04-17 12:37     ` Svyatoslav Ryhel
  2026-04-17 12:46       ` Sakari Ailus
  0 siblings, 1 reply; 13+ messages in thread
From: Svyatoslav Ryhel @ 2026-04-17 12:37 UTC (permalink / raw)
  To: Sakari Ailus
  Cc: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Mauro Carvalho Chehab, linux-leds, devicetree,
	linux-kernel, linux-media

пт, 17 квіт. 2026 р. о 15:17 Sakari Ailus <sakari.ailus@linux.intel.com> пише:
>
> Hi Svyatoslav,
>
> On Fri, Apr 17, 2026 at 02:42:23PM +0300, Svyatoslav Ryhel wrote:
> > Add IN supply (2.5V - 5.5V) found in LM3560 to ensure its proper work.
> >
> > Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
> > ---
> >  drivers/media/i2c/lm3560.c | 6 ++++++
> >  1 file changed, 6 insertions(+)
> >
> > diff --git a/drivers/media/i2c/lm3560.c b/drivers/media/i2c/lm3560.c
> > index e6af61415821..a2674af6c9fb 100644
> > --- a/drivers/media/i2c/lm3560.c
> > +++ b/drivers/media/i2c/lm3560.c
> > @@ -16,6 +16,7 @@
> >  #include <linux/slab.h>
> >  #include <linux/mutex.h>
> >  #include <linux/regmap.h>
> > +#include <linux/regulator/consumer.h>
> >  #include <linux/videodev2.h>
> >  #include <media/i2c/lm3560.h>
> >  #include <media/v4l2-ctrls.h>
> > @@ -434,6 +435,11 @@ static int lm3560_probe(struct i2c_client *client)
> >               return dev_err_probe(&client->dev, PTR_ERR(flash->hwen_gpio),
> >                                    "failed to get hwen gpio\n");
> >
> > +     rval = devm_regulator_get_enable(&client->dev, "vin");
>
> I'd also enable this via runtime PM.
>
> Sensor drivers such as imx219 serve as a good example here.
>

Would you mind if I squash adding hwen, vin and pm into single commit?
It would be tricky to separate them from PM addition. I will add
descriptions of what was changed.

> > +     if (rval)
> > +             return dev_err_probe(&client->dev, rval,
> > +                                  "failed to enable regulator\n");
> > +
> >       rval = lm3560_subdev_init(flash, LM3560_LED0, "lm3560-led0");
> >       if (rval < 0)
> >               return rval;
>
> --
> Kind regards,
>
> Sakari Ailus

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

* Re: [PATCH v1 2/5] media: lm3560: Add IN supply support
  2026-04-17 12:37     ` Svyatoslav Ryhel
@ 2026-04-17 12:46       ` Sakari Ailus
  0 siblings, 0 replies; 13+ messages in thread
From: Sakari Ailus @ 2026-04-17 12:46 UTC (permalink / raw)
  To: Svyatoslav Ryhel
  Cc: Lee Jones, Pavel Machek, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Mauro Carvalho Chehab, linux-leds, devicetree,
	linux-kernel, linux-media

On Fri, Apr 17, 2026 at 03:37:37PM +0300, Svyatoslav Ryhel wrote:
> пт, 17 квіт. 2026 р. о 15:17 Sakari Ailus <sakari.ailus@linux.intel.com> пише:
> >
> > Hi Svyatoslav,
> >
> > On Fri, Apr 17, 2026 at 02:42:23PM +0300, Svyatoslav Ryhel wrote:
> > > Add IN supply (2.5V - 5.5V) found in LM3560 to ensure its proper work.
> > >
> > > Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
> > > ---
> > >  drivers/media/i2c/lm3560.c | 6 ++++++
> > >  1 file changed, 6 insertions(+)
> > >
> > > diff --git a/drivers/media/i2c/lm3560.c b/drivers/media/i2c/lm3560.c
> > > index e6af61415821..a2674af6c9fb 100644
> > > --- a/drivers/media/i2c/lm3560.c
> > > +++ b/drivers/media/i2c/lm3560.c
> > > @@ -16,6 +16,7 @@
> > >  #include <linux/slab.h>
> > >  #include <linux/mutex.h>
> > >  #include <linux/regmap.h>
> > > +#include <linux/regulator/consumer.h>
> > >  #include <linux/videodev2.h>
> > >  #include <media/i2c/lm3560.h>
> > >  #include <media/v4l2-ctrls.h>
> > > @@ -434,6 +435,11 @@ static int lm3560_probe(struct i2c_client *client)
> > >               return dev_err_probe(&client->dev, PTR_ERR(flash->hwen_gpio),
> > >                                    "failed to get hwen gpio\n");
> > >
> > > +     rval = devm_regulator_get_enable(&client->dev, "vin");
> >
> > I'd also enable this via runtime PM.
> >
> > Sensor drivers such as imx219 serve as a good example here.
> >
> 
> Would you mind if I squash adding hwen, vin and pm into single commit?
> It would be tricky to separate them from PM addition. I will add
> descriptions of what was changed.

Sounds good to me.

-- 
Sakari Ailus

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

end of thread, other threads:[~2026-04-17 12:45 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-17 11:42 [PATCH v1 0/5] media: lm3560: convert to use OF bindings Svyatoslav Ryhel
2026-04-17 11:42 ` [PATCH v1 1/5] media: lm3560: Add HWEN pin support Svyatoslav Ryhel
2026-04-17 12:15   ` Sakari Ailus
2026-04-17 11:42 ` [PATCH v1 2/5] media: lm3560: Add IN supply support Svyatoslav Ryhel
2026-04-17 12:17   ` Sakari Ailus
2026-04-17 12:37     ` Svyatoslav Ryhel
2026-04-17 12:46       ` Sakari Ailus
2026-04-17 11:42 ` [PATCH v1 3/5] media: lm3560: Fix v4l2 subdev registration Svyatoslav Ryhel
2026-04-17 11:42 ` [PATCH v1 4/5] media: lm3560: convert to use OF bindings Svyatoslav Ryhel
2026-04-17 11:42 ` [PATCH v1 5/5] dt-bindings: leds: Document TI LM3560 Synchronous Boost Flash Driver Svyatoslav Ryhel
2026-04-17 12:13   ` Sakari Ailus
2026-04-17 12:30     ` Svyatoslav Ryhel
2026-04-17 12:36       ` Sakari Ailus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox