summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2016-08-03 08:08:23 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2016-08-03 08:08:23 +0200
commit20eabbf251a207845955abf43c02bf612a9255fd (patch)
treeb32897f435a23fd82ba94de8dfc189ea1f3d0ee9
parent984f9c9925c1acef0a4d3b9b8a0fe05fd4fc01a3 (diff)
parent832f9fec6a0c0d0e37a1610f267b4ffdd8c8895e (diff)
downloadbarebox-20eabbf251a207845955abf43c02bf612a9255fd.tar.gz
barebox-20eabbf251a207845955abf43c02bf612a9255fd.tar.xz
Merge branch 'for-next/video-backlight'
-rw-r--r--drivers/video/backlight-pwm.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/drivers/video/backlight-pwm.c b/drivers/video/backlight-pwm.c
index 91435f8d0a..7f1715ddde 100644
--- a/drivers/video/backlight-pwm.c
+++ b/drivers/video/backlight-pwm.c
@@ -128,17 +128,23 @@ static int pwm_backlight_parse_dt(struct device_d *dev,
if (!node)
return -ENODEV;
+ ret = of_property_read_u32(node, "default-brightness-level",
+ &value);
+ if (ret < 0)
+ return ret;
+
+ pwm_backlight->backlight.brightness_default = value;
+
/* determine the number of brightness levels */
prop = of_find_property(node, "brightness-levels", &length);
if (!prop)
return -EINVAL;
- pwm_backlight->backlight.brightness_max = length / sizeof(u32);
+ length /= sizeof(u32);
/* read brightness levels from DT property */
- if (pwm_backlight->backlight.brightness_max > 0) {
- size_t size = sizeof(*pwm_backlight->levels) *
- pwm_backlight->backlight.brightness_max;
+ if (length > 0) {
+ size_t size = sizeof(*pwm_backlight->levels) * length;
pwm_backlight->levels = xzalloc(size);
if (!pwm_backlight->levels)
@@ -146,22 +152,21 @@ static int pwm_backlight_parse_dt(struct device_d *dev,
ret = of_property_read_u32_array(node, "brightness-levels",
pwm_backlight->levels,
- pwm_backlight->backlight.brightness_max);
+ length);
if (ret < 0)
return ret;
- for (i = 0; i <= pwm_backlight->backlight.brightness_max; i++)
+ for (i = 0; i < length; i++)
if (pwm_backlight->levels[i] > pwm_backlight->scale)
pwm_backlight->scale = pwm_backlight->levels[i];
- ret = of_property_read_u32(node, "default-brightness-level",
- &value);
- if (ret < 0)
- return ret;
-
- pwm_backlight->backlight.brightness_default = value;
- pwm_backlight->backlight.brightness_max--;
+ if (pwm_backlight->scale == 0)
+ return -EINVAL;
+ } else {
+ /* We implicitly assume here a linear levels array { 0, 1, 2, ... 100 } */
+ pwm_backlight->scale = 100;
}
+ pwm_backlight->backlight.brightness_max = pwm_backlight->scale;
pwm_backlight->enable_gpio = of_get_named_gpio_flags(node, "enable-gpios", 0, &flags);