[PATCH mutouch 10/10 v2] Support input ABI 12

Peter Hutterer peter.hutterer at who-t.net
Sun Dec 5 16:24:40 PST 2010


Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---

Changes to v1:
- error out if abi < 12 is detected
- add comma to default_options to reduce future diff noise

 src/xf86MuTouch.c |   93 ++++++++++++++++++++--------------------------------
 1 files changed, 36 insertions(+), 57 deletions(-)

diff --git a/src/xf86MuTouch.c b/src/xf86MuTouch.c
index 4312256..cc9dcb3 100644
--- a/src/xf86MuTouch.c
+++ b/src/xf86MuTouch.c
@@ -59,6 +59,9 @@
 
 #include "xf86Module.h"
 
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
+#error "Need server with input ABI 12"
+#endif
 /*
  ***************************************************************************
  *
@@ -727,12 +730,14 @@ xf86MuTControl(DeviceIntPtr	dev,
 			       priv->min_x, priv->max_x,
 			       9500,
 			       0     /* min_res */,
-			       9500  /* max_res */);
+			       9500  /* max_res */,
+			       Absolute);
 	InitValuatorAxisStruct(dev, 1, axis_labels[1],
 			       priv->min_y, priv->max_y,
 			       10500,
 			       0     /* min_res */,
-			       10500 /* max_res */);
+			       10500 /* max_res */,
+			       Absolute);
       }
 
       if (InitFocusClassDeviceStruct(dev) == FALSE) {
@@ -953,26 +958,17 @@ xf86MuTControl(DeviceIntPtr	dev,
  *
  ***************************************************************************
  */
-static InputInfoPtr
+static int
 xf86MuTAllocate(InputDriverPtr	drv,
+		InputInfoPtr	pInfo,
 		char		*name,
 		char		*type_name,
 		int		flag)
 {
-  InputInfoPtr        pInfo = xf86AllocateInput(drv, 0);
   MuTPrivatePtr         priv = (MuTPrivatePtr) malloc(sizeof(MuTPrivateRec));
 
-  if (!pInfo) {
-    if (priv) {
-      free(priv);
-    }
-    return NULL;
-  }
   if (!priv) {
-    if (pInfo) {
-      free(pInfo);
-    }
-    return NULL;
+    return BadAlloc;
   }
 
   priv->input_dev = strdup(MuT_PORT);
@@ -992,19 +988,16 @@ xf86MuTAllocate(InputDriverPtr	drv,
   priv->frequency = 0;
   priv->device_type = flag;
 
-  pInfo->name = name;
   pInfo->flags = 0 /* XI86_NO_OPEN_ON_INIT */;
   pInfo->device_control = xf86MuTControl;
   pInfo->read_input = xf86MuTReadInput;
   pInfo->control_proc = NULL;
   pInfo->switch_mode = NULL;
   pInfo->fd = -1;
-  pInfo->atom = 0;
-  pInfo->dev = NULL;
   pInfo->private = priv;
   pInfo->type_name = type_name;
 
-  return pInfo;
+  return Success;
 }
 
 
@@ -1015,15 +1008,15 @@ xf86MuTAllocate(InputDriverPtr	drv,
  *
  ***************************************************************************
  */
-static InputInfoPtr
-xf86MuTAllocateFinger(InputDriverPtr	drv)
+static int
+xf86MuTAllocateFinger(InputDriverPtr drv, InputInfoPtr pInfo)
 {
-  InputInfoPtr	pInfo = xf86MuTAllocate(drv, XI_FINGER, "MicroTouch Finger", FINGER_ID);
+  int rc = xf86MuTAllocate(drv, pInfo, XI_FINGER, "MicroTouch Finger", FINGER_ID);
 
-  if (pInfo) {
+  if (rc == Success) {
     ((MuTPrivatePtr) pInfo->private)->finger = pInfo;
   }
-  return pInfo;
+  return rc;
 }
 
 
@@ -1034,15 +1027,15 @@ xf86MuTAllocateFinger(InputDriverPtr	drv)
  *
  ***************************************************************************
  */
-static InputInfoPtr
-xf86MuTAllocateStylus(InputDriverPtr	drv)
+static int
+xf86MuTAllocateStylus(InputDriverPtr drv, InputInfoPtr pInfo)
 {
-  InputInfoPtr	pInfo = xf86MuTAllocate(drv, XI_STYLUS, "MicroTouch Stylus", STYLUS_ID);
+    int rc = xf86MuTAllocate(drv, pInfo, XI_STYLUS, "MicroTouch Stylus", STYLUS_ID);
 
-  if (pInfo) {
+  if (rc == Success) {
     ((MuTPrivatePtr) pInfo->private)->stylus = pInfo;
   }
-  return pInfo;
+  return rc;
 }
 
 
@@ -1067,7 +1060,7 @@ xf86MuTUninit(InputDriverPtr	drv,
   xf86DeleteInput(pInfo, 0);
 }
 
-static const char *default_options[] = {
+static char *default_options[] = {
   "BaudRate", "9600",
   "StopBits", "1",
   "DataBits", "8",
@@ -1078,49 +1071,39 @@ static const char *default_options[] = {
   NULL
 };
 
-static InputInfoPtr
+static int
 xf86MuTInit(InputDriverPtr	drv,
-	    IDevPtr		dev,
+	    InputInfoPtr	pInfo,
 	    int			flags)
 {
-  InputInfoPtr	pInfo=NULL, fake_pInfo=NULL, current;
+  InputInfoPtr		current;
   MuTPrivatePtr		priv=NULL;
   char			*str;
   int			portrait=0;
+  int			rc = Success;
 
-  fake_pInfo = (InputInfoPtr) calloc(1, sizeof(InputInfoRec));
-  if (!fake_pInfo) {
-    goto init_err;
-  }
-  fake_pInfo->conf_idev = dev;
-
-  xf86CollectInputOptions(fake_pInfo, default_options, NULL);
-
-  str = xf86FindOptionValue(fake_pInfo->options, "Type");
+  str = xf86FindOptionValue(pInfo->options, "Type");
   if (str && (xf86NameCmp(str, "finger") == 0)) {
-    pInfo = xf86MuTAllocateFinger(drv);
+    rc = xf86MuTAllocateFinger(drv, pInfo);
   }
   else if (str && (xf86NameCmp(str, "stylus") == 0)) {
-    pInfo = xf86MuTAllocateStylus(drv);
+    rc = xf86MuTAllocateStylus(drv, pInfo);
   }
   else {
     xf86Msg(X_ERROR, "%s: Type field missing in Microtouch module config,\n"
-	    "Must be stylus or finger\n", dev->identifier);
+	    "Must be stylus or finger\n", pInfo->name);
     goto init_err;
   }
-  if (!pInfo) {
+  if (rc != Success) {
     goto init_err;
   }
   priv = pInfo->private;
-  pInfo->options = fake_pInfo->options;
-  pInfo->conf_idev = fake_pInfo->conf_idev;
-  free(fake_pInfo);
-  fake_pInfo = NULL;
 
   str = xf86FindOptionValue(pInfo->options, "Device");
   if (!str) {
     xf86Msg(X_ERROR, "%s: No Device specified in Microtouch module config.\n",
-	    dev->identifier);
+	    pInfo->name);
+    rc = BadValue;
     goto init_err;
   }
   priv->input_dev = strdup(str);
@@ -1244,14 +1227,9 @@ xf86MuTInit(InputDriverPtr	drv,
     priv->swap_axes = (priv->swap_axes==0) ? 1 : 0;
   }
 
-  /* mark the device configured */
-  pInfo->flags |= XI86_CONFIGURED;
-  return pInfo;
+  return Success;
 
  init_err:
-  if (fake_pInfo) {
-    free(fake_pInfo);
-  }
   if (priv) {
     if (priv->input_dev) {
       free(priv->input_dev);
@@ -1261,7 +1239,7 @@ xf86MuTInit(InputDriverPtr	drv,
   if (pInfo) {
     free(pInfo);
   }
-  return NULL;
+  return rc;
 }
 
 _X_EXPORT InputDriverRec MUTOUCH = {
@@ -1271,6 +1249,7 @@ _X_EXPORT InputDriverRec MUTOUCH = {
     xf86MuTInit,		/* pre-init */
     xf86MuTUninit,		/* un-init */
     NULL,			/* module */
+    default_options,
 };
 
 static pointer
-- 
1.7.3.2


More information about the xorg-devel mailing list