I don't know when it started happening, but recent kernels
give different names for pci_device and backlight parent.

pci_device is tied to the GPU PCI ID, while backlight parent
is tied to the connector, rather than the GPU itself.

On my system, I get the following (paths taken from actual
strings that were parsed):

pci_device: 0000:00:02.0
parent: card0-eDP-1

Obtained by commands equivalent to system calls used:

$ basename $(readlink /sys/devices/pci0000\:00/0000\:00\:02.0/drm/card0/device)
$ basename $(readlink /sys/class/backlight/intel_backlight/device)

This also fixes safe_strtoint usage, so it doesn't choke
on newline character.

Signed-off-by: Armin Krezović <[email protected]>
---
 libweston/libbacklight.c | 46 +++-------------------------------------------
 1 file changed, 3 insertions(+), 43 deletions(-)

diff --git a/libweston/libbacklight.c b/libweston/libbacklight.c
index 4bbc6db4..d814b583 100644
--- a/libweston/libbacklight.c
+++ b/libweston/libbacklight.c
@@ -67,6 +67,9 @@ static long backlight_get(struct backlight *backlight, char 
*node)
                goto out;
        }
 
+       if (buffer[ret - 1] == '\n')
+               buffer[ret - 1] = '\0';
+
        if (!safe_strtoint(buffer, &value)) {
                ret = -1;
                goto out;
@@ -153,8 +156,6 @@ void backlight_destroy(struct backlight *backlight)
 struct backlight *backlight_init(struct udev_device *drm_device,
                                 uint32_t connector_type)
 {
-       const char *syspath = NULL;
-       char *pci_name = NULL;
        char *chosen_path = NULL;
        char *path = NULL;
        DIR *backlights = NULL;
@@ -164,24 +165,6 @@ struct backlight *backlight_init(struct udev_device 
*drm_device,
        struct backlight *backlight = NULL;
        int ret;
 
-       if (!drm_device)
-               return NULL;
-
-       syspath = udev_device_get_syspath(drm_device);
-       if (!syspath)
-               return NULL;
-
-       if (asprintf(&path, "%s/%s", syspath, "device") < 0)
-               return NULL;
-
-       ret = readlink(path, buffer, sizeof(buffer) - 1);
-       free(path);
-       if (ret < 0)
-               return NULL;
-
-       buffer[ret] = '\0';
-       pci_name = basename(buffer);
-
        if (connector_type <= 0)
                return NULL;
 
@@ -207,7 +190,6 @@ struct backlight *backlight_init(struct udev_device 
*drm_device,
 
        while ((entry = readdir(backlights))) {
                char *backlight_path;
-               char *parent;
                enum backlight_type entry_type;
                int fd;
 
@@ -253,28 +235,6 @@ struct backlight *backlight_init(struct udev_device 
*drm_device,
                                goto out;
                }
 
-               free (path);
-
-               if (asprintf(&path, "%s/%s", backlight_path, "device") < 0)
-                       goto err;
-
-               ret = readlink(path, buffer, sizeof(buffer) - 1);
-
-               if (ret < 0)
-                       goto out;
-
-               buffer[ret] = '\0';
-
-               parent = basename(buffer);
-
-               /* Perform matching for raw and firmware backlights -
-                  platform backlights have to be assumed to match */
-               if (entry_type == BACKLIGHT_RAW ||
-                   entry_type == BACKLIGHT_FIRMWARE) {
-                       if (!(pci_name && !strcmp(pci_name, parent)))
-                               goto out;
-               }
-
                if (entry_type < type)
                        goto out;
 
-- 
2.11.1

_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to