The HAL daemon used by RHEL6/CentOS6 does not play nicely with input
devices that advertise unsupported EV_SW events. Devices with such
an event will fail in the middle of the probe process, preventing
the X server from being able to hotplug the device. The SW_MUTE_DEVICE
event used by the Cintiq Pro touchscreen is such an event.

To work around this limitation, we can define an fdi configuration file
which resets the "button.has_state" property prior to probe. Because
HAL only runs the failing code when this property is true, the device
is able to finish the probe process just as though it never had the
unsupported switch in the first place. Resetting this property does
prevent HAL from being able to monitor the switch state, but that is
not considered a problem.

Since HAL is long-since deprecated, it doesn't make sense to install
this configuration file on systems which don't require it. This
commit also adds logic to configure.ac so that only systems which still
use HAL will install this file.

Signed-off-by: Jason Gerecke <jason.gere...@wacom.com>
---
Changes from v1:
  * Squashed 1st and 2nd patches together
  * "wacom.fdi" goes back into the "else" case instead of "if USE_HAL_FDI"
  * Spelling fix

 conf/Makefile.am        |  9 +++++++--
 conf/wacom-preprobe.fdi | 17 +++++++++++++++++
 configure.ac            | 15 +++++++++++++++
 3 files changed, 39 insertions(+), 2 deletions(-)
 create mode 100644 conf/wacom-preprobe.fdi

diff --git a/conf/Makefile.am b/conf/Makefile.am
index f7abdd0..c478916 100644
--- a/conf/Makefile.am
+++ b/conf/Makefile.am
@@ -3,8 +3,13 @@ CLEANFILES=
 if HAS_XORG_CONF_DIR
 dist_config_DATA = 70-wacom.conf
 else
-fdidir = $(datadir)/hal/fdi/policy/20thirdparty
-dist_fdi_DATA = wacom.fdi
+fdipolicydir = $(datadir)/hal/fdi/policy/20thirdparty
+dist_fdipolicy_DATA = wacom.fdi
+endif
+
+if USE_HAL_FDI
+fdipreprobedir = $(datadir)/hal/fdi/preprobe/20thirdparty
+dist_fdipreprobe_DATA = wacom-preprobe.fdi
 endif
 
 if HAVE_SYSTEMD_UNIT_DIR
diff --git a/conf/wacom-preprobe.fdi b/conf/wacom-preprobe.fdi
new file mode 100644
index 0000000..bcf860a
--- /dev/null
+++ b/conf/wacom-preprobe.fdi
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deviceinfo version="0.2">
+  <device>
+
+    <!-- Some Wacom devices (e.g. Cintiq Pro) have an EV_SW event which is
+         unsupported by HAL. To prevent the input prober from failing
+         on this event (hal/hald/linux/probing/probe-input.c:79) we
+         should pretend that it doesn't exist. -->
+    <match key="info.capabilities" contains="button">
+      <match key="info.product" contains_outof="Wacom;WACOM">
+        <merge key="button.has_state" type="bool">false</merge>
+      </match>
+    </match>
+
+  </device>
+</deviceinfo>
diff --git a/configure.ac b/configure.ac
index b17cbe0..71ec76a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -107,6 +107,21 @@ AC_ARG_WITH([xorg-conf-dir],
 AC_SUBST(configdir)
 AM_CONDITIONAL(HAS_XORG_CONF_DIR, [test "x$configdir" != "x"])
 
+AC_ARG_ENABLE(hal-fdi, AS_HELP_STRING([--enable-hal-fdi],
+                          [Install HAL fdi configuration files (default: 
auto)]),
+                          [USE_HAL_FDI=$enableval],
+                          [USE_HAL_FDI=auto])
+if test "x$USE_HAL_FDI" = xauto ; then
+       AC_CHECK_PROG([LSHAL], [lshal], [yes], [no])
+       AC_CHECK_PROG([HAL_SET_PROPERTY], [hal-set-property], [yes], [no])
+       AS_IF([test "x$LSHAL" = "xyes" -a "x$HAL_SET_PROPERTY" = "xyes"],
+             [USE_HAL_FDI=yes],
+             [USE_HAL_FDI=no])
+fi
+AC_MSG_CHECKING([if HAL files should be installed])
+AC_MSG_RESULT($USE_HAL_FDI)
+AM_CONDITIONAL(USE_HAL_FDI, [test "x$USE_HAL_FDI" = xyes])
+
 AC_ARG_ENABLE(fuzz-interface, AS_HELP_STRING([--enable-fuzz-interface],
                           [Enable xsetwacom to take NUL-separated commands 
from stdin (default: no)]),
                           [FUZZINTERFACE=$enableval],
-- 
2.15.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to