[systemd-devel] [PATCH] backlight: handle saved brightness exceeding max brightness
Jani Nikula
jani.nikula at intel.com
Wed May 7 02:01:01 PDT 2014
If too high a brightness value has been saved (e.g. due to kernel
mechanism changing from one kernel version to another, or booting the
userspace on another system), the brightness update fails and the
process exits.
Clamp saved brightness between the policy minimum introduced in
commit 7b909d7407965c03caaba30daae7aee113627a83
Author: Josh Triplett <josh at joshtriplett.org>
Date: Tue Mar 11 21:16:33 2014 -0700
backlight: Avoid restoring brightness to an unreadably dim level
and the absolute maximum.
---
UNCOMPILED AND UNTESTED; please consider this more a bug report than a
real contribution... Based on reading the source while debugging
https://bugs.freedesktop.org/show_bug.cgi?id=78200
---
src/backlight/backlight.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
index c708391612a2..d48a73e69364 100644
--- a/src/backlight/backlight.c
+++ b/src/backlight/backlight.c
@@ -229,7 +229,7 @@ static unsigned get_max_brightness(struct udev_device *device) {
* would otherwise force the user to disable state restoration. */
static void clamp_brightness(struct udev_device *device, char **value, unsigned max_brightness) {
int r;
- unsigned brightness, new_brightness;
+ unsigned brightness, new_brightness, min_brightness;
r = safe_atou(*value, &brightness);
if (r < 0) {
@@ -237,7 +237,8 @@ static void clamp_brightness(struct udev_device *device, char **value, unsigned
return;
}
- new_brightness = MAX3(brightness, 1U, max_brightness/20);
+ min_brightness = MAX(1U, max_brightness/20);
+ new_brightness = CLAMP(brightness, min_brightness, max_brightness);
if (new_brightness != brightness) {
char *old_value = *value;
@@ -247,7 +248,11 @@ static void clamp_brightness(struct udev_device *device, char **value, unsigned
return;
}
- log_debug("Saved brightness %s too low; increasing to %s.", old_value, *value);
+ log_debug("Saved brightness %s %s to %s.", old_value,
+ new_brightness < min_brightness ?
+ "too low; increasing" : "too high; decreasing",
+ *value);
+
free(old_value);
}
}
--
1.9.1
More information about the systemd-devel
mailing list