The tool ID that is reported to userspace is generated by combining both
the tool_uid and tool_type data received. The highest three nybbles of
tool_uid do not contain tool type information, however, and must be masked
off to generate the correct tool ID. This ensures that the GNOME Control
Center correctly identifies these pens as they enter proximity.

Fixes: cd79aac597 ("backport: MobileStudio Pro to 3.7, 2.6.38, 2.6.36, 2.6.30")
Signed-off-by: Jason Gerecke <jason.gere...@wacom.com>
---
 2.6.30/wacom_wac.c | 2 +-
 2.6.36/wacom_wac.c | 2 +-
 2.6.38/wacom_wac.c | 2 +-
 3.7/wacom_wac.c    | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/2.6.30/wacom_wac.c b/2.6.30/wacom_wac.c
index 78d6858..679c4d8 100644
--- a/2.6.30/wacom_wac.c
+++ b/2.6.30/wacom_wac.c
@@ -1627,7 +1627,7 @@ static int wacom_mspro_pen_irq(struct wacom_wac *wacom)
 
        if (range) {
                wacom->serial[0] = (tool_uid & 0xFFFFFFFF);
-               wacom->id[0]     = (tool_uid >> 32) | tool_type;
+               wacom->id[0]     = ((tool_uid >> 32) & 0xFFFFF) | tool_type;
                wacom->tool[0] = wacom_intuos_get_tool_type(wacom->id[0] & 
0xFFFFF);
        }
 
diff --git a/2.6.36/wacom_wac.c b/2.6.36/wacom_wac.c
index 9be5390..85683d6 100644
--- a/2.6.36/wacom_wac.c
+++ b/2.6.36/wacom_wac.c
@@ -1471,7 +1471,7 @@ static int wacom_mspro_pen_irq(struct wacom_wac *wacom)
 
        if (range) {
                wacom->serial[0] = (tool_uid & 0xFFFFFFFF);
-               wacom->id[0]     = (tool_uid >> 32) | tool_type;
+               wacom->id[0]     = ((tool_uid >> 32) & 0xFFFFF) | tool_type;
                wacom->tool[0] = wacom_intuos_get_tool_type(wacom->id[0] & 
0xFFFFF);
        }
 
diff --git a/2.6.38/wacom_wac.c b/2.6.38/wacom_wac.c
index c7ceb3d..2c0e347 100644
--- a/2.6.38/wacom_wac.c
+++ b/2.6.38/wacom_wac.c
@@ -1933,7 +1933,7 @@ static int wacom_mspro_pen_irq(struct wacom_wac *wacom)
 
        if (range) {
                wacom->serial[0] = (tool_uid & 0xFFFFFFFF);
-               wacom->id[0]     = (tool_uid >> 32) | tool_type;
+               wacom->id[0]     = ((tool_uid >> 32) & 0xFFFFF) | tool_type;
                wacom->tool[0] = wacom_intuos_get_tool_type(wacom->id[0] & 
0xFFFFF);
        }
 
diff --git a/3.7/wacom_wac.c b/3.7/wacom_wac.c
index 14548f1..344894b 100644
--- a/3.7/wacom_wac.c
+++ b/3.7/wacom_wac.c
@@ -1913,7 +1913,7 @@ static int wacom_mspro_pen_irq(struct wacom_wac *wacom)
 
        if (range) {
                wacom->serial[0] = (tool_uid & 0xFFFFFFFF);
-               wacom->id[0]     = (tool_uid >> 32) | tool_type;
+               wacom->id[0]     = ((tool_uid >> 32) & 0xFFFFF) | tool_type;
                wacom->tool[0] = wacom_intuos_get_tool_type(wacom->id[0] & 
0xFFFFF);
        }
 
-- 
2.14.2


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to