The 2.6.36 kernel removes several members from `struct input_dev` (e.g. abs, absres) and replaces them with a structs and accessor functions. To allow the input-wacom code to compile under both old and new kernels, commits ca9786f and the mailinglist version of ab2ea683fb conditionally defined their own implementation of the accessor function for older kernels.
It was noticed, however, that this did not compile correctly on RHEL 6 systems. It seems that the accessor API introduced in 2.6.36 is provided in their customized "2.6.32" kernel. This results in a redefinition error that halts compilation. To work around this, commit 58d8320541 removed the condtional and renamed our implementation of the accessor. Commit ab2ea683fb was also similarly modified from its mailinglist version prior to being committed. This change prevented the redefinition on RHEL 6 and also worked fine for pre-2.6.36 kernels. The change ended up breaking compilation under stock 2.6.36 kernels since the members used by the renamed function were removed. To ensure the code compiles in all cases, we need to be a little more clever. We make use of the recently-added "WACOM_LINUX_TRY_COMPILE" configure macro to see if the kernel provides the accessor API or not. If it does, we make use of it; of not, we access the members directly. Fixes: 58d8320541 ("2.6.30: define wacom_input_abs_get_val") Fixes: ab2ea683fb ("2.6.32: Backport resolution support to 2.6.32") Signed-off-by: Jason Gerecke <jason.gere...@wacom.com> --- 2.6.32/wacom_wac.c | 8 ++++++++ configure.ac | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/2.6.32/wacom_wac.c b/2.6.32/wacom_wac.c index 3ad7aae..11c7513 100644 --- a/2.6.32/wacom_wac.c +++ b/2.6.32/wacom_wac.c @@ -924,7 +924,11 @@ static int wacom_intuos_irq(struct wacom_wac *wacom) static int wacom_input_abs_get_val(struct input_dev *input, unsigned int axis) { +#ifndef WACOM_ABSACCESSOR_36 return input->abs[axis]; +#else + return input_abs_get_val(input, axis); +#endif } static void wacom_multitouch_generic_finger(struct wacom_wac *wacom, @@ -2080,7 +2084,11 @@ void wacom_setup_device_quirks(struct wacom *wacom) static inline void wacom_input_abs_set_res(struct input_dev *dev, unsigned int axis, int val) { +#ifndef WACOM_ABSACCESSOR_36 dev->absres[axis] = val; +#else + input_abs_set_res(dev, axis, val); +#endif } static void wacom_abs_set_axis(struct input_dev *input_dev, diff --git a/configure.ac b/configure.ac index 1cb4394..a14a569 100644 --- a/configure.ac +++ b/configure.ac @@ -194,6 +194,21 @@ struct power_supply_desc test; AC_MSG_RESULT([pre-v4.1]) ]) +dnl RedHat entreprise Linux 6.x backports abs accessor functions from 2.6.36 +AC_MSG_CHECKING(abs accessor version) +WACOM_LINUX_TRY_COMPILE([ +#include <linux/input.h> +],[ +struct input_dev test; +input_abs_get_res(&test, 0); +],[ + HAVE_ABSACCESSOR_36=yes + AC_MSG_RESULT([v2.6.36+]) + AC_DEFINE([WACOM_ABSACCESSOR_36], [], [kernel uses abs accessor macros from v2.6.36+]) +],[ + HAVE_ABSACCESSOR_36=no + AC_MSG_RESULT([pre-v2.6.36]) +]) dnl Check which version of the driver we should compile AC_DEFUN([WCM_EXPLODE], [$(echo "$1" | awk '{split($[0],x,"[[^0-9]]"); printf("%03d%03d%03d\n",x[[1]],x[[2]],x[[3]]);}')]) -- 2.17.0 ------------------------------------------------------------------------------ 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