Upstream-Status: Pending

Taken from debian:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=627075

Index: xf86-input-tslib-trunk/src/tslib.c
===================================================================
--- xf86-input-tslib-trunk/src/tslib.c	(revision 48)
+++ xf86-input-tslib-trunk/src/tslib.c	(working copy)
@@ -69,6 +69,13 @@
 #define DEFAULT_HEIGHT		240
 #define DEFAULT_WIDTH		320
 
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
+#define COLLECT_INPUT_OPTIONS(pInfo, options) xf86CollectInputOptions((pInfo), (options), NULL)
+#else
+#define COLLECT_INPUT_OPTIONS(pInfo, options) xf86CollectInputOptions((pInfo), (options))
+#endif
+
+
 enum { TSLIB_ROTATE_NONE=0, TSLIB_ROTATE_CW=270, TSLIB_ROTATE_UD=180, TSLIB_ROTATE_CCW=90 };
 
 enum button_state { BUTTON_NOT_PRESSED = 0, BUTTON_1_PRESSED = 1, BUTTON_3_CLICK = 3, BUTTON_3_CLICKED=4, BUTTON_EMULATION_OFF=-1 };
@@ -106,7 +113,7 @@
 }
 
 static Bool
-ConvertProc( LocalDevicePtr local,
+ConvertProc( InputInfoPtr local,
 			 int first,
 			 int num,
 			 int v0,
@@ -135,7 +142,7 @@
     return t;
 }
 
-static void ReadInput (LocalDevicePtr local)
+static void ReadInput (InputInfoPtr local)
 {
 	struct ts_priv *priv = (struct ts_priv *) (local->private);
 	struct ts_sample samp;
@@ -382,7 +389,11 @@
 					       axiswidth - 1,	/* max val */
 					       axiswidth,	/* resolution */
 					       0,		/* min_res */
-					       axiswidth);	/* max_res */
+					       axiswidth	/* max_res */
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+					       ,Absolute
+#endif
+					       );
 
 		InitValuatorAxisStruct(device, 1,
 #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7
@@ -392,7 +403,11 @@
 					       axisheight - 1,	/* max val */
 					       axisheight,	/* resolution */
 					       0,		/* min_res */
-					       axisheight);	/* max_res */
+					       axisheight	/* max_res */
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+					       ,Absolute
+#endif
+					       );
 
 		if (InitProximityClassDeviceStruct (device) == FALSE) {
 			ErrorF ("Unable to allocate EVTouch touchscreen ProximityClassDeviceStruct\n");
@@ -434,7 +449,7 @@
 	ErrorF("%s\n", __FUNCTION__);
 	xf86TslibControlProc(pInfo->dev, DEVICE_OFF);
 	ts_close(priv->ts);
-	xfree(pInfo->private);
+	free(pInfo->private);
 	pInfo->private = NULL;
 	xf86DeleteInput(pInfo, 0);
 }
@@ -444,47 +459,57 @@
  *
  * called when the module subsection is found in XF86Config
  */
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12
+static int 
+xf86TslibInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
+#else
 static InputInfoPtr
 xf86TslibInit(InputDriverPtr drv, IDevPtr dev, int flags)
+#endif
 {
 	struct ts_priv *priv;
 	char *s;
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
 	InputInfoPtr pInfo;
+#endif
 
-	priv = xcalloc (1, sizeof (struct ts_priv));
+	priv = calloc (1, sizeof (struct ts_priv));
         if (!priv)
-                return NULL;
+                return BadValue;
 
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
 	if (!(pInfo = xf86AllocateInput(drv, 0))) {
-		xfree(priv);
-		return NULL;
+		free(priv);
+		return BadValue;
 	}
 
 	/* Initialise the InputInfoRec. */
 	pInfo->name = dev->identifier;
-	pInfo->type_name = XI_TOUCHSCREEN;
 	pInfo->flags =
 	    XI86_KEYBOARD_CAPABLE | XI86_POINTER_CAPABLE |
 	    XI86_SEND_DRAG_EVENTS;
-	pInfo->device_control = xf86TslibControlProc;
-	pInfo->read_input = ReadInput;
 #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0
 	pInfo->motion_history_proc = xf86GetMotionEvents;
 	pInfo->history_size = 0;
 #endif
-	pInfo->control_proc = NULL;
+	pInfo->conf_idev = dev;
 	pInfo->close_proc = NULL;
-	pInfo->switch_mode = NULL;
 	pInfo->conversion_proc = ConvertProc;
 	pInfo->reverse_conversion_proc = NULL;
-	pInfo->dev = NULL;
 	pInfo->private_flags = 0;
 	pInfo->always_core_feedback = 0;
-	pInfo->conf_idev = dev;
+#endif
+
+	pInfo->type_name = XI_TOUCHSCREEN;
+	pInfo->control_proc = NULL;
+	pInfo->read_input = ReadInput;
+	pInfo->device_control = xf86TslibControlProc;
+	pInfo->switch_mode = NULL;
 	pInfo->private = priv;
+	pInfo->dev = NULL;
 
 	/* Collect the options, and process the common options. */
-	xf86CollectInputOptions(pInfo, NULL, NULL);
+	COLLECT_INPUT_OPTIONS(pInfo, NULL);
 	xf86ProcessCommonOptions(pInfo, pInfo->options);
 
 	priv->screen_num = xf86SetIntOption(pInfo->options, "ScreenNumber", 0 );
@@ -510,23 +535,31 @@
 		priv->rotate = TSLIB_ROTATE_NONE;
 	}
 
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
  	s = xf86CheckStrOption(dev->commonOptions, "path", NULL);
+#else
+	s = xf86CheckStrOption(pInfo->options, "path", NULL);
+#endif
   	if (!s)
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
 		s = xf86CheckStrOption(dev->commonOptions, "Device", NULL);
+#else
+		s = xf86CheckStrOption(pInfo->options, "Device", NULL);
+#endif
  
 	priv->ts = ts_open(s, 1);
-	xfree(s);
+	free(s);
 
 	if (!priv->ts) {
 		ErrorF("ts_open failed (device=%s)\n",s);
 		xf86DeleteInput(pInfo, 0);
-		return NULL;
+		return BadValue;
 	}
 
 	if (ts_config(priv->ts)) {
 		ErrorF("ts_config failed\n");
 		xf86DeleteInput(pInfo, 0);
-		return NULL;
+		return BadValue;
 	}
 
 	pInfo->fd = ts_fd(priv->ts);
@@ -536,11 +569,13 @@
 		priv->state = BUTTON_EMULATION_OFF;
 	}
 
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
 	/* Mark the device configured */
 	pInfo->flags |= XI86_CONFIGURED;
+#endif
 
 	/* Return the configured device */
-	return (pInfo);
+	return Success;
 }
 
 _X_EXPORT InputDriverRec TSLIB = {
