Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1411405

[PATCH v3 6/8] Input: atmel_mxt_ts - handle diagnostic data orientation

From Nick Dyer <nick.dyer@itdev.co.uk>
Newsgroups linux.kernel
Subject [PATCH v3 6/8] Input: atmel_mxt_ts - handle diagnostic data orientation
Date 2016-06-01 18:50 +0200
Message-ID <rFhvg-2p3-133@gated-at.bofh.it> (permalink)
References <rFhvc-2p3-23@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Invert the diagnostic data to match the orientation of the input device.

Signed-off-by: Nick Dyer <nick.dyer@itdev.co.uk>
---
 drivers/input/touchscreen/atmel_mxt_ts.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index ac4126c..eced661 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -125,6 +125,8 @@ struct t9_range {
 
 /* MXT_TOUCH_MULTI_T9 orient */
 #define MXT_T9_ORIENT_SWITCH	(1 << 0)
+#define MXT_T9_ORIENT_INVERTX	(1 << 1)
+#define MXT_T9_ORIENT_INVERTY	(1 << 2)
 
 /* MXT_SPT_COMMSCONFIG_T18 */
 #define MXT_COMMS_CTRL		0
@@ -156,6 +158,8 @@ struct t37_debug {
 #define MXT_T100_YRANGE		24
 
 #define MXT_T100_CFG_SWITCHXY	BIT(5)
+#define MXT_T100_CFG_INVERTY	BIT(6)
+#define MXT_T100_CFG_INVERTX	BIT(7)
 
 #define MXT_T100_TCHAUX_VECT	BIT(0)
 #define MXT_T100_TCHAUX_AMPL	BIT(1)
@@ -260,6 +264,8 @@ struct mxt_data {
 	unsigned int irq;
 	unsigned int max_x;
 	unsigned int max_y;
+	bool invertx;
+	bool inverty;
 	bool xy_switch;
 	u8 xsize;
 	u8 ysize;
@@ -1743,6 +1749,8 @@ static int mxt_read_t9_resolution(struct mxt_data *data)
 		return error;
 
 	data->xy_switch = orient & MXT_T9_ORIENT_SWITCH;
+	data->invertx = orient & MXT_T9_ORIENT_INVERTX;
+	data->inverty = orient & MXT_T9_ORIENT_INVERTY;
 
 	return 0;
 }
@@ -1797,6 +1805,8 @@ static int mxt_read_t100_config(struct mxt_data *data)
 		return error;
 
 	data->xy_switch = cfg & MXT_T100_CFG_SWITCHXY;
+	data->invertx = cfg & MXT_T100_CFG_INVERTX;
+	data->inverty = cfg & MXT_T100_CFG_INVERTY;
 
 	/* allocate aux bytes */
 	error =  __mxt_read_reg(client,
@@ -2140,13 +2150,19 @@ static int mxt_convert_debug_pages(struct mxt_data *data, u16 *outbuf)
 	struct mxt_dbg *dbg = &data->dbg;
 	unsigned int x = 0;
 	unsigned int y = 0;
-	unsigned int i;
+	unsigned int i, rx, ry;
 
 	for (i = 0; i < dbg->t37_nodes; i++) {
-		outbuf[i] = mxt_get_debug_value(data, x, y);
+		/* Handle orientation */
+		rx = data->xy_switch ? y : x;
+		ry = data->xy_switch ? x : y;
+		rx = data->invertx ? (data->xsize - 1 - rx) : rx;
+		ry = data->inverty ? (data->ysize - 1 - ry) : ry;
+
+		outbuf[i] = mxt_get_debug_value(data, rx, ry);
 
 		/* Next value */
-		if (++x >= data->xsize) {
+		if (++x >= (data->xy_switch ? data->ysize : data->xsize)) {
 			x = 0;
 			y++;
 		}
@@ -2301,8 +2317,8 @@ static int mxt_set_input(struct mxt_data *data, unsigned int i)
 	if (i > 0)
 		return -EINVAL;
 
-	f->width = data->xsize;
-	f->height = data->ysize;
+	f->width = data->xy_switch ? data->ysize : data->xsize;
+	f->height = data->xy_switch ? data->xsize : data->ysize;
 	f->pixelformat = V4L2_PIX_FMT_YS16;
 	f->field = V4L2_FIELD_NONE;
 	f->colorspace = V4L2_COLORSPACE_RAW;
-- 
2.5.0

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v3 0/8] Input: atmel_mxt_ts - output raw touch diagnostic data via V4L Nick Dyer <nick.dyer@itdev.co.uk> - 2016-06-01 18:50 +0200
  [PATCH v3 2/8] [media] Add signed 16-bit pixel format Nick Dyer <nick.dyer@itdev.co.uk> - 2016-06-01 18:50 +0200
  [PATCH v3 4/8] Input: atmel_mxt_ts - output diagnostic debug via v4l2 device Nick Dyer <nick.dyer@itdev.co.uk> - 2016-06-01 18:50 +0200
    Re: [PATCH v3 4/8] Input: atmel_mxt_ts - output diagnostic debug via  v4l2 device Dmitry Torokhov <dmitry.torokhov@gmail.com> - 2016-06-01 20:20 +0200
  [PATCH v3 7/8] Input: atmel_mxt_ts - add diagnostic data support for mXT1386 Nick Dyer <nick.dyer@itdev.co.uk> - 2016-06-01 18:50 +0200
    Re: [PATCH v3 7/8] Input: atmel_mxt_ts - add diagnostic data support  for mXT1386 Dmitry Torokhov <dmitry.torokhov@gmail.com> - 2016-06-01 20:20 +0200
  [PATCH v3 1/8] Input: atmel_mxt_ts - add support for T37 diagnostic data Nick Dyer <nick.dyer@itdev.co.uk> - 2016-06-01 18:50 +0200
    Re: [PATCH v3 1/8] Input: atmel_mxt_ts - add support for T37  diagnostic data Dmitry Torokhov <dmitry.torokhov@gmail.com> - 2016-06-01 20:20 +0200
  [PATCH v3 5/8] Input: atmel_mxt_ts - read touchscreen size Nick Dyer <nick.dyer@itdev.co.uk> - 2016-06-01 18:50 +0200
  [PATCH v3 3/8] [media] v4l2-core: Add VFL_TYPE_TOUCH_SENSOR Nick Dyer <nick.dyer@itdev.co.uk> - 2016-06-01 18:50 +0200
  [PATCH v3 6/8] Input: atmel_mxt_ts - handle diagnostic data orientation Nick Dyer <nick.dyer@itdev.co.uk> - 2016-06-01 18:50 +0200
  [PATCH v3 8/8] Input: atmel_mxt_ts - add support for reference data Nick Dyer <nick.dyer@itdev.co.uk> - 2016-06-01 18:50 +0200
  Re: [PATCH v3 0/8] Input: atmel_mxt_ts - output raw touch diagnostic  data via V4L Dmitry Torokhov <dmitry.torokhov@gmail.com> - 2016-06-01 20:20 +0200
    Re: [PATCH v3 0/8] Input: atmel_mxt_ts - output raw touch diagnostic  data via V4L Nick Dyer <nick.dyer@itdev.co.uk> - 2016-06-02 17:20 +0200

csiph-web