NetBSD Problem Report #57446

From dtyson@samsung.anduin.org.uk  Mon May 29 22:20:29 2023
Return-Path: <dtyson@samsung.anduin.org.uk>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))
	(Client CN "mail.NetBSD.org", Issuer "mail.NetBSD.org CA" (not verified))
	by mollari.NetBSD.org (Postfix) with ESMTPS id 85A591A9238
	for <gnats-bugs@gnats.NetBSD.org>; Mon, 29 May 2023 22:20:29 +0000 (UTC)
Message-Id: <20230529222025.993BC14477C@samsung.anduin.org.uk>
Date: Mon, 29 May 2023 23:20:25 +0100 (BST)
From: dtyson@anduin.org.uk
Reply-To: dtyson@anduin.org.uk
To: gnats-bugs@NetBSD.org
Subject: The uts driver reports "touchscreen has no range report" and fails to attach device
X-Send-Pr-Version: 3.95

>Number:         57446
>Category:       kern
>Synopsis:       The uts driver reports "touchscreen has no range report" and fails to attach device
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon May 29 22:25:00 +0000 2023
>Originator:     Dave Tyson
>Release:        NetBSD 10.0_BETA
>Organization:
		Anduin
>Environment:


System: NetBSD samsung.anduin.org.uk 10.0_BETA NetBSD 10.0_BETA (GENERIC) #2: Mon May 29 21:57:30 BST 2023 root@samsung.anduin.org.uk:/usr/obj/amd64/sys/arch/amd64/compile/GENERIC amd64
Architecture: x86_64
Machine: amd64
>Description:
This problem seems to affect various touchscreens on different devices. The
test systems were a Samsung DP700A3D all-in-one PC i(amd64) and a Raspberry Pi Zero 2 W
with a 7" Chinese HDMI displayi (arm7). 

The issue is that the uts driver tries to attach the touch controller and fails with
a message "touchscreen has no range report". The device does not attach correctly
>How-To-Repeat:
Boot the hardware with the appropriate NetBSD-10 BETA kernel, 
note that the device fails to attach.

For the amd64 system booting with uts disabled leads to the device being visible
as a uhid and the descriptors are listed below:

[     5.215221] uhidev3 at uhub5 port 6 configuration 1 interface 0
[     5.215221] uhidev3: ILITEK (0x222a) ILITEK Multi-Touch (0x0011), rev 1.10/0.02, addr 6, iclass 3/0
[     5.215221] uhidev3: 6 report ids
[     5.215221] uhid2 at uhidev3 reportid 2: input=0, output=0, feature=1
[     5.215221] uhid3 at uhidev3 reportid 3: input=63, output=63, feature=0
[     5.215221] uhid4 at uhidev3 reportid 4: input=55, output=0, feature=0
[     5.215221] uhid5 at uhidev3 reportid 6: input=0, output=0, feature=256
dtyson(samsung)dtyson$ usbhidctl -f /dev/uhid2 -v -r
Report descriptor:
Feature size=8 count=1 page=Digitizer usage=Contact_Count_Maximum, logical range 0..10, physical range 0..2932
Total   input size 0 bytes
Total  output size 0 bytes
Total feature size 1 bytes
dtyson(samsung)dtyson$ usbhidctl -f /dev/uhid3 -v -r 
Report descriptor:
Collection page=Microsoft usage=0x0001
Input   size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255, physical range 0..2932
Input   size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255, physical range 0..2932
--- lots of duplicate lines deleted ---
Input   size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255, physical range 0..2932
Input   size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255, physical range 0..2932
Output  size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255, physical range 0..2932
Output  size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255, physical range 0..2932
--- lots of duplicate lines deleted ---
Output  size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255, physical range 0..2932
Output  size=8 count=1 page=Microsoft usage=0x0001, logical range 0..255, physical range 0..2932
End collection
Total   input size 63 bytes
Total  output size 63 bytes
Total feature size 0 bytes
dtyson(samsung)dtyson$ usbhidctl -f /dev/uhid4 -v -r 
Report descriptor:
Collection page=Digitizer usage=Touch_Screen
Collection page=Digitizer usage=Finger
Input   size=6 count=1 page=Digitizer usage=Contact_Identifier, logical range 0..63
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range 0..1
Input   size=1 count=1 Const page=0x0000 usage=0x0000, logical range 0..1
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range 0..11388, physical range 0..5212, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range 0..6272, physical range 0..2932, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=6 count=1 page=Digitizer usage=Contact_Identifier, logical range 0..63, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 Const page=0x0000 usage=0x0000, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range 0..11388, physical range 0..5212, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range 0..6272, physical range 0..2932, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=6 count=1 page=Digitizer usage=Contact_Identifier, logical range 0..63, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 Const page=0x0000 usage=0x0000, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range 0..11388, physical range 0..5212, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range 0..6272, physical range 0..2932, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=6 count=1 page=Digitizer usage=Contact_Identifier, logical range 0..63, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 Const page=0x0000 usage=0x0000, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range 0..11388, physical range 0..5212, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range 0..6272, physical range 0..2932, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=6 count=1 page=Digitizer usage=Contact_Identifier, logical range 0..63, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 Const page=0x0000 usage=0x0000, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range 0..11388, physical range 0..5212, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range 0..6272, physical range 0..2932, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=6 count=1 page=Digitizer usage=Contact_Identifier, logical range 0..63, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 Const page=0x0000 usage=0x0000, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range 0..11388, physical range 0..5212, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range 0..6272, physical range 0..2932, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=6 count=1 page=Digitizer usage=Contact_Identifier, logical range 0..63, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 Const page=0x0000 usage=0x0000, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range 0..11388, physical range 0..5212, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range 0..6272, physical range 0..2932, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=6 count=1 page=Digitizer usage=Contact_Identifier, logical range 0..63, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 Const page=0x0000 usage=0x0000, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range 0..11388, physical range 0..5212, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range 0..6272, physical range 0..2932, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=6 count=1 page=Digitizer usage=Contact_Identifier, logical range 0..63, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 Const page=0x0000 usage=0x0000, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range 0..11388, physical range 0..5212, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range 0..6272, physical range 0..2932, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=6 count=1 page=Digitizer usage=Contact_Identifier, logical range 0..63, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=1 count=1 Const page=0x0000 usage=0x0000, logical range 0..1, physical range 0..2932, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range 0..11388, physical range 0..5212, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range 0..6272, physical range 0..2932, unit=0x11 exp=-2
End collection
Input   size=32 count=1 page=Digitizer usage=0x0056, logical range 0..2147483647, physical range 0..2932
Input   size=8 count=1 page=Digitizer usage=Contact_Count, logical range 0..127, physical range 0..2932
Total   input size 55 bytes
Total  output size 0 bytes
Total feature size 0 bytes
dtyson(samsung)dtyson$ usbhidctl -f /dev/uhid5 -v -r 
Report descriptor:
Feature size=8 count=1 page=Microsoft usage=0x00c5, logical range 0..255, physical range 0..2932
Feature size=8 count=1 page=Microsoft usage=0x00c5, logical range 0..255, physical range 0..2932
--- lots of duplicate lines deleted ---
Feature size=8 count=1 page=Microsoft usage=0x00c5, logical range 0..255, physical range 0..2932
Feature size=8 count=1 page=Microsoft usage=0x00c5, logical range 0..255, physical range 0..2932
usbhidctl: Excessive collection ends

In the case of the RPI system a custom kernel with the uts device disabled resulted in: 

[     2.232302] uhidev0: wch.cn (0x1a86) USB2IIC_CTP_CONTROL (0xe5e3),
rev 0.01/0.00, addr 2, iclass 3/0
[     2.242305] uhidev0: 3 report ids
[     2.252305] uhid0 at uhidev0 reportid 1: input=51, output=0,
feature=0
[     2.252305] uhid1 at uhidev0 reportid 2: input=0, output=0,
feature=1
[     2.262308] uhid2 at uhidev0 reportid 3: input=0, output=0,
feature=256
armv7# usbhidctl -f /dev/uhid0 -v -r
Report descriptor:
Collection page=Digitizer usage=Touch_Screen
Collection page=Digitizer usage=Finger
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range
0..1
Input   size=1 count=7 Const page=0x0000 usage=0x0000, logical range
0..1
Input   size=8 count=1 page=Digitizer usage=Contact_Identifier, logical
range 0..1
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range
0..2048, physical range 0..2169, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range
0..2048, physical range 0..1356, unit=0x11 exp=-2
Input   size=16 count=1 page=Digitizer usage=Width, logical range
0..2048, physical range 0..1356, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range
0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=1 count=7 Const page=0x0000 usage=0x0000, logical range
0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=8 count=1 page=Digitizer usage=Contact_Identifier, logical
range 0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range
0..2048, physical range 0..2169, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range
0..2048, physical range 0..1356, unit=0x11 exp=-2
Input   size=16 count=1 page=Digitizer usage=Width, logical range
0..2048, physical range 0..1356, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range
0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=1 count=7 Const page=0x0000 usage=0x0000, logical range
0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=8 count=1 page=Digitizer usage=Contact_Identifier, logical
range 0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range
0..2048, physical range 0..2169, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range
0..2048, physical range 0..1356, unit=0x11 exp=-2
Input   size=16 count=1 page=Digitizer usage=Width, logical range
0..2048, physical range 0..1356, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range
0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=1 count=7 Const page=0x0000 usage=0x0000, logical range
0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=8 count=1 page=Digitizer usage=Contact_Identifier, logical
range 0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range
0..2048, physical range 0..2169, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range
0..2048, physical range 0..1356, unit=0x11 exp=-2
Input   size=16 count=1 page=Digitizer usage=Width, logical range
0..2048, physical range 0..1356, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range
0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=1 count=7 Const page=0x0000 usage=0x0000, logical range
0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=8 count=1 page=Digitizer usage=Contact_Identifier, logical
range 0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range
0..2048, physical range 0..2169, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range
0..2048, physical range 0..1356, unit=0x11 exp=-2
Input   size=16 count=1 page=Digitizer usage=Width, logical range
0..2048, physical range 0..1356, unit=0x11 exp=-2
End collection
Collection page=Digitizer usage=Finger
Input   size=1 count=1 page=Digitizer usage=Tip_Switch, logical range
0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=1 count=7 Const page=0x0000 usage=0x0000, logical range
0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=8 count=1 page=Digitizer usage=Contact_Identifier, logical
range 0..1, physical range 0..1356, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=X, logical range
0..2048, physical range 0..2169, unit=0x11 exp=-2
Input   size=16 count=1 page=Generic_Desktop usage=Y, logical range
0..2048, physical range 0..1356, unit=0x11 exp=-2
Input   size=16 count=1 page=Digitizer usage=Width, logical range
0..2048, physical range 0..1356, unit=0x11 exp=-2
End collection
Input   size=16 count=1 page=Digitizer usage=0x0056, logical range
0..65535, physical range 0..1356, unit=0x11 exp=-2
Input   size=8 count=1 page=Digitizer usage=Contact_Count, logical
range 0..127, physical range 0..1356, unit=0x11 exp=-2
Total   input size 51 bytes
Total  output size 0 bytes
Total feature size 0 bytes
armv7# usbhidctl -f /dev/uhid1 -v -r 
Report descriptor:
Feature size=8 count=1 page=Digitizer usage=Contact_Count_Maximum,
logical range 0..10, physical range 0..1356, unit=0x11 exp=-2
Total   input size 0 bytes
Total  output size 0 bytes
Total feature size 1 bytes
armv7# usbhidctl -f /dev/uhid2 -v -r 
Report descriptor:
Feature size=8 count=1 page=Microsoft usage=0x00c5, logical range 0..255, physical range 0..1356, unit=0x11 exp=-2
Feature size=8 count=1 page=Microsoft usage=0x00c5, logical range 0..255, physical range 0..1356, unit=0x11 exp=-2
---- lots of identical lines deleted ----
Feature size=8 count=1 page=Microsoft usage=0x00c5, logical range 0..255, physical range 0..1356, unit=0x11 exp=-2
Feature size=8 count=1 page=Microsoft usage=0x00c5, logical range 0..255, physical range 0..1356, unit=0x11 exp=-2
usbhidctl: Excessive collection ends


>Fix:

Following a suggestion from Michael van Elst <mlelstvr%serpens.de@localhost> I compiled a patched version
if uts.c with the error return commented out:

diff -p -u -r1.16 uts.c
--- uts.c       10 May 2023 00:12:44 -0000      1.16
+++ uts.c       29 May 2023 08:38:50 -0000
@@ -215,7 +215,7 @@ uts_attach(device_t parent, device_t sel
                } else {
                        aprint_error_dev(sc->sc_dev,
                            "touchscreen has no range report\n");
-                       return;
+                       // return;
                }
        }


This may fix the problems on both systems. I have only been able to fully test the amd64 system
so far, but can report that the touch screen seems to work perfectly - the only downside being the standard mouse seems a bit slower than normal. I think this just needs a tweak to the X config.

On the RPI system the wsmouse device is associated with the touchscreen and X comes up OK, but testing is awkward as I only have a serial console. I have not been able to move the cursor or select items in the default window manager, but further testing will need an adaptor to connect the touchscreen to s usb hub. 

>Unformatted:
 		Source dated approx 16th May 2023 with minor local changes to get
 		the RPI zero 2 w wifi to attach

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.47 2022/09/11 19:34:41 kim Exp $
$NetBSD: gnats_config.sh,v 1.9 2014/08/02 14:16:04 spz Exp $
Copyright © 1994-2023 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.