Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 794eb67e authored by Daniel Kurtz's avatar Daniel Kurtz Committed by Henrik Rydberg
Browse files

Input: atmel_mxt_ts - print all instances when dumping objects



For objects with multiple instances, dump them all, prepending each with
its "Instance #".

[rydberg@euromail.se: break out mxt_show_instance()]
Signed-off-by: default avatarDaniel Kurtz <djkurtz@chromium.org>
Signed-off-by: default avatarHenrik Rydberg <rydberg@euromail.se>
parent 91630955
Loading
Loading
Loading
Loading
+26 −10
Original line number Original line Diff line number Diff line
@@ -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,
static ssize_t mxt_object_show(struct device *dev,
				    struct device_attribute *attr, char *buf)
				    struct device_attribute *attr, char *buf)
{
{
@@ -885,7 +903,6 @@ static ssize_t mxt_object_show(struct device *dev,
	int count = 0;
	int count = 0;
	int i, j;
	int i, j;
	int error;
	int error;
	u8 val;
	u8 *obuf;
	u8 *obuf;


	/* Pre-allocate buffer large enough to hold max sized object. */
	/* 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,
		count += scnprintf(buf + count, PAGE_SIZE - count,
				"T%u:\n", object->type);
				"T%u:\n", object->type);


		error = __mxt_read_reg(data->client, object->start_address,
		for (j = 0; j < object->instances + 1; j++) {
				object->size + 1, obuf);
			u16 size = object->size + 1;
		if (error)
			u16 addr = object->start_address + j * size;
			break;


		for (j = 0; j < object->size + 1; j++) {
			error = __mxt_read_reg(data->client, addr, size, obuf);
			val = obuf[j];
			if (error)
				goto done;


			count += scnprintf(buf + count, PAGE_SIZE - count,
			count = mxt_show_instance(buf, count, object, j, obuf);
					"\t[%2d]: %02x (%d)\n", j, val, val);
		}
		}
		count += scnprintf(buf + count, PAGE_SIZE - count, "\n");
	}
	}


done:
	kfree(obuf);
	kfree(obuf);
	return error ?: count;
	return error ?: count;
}
}