From: Svyatoslav Ryhel <clamor95@gmail.com>
To: Lee Jones <lee@kernel.org>, Pavel Machek <pavel@kernel.org>,
Griffin Kroah-Hartman <griffin@kroah.com>,
Svyatoslav Ryhel <clamor95@gmail.com>
Cc: linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v1 2/2] leds: lm3533: Support getting LED sources from DT
Date: Sun, 15 Nov 2026 10:43:47 +0200 [thread overview]
Message-ID: <20261115084347.70592-3-clamor95@gmail.com> (raw)
In-Reply-To: <20261115084347.70592-1-clamor95@gmail.com>
Add support for the standard `led-sources` device tree property to
configure the mapping between control banks and physical low-voltage LED
(LVLED) outputs.
Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
drivers/leds/leds-lm3533.c | 57 ++++++++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/drivers/leds/leds-lm3533.c b/drivers/leds/leds-lm3533.c
index 7db1105bee5c2..ad8bc3751e3e5 100644
--- a/drivers/leds/leds-lm3533.c
+++ b/drivers/leds/leds-lm3533.c
@@ -26,6 +26,14 @@
#define LM3533_ALS_CHANNEL_LV_MIN 1
#define LM3533_ALS_CHANNEL_LV_MAX 2
+#define LM3533_REG_OUTPUT_CONF1 0x10
+#define OUTPUT_CONF1_SHIFT 2
+#define OUTPUT_LVLED_MASK 0x3
+#define OUTPUT_CONF1_PREP(x) (((x) << OUTPUT_CONF1_SHIFT) & 0xff)
+#define LM3533_REG_OUTPUT_CONF2 0x11
+#define OUTPUT_CONF2_SHIFT 6
+#define OUTPUT_CONF2_PREP(x) (((x) >> OUTPUT_CONF2_SHIFT) & 0xff)
+
#define LM3533_REG_CTRLBANK_BCONF_BASE 0x1b
#define LM3533_REG_PATTERN_ENABLE 0x28
#define LM3533_REG_PATTERN_LOW_TIME_BASE 0x71
@@ -54,6 +62,9 @@ struct lm3533_led {
u32 max_current;
u32 pwm;
+ int num_leds;
+ u32 leds[LM3533_LVCTRLBANK_MAX];
+
bool have_als;
};
@@ -622,8 +633,36 @@ static const struct attribute_group *lm3533_led_attribute_groups[] = {
static int lm3533_led_setup(struct lm3533_led *led)
{
+ u32 output_cfg_shift = 0;
+ u32 output_cfg_val = 0;
+ u32 output_cfg_mask = 0;
int ret;
+ for (int i = 0; i < led->num_leds; i++) {
+ if (led->leds[i] >= LM3533_LVCTRLBANK_MAX)
+ continue;
+
+ output_cfg_shift = led->leds[i] * 2;
+ output_cfg_val |= led->id << output_cfg_shift;
+ output_cfg_mask |= OUTPUT_LVLED_MASK << output_cfg_shift;
+ }
+
+ if (led->num_leds) {
+ /* LVLED1, LVLED2 and LVLED3 */
+ ret = regmap_update_bits(led->regmap, LM3533_REG_OUTPUT_CONF1,
+ OUTPUT_CONF1_PREP(output_cfg_mask),
+ OUTPUT_CONF1_PREP(output_cfg_val));
+ if (ret)
+ return ret;
+
+ /* LVLED4 and LVLED5 */
+ ret = regmap_update_bits(led->regmap, LM3533_REG_OUTPUT_CONF2,
+ OUTPUT_CONF2_PREP(output_cfg_mask),
+ OUTPUT_CONF2_PREP(output_cfg_val));
+ if (ret)
+ return ret;
+ }
+
ret = lm3533_ctrlbank_set_max_current(&led->cb, led->max_current);
if (ret)
return ret;
@@ -690,6 +729,24 @@ static int lm3533_led_probe(struct platform_device *pdev)
device_property_read_u32(dev, "ti,pwm-config-mask", &led->pwm);
+ /*
+ * If led-sources property is not set then either this Control Bank uses
+ * its default LVLED or is not linked to any LVLED at all.
+ */
+ led->num_leds = device_property_count_u32(dev, "led-sources");
+ if (led->num_leds > LM3533_LVCTRLBANK_MAX)
+ return dev_err_probe(dev, -EINVAL, "Number of LED sources exceeds max %d: %d\n",
+ LM3533_LVCTRLBANK_MAX, led->num_leds);
+
+ if (led->num_leds < 0)
+ led->num_leds = 0;
+
+ if (led->num_leds > 0) {
+ ret = device_property_read_u32_array(dev, "led-sources", led->leds, led->num_leds);
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to get led-sources\n");
+ }
+
ret = lm3533_led_setup(led);
if (ret)
return ret;
--
2.53.0
next prev parent reply other threads:[~2026-11-15 8:44 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-15 8:43 [PATCH v1 0/2] leds: lm3533: cleanups and support getting LED sources from DT Svyatoslav Ryhel
2026-11-15 8:43 ` [PATCH v1 1/2] leds: lm3533: Clean up probe and use managed helpers Svyatoslav Ryhel
2026-11-15 8:49 ` sashiko-bot
2026-11-15 8:43 ` Svyatoslav Ryhel [this message]
2026-11-15 8:49 ` [PATCH v1 2/2] leds: lm3533: Support getting LED sources from DT sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261115084347.70592-3-clamor95@gmail.com \
--to=clamor95@gmail.com \
--cc=griffin@kroah.com \
--cc=lee@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=pavel@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.