summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJani Nikula <jani.nikula@intel.com>2014-05-07 12:01:01 +0300
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-05-07 20:04:56 -0400
commit0c9d8f1d4b5018199cb5a9b57580dc1480a7f915 (patch)
treec4e5d02ffb8f5d90c20b73b4bf5b4d9156f934be
parent3d89c35c2ae08c3fbf1a037c4df54c8e5ae56faf (diff)
backlight: handle saved brightness exceeding max brightness
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@joshtriplett.org> Date: Tue Mar 11 21:16:33 2014 -0700 backlight: Avoid restoring brightness to an unreadably dim level and the absolute maximum. https://bugs.freedesktop.org/show_bug.cgi?id=78200
Notes
Backport: bugfix
-rw-r--r--src/backlight/backlight.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
index c70839161..691472cc3 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_info("Saved brightness %s %s to %s.", old_value,
+ new_brightness > brightness ?
+ "too low; increasing" : "too high; decreasing",
+ *value);
+
free(old_value);
}
}