leds: aw200xx: Improve autodim calculation method
authorGeorge Stark <gnstark@salutedevices.com>
Sat, 25 Nov 2023 20:05:16 +0000 (23:05 +0300)
committerLee Jones <lee@kernel.org>
Wed, 13 Dec 2023 11:29:00 +0000 (11:29 +0000)
It is highly recommended to leverage the DIV_ROUND_UP() function as a
more refined and mathematically precise alternative to employing a
coarse division method.

Signed-off-by: George Stark <gnstark@salutedevices.com>
Signed-off-by: Dmitry Rokosov <ddrokosov@salutedevices.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20231125200519.1750-9-ddrokosov@salutedevices.com
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/leds-aw200xx.c

index 220860258dec2b3710a158f974469e4b7184f1e0..fe9b1565cef00a45beb49b78dadc877fc4f518f6 100644 (file)
@@ -87,6 +87,8 @@
 #define AW200XX_REG_DIM(x, columns) \
        AW200XX_REG(AW200XX_PAGE4, AW200XX_LED2REG(x, columns) * 2)
 #define AW200XX_REG_DIM2FADE(x) ((x) + 1)
+#define AW200XX_REG_FADE2DIM(fade) \
+       DIV_ROUND_UP((fade) * AW200XX_DIM_MAX, AW200XX_FADE_MAX)
 
 /*
  * Duty ratio of display scan (see p.15 of datasheet for formula):
@@ -195,9 +197,7 @@ static int aw200xx_brightness_set(struct led_classdev *cdev,
 
        dim = led->dim;
        if (dim < 0)
-               dim = max_t(int,
-                           brightness / (AW200XX_FADE_MAX / AW200XX_DIM_MAX),
-                           1);
+               dim = AW200XX_REG_FADE2DIM(brightness);
 
        ret = regmap_write(chip->regmap, reg, dim);
        if (ret)
@@ -462,6 +462,7 @@ static int aw200xx_probe_fw(struct device *dev, struct aw200xx *chip)
                led->num = source;
                led->chip = chip;
                led->cdev.brightness_set_blocking = aw200xx_brightness_set;
+               led->cdev.max_brightness = AW200XX_FADE_MAX;
                led->cdev.groups = dim_groups;
                init_data.fwnode = child;