Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1434774 > unrolled thread
| Started by | Nick Dyer <nick@shmanahar.org> |
|---|---|
| First post | 2016-06-30 19:50 +0200 |
| Last post | 2016-06-30 20:00 +0200 |
| Articles | 3 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH v6 0/11] Output raw touch data via V4L2 Nick Dyer <nick@shmanahar.org> - 2016-06-30 19:50 +0200
[PATCH] v4l2-compliance: Changes to support touch sensors Nick Dyer <nick@shmanahar.org> - 2016-06-30 20:00 +0200
[PATCH v6 01/11] Input: atmel_mxt_ts - update MAINTAINERS email address Nick Dyer <nick@shmanahar.org> - 2016-06-30 20:00 +0200
| From | Nick Dyer <nick@shmanahar.org> |
|---|---|
| Date | 2016-06-30 19:50 +0200 |
| Subject | [PATCH v6 0/11] Output raw touch data via V4L2 |
| Message-ID | <rPOg9-44d-5@gated-at.bofh.it> |
This is a series of patches to add output of raw touch diagnostic data via V4L2
to the Atmel maXTouch and Synaptics RMI4 drivers.
It's a rewrite of the previous implementation which output via debugfs: it now
uses a V4L2 device in a similar way to the sur40 driver.
We have a utility which can read the data and display it in a useful format:
https://github.com/ndyer/heatmap/commits/heatmap-v4l
These patches are also available from
https://github.com/ndyer/linux/commits/v4l-touch-2016-06-30
I will also send a patch to update v4l2-compliance.
Changes in v6:
- Remove BUF_TYPE_TOUCH_CAPTURE, as discussed with Hans V touch devices will
use BUF_TYPE_VIDEO_CAPTURE.
- Touch devices should now register CAP_VIDEO_CAPTURE: CAP_TOUCH just says that
this is a touch device, not a video device, but otherwise it acts the same.
- Add some code to v4l_s_fmt() to set sensible default values for fields not
used by touch.
- Improve naming/doc of RMI4 F54 report types.
- Various minor DocBook fixes, and split to separate patch.
- Update my email address.
- Rework sur40 changes so that PIX_FMT_GREY is supported for backward
compatibility. Florian is it possible for you to test?
Changes in v5 (Hans Verkuil review):
- Update v4l2-core:
- Add VFL_TYPE_TOUCH, V4L2_BUF_TYPE_TOUCH_CAPTURE and V4L2_CAP_TOUCH
- Change V4L2_INPUT_TYPE_TOUCH_SENSOR to V4L2_INPUT_TYPE_TOUCH
- Improve DocBook documentation
- Add FMT definitions for touch data
- Note this will need the latest version of the heatmap util
- Synaptics RMI4 driver:
- Remove some less important non full frame report types
- Switch report type names to const char * array
- Move a static array to inside context struct
- Split sur40 changes to a separate commit
Changes in v4:
- Address nits from the input side in atmel_mxt_ts patches (Dmitry Torokhov)
- Add Synaptics RMI4 F54 support patch
Changes in v3:
- Address V4L2 review comments from Hans Verkuil
- Run v4l-compliance and fix all issues - needs minor patch here:
https://github.com/ndyer/v4l-utils/commit/cf50469773f
Changes in v2:
- Split pixfmt changes into separate commit and add DocBook
- Introduce VFL_TYPE_TOUCH_SENSOR and /dev/v4l-touch
- Remove "single node" support for now, it may be better to treat it as
metadata later
- Explicitly set VFL_DIR_RX
- Fix Kconfig
[toc] | [next] | [standalone]
| From | Nick Dyer <nick@shmanahar.org> |
|---|---|
| Date | 2016-06-30 20:00 +0200 |
| Subject | [PATCH] v4l2-compliance: Changes to support touch sensors |
| Message-ID | <rPOpP-47C-11@gated-at.bofh.it> |
| In reply to | #1434774 |
Signed-off-by: Nick Dyer <nick@shmanahar.org>
---
utils/v4l2-compliance/v4l2-compliance.cpp | 48 +++++++++++++++++++++++-
utils/v4l2-compliance/v4l2-compliance.h | 1 +
utils/v4l2-compliance/v4l2-test-input-output.cpp | 4 +-
3 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp b/utils/v4l2-compliance/v4l2-compliance.cpp
index 48dc8b4..6bd4653 100644
--- a/utils/v4l2-compliance/v4l2-compliance.cpp
+++ b/utils/v4l2-compliance/v4l2-compliance.cpp
@@ -55,6 +55,7 @@ enum Option {
OptSetRadioDevice = 'r',
OptStreaming = 's',
OptSetSWRadioDevice = 'S',
+ OptSetTouchDevice = 't',
OptTrace = 'T',
OptVerbose = 'v',
OptSetVbiDevice = 'V',
@@ -105,6 +106,7 @@ static struct option long_options[] = {
{"vbi-device", required_argument, 0, OptSetVbiDevice},
{"sdr-device", required_argument, 0, OptSetSWRadioDevice},
{"expbuf-device", required_argument, 0, OptSetExpBufDevice},
+ {"touch-device", required_argument, 0, OptSetTouchDevice},
{"help", no_argument, 0, OptHelp},
{"verbose", no_argument, 0, OptVerbose},
{"no-warnings", no_argument, 0, OptNoWarnings},
@@ -134,6 +136,9 @@ static void usage(void)
printf(" -S, --sdr-device=<dev>\n");
printf(" Use device <dev> as the SDR device.\n");
printf(" If <dev> starts with a digit, then /dev/swradio<dev> is used.\n");
+ printf(" -t, --touch-device=<dev>\n");
+ printf(" Use device <dev> as the touch device.\n");
+ printf(" If <dev> starts with a digit, then /dev/v4l-touch<dev> is used.\n");
printf(" -e, --expbuf-device=<dev>\n");
printf(" Use device <dev> to obtain DMABUF handles.\n");
printf(" If <dev> starts with a digit, then /dev/video<dev> is used.\n");
@@ -206,6 +211,8 @@ std::string cap2s(unsigned cap)
s += "\t\tSDR Capture\n";
if (cap & V4L2_CAP_SDR_OUTPUT)
s += "\t\tSDR Output\n";
+ if (cap & V4L2_CAP_TOUCH)
+ s += "\t\tTouch Capture\n";
if (cap & V4L2_CAP_TUNER)
s += "\t\tTuner\n";
if (cap & V4L2_CAP_HW_FREQ_SEEK)
@@ -673,6 +680,8 @@ int main(int argc, char **argv)
struct node radio_node2;
struct node sdr_node;
struct node sdr_node2;
+ struct node touch_node;
+ struct node touch_node2;
struct node expbuf_node;
/* command args */
@@ -682,6 +691,7 @@ int main(int argc, char **argv)
const char *vbi_device = NULL; /* -V device */
const char *radio_device = NULL; /* -r device */
const char *sdr_device = NULL; /* -S device */
+ const char *touch_device = NULL; /* -t device */
const char *expbuf_device = NULL; /* --expbuf-device device */
struct v4l2_capability vcap; /* list_cap */
unsigned frame_count = 60;
@@ -750,6 +760,15 @@ int main(int argc, char **argv)
sdr_device = newdev;
}
break;
+ case OptSetTouchDevice:
+ touch_device = optarg;
+ if (touch_device[0] >= '0' && touch_device[0] <= '9' && strlen(touch_device) <= 3) {
+ static char newdev[20];
+
+ sprintf(newdev, "/dev/v4l-touch%s", touch_device);
+ touch_device = newdev;
+ }
+ break;
case OptSetExpBufDevice:
expbuf_device = optarg;
if (expbuf_device[0] >= '0' && expbuf_device[0] <= '9' && strlen(expbuf_device) <= 3) {
@@ -839,7 +858,8 @@ int main(int argc, char **argv)
if (v1 == 2 && v2 == 6)
kernel_version = v3;
- if (!video_device && !vbi_device && !radio_device && !sdr_device)
+ if (!video_device && !vbi_device && !radio_device &&
+ !sdr_device && !touch_device)
video_device = "/dev/video0";
if (video_device) {
@@ -886,6 +906,17 @@ int main(int argc, char **argv)
}
}
+ if (touch_device) {
+ touch_node.s_trace(options[OptTrace]);
+ touch_node.s_direct(direct);
+ fd = touch_node.open(touch_device, false);
+ if (fd < 0) {
+ fprintf(stderr, "Failed to open %s: %s\n", touch_device,
+ strerror(errno));
+ exit(1);
+ }
+ }
+
if (expbuf_device) {
expbuf_node.s_trace(options[OptTrace]);
expbuf_node.s_direct(true);
@@ -913,6 +944,10 @@ int main(int argc, char **argv)
node = sdr_node;
device = sdr_device;
node.is_sdr = true;
+ } else if (touch_node.g_fd() >= 0) {
+ node = touch_node;
+ device = touch_device;
+ node.is_touch = true;
}
node.device = device;
@@ -1013,6 +1048,17 @@ int main(int argc, char **argv)
node.node2 = &sdr_node2;
}
}
+ if (touch_device) {
+ touch_node2 = node;
+ printf("\ttest second touch open: %s\n",
+ ok(touch_node2.open(touch_device, false) >= 0 ? 0 : errno));
+ if (touch_node2.g_fd() >= 0) {
+ printf("\ttest VIDIOC_QUERYCAP: %s\n", ok(testCap(&touch_node2)));
+ printf("\ttest VIDIOC_G/S_PRIORITY: %s\n",
+ ok(testPrio(&node, &touch_node2)));
+ node.node2 = &touch_node2;
+ }
+ }
printf("\n");
storeState(&node);
diff --git a/utils/v4l2-compliance/v4l2-compliance.h b/utils/v4l2-compliance/v4l2-compliance.h
index 67ecbf5..60432b1 100644
--- a/utils/v4l2-compliance/v4l2-compliance.h
+++ b/utils/v4l2-compliance/v4l2-compliance.h
@@ -68,6 +68,7 @@ struct base_node {
bool is_radio;
bool is_vbi;
bool is_sdr;
+ bool is_touch;
bool is_m2m;
bool is_planar;
bool can_capture;
diff --git a/utils/v4l2-compliance/v4l2-test-input-output.cpp b/utils/v4l2-compliance/v4l2-test-input-output.cpp
index 05daf85..3b56968 100644
--- a/utils/v4l2-compliance/v4l2-test-input-output.cpp
+++ b/utils/v4l2-compliance/v4l2-test-input-output.cpp
@@ -371,7 +371,9 @@ static int checkInput(struct node *node, const struct v4l2_input &descr, unsigne
return fail("invalid index\n");
if (check_ustring(descr.name, sizeof(descr.name)))
return fail("invalid name\n");
- if (descr.type != V4L2_INPUT_TYPE_TUNER && descr.type != V4L2_INPUT_TYPE_CAMERA)
+ if (descr.type != V4L2_INPUT_TYPE_TUNER &&
+ descr.type != V4L2_INPUT_TYPE_CAMERA &&
+ descr.type != V4L2_INPUT_TYPE_TOUCH)
return fail("invalid type\n");
if (descr.type == V4L2_INPUT_TYPE_CAMERA && descr.tuner)
return fail("invalid tuner\n");
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Nick Dyer <nick@shmanahar.org> |
|---|---|
| Date | 2016-06-30 20:00 +0200 |
| Subject | [PATCH v6 01/11] Input: atmel_mxt_ts - update MAINTAINERS email address |
| Message-ID | <rPOpP-47C-27@gated-at.bofh.it> |
| In reply to | #1434774 |
I'm leaving ITDev, so change to my personal email. My understanding is that someone at Atmel will take this on once their takeover by Microchip has settled down. Signed-off-by: Nick Dyer <nick@shmanahar.org> --- MAINTAINERS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 0f148d3..6affed5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2181,9 +2181,9 @@ S: Maintained F: drivers/net/wireless/atmel/atmel* ATMEL MAXTOUCH DRIVER -M: Nick Dyer <nick.dyer@itdev.co.uk> -T: git git://github.com/atmel-maxtouch/linux.git -S: Supported +M: Nick Dyer <nick@shmanahar.org> +T: git git://github.com/ndyer/linux.git +S: Maintained F: Documentation/devicetree/bindings/input/atmel,maxtouch.txt F: drivers/input/touchscreen/atmel_mxt_ts.c F: include/linux/platform_data/atmel_mxt_ts.h -- 2.5.0
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web