This just centralizes the logic used in both wacom_setup_numbered_buttons
and wacom_report_numbered_buttons so that they don't drift out of sync.

Signed-off-by: Jason Gerecke <jason.gere...@wacom.com>
Reviewed-by: Benjamin Tissoires <benjamin.tissoi...@redhat.com>
[jason.gere...@wacom.com: Imported into input-wacom repository (49005b9)]
Signed-off-by: Jason Gerecke <jason.gere...@wacom.com>
[jason.gere...@wacom.com: backported from input-wacom repository (7a90092)]
Signed-off-by: Jason Gerecke <jason.gere...@wacom.com>
---
 2.6.30/wacom_wac.c | 36 ++++++++++++++++++++++++------------
 2.6.36/wacom_wac.c | 36 ++++++++++++++++++++++++------------
 2.6.38/wacom_wac.c | 36 ++++++++++++++++++++++++------------
 3.17/wacom_wac.c   | 36 ++++++++++++++++++++++++------------
 3.7/wacom_wac.c    | 36 ++++++++++++++++++++++++------------
 5 files changed, 120 insertions(+), 60 deletions(-)

diff --git a/2.6.30/wacom_wac.c b/2.6.30/wacom_wac.c
index 8b9060c..4e17a5f 100644
--- a/2.6.30/wacom_wac.c
+++ b/2.6.30/wacom_wac.c
@@ -1565,17 +1565,29 @@ static void wacom_abs_set_axis(struct input_dev 
*input_dev,
        }
 }
 
+static int wacom_numbered_button_to_key(int n)
+{
+       if (n < 10)
+               return BTN_0 + n;
+       else if (n < 16)
+               return BTN_A + (n-10);
+       else if (n < 18)
+               return BTN_BASE + (n-16);
+       else
+               return 0;
+}
+
 static void wacom_setup_numbered_buttons(struct input_dev *input_dev,
                                int button_count)
 {
        int i;
 
-       for (i = 0; i < button_count && i < 10; i++)
-               __set_bit(BTN_0 + i, input_dev->keybit);
-       for (i = 10; i < button_count && i < 16; i++)
-               __set_bit(BTN_A + (i-10), input_dev->keybit);
-       for (i = 16; i < button_count && i < 18; i++)
-               __set_bit(BTN_BASE + (i-16), input_dev->keybit);
+       for (i = 0; i < button_count; i++) {
+               int key = wacom_numbered_button_to_key(i);
+
+               if (key)
+                       __set_bit(key, input_dev->keybit);
+       }
 }
 
 static void wacom_report_numbered_buttons(struct input_dev *input_dev,
@@ -1583,12 +1595,12 @@ static void wacom_report_numbered_buttons(struct 
input_dev *input_dev,
 {
        int i;
 
-       for (i = 0; i < button_count && i < 10; i++)
-               input_report_key(input_dev, BTN_0 + i, mask & (1 << i));
-       for (i = 10; i < button_count && i < 16; i++)
-               input_report_key(input_dev, BTN_A + (i-10), mask & (1 << i));
-       for (i = 16; i < button_count && i < 18; i++)
-               input_report_key(input_dev, BTN_BASE + (i-16), mask & (1 << i));
+       for (i = 0; i < button_count; i++) {
+               int key = wacom_numbered_button_to_key(i);
+
+               if (key)
+                       input_report_key(input_dev, key, mask & (1 << i));
+       }
 }
 
 void wacom_setup_input_capabilities(struct input_dev *input_dev,
diff --git a/2.6.36/wacom_wac.c b/2.6.36/wacom_wac.c
index a69b30b..e6d5eda 100644
--- a/2.6.36/wacom_wac.c
+++ b/2.6.36/wacom_wac.c
@@ -1351,17 +1351,29 @@ static unsigned int wacom_calculate_touch_res(unsigned 
int logical_max,
        return (logical_max * 100) / physical_max;
 }
 
+static int wacom_numbered_button_to_key(int n)
+{
+       if (n < 10)
+               return BTN_0 + n;
+       else if (n < 16)
+               return BTN_A + (n-10);
+       else if (n < 18)
+               return BTN_BASE + (n-16);
+       else
+               return 0;
+}
+
 static void wacom_setup_numbered_buttons(struct input_dev *input_dev,
                                int button_count)
 {
        int i;
 
-       for (i = 0; i < button_count && i < 10; i++)
-               __set_bit(BTN_0 + i, input_dev->keybit);
-       for (i = 10; i < button_count && i < 16; i++)
-               __set_bit(BTN_A + (i-10), input_dev->keybit);
-       for (i = 16; i < button_count && i < 18; i++)
-               __set_bit(BTN_BASE + (i-16), input_dev->keybit);
+       for (i = 0; i < button_count; i++) {
+               int key = wacom_numbered_button_to_key(i);
+
+               if (key)
+                       __set_bit(key, input_dev->keybit);
+       }
 }
 
 static void wacom_report_numbered_buttons(struct input_dev *input_dev,
@@ -1369,12 +1381,12 @@ static void wacom_report_numbered_buttons(struct 
input_dev *input_dev,
 {
        int i;
 
-       for (i = 0; i < button_count && i < 10; i++)
-               input_report_key(input_dev, BTN_0 + i, mask & (1 << i));
-       for (i = 10; i < button_count && i < 16; i++)
-               input_report_key(input_dev, BTN_A + (i-10), mask & (1 << i));
-       for (i = 16; i < button_count && i < 18; i++)
-               input_report_key(input_dev, BTN_BASE + (i-16), mask & (1 << i));
+       for (i = 0; i < button_count; i++) {
+               int key = wacom_numbered_button_to_key(i);
+
+               if (key)
+                       input_report_key(input_dev, key, mask & (1 << i));
+       }
 }
 
 void wacom_setup_input_capabilities(struct input_dev *input_dev,
diff --git a/2.6.38/wacom_wac.c b/2.6.38/wacom_wac.c
index f13de45..7087ca6 100644
--- a/2.6.38/wacom_wac.c
+++ b/2.6.38/wacom_wac.c
@@ -1899,17 +1899,29 @@ static void wacom_abs_set_axis(struct input_dev 
*input_dev,
        }
 }
 
+static int wacom_numbered_button_to_key(int n)
+{
+       if (n < 10)
+               return BTN_0 + n;
+       else if (n < 16)
+               return BTN_A + (n-10);
+       else if (n < 18)
+               return BTN_BASE + (n-16);
+       else
+               return 0;
+}
+
 static void wacom_setup_numbered_buttons(struct input_dev *input_dev,
                                  int button_count)
 {
        int i;
 
-       for (i = 0; i < button_count && i < 10; i++)
-               __set_bit(BTN_0 + i, input_dev->keybit);
-       for (i = 10; i < button_count && i < 16; i++)
-               __set_bit(BTN_A + (i-10), input_dev->keybit);
-       for (i = 16; i < button_count && i < 18; i++)
-               __set_bit(BTN_BASE + (i-16), input_dev->keybit);
+       for (i = 0; i < button_count; i++) {
+               int key = wacom_numbered_button_to_key(i);
+
+               if (key)
+                       __set_bit(key, input_dev->keybit);
+       }
 }
 
 static void wacom_report_numbered_buttons(struct input_dev *input_dev,
@@ -1917,12 +1929,12 @@ static void wacom_report_numbered_buttons(struct 
input_dev *input_dev,
 {
        int i;
 
-       for (i = 0; i < button_count && i < 10; i++)
-               input_report_key(input_dev, BTN_0 + i, mask & (1 << i));
-       for (i = 10; i < button_count && i < 16; i++)
-               input_report_key(input_dev, BTN_A + (i-10), mask & (1 << i));
-       for (i = 16; i < button_count && i < 18; i++)
-               input_report_key(input_dev, BTN_BASE + (i-16), mask & (1 << i));
+       for (i = 0; i < button_count; i++) {
+               int key = wacom_numbered_button_to_key(i);
+
+               if (key)
+                       input_report_key(input_dev, key, mask & (1 << i));
+       }
 }
 
 int wacom_setup_input_capabilities(struct input_dev *input_dev,
diff --git a/3.17/wacom_wac.c b/3.17/wacom_wac.c
index aab881d..c610f3f 100644
--- a/3.17/wacom_wac.c
+++ b/3.17/wacom_wac.c
@@ -2782,17 +2782,29 @@ int wacom_setup_touch_input_capabilities(struct 
input_dev *input_dev,
        return 0;
 }
 
+static int wacom_numbered_button_to_key(int n)
+{
+       if (n < 10)
+               return BTN_0 + n;
+       else if (n < 16)
+               return BTN_A + (n-10);
+       else if (n < 18)
+               return BTN_BASE + (n-16);
+       else
+               return 0;
+}
+
 static void wacom_setup_numbered_buttons(struct input_dev *input_dev,
                                int button_count)
 {
        int i;
 
-       for (i = 0; i < button_count && i < 10; i++)
-               __set_bit(BTN_0 + i, input_dev->keybit);
-       for (i = 10; i < button_count && i < 16; i++)
-               __set_bit(BTN_A + (i-10), input_dev->keybit);
-       for (i = 16; i < button_count && i < 18; i++)
-               __set_bit(BTN_BASE + (i-16), input_dev->keybit);
+       for (i = 0; i < button_count; i++) {
+               int key = wacom_numbered_button_to_key(i);
+
+               if (key)
+                       __set_bit(key, input_dev->keybit);
+       }
 }
 
 static void wacom_report_numbered_buttons(struct input_dev *input_dev,
@@ -2800,12 +2812,12 @@ static void wacom_report_numbered_buttons(struct 
input_dev *input_dev,
 {
        int i;
 
-       for (i = 0; i < button_count && i < 10; i++)
-               input_report_key(input_dev, BTN_0 + i, mask & (1 << i));
-       for (i = 10; i < button_count && i < 16; i++)
-               input_report_key(input_dev, BTN_A + (i-10), mask & (1 << i));
-       for (i = 16; i < button_count && i < 18; i++)
-               input_report_key(input_dev, BTN_BASE + (i-16), mask & (1 << i));
+       for (i = 0; i < button_count; i++) {
+               int key = wacom_numbered_button_to_key(i);
+
+               if (key)
+                       input_report_key(input_dev, key, mask & (1 << i));
+       }
 }
 
 int wacom_setup_pad_input_capabilities(struct input_dev *input_dev,
diff --git a/3.7/wacom_wac.c b/3.7/wacom_wac.c
index 986477e..a95bcdc 100644
--- a/3.7/wacom_wac.c
+++ b/3.7/wacom_wac.c
@@ -1889,17 +1889,29 @@ static void wacom_abs_set_axis(struct input_dev 
*input_dev,
        }
 }
 
+static int wacom_numbered_button_to_key(int n)
+{
+       if (n < 10)
+               return BTN_0 + n;
+       else if (n < 16)
+               return BTN_A + (n-10);
+       else if (n < 18)
+               return BTN_BASE + (n-16);
+       else
+               return 0;
+}
+
 static void wacom_setup_numbered_buttons(struct input_dev *input_dev,
                                int button_count)
 {
        int i;
 
-       for (i = 0; i < button_count && i < 10; i++)
-               __set_bit(BTN_0 + i, input_dev->keybit);
-       for (i = 10; i < button_count && i < 16; i++)
-               __set_bit(BTN_A + (i-10), input_dev->keybit);
-       for (i = 16; i < button_count && i < 18; i++)
-               __set_bit(BTN_BASE + (i-16), input_dev->keybit);
+       for (i = 0; i < button_count; i++) {
+               int key = wacom_numbered_button_to_key(i);
+
+               if (key)
+                       __set_bit(key, input_dev->keybit);
+       }
 }
 
 static void wacom_report_numbered_buttons(struct input_dev *input_dev,
@@ -1907,12 +1919,12 @@ static void wacom_report_numbered_buttons(struct 
input_dev *input_dev,
 {
        int i;
 
-       for (i = 0; i < button_count && i < 10; i++)
-               input_report_key(input_dev, BTN_0 + i, mask & (1 << i));
-       for (i = 10; i < button_count && i < 16; i++)
-               input_report_key(input_dev, BTN_A + (i-10), mask & (1 << i));
-       for (i = 16; i < button_count && i < 18; i++)
-               input_report_key(input_dev, BTN_BASE + (i-16), mask & (1 << i));
+       for (i = 0; i < button_count; i++) {
+               int key = wacom_numbered_button_to_key(i);
+
+               if (key)
+                       input_report_key(input_dev, key, mask & (1 << i));
+       }
 }
 
 int wacom_setup_input_capabilities(struct input_dev *input_dev,
-- 
2.10.2


------------------------------------------------------------------------------
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to