[PATCH v2 5/6] video: backlight: lm3533_bl: Set initial mapping mode from DT
From: Svyatoslav Ryhel <hidden>
Date: 2026-05-28 13:52:03
Also in:
dri-devel, linux-devicetree, linux-iio, linux-leds, lkml
Subsystem:
backlight class/subsystem, framebuffer layer, the rest · Maintainers:
Lee Jones, Daniel Thompson, Jingoo Han, Helge Deller, Linus Torvalds
Add support to obtain the initial mapping mode from DT instead of leaving it unconfigured. Additionally, update the linear sysfs code, which uses a similar coding pattern. Signed-off-by: Svyatoslav Ryhel <redacted> --- drivers/video/backlight/lm3533_bl.c | 50 ++++++++++++++++------------- 1 file changed, 27 insertions(+), 23 deletions(-)
diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/lm3533_bl.c
index 42da652df58d..c03d0d1667e4 100644
--- a/drivers/video/backlight/lm3533_bl.c
+++ b/drivers/video/backlight/lm3533_bl.c@@ -22,6 +22,7 @@ #define LM3533_BL_MAX_BRIGHTNESS 255 #define LM3533_REG_CTRLBANK_AB_BCONF 0x1a +#define CTRLBANK_AB_BCONF_MODE(n) BIT(2 * (n) + 1) struct lm3533_bl {
@@ -32,6 +33,7 @@ struct lm3533_bl { u32 max_current; u32 pwm; + bool linear; };
@@ -135,8 +137,9 @@ static ssize_t show_linear(struct device *dev, struct device_attribute *attr, char *buf) { struct lm3533_bl *bl = dev_get_drvdata(dev); + int id = lm3533_bl_get_ctrlbank_id(bl); + u8 mask = CTRLBANK_AB_BCONF_MODE(id); u8 val; - u8 mask; int linear; int ret;
@@ -144,8 +147,6 @@ static ssize_t show_linear(struct device *dev, if (ret) return ret; - mask = 1 << (2 * lm3533_bl_get_ctrlbank_id(bl) + 1); - if (val & mask) linear = 1; else
@@ -159,23 +160,16 @@ static ssize_t store_linear(struct device *dev, const char *buf, size_t len) { struct lm3533_bl *bl = dev_get_drvdata(dev); + int id = lm3533_bl_get_ctrlbank_id(bl); unsigned long linear; - u8 mask; - u8 val; int ret; if (kstrtoul(buf, 0, &linear)) return -EINVAL; - mask = 1 << (2 * lm3533_bl_get_ctrlbank_id(bl) + 1); - - if (linear) - val = mask; - else - val = 0; - - ret = lm3533_update(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, val, - mask); + ret = lm3533_update(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, + linear ? CTRLBANK_AB_BCONF_MODE(id) : 0, + CTRLBANK_AB_BCONF_MODE(id)); if (ret) return ret;
@@ -253,8 +247,15 @@ static struct attribute_group lm3533_bl_attribute_group = { static int lm3533_bl_setup(struct lm3533_bl *bl) { + int id = lm3533_bl_get_ctrlbank_id(bl); int ret; + ret = lm3533_update(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, + bl->linear ? CTRLBANK_AB_BCONF_MODE(id) : 0, + CTRLBANK_AB_BCONF_MODE(id)); + if (ret) + return ret; + ret = lm3533_ctrlbank_set_max_current(&bl->cb, bl->max_current); if (ret) return ret;
@@ -317,14 +318,6 @@ static int lm3533_bl_probe(struct platform_device *pdev) platform_set_drvdata(pdev, bl); - ret = sysfs_create_group(&bd->dev.kobj, &lm3533_bl_attribute_group); - if (ret < 0) { - dev_err(&pdev->dev, "failed to create sysfs attributes\n"); - return ret; - } - - backlight_update_status(bd); - device_property_read_u32(&pdev->dev, "led-max-microamp", &bl->max_current); bl->max_current = clamp(bl->max_current, LM3533_LED_MAX_CURRENT_MIN,
@@ -333,9 +326,20 @@ static int lm3533_bl_probe(struct platform_device *pdev) bl->pwm = 0; device_property_read_u32(&pdev->dev, "ti,pwm-config-mask", &bl->pwm); + bl->linear = device_property_read_bool(&pdev->dev, + "ti,linear-mapping-mode"); + ret = lm3533_bl_setup(bl); if (ret) - goto err_sysfs_remove; + return ret; + + ret = sysfs_create_group(&bd->dev.kobj, &lm3533_bl_attribute_group); + if (ret < 0) { + dev_err(&pdev->dev, "failed to create sysfs attributes\n"); + return ret; + } + + backlight_update_status(bd); ret = lm3533_ctrlbank_enable(&bl->cb); if (ret)
--
2.51.0