Thread (3 messages) 3 messages, 3 authors, 2013-06-19

Re: Posiflex 0d3a:a000 touchscreen press not recognized in kernel 3.9.4

From: Benjamin Tissoires <hidden>
Date: 2013-06-19 15:57:04
Subsystem: hid core layer, the rest · Maintainers: Jiri Kosina, Benjamin Tissoires, Linus Torvalds

Possibly related (same subject, not in this thread)

Hi Jan,

On 06/19/2013 11:23 AM, Jan Kandziora wrote:
Am 19.06.2013 09:50, schrieb Benjamin Tissoires:
quoted
Ok, I will need at least the dmesg log and the output of hid-recorder
[1] if your device is handled through hid-generic.
Hid-replay will then allow me to virtually plug your device on my
laptop so that I can replay and find out why the btn_left events are
not emitted anymore.
Logs are attached. I've first pressed onto the center of the touch, then
onto the lower right corner, then drawn a wave line from upper left to
lower left, then from lower left to upper right.

Thanks for your help.

	Jan
Thanks for the logs. The problem comes from a commit introduced in 3.3 which discards the BTN_LEFT information.

If possible, can you apply and test the following patch?

Cheers,
Benjamin

From: Benjamin Tissoires <redacted>
Date: Wed, 19 Jun 2013 17:49:05 +0200
Subject: [PATCH] HID: input: fix false positive out of range values

Commit 6da7066906e977d42104a859c490f5f9a300488c introduced in 3.3
"HID: ignore absolute values which don't fit between logical min and max"
prevents some Posiflex touch screen to work because they do not provide
logical min and max for their buttons.
Thus, logical min and max are at 0, discarding the buttons events, and
preventing the device to report appropriate X Y.

Adding a check on "min < max" solves the problem.

Reported-by: Jan Kandziora <redacted>
Signed-off-by: Benjamin Tissoires <redacted>
---
 drivers/hid/hid-input.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index c526a3c..930f1bb 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -1045,6 +1045,7 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
 	 * section 5.10 and 6.2.25
 	 */
 	if ((field->flags & HID_MAIN_ITEM_VARIABLE) &&
+	    (field->logical_minimum < field->logical_maximum) &&
 	    (value < field->logical_minimum ||
 	     value > field->logical_maximum)) {
 		dbg_hid("Ignoring out-of-range value %x\n", value);
-- 
1.8.2.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help