Input: atmel_mxt_ts - print all instances when dumping objects
authorDaniel Kurtz <djkurtz@chromium.org>
Thu, 28 Jun 2012 13:08:10 +0000 (21:08 +0800)
committerHenrik Rydberg <rydberg@euromail.se>
Fri, 29 Jun 2012 13:58:03 +0000 (15:58 +0200)
For objects with multiple instances, dump them all, prepending each with
its "Instance #".

[rydberg@euromail.se: break out mxt_show_instance()]
Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
drivers/input/touchscreen/atmel_mxt_ts.c

index c8cfd7b3dc9e57f26221074304b3dd964435f6a4..ee37b0b0e0e41cc7b962a95b9ee0a525a8fd89e4 100644 (file)
@@ -877,6 +877,24 @@ static void mxt_calc_resolution(struct mxt_data *data)
        }
 }
 
+static ssize_t mxt_show_instance(char *buf, int count,
+                                struct mxt_object *object, int instance,
+                                const u8 *val)
+{
+       int i;
+
+       if (object->instances > 0)
+               count += scnprintf(buf + count, PAGE_SIZE - count,
+                                  "Instance %u\n", instance);
+
+       for (i = 0; i < object->size + 1; i++)
+               count += scnprintf(buf + count, PAGE_SIZE - count,
+                               "\t[%2u]: %02x (%d)\n", i, val[i], val[i]);
+       count += scnprintf(buf + count, PAGE_SIZE - count, "\n");
+
+       return count;
+}
+
 static ssize_t mxt_object_show(struct device *dev,
                                    struct device_attribute *attr, char *buf)
 {
@@ -885,7 +903,6 @@ static ssize_t mxt_object_show(struct device *dev,
        int count = 0;
        int i, j;
        int error;
-       u8 val;
        u8 *obuf;
 
        /* Pre-allocate buffer large enough to hold max sized object. */
@@ -903,20 +920,19 @@ static ssize_t mxt_object_show(struct device *dev,
                count += scnprintf(buf + count, PAGE_SIZE - count,
                                "T%u:\n", object->type);
 
-               error = __mxt_read_reg(data->client, object->start_address,
-                               object->size + 1, obuf);
-               if (error)
-                       break;
+               for (j = 0; j < object->instances + 1; j++) {
+                       u16 size = object->size + 1;
+                       u16 addr = object->start_address + j * size;
 
-               for (j = 0; j < object->size + 1; j++) {
-                       val = obuf[j];
+                       error = __mxt_read_reg(data->client, addr, size, obuf);
+                       if (error)
+                               goto done;
 
-                       count += scnprintf(buf + count, PAGE_SIZE - count,
-                                       "\t[%2d]: %02x (%d)\n", j, val, val);
+                       count = mxt_show_instance(buf, count, object, j, obuf);
                }
-               count += scnprintf(buf + count, PAGE_SIZE - count, "\n");
        }
 
+done:
        kfree(obuf);
        return error ?: count;
 }