[PATCH synaptics 2/2] Initialize the vendor/product id property if we know either.

Peter Hutterer peter.hutterer at who-t.net
Mon May 23 18:59:02 PDT 2011


Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 src/eventcomm.c     |   10 ++++++++--
 src/properties.c    |   17 ++++++++++++++++-
 src/synapticsstr.h  |    4 +++-
 test/fake-symbols.c |    6 ++++++
 test/fake-symbols.h |    1 +
 5 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/src/eventcomm.c b/src/eventcomm.c
index fed8ce2..ba3f36b 100644
--- a/src/eventcomm.c
+++ b/src/eventcomm.c
@@ -178,7 +178,7 @@ static model_lookup_t model_lookup_table[] = {
  * @return TRUE on success or FALSE otherwise.
  */
 static Bool
-event_query_model(int fd, enum TouchpadModel *model_out)
+event_query_model(int fd, enum TouchpadModel *model_out, unsigned short *vendor_id, unsigned short *product_id)
 {
     struct input_id id;
     int rc;
@@ -194,6 +194,9 @@ event_query_model(int fd, enum TouchpadModel *model_out)
             *model_out = model_lookup->model;
     }
 
+    *vendor_id = id.vendor;
+    *product_id = id.product;
+
     return TRUE;
 }
 
@@ -500,7 +503,10 @@ EventReadDevDimensions(InputInfoPtr pInfo)
 
     if (event_query_is_touchpad(pInfo->fd, (proto_data) ? proto_data->need_grab : TRUE))
 	event_query_axis_ranges(pInfo);
-    event_query_model(pInfo->fd, &priv->model);
+    event_query_model(pInfo->fd, &priv->model, &priv->id_vendor, &priv->id_product);
+
+    xf86IDrvMsg(pInfo, X_PROBED, "Vendor %#hx Product %#hx\n",
+                priv->id_vendor, priv->id_product);
 }
 
 static Bool
diff --git a/src/properties.c b/src/properties.c
index 23b5a6a..4e831dc 100644
--- a/src/properties.c
+++ b/src/properties.c
@@ -42,6 +42,11 @@
 #ifndef XATOM_FLOAT
 #define XATOM_FLOAT "FLOAT"
 #endif
+
+#ifndef XI_PROP_PRODUCT_ID
+#define XI_PROP_PRODUCT_ID "Device Product ID"
+#endif
+
 static Atom float_type;
 
 Atom prop_edges                 = 0;
@@ -83,6 +88,7 @@ Atom prop_capabilities          = 0;
 Atom prop_resolution            = 0;
 Atom prop_area                  = 0;
 Atom prop_noise_cancellation    = 0;
+Atom prop_product_id            = 0;
 
 static Atom
 InitAtom(DeviceIntPtr dev, char *name, int format, int nvalues, int *values)
@@ -285,6 +291,14 @@ InitDeviceProperties(InputInfoPtr pInfo)
     prop_noise_cancellation = InitAtom(pInfo->dev,
             SYNAPTICS_PROP_NOISE_CANCELLATION, 32, 2, values);
 
+    /* only init product_id property if we actually know them */
+    if (priv->id_vendor || priv->id_product)
+    {
+        values[0] = priv->id_vendor;
+        values[1] = priv->id_product;
+        prop_product_id = InitAtom(pInfo->dev, XI_PROP_PRODUCT_ID, 32, 2, values);
+    }
+
 }
 
 int
@@ -666,7 +680,8 @@ SetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop,
             return BadValue;
         para->hyst_x = hyst[0];
         para->hyst_y = hyst[1];
-    }
+    } else if (property == prop_product_id)
+        return BadValue; /* read-only */
 
     return Success;
 }
diff --git a/src/synapticsstr.h b/src/synapticsstr.h
index 7cda748..d5087ad 100644
--- a/src/synapticsstr.h
+++ b/src/synapticsstr.h
@@ -240,7 +240,9 @@ typedef struct _SynapticsPrivateRec
     Bool has_width;			/* device reports finger width */
     Bool has_scrollbuttons;		/* device has physical scrollbuttons */
 
-    enum TouchpadModel model;          /* The detected model */
+    enum TouchpadModel model;           /* The detected model */
+    unsigned short id_vendor;           /* vendor id */
+    unsigned short id_product;          /* product id */
 } SynapticsPrivate;
 
 #endif /* _SYNAPTICSSTR_H_ */
diff --git a/test/fake-symbols.c b/test/fake-symbols.c
index 9657bab..71c3bc5 100644
--- a/test/fake-symbols.c
+++ b/test/fake-symbols.c
@@ -338,6 +338,12 @@ xf86MsgVerb(MessageType type, int verb, const char *format, ...)
     return;
 }
 
+_X_EXPORT void
+xf86IDrvMsg(InputInfoPtr dev, MessageType type, const char *format, ...)
+{
+    return;
+}
+
 
 _X_EXPORT void
 xf86PostMotionEventP(DeviceIntPtr	device,
diff --git a/test/fake-symbols.h b/test/fake-symbols.h
index cc62679..dfe1355 100644
--- a/test/fake-symbols.h
+++ b/test/fake-symbols.h
@@ -116,6 +116,7 @@ XIRegisterPropertyHandler(DeviceIntPtr         dev,
 extern int InitProximityClassDeviceStruct(DeviceIntPtr dev);
 extern void xf86Msg(MessageType type, const char *format, ...);
 extern void xf86MsgVerb(MessageType type, int verb, const char *format, ...);
+extern void xf86IDrvMsg(InputInfoPtr dev, MessageType type, const char *format, ...);
 
 extern void
 xf86PostMotionEventP(DeviceIntPtr	device,
-- 
1.7.4.4



More information about the xorg-devel mailing list