[PATCH elographics 7/7 v2] Support input ABI 12

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


Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
Changes to v1:
- add compiler error for abi < 12
- add default_options to module

 src/xf86Elo.c |   64 +++++++++++++++++++++++---------------------------------
 1 files changed, 26 insertions(+), 38 deletions(-)

diff --git a/src/xf86Elo.c b/src/xf86Elo.c
index 4c3426f..f5b31d7 100644
--- a/src/xf86Elo.c
+++ b/src/xf86Elo.c
@@ -58,6 +58,10 @@
 
 #include "xf86Module.h"
 
+#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
+#error "Need server with input ABI 12."
+#endif
+
 /**
  * models to be treated specially.
  */
@@ -725,13 +729,15 @@ xf86EloControl(DeviceIntPtr	dev,
 			       -1, -1,
 			       9500,
 			       0     /* min_res */,
-			       9500  /* max_res */);
+			       9500  /* max_res */,
+			       Absolute);
 	InitValuatorAxisStruct(dev, 1,
 			       axis_labels[1],
 			       -1, -1,
 			       10500,
 			       0     /* min_res */,
-			       10500 /* max_res */);
+			       10500 /* max_res */,
+			       Absolute);
       }
 
       if (InitFocusClassDeviceStruct(dev) == FALSE) {
@@ -859,22 +865,14 @@ xf86EloControl(DeviceIntPtr	dev,
  *
  ***************************************************************************
  */
-static InputInfoPtr
-xf86EloAllocate(InputDriverPtr	drv, IDevPtr dev)
+static int
+xf86EloAllocate(InputDriverPtr drv, InputInfoPtr pInfo)
 {
-  InputInfoPtr	pInfo;
   EloPrivatePtr		priv;
 
   priv = malloc(sizeof(EloPrivateRec));
   if (!priv)
-    return NULL;
-
-  pInfo = xf86AllocateInput(drv, 0);
-
-  if (!pInfo) {
-    free(priv);
-    return NULL;
-  }
+    return BadAlloc;
 
   priv->input_dev = strdup(ELO_PORT);
   priv->min_x = 0;
@@ -892,19 +890,15 @@ xf86EloAllocate(InputDriverPtr	drv, IDevPtr dev)
   priv->packet_buf_p = 0;
   priv->swap_axes = 0;
 
-  pInfo->name = xstrdup(dev->identifier);
   pInfo->flags = 0 /* XI86_NO_OPEN_ON_INIT */;
   pInfo->device_control = xf86EloControl;
   pInfo->read_input   = xf86EloReadInput;
   pInfo->control_proc = NULL;
   pInfo->switch_mode  = NULL;
-  pInfo->fd	      = -1;
-  pInfo->atom	      = 0;
-  pInfo->dev	      = NULL;
   pInfo->private      = priv;
   pInfo->type_name    = "Elographics TouchScreen";
 
-  return pInfo;
+  return Success;
 }
 
 
@@ -921,7 +915,7 @@ xf86EloUninit(InputDriverPtr	drv,
   xf86DeleteInput(pInfo, 0);
 }
 
-static const char *default_options[] = {
+static char *default_options[] = {
   "BaudRate", "9600",
   "StopBits", "1",
   "DataBits", "8",
@@ -930,42 +924,37 @@ static const char *default_options[] = {
   NULL
 };
 
-static InputInfoPtr
+static int
 xf86EloInit(InputDriverPtr	drv,
-	    IDevPtr		dev,
+	    InputInfoPtr	pInfo,
 	    int			flags)
 {
-  InputInfoPtr	pInfo=NULL;
   EloPrivatePtr		priv=NULL;
   char			*str;
   int			portrait = 0;
   int			height, width;
   char			*opt_model;
   Model*		model;
+  int			rc;
 
 
-  pInfo = xf86EloAllocate(drv, dev);
-  if (!pInfo) {
-    return NULL;
-  }
-  priv = pInfo->private;
-  pInfo->conf_idev = dev;
+  rc = xf86EloAllocate(drv, pInfo);
+  if (rc != Success)
+    return rc;
 
-  xf86CollectInputOptions(pInfo, default_options, NULL);
-  /* Process the common options. */
-  xf86ProcessCommonOptions(pInfo, pInfo->options);
+  priv = pInfo->private;
 
   str = xf86FindOptionValue(pInfo->options, "Device");
   if (!str) {
     xf86Msg(X_ERROR, "%s: No Device specified in Elographics module config.\n",
-	    dev->identifier);
+	    pInfo->name);
     if (priv) {
       if (priv->input_dev) {
 	free(priv->input_dev);
       }
       free(priv);
     }
-    return pInfo;
+    return BadValue;
   }
   priv->input_dev = strdup(str);
 
@@ -1027,14 +1016,14 @@ xf86EloInit(InputDriverPtr	drv,
   height = priv->max_y - priv->min_y;
   if (width == 0) {
     xf86Msg(X_ERROR, "Elographics: Cannot configure touchscreen with width 0\n");
-    return pInfo;
+    return BadValue;
   }
   else if (width < 0) {
     xf86Msg(X_INFO, "Elographics: reverse x mode (minimum x position >= maximum x position)\n");
   }
   if (height == 0) {
     xf86Msg(X_ERROR, "Elographics: Cannot configure touchscreen with height 0\n");
-    return pInfo;
+    return BadValue;
   }
   else if (height < 0) {
     xf86Msg(X_INFO, "Elographics: reverse y mode (minimum y position >= maximum y position)\n");
@@ -1061,9 +1050,7 @@ xf86EloInit(InputDriverPtr	drv,
     priv->swap_axes = (priv->swap_axes==0) ? 1 : 0;
   }
 
-  /* mark the device configured */
-  pInfo->flags |= XI86_CONFIGURED;
-  return pInfo;
+  return Success;
 }
 
 _X_EXPORT InputDriverRec ELOGRAPHICS = {
@@ -1073,6 +1060,7 @@ _X_EXPORT InputDriverRec ELOGRAPHICS = {
     xf86EloInit,		/* pre-init */
     xf86EloUninit,		/* un-init */
     NULL,			/* module */
+    default_options
 };
 
 static pointer
-- 
1.7.3.2


More information about the xorg-devel mailing list