diff options
Diffstat (limited to 'drivers/input')
-rw-r--r-- | drivers/input/touchscreen/atmel_mxt_ts.c | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index c8cfd7b3dc9e..ee37b0b0e0e4 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c | |||
@@ -877,6 +877,24 @@ static void mxt_calc_resolution(struct mxt_data *data) | |||
877 | } | 877 | } |
878 | } | 878 | } |
879 | 879 | ||
880 | static ssize_t mxt_show_instance(char *buf, int count, | ||
881 | struct mxt_object *object, int instance, | ||
882 | const u8 *val) | ||
883 | { | ||
884 | int i; | ||
885 | |||
886 | if (object->instances > 0) | ||
887 | count += scnprintf(buf + count, PAGE_SIZE - count, | ||
888 | "Instance %u\n", instance); | ||
889 | |||
890 | for (i = 0; i < object->size + 1; i++) | ||
891 | count += scnprintf(buf + count, PAGE_SIZE - count, | ||
892 | "\t[%2u]: %02x (%d)\n", i, val[i], val[i]); | ||
893 | count += scnprintf(buf + count, PAGE_SIZE - count, "\n"); | ||
894 | |||
895 | return count; | ||
896 | } | ||
897 | |||
880 | static ssize_t mxt_object_show(struct device *dev, | 898 | static ssize_t mxt_object_show(struct device *dev, |
881 | struct device_attribute *attr, char *buf) | 899 | struct device_attribute *attr, char *buf) |
882 | { | 900 | { |
@@ -885,7 +903,6 @@ static ssize_t mxt_object_show(struct device *dev, | |||
885 | int count = 0; | 903 | int count = 0; |
886 | int i, j; | 904 | int i, j; |
887 | int error; | 905 | int error; |
888 | u8 val; | ||
889 | u8 *obuf; | 906 | u8 *obuf; |
890 | 907 | ||
891 | /* Pre-allocate buffer large enough to hold max sized object. */ | 908 | /* Pre-allocate buffer large enough to hold max sized object. */ |
@@ -903,20 +920,19 @@ static ssize_t mxt_object_show(struct device *dev, | |||
903 | count += scnprintf(buf + count, PAGE_SIZE - count, | 920 | count += scnprintf(buf + count, PAGE_SIZE - count, |
904 | "T%u:\n", object->type); | 921 | "T%u:\n", object->type); |
905 | 922 | ||
906 | error = __mxt_read_reg(data->client, object->start_address, | 923 | for (j = 0; j < object->instances + 1; j++) { |
907 | object->size + 1, obuf); | 924 | u16 size = object->size + 1; |
908 | if (error) | 925 | u16 addr = object->start_address + j * size; |
909 | break; | ||
910 | 926 | ||
911 | for (j = 0; j < object->size + 1; j++) { | 927 | error = __mxt_read_reg(data->client, addr, size, obuf); |
912 | val = obuf[j]; | 928 | if (error) |
929 | goto done; | ||
913 | 930 | ||
914 | count += scnprintf(buf + count, PAGE_SIZE - count, | 931 | count = mxt_show_instance(buf, count, object, j, obuf); |
915 | "\t[%2d]: %02x (%d)\n", j, val, val); | ||
916 | } | 932 | } |
917 | count += scnprintf(buf + count, PAGE_SIZE - count, "\n"); | ||
918 | } | 933 | } |
919 | 934 | ||
935 | done: | ||
920 | kfree(obuf); | 936 | kfree(obuf); |
921 | return error ?: count; | 937 | return error ?: count; |
922 | } | 938 | } |