Signed-off-by: Peter Hutterer <[email protected]>
---
 src/wcmCommon.c     |    4 ++--
 src/wcmConfig.c     |    2 --
 src/wcmISDV4.c      |   39 ++++++++++++++++++++++++++++-----------
 src/xf86WacomDefs.h |    1 -
 4 files changed, 30 insertions(+), 16 deletions(-)

diff --git a/src/wcmCommon.c b/src/wcmCommon.c
index 6e485be..22be0a9 100644
--- a/src/wcmCommon.c
+++ b/src/wcmCommon.c
@@ -1630,10 +1630,10 @@ int wcmInitTablet(LocalDevicePtr local, const char* id, 
float version)
        }
 
        /* output tablet state as probed */
-       xf86Msg(X_PROBED, "%s: Wacom %s tablet speed=%d maxX=%d maxY=%d maxZ=%d 
"
+       xf86Msg(X_PROBED, "%s: Wacom %s tablet maxX=%d maxY=%d maxZ=%d "
                        "resX=%d resY=%d  tilt=%s\n",
                        local->name,
-                       model->name, common->wcmISDV4Speed, 
+                       model->name,
                        common->wcmMaxX, common->wcmMaxY, common->wcmMaxZ,
                        common->wcmResolX, common->wcmResolY,
                        HANDLE_TILT(common) ? "enabled" : "disabled");
diff --git a/src/wcmConfig.c b/src/wcmConfig.c
index c46eabf..e5025ea 100644
--- a/src/wcmConfig.c
+++ b/src/wcmConfig.c
@@ -109,8 +109,6 @@ static int wcmAllocate(LocalDevicePtr local)
        common->wcmFlags = RAW_FILTERING_FLAG;   /* various flags */
        common->wcmDevices = priv;
        common->wcmProtocolLevel = 4;      /* protocol level */
-       common->wcmISDV4Speed = 38400;  /* serial ISDV4 link speed */
-
        common->wcmDevCls = &gWacomUSBDevice; /* device-specific functions */
        common->wcmTPCButton = 
                common->wcmTPCButtonDefault; /* set Tablet PC button on/off */
diff --git a/src/wcmISDV4.c b/src/wcmISDV4.c
index 041e6c8..2b85070 100644
--- a/src/wcmISDV4.c
+++ b/src/wcmISDV4.c
@@ -34,6 +34,10 @@
 
 #define RESET_RELATIVE(ds) do { (ds).relwheel = 0; } while (0)
 
+typedef struct {
+       int baudrate;
+} wcmISDV4Data;
+
 static Bool isdv4Detect(LocalDevicePtr);
 static Bool isdv4ParseOptions(LocalDevicePtr local);
 static Bool isdv4Init(LocalDevicePtr, char* id, float *version);
@@ -163,6 +167,7 @@ static Bool isdv4ParseOptions(LocalDevicePtr local)
 {
        WacomDevicePtr priv = (WacomDevicePtr)local->private;
        WacomCommonPtr common = priv->common;
+       wcmISDV4Data *isdv4data;
        int baud;
 
        baud = xf86SetIntOption(local->options, "BaudRate", 38400);
@@ -171,7 +176,6 @@ static Bool isdv4ParseOptions(LocalDevicePtr local)
        {
                case 38400:
                case 19200:
-                       common->wcmISDV4Speed = baud;
                        break;
                default:
                        xf86Msg(X_ERROR, "%s: Illegal speed value "
@@ -180,6 +184,16 @@ static Bool isdv4ParseOptions(LocalDevicePtr local)
                        return FALSE;
        }
 
+       if (!common->private &&
+           !(common->private = malloc(sizeof(wcmISDV4Data))))
+       {
+               xf86Msg(X_ERROR, "%s: failed to alloc backend-specific data.\n",
+                               local->name);
+       }
+
+       isdv4data = common->private;
+       isdv4data->baudrate = baud;
+
        return TRUE;
 }
 
@@ -191,11 +205,12 @@ static Bool isdv4Init(LocalDevicePtr local, char* id, 
float *version)
 {
        WacomDevicePtr priv = (WacomDevicePtr)local->private;
        WacomCommonPtr common = priv->common;
+       wcmISDV4Data *isdv4data = common->private;
 
        DBG(1, priv, "initializing ISDV4 tablet\n");
 
        /* Initial baudrate is 38400 */
-       if (xf86SetSerialSpeed(local->fd, common->wcmISDV4Speed) < 0)
+       if (xf86SetSerialSpeed(local->fd, isdv4data->baudrate) < 0)
                return !Success;
 
        if(id)
@@ -217,6 +232,7 @@ static int isdv4Query(LocalDevicePtr local, const char* 
query, char* data)
 {
        WacomDevicePtr priv = (WacomDevicePtr)local->private;
        WacomCommonPtr common = priv->common;
+       wcmISDV4Data *isdv4data = common->private;
 
        DBG(1, priv, "Querying ISDV4 tablet\n");
 
@@ -231,10 +247,10 @@ static int isdv4Query(LocalDevicePtr local, const char* 
query, char* data)
        if (!wcmWaitForTablet(local, data, ISDV4_PKGLEN_TPCCTL))
        {
                /* Try 19200 if it is not a touch query */
-               if (common->wcmISDV4Speed != 19200 && strcmp(query, 
ISDV4_TOUCH_QUERY))
+               if (isdv4data->baudrate != 19200 && strcmp(query, 
ISDV4_TOUCH_QUERY))
                {
-                       common->wcmISDV4Speed = 19200;
-                       if (xf86SetSerialSpeed(local->fd, 
common->wcmISDV4Speed) < 0)
+                       isdv4data->baudrate = 19200;
+                       if (xf86SetSerialSpeed(local->fd, isdv4data->baudrate) 
< 0)
                                return !Success;
                        return isdv4Query(local, query, data);
                }
@@ -246,10 +262,10 @@ static int isdv4Query(LocalDevicePtr local, const char* 
query, char* data)
        if ( !(data[0] & 0x40) )
        {
                /* Try 19200 if it is not a touch query */
-               if (common->wcmISDV4Speed != 19200 && strcmp(query, 
ISDV4_TOUCH_QUERY))
+               if (isdv4data->baudrate != 19200 && strcmp(query, 
ISDV4_TOUCH_QUERY))
                {
-                       common->wcmISDV4Speed = 19200;
-                       if (xf86SetSerialSpeed(local->fd, 
common->wcmISDV4Speed) < 0)
+                       isdv4data->baudrate = 19200;
+                       if (xf86SetSerialSpeed(local->fd, isdv4data->baudrate) 
< 0)
                                return !Success;
                        return isdv4Query(local, query, data);
                }
@@ -297,6 +313,7 @@ static int isdv4GetRanges(LocalDevicePtr local)
        char data[BUFFER_SIZE];
        WacomDevicePtr priv = (WacomDevicePtr)local->private;
        WacomCommonPtr common = priv->common;
+       wcmISDV4Data *isdv4data = common->private;
        int ret = Success;
 
        DBG(2, priv, "getting ISDV4 Ranges\n");
@@ -335,12 +352,12 @@ static int isdv4GetRanges(LocalDevicePtr local)
 
                DBG(2, priv, "Pen speed=%d "
                        "maxX=%d maxY=%d maxZ=%d resX=%d resY=%d \n",
-                       common->wcmISDV4Speed, common->wcmMaxX, common->wcmMaxY,
+                       isdv4data->baudrate, common->wcmMaxX, common->wcmMaxY,
                        common->wcmMaxZ, common->wcmResolX, common->wcmResolY);
        }
 
        /* Touch might be supported. Send a touch query command */
-       common->wcmISDV4Speed = 38400;
+       isdv4data->baudrate = 38400;
        if (isdv4Query(local, ISDV4_TOUCH_QUERY, data) == Success)
        {
                ISDV4TouchQueryReply reply;
@@ -430,7 +447,7 @@ static int isdv4GetRanges(LocalDevicePtr local)
 
                DBG(2, priv, "touch speed=%d "
                        "maxTouchX=%d maxTouchY=%d TouchresX=%d TouchresY=%d 
\n",
-                       common->wcmISDV4Speed, common->wcmMaxTouchX,
+                       isdv4data->baudrate, common->wcmMaxTouchX,
                        common->wcmMaxTouchY, common->wcmTouchResolX,
                        common->wcmTouchResolY);
        }
diff --git a/src/xf86WacomDefs.h b/src/xf86WacomDefs.h
index 4c61856..75e1c2c 100644
--- a/src/xf86WacomDefs.h
+++ b/src/xf86WacomDefs.h
@@ -411,7 +411,6 @@ struct _WacomCommonRec
        int wcmRotate;               /* rotate screen (for TabletPC) */
        int wcmThreshold;            /* Threshold for button pressure */
        WacomChannel wcmChannel[MAX_CHANNELS]; /* channel device state */
-       unsigned int wcmISDV4Speed;  /* serial ISDV4 link speed */
 
        WacomDeviceClassPtr wcmDevCls; /* device class functions */
        WacomModelPtr wcmModel;        /* model-specific functions */
-- 
1.7.0.1


------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
Linuxwacom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to