Input: alps - process_bitmap: add alps_get_bitmap_points() helper function
authorHans de Goede <hdegoede@redhat.com>
Sat, 26 Jul 2014 05:38:51 +0000 (22:38 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Sat, 26 Jul 2014 21:03:14 +0000 (14:03 -0700)
Factor out the identical code for getting the bitmap points for x and y into
a helper function.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/mouse/alps.c
drivers/input/mouse/alps.h

index abe9f9b..c6af590 100644 (file)
@@ -328,6 +328,33 @@ static void alps_process_bitmap_dolphin(struct alps_data *priv,
        }
 }
 
+static void alps_get_bitmap_points(unsigned int map,
+                                  struct alps_bitmap_point *low,
+                                  struct alps_bitmap_point *high,
+                                  int *fingers)
+{
+       struct alps_bitmap_point *point;
+       int i, bit, prev_bit = 0;
+
+       point = low;
+       for (i = 0; map != 0; i++, map >>= 1) {
+               bit = map & 1;
+               if (bit) {
+                       if (!prev_bit) {
+                               point->start_bit = i;
+                               (*fingers)++;
+                       }
+                       point->num_bits++;
+               } else {
+                       if (prev_bit)
+                               point = high;
+                       else
+                               point->num_bits = 0;
+               }
+               prev_bit = bit;
+       }
+}
+
 /*
  * Process bitmap data from v3 and v4 protocols. Returns the number of
  * fingers detected. A return value of 0 means at least one of the
@@ -342,59 +369,17 @@ static int alps_process_bitmap(struct alps_data *priv,
                               unsigned int x_map, unsigned int y_map,
                               int *x1, int *y1, int *x2, int *y2)
 {
-       struct alps_bitmap_point {
-               int start_bit;
-               int num_bits;
-       };
-
-       int fingers_x = 0, fingers_y = 0, fingers;
-       int i, bit, prev_bit;
+       int i, fingers_x = 0, fingers_y = 0, fingers;
        struct alps_bitmap_point x_low = {0,}, x_high = {0,};
        struct alps_bitmap_point y_low = {0,}, y_high = {0,};
-       struct alps_bitmap_point *point;
 
        if (!x_map || !y_map)
                return 0;
 
        *x1 = *y1 = *x2 = *y2 = 0;
 
-       prev_bit = 0;
-       point = &x_low;
-       for (i = 0; x_map != 0; i++, x_map >>= 1) {
-               bit = x_map & 1;
-               if (bit) {
-                       if (!prev_bit) {
-                               point->start_bit = i;
-                               fingers_x++;
-                       }
-                       point->num_bits++;
-               } else {
-                       if (prev_bit)
-                               point = &x_high;
-                       else
-                               point->num_bits = 0;
-               }
-               prev_bit = bit;
-       }
-
-       prev_bit = 0;
-       point = &y_low;
-       for (i = 0; y_map != 0; i++, y_map >>= 1) {
-               bit = y_map & 1;
-               if (bit) {
-                       if (!prev_bit) {
-                               point->start_bit = i;
-                               fingers_y++;
-                       }
-                       point->num_bits++;
-               } else {
-                       if (prev_bit)
-                               point = &y_high;
-                       else
-                               point->num_bits = 0;
-               }
-               prev_bit = bit;
-       }
+       alps_get_bitmap_points(x_map, &x_low, &x_high, &fingers_x);
+       alps_get_bitmap_points(y_map, &y_low, &y_high, &fingers_y);
 
        /*
         * Fingers can overlap, so we use the maximum count of fingers
index 6d2666c..e900a08 100644 (file)
@@ -65,6 +65,11 @@ struct alps_nibble_commands {
        unsigned char data;
 };
 
+struct alps_bitmap_point {
+       int start_bit;
+       int num_bits;
+};
+
 /**
  * struct alps_fields - decoded version of the report packet
  * @x_map: Bitmap of active X positions for MT.