[systemd-devel] [PATCH] backlight: let udev properties override clamping

Topi Miettinen toiwoton at gmail.com
Wed Jan 28 13:51:47 PST 2015


On my computer, the minimum brightness enforced by clamping in
backlight is too bright.

Let udev property ID_BACKLIGHT_CLAMP control whether the brightness
is clamped or not.
---
 man/systemd-backlight at .service.xml | 11 ++++++++++-
 src/backlight/backlight.c          |  5 ++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/man/systemd-backlight at .service.xml b/man/systemd-backlight at .service.xml
index 453afbf..4105685 100644
--- a/man/systemd-backlight at .service.xml
+++ b/man/systemd-backlight at .service.xml
@@ -58,7 +58,16 @@
                 is a service that restores the display backlight
                 brightness at early boot and saves it at shutdown. On
                 disk, the backlight brightness is stored in
-                <filename>/var/lib/systemd/backlight/</filename>.</para>
+                <filename>/var/lib/systemd/backlight/</filename>. During
+                loading, if udev property ID_BACKLIGHT_CLAMP is not
+                present or is set to <literal>1</literal>, the
+                brightness is clamped to at least value
+                <literal>1</literal> or 5% of maximum brightness. This
+                is to avoid an unpowered display due to poor API
+                design in kernel (unfixed as of 2015-01-28) that does
+                not allow user space to know the difference between
+                lowest brightness and powering off the
+                backlight.</para>
         </refsect1>
 
         <refsect1>
diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c
index 1271a66..df53b75 100644
--- a/src/backlight/backlight.c
+++ b/src/backlight/backlight.c
@@ -373,6 +373,7 @@ int main(int argc, char *argv[]) {
 
         if (streq(argv[1], "load")) {
                 _cleanup_free_ char *value = NULL;
+                const char *clamp;
 
                 if (!shall_restore_state())
                         return EXIT_SUCCESS;
@@ -390,7 +391,9 @@ int main(int argc, char *argv[]) {
                         return EXIT_FAILURE;
                 }
 
-                clamp_brightness(device, &value, max_brightness);
+                clamp = udev_device_get_property_value(device, "ID_BACKLIGHT_CLAMP");
+                if (clamp == NULL || streq(clamp, "1"))
+                        clamp_brightness(device, &value, max_brightness);
 
                 r = udev_device_set_sysattr_value(device, "brightness", value);
                 if (r < 0) {
-- 
2.1.4



More information about the systemd-devel mailing list