aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/touchscreen
diff options
context:
space:
mode:
authorNick Dyer <nick@shmanahar.org>2016-07-18 17:10:34 -0400
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2016-08-23 15:32:01 -0400
commitde601f71e7d1bdfa411e61d43af7b2b6cde5d2a2 (patch)
tree92d135a667cf569cf2a6d7bab8590cd3c22f07ed /drivers/input/touchscreen
parent2786489f324e8384a814793d88c3a76d1973f422 (diff)
[media] Input: atmel_mxt_ts - handle diagnostic data orientation
Invert the diagnostic data to match the orientation of the input device. Signed-off-by: Nick Dyer <nick@shmanahar.org> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com> Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input/touchscreen')
-rw-r--r--drivers/input/touchscreen/atmel_mxt_ts.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index 29be261a4750..7376c42d2370 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -125,6 +125,8 @@ struct t9_range {
125 125
126/* MXT_TOUCH_MULTI_T9 orient */ 126/* MXT_TOUCH_MULTI_T9 orient */
127#define MXT_T9_ORIENT_SWITCH (1 << 0) 127#define MXT_T9_ORIENT_SWITCH (1 << 0)
128#define MXT_T9_ORIENT_INVERTX (1 << 1)
129#define MXT_T9_ORIENT_INVERTY (1 << 2)
128 130
129/* MXT_SPT_COMMSCONFIG_T18 */ 131/* MXT_SPT_COMMSCONFIG_T18 */
130#define MXT_COMMS_CTRL 0 132#define MXT_COMMS_CTRL 0
@@ -158,6 +160,8 @@ struct t37_debug {
158#define MXT_T100_YRANGE 24 160#define MXT_T100_YRANGE 24
159 161
160#define MXT_T100_CFG_SWITCHXY BIT(5) 162#define MXT_T100_CFG_SWITCHXY BIT(5)
163#define MXT_T100_CFG_INVERTY BIT(6)
164#define MXT_T100_CFG_INVERTX BIT(7)
161 165
162#define MXT_T100_TCHAUX_VECT BIT(0) 166#define MXT_T100_TCHAUX_VECT BIT(0)
163#define MXT_T100_TCHAUX_AMPL BIT(1) 167#define MXT_T100_TCHAUX_AMPL BIT(1)
@@ -262,6 +266,8 @@ struct mxt_data {
262 unsigned int irq; 266 unsigned int irq;
263 unsigned int max_x; 267 unsigned int max_x;
264 unsigned int max_y; 268 unsigned int max_y;
269 bool invertx;
270 bool inverty;
265 bool xy_switch; 271 bool xy_switch;
266 u8 xsize; 272 u8 xsize;
267 u8 ysize; 273 u8 ysize;
@@ -1747,6 +1753,8 @@ static int mxt_read_t9_resolution(struct mxt_data *data)
1747 return error; 1753 return error;
1748 1754
1749 data->xy_switch = orient & MXT_T9_ORIENT_SWITCH; 1755 data->xy_switch = orient & MXT_T9_ORIENT_SWITCH;
1756 data->invertx = orient & MXT_T9_ORIENT_INVERTX;
1757 data->inverty = orient & MXT_T9_ORIENT_INVERTY;
1750 1758
1751 return 0; 1759 return 0;
1752} 1760}
@@ -1801,6 +1809,8 @@ static int mxt_read_t100_config(struct mxt_data *data)
1801 return error; 1809 return error;
1802 1810
1803 data->xy_switch = cfg & MXT_T100_CFG_SWITCHXY; 1811 data->xy_switch = cfg & MXT_T100_CFG_SWITCHXY;
1812 data->invertx = cfg & MXT_T100_CFG_INVERTX;
1813 data->inverty = cfg & MXT_T100_CFG_INVERTY;
1804 1814
1805 /* allocate aux bytes */ 1815 /* allocate aux bytes */
1806 error = __mxt_read_reg(client, 1816 error = __mxt_read_reg(client,
@@ -2145,13 +2155,19 @@ static int mxt_convert_debug_pages(struct mxt_data *data, u16 *outbuf)
2145 struct mxt_dbg *dbg = &data->dbg; 2155 struct mxt_dbg *dbg = &data->dbg;
2146 unsigned int x = 0; 2156 unsigned int x = 0;
2147 unsigned int y = 0; 2157 unsigned int y = 0;
2148 unsigned int i; 2158 unsigned int i, rx, ry;
2149 2159
2150 for (i = 0; i < dbg->t37_nodes; i++) { 2160 for (i = 0; i < dbg->t37_nodes; i++) {
2151 outbuf[i] = mxt_get_debug_value(data, x, y); 2161 /* Handle orientation */
2162 rx = data->xy_switch ? y : x;
2163 ry = data->xy_switch ? x : y;
2164 rx = data->invertx ? (data->xsize - 1 - rx) : rx;
2165 ry = data->inverty ? (data->ysize - 1 - ry) : ry;
2166
2167 outbuf[i] = mxt_get_debug_value(data, rx, ry);
2152 2168
2153 /* Next value */ 2169 /* Next value */
2154 if (++x >= data->xsize) { 2170 if (++x >= (data->xy_switch ? data->ysize : data->xsize)) {
2155 x = 0; 2171 x = 0;
2156 y++; 2172 y++;
2157 } 2173 }
@@ -2306,8 +2322,8 @@ static int mxt_set_input(struct mxt_data *data, unsigned int i)
2306 if (i > 0) 2322 if (i > 0)
2307 return -EINVAL; 2323 return -EINVAL;
2308 2324
2309 f->width = data->xsize; 2325 f->width = data->xy_switch ? data->ysize : data->xsize;
2310 f->height = data->ysize; 2326 f->height = data->xy_switch ? data->xsize : data->ysize;
2311 f->pixelformat = V4L2_TCH_FMT_DELTA_TD16; 2327 f->pixelformat = V4L2_TCH_FMT_DELTA_TD16;
2312 f->field = V4L2_FIELD_NONE; 2328 f->field = V4L2_FIELD_NONE;
2313 f->colorspace = V4L2_COLORSPACE_RAW; 2329 f->colorspace = V4L2_COLORSPACE_RAW;