On Fri, Apr 20, 2018 at 2:33 PM, Jason Gerecke <killert...@gmail.com> wrote:

> 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.
>

 That's quite an explanation.

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.
>

 Yeah, we get to be clever the third time :D.


> 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>
>

Reviewed-by: Ping Cheng <ping.ch...@wacom.com>

Thank you,
Ping


> ---
>  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

Reply via email to