From 3983befa648a2ef8d15d597da67a80df8e54a9c2 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 28 Feb 2014 11:51:15 +1000 Subject: [PATCH] Search all parent devices for a PnPID. --- ...earch-for-PnPID-on-all-parents-75513.patch | 86 +++++++++++++++++++ xorg-x11-server.spec | 7 +- 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 0001-config-search-for-PnPID-on-all-parents-75513.patch diff --git a/0001-config-search-for-PnPID-on-all-parents-75513.patch b/0001-config-search-for-PnPID-on-all-parents-75513.patch new file mode 100644 index 0000000..8374b40 --- /dev/null +++ b/0001-config-search-for-PnPID-on-all-parents-75513.patch @@ -0,0 +1,86 @@ +From 2377c922b8b639d3c511ca92a6ddd2db921b3105 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Wed, 26 Feb 2014 07:54:56 +1000 +Subject: [PATCH] config: search for PnPID on all parents (#75513) + +The PnPID for a device may not be on the immediate parent, so search up the +device tree until we find one. + +X.Org Bug 75513 + +Signed-off-by: Peter Hutterer +--- + config/hal.c | 16 +++++++++++++--- + config/udev.c | 15 +++++++++++---- + 2 files changed, 24 insertions(+), 7 deletions(-) + +diff --git a/config/hal.c b/config/hal.c +index 2ead556..d8e8db7 100644 +--- a/config/hal.c ++++ b/config/hal.c +@@ -184,8 +184,7 @@ device_added(LibHalContext * hal_ctx, const char *udi) + parent = get_prop_string(hal_ctx, udi, "info.parent"); + if (parent) { + int usb_vendor, usb_product; +- +- attrs.pnp_id = get_prop_string(hal_ctx, parent, "pnp.id"); ++ char *old_parent; + + /* construct USB ID in lowercase - "0000:ffff" */ + usb_vendor = libhal_device_get_property_int(hal_ctx, parent, +@@ -203,7 +202,18 @@ device_added(LibHalContext * hal_ctx, const char *udi) + == -1) + attrs.usb_id = NULL; + +- free(parent); ++ attrs.pnp_id = get_prop_string(hal_ctx, parent, "pnp.id"); ++ old_parent = parent; ++ ++ while (!attrs.pnp_id && ++ (parent = get_prop_string(hal_ctx, parent, "info.parent"))) { ++ attrs.pnp_id = get_prop_string(hal_ctx, parent, "pnp.id"); ++ ++ free(old_parent); ++ old_parent = parent; ++ } ++ ++ free(old_parent); + } + + input_options = input_option_new(NULL, "_source", "server/hal"); +diff --git a/config/udev.c b/config/udev.c +index b55b78e..bcafbd9 100644 +--- a/config/udev.c ++++ b/config/udev.c +@@ -130,10 +130,6 @@ device_added(struct udev_device *udev_device) + LOG_PROPERTY(ppath, "NAME", name); + } + +- if (pnp_id) +- attrs.pnp_id = strdup(pnp_id); +- LOG_SYSATTR(ppath, "id", pnp_id); +- + /* construct USB ID in lowercase hex - "0000:ffff" */ + if (product && + sscanf(product, "%*x/%4x/%4x/%*x", &usb_vendor, &usb_model) == 2) { +@@ -143,6 +139,17 @@ device_added(struct udev_device *udev_device) + else + LOG_PROPERTY(ppath, "PRODUCT", product); + } ++ ++ while (!pnp_id && (parent = udev_device_get_parent(parent))) { ++ pnp_id = udev_device_get_sysattr_value(parent, "id"); ++ if (!pnp_id) ++ continue; ++ ++ attrs.pnp_id = strdup(pnp_id); ++ ppath = udev_device_get_devnode(parent); ++ LOG_SYSATTR(ppath, "id", pnp_id); ++ } ++ + } + if (!name) + name = "(unnamed)"; +-- +1.8.4.2 + diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 98c9c9e..6724fb4 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -42,7 +42,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.15.0 -Release: 4%{?gitdate:.%{gitdate}}%{dist} +Release: 5%{?gitdate:.%{gitdate}}%{dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -156,6 +156,8 @@ Patch9100: exa-only-draw-valid-trapezoids.patch # in pull request http://patchwork.freedesktop.org/patch/19468/ Patch9103: 0001-dix-fix-button-state-check-before-changing-a-button-.patch +Patch9104: 0001-config-search-for-PnPID-on-all-parents-75513.patch + %global moduledir %{_libdir}/xorg/modules %global drimoduledir %{_libdir}/dri %global sdkdir %{_includedir}/xorg @@ -651,6 +653,9 @@ rm -rf $RPM_BUILD_ROOT %{xserver_source_dir} %changelog +* Fri Feb 28 2014 Peter Hutterer 1.15.0-5 +- Search all parent devices for a PnPID. + * Mon Feb 17 2014 Adam Williamson - 1.15.0-4 - fix xwayland crash under mutter (RH #1065109 , BGO #724443)