mirror of
https://github.com/clearlinux/systemd-stable.git
synced 2026-09-07 06:03:51 +00:00
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 commit7b909d7407Author: 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 (cherry picked from commit0c9d8f1d4b)
This commit is contained in:
committed by
Zbigniew Jędrzejewski-Szmek
parent
45f427fe36
commit
d4666a8893
@@ -225,7 +225,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) {
|
||||
@@ -233,7 +233,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;
|
||||
|
||||
@@ -243,7 +244,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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user