diff options
author | Nick Dyer <nick@shmanahar.org> | 2016-07-18 17:10:36 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-08-23 15:33:13 -0400 |
commit | 06b3d3f38c19601564cdd10443edbcac5c8293e2 (patch) | |
tree | 4bae0a5d4bee39891390f0af9cd6aac52b2cd015 /drivers/input | |
parent | 566d533a4bd2ed9a7ce26a08df31a6e634051562 (diff) |
[media] Input: atmel_mxt_ts - add support for reference data
There are different datatypes available from a maXTouch chip. Add
support to retrieve reference data as well.
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')
-rw-r--r-- | drivers/input/touchscreen/atmel_mxt_ts.c | 57 |
1 files changed, 51 insertions, 6 deletions
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index 584198e64661..beede8fe511c 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c | |||
@@ -135,6 +135,7 @@ struct t9_range { | |||
135 | /* MXT_DEBUG_DIAGNOSTIC_T37 */ | 135 | /* MXT_DEBUG_DIAGNOSTIC_T37 */ |
136 | #define MXT_DIAGNOSTIC_PAGEUP 0x01 | 136 | #define MXT_DIAGNOSTIC_PAGEUP 0x01 |
137 | #define MXT_DIAGNOSTIC_DELTAS 0x10 | 137 | #define MXT_DIAGNOSTIC_DELTAS 0x10 |
138 | #define MXT_DIAGNOSTIC_REFS 0x11 | ||
138 | #define MXT_DIAGNOSTIC_SIZE 128 | 139 | #define MXT_DIAGNOSTIC_SIZE 128 |
139 | 140 | ||
140 | #define MXT_FAMILY_1386 160 | 141 | #define MXT_FAMILY_1386 160 |
@@ -249,6 +250,12 @@ struct mxt_dbg { | |||
249 | int input; | 250 | int input; |
250 | }; | 251 | }; |
251 | 252 | ||
253 | enum v4l_dbg_inputs { | ||
254 | MXT_V4L_INPUT_DELTAS, | ||
255 | MXT_V4L_INPUT_REFS, | ||
256 | MXT_V4L_INPUT_MAX, | ||
257 | }; | ||
258 | |||
252 | static const struct v4l2_file_operations mxt_video_fops = { | 259 | static const struct v4l2_file_operations mxt_video_fops = { |
253 | .owner = THIS_MODULE, | 260 | .owner = THIS_MODULE, |
254 | .open = v4l2_fh_open, | 261 | .open = v4l2_fh_open, |
@@ -2273,6 +2280,7 @@ static void mxt_buffer_queue(struct vb2_buffer *vb) | |||
2273 | struct mxt_data *data = vb2_get_drv_priv(vb->vb2_queue); | 2280 | struct mxt_data *data = vb2_get_drv_priv(vb->vb2_queue); |
2274 | u16 *ptr; | 2281 | u16 *ptr; |
2275 | int ret; | 2282 | int ret; |
2283 | u8 mode; | ||
2276 | 2284 | ||
2277 | ptr = vb2_plane_vaddr(vb, 0); | 2285 | ptr = vb2_plane_vaddr(vb, 0); |
2278 | if (!ptr) { | 2286 | if (!ptr) { |
@@ -2280,7 +2288,18 @@ static void mxt_buffer_queue(struct vb2_buffer *vb) | |||
2280 | goto fault; | 2288 | goto fault; |
2281 | } | 2289 | } |
2282 | 2290 | ||
2283 | ret = mxt_read_diagnostic_debug(data, MXT_DIAGNOSTIC_DELTAS, ptr); | 2291 | switch (data->dbg.input) { |
2292 | case MXT_V4L_INPUT_DELTAS: | ||
2293 | default: | ||
2294 | mode = MXT_DIAGNOSTIC_DELTAS; | ||
2295 | break; | ||
2296 | |||
2297 | case MXT_V4L_INPUT_REFS: | ||
2298 | mode = MXT_DIAGNOSTIC_REFS; | ||
2299 | break; | ||
2300 | } | ||
2301 | |||
2302 | ret = mxt_read_diagnostic_debug(data, mode, ptr); | ||
2284 | if (ret) | 2303 | if (ret) |
2285 | goto fault; | 2304 | goto fault; |
2286 | 2305 | ||
@@ -2325,11 +2344,21 @@ static int mxt_vidioc_querycap(struct file *file, void *priv, | |||
2325 | static int mxt_vidioc_enum_input(struct file *file, void *priv, | 2344 | static int mxt_vidioc_enum_input(struct file *file, void *priv, |
2326 | struct v4l2_input *i) | 2345 | struct v4l2_input *i) |
2327 | { | 2346 | { |
2328 | if (i->index > 0) | 2347 | if (i->index >= MXT_V4L_INPUT_MAX) |
2329 | return -EINVAL; | 2348 | return -EINVAL; |
2330 | 2349 | ||
2331 | i->type = V4L2_INPUT_TYPE_TOUCH; | 2350 | i->type = V4L2_INPUT_TYPE_TOUCH; |
2332 | strlcpy(i->name, "Mutual Capacitance Deltas", sizeof(i->name)); | 2351 | |
2352 | switch (i->index) { | ||
2353 | case MXT_V4L_INPUT_REFS: | ||
2354 | strlcpy(i->name, "Mutual Capacitance References", | ||
2355 | sizeof(i->name)); | ||
2356 | break; | ||
2357 | case MXT_V4L_INPUT_DELTAS: | ||
2358 | strlcpy(i->name, "Mutual Capacitance Deltas", sizeof(i->name)); | ||
2359 | break; | ||
2360 | } | ||
2361 | |||
2333 | return 0; | 2362 | return 0; |
2334 | } | 2363 | } |
2335 | 2364 | ||
@@ -2337,12 +2366,16 @@ static int mxt_set_input(struct mxt_data *data, unsigned int i) | |||
2337 | { | 2366 | { |
2338 | struct v4l2_pix_format *f = &data->dbg.format; | 2367 | struct v4l2_pix_format *f = &data->dbg.format; |
2339 | 2368 | ||
2340 | if (i > 0) | 2369 | if (i >= MXT_V4L_INPUT_MAX) |
2341 | return -EINVAL; | 2370 | return -EINVAL; |
2342 | 2371 | ||
2372 | if (i == MXT_V4L_INPUT_DELTAS) | ||
2373 | f->pixelformat = V4L2_TCH_FMT_DELTA_TD16; | ||
2374 | else | ||
2375 | f->pixelformat = V4L2_TCH_FMT_TU16; | ||
2376 | |||
2343 | f->width = data->xy_switch ? data->ysize : data->xsize; | 2377 | f->width = data->xy_switch ? data->ysize : data->xsize; |
2344 | f->height = data->xy_switch ? data->xsize : data->ysize; | 2378 | f->height = data->xy_switch ? data->xsize : data->ysize; |
2345 | f->pixelformat = V4L2_TCH_FMT_DELTA_TD16; | ||
2346 | f->field = V4L2_FIELD_NONE; | 2379 | f->field = V4L2_FIELD_NONE; |
2347 | f->colorspace = V4L2_COLORSPACE_RAW; | 2380 | f->colorspace = V4L2_COLORSPACE_RAW; |
2348 | f->bytesperline = f->width * sizeof(u16); | 2381 | f->bytesperline = f->width * sizeof(u16); |
@@ -2383,7 +2416,19 @@ static int mxt_vidioc_enum_fmt(struct file *file, void *priv, | |||
2383 | if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) | 2416 | if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) |
2384 | return -EINVAL; | 2417 | return -EINVAL; |
2385 | 2418 | ||
2386 | fmt->pixelformat = V4L2_TCH_FMT_DELTA_TD16; | 2419 | switch (fmt->index) { |
2420 | case 0: | ||
2421 | fmt->pixelformat = V4L2_TCH_FMT_TU16; | ||
2422 | break; | ||
2423 | |||
2424 | case 1: | ||
2425 | fmt->pixelformat = V4L2_TCH_FMT_DELTA_TD16; | ||
2426 | break; | ||
2427 | |||
2428 | default: | ||
2429 | return -EINVAL; | ||
2430 | } | ||
2431 | |||
2387 | return 0; | 2432 | return 0; |
2388 | } | 2433 | } |
2389 | 2434 | ||