Bug 202161

Summary: i2c hid touchscreen stylus device is not detected
Product: Drivers Reporter: gregkwaste (gregkwaste)
Component: Input DevicesAssignee: drivers_input-devices
Status: RESOLVED CODE_FIX    
Severity: normal CC: jwrdegoede, rubensa
Priority: P1    
Hardware: x86-64   
OS: Linux   
Kernel Version: 4.20 Subsystem:
Regression: No Bisected commit-id:

Description gregkwaste 2019-01-05 21:37:22 UTC
I own a Teclast F6 Pro 2 in 1 convertible which features a Goodix Touchscreen controller. Touchscreen works fine (Goodix-TS is the loaded device driver) but there is no support for stylus and/or eraser devices.

On windows such devices are detected as HID devices.

I am a complete noob when it comes to hardware bug reports and stuff, so please let me know of what kind of info I can provide to assist.
Comment 1 gregkwaste 2019-01-05 22:10:31 UTC
I investigated a little bit more and I think that the Goodix-TS driver that I first suspected has probably nothing to do with it. So since on this specific tablet the touchscreen the touchpad and both accelerometers are using the i2c bus, 99% this is what is happening with the stylus stuff as well, which for some reason are not recognized. Since the touchpad of this tablet is the infamous SYNA3602:00, which is handled using some explicit quirks on the i2c-hid module, I think this is what it happening with these input devices as well.

Quoting Julian Sax:

 * This device does not supply any descriptors and on windows a filter
 * driver operates between the i2c-hid layer and the device and injects
 * these descriptors when the device is prompted. The descriptors were
 * extracted by listening to the i2c-hid traffic that occurs between the
 * windows filter driver and the windows i2c-hid driver.


I have a feeling that this process should be repeated for the rest input devices.
Comment 2 Ruben Suarez Alvarez 2019-01-08 16:47:42 UTC
I have the same problem but with other configuration:
**Hardware**: Chuwi Chorebook
**Linux**: Ubuntu 18.04 
**Kernel**: 4.15.0-43-generic

```bash
rubensa@rubensa-corebook:~$ xinput list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ SIPODEV USB Composite Device Touchpad   	id=11	[slave  pointer  (2)]
⎜   ↳ Goodix Capacitive TouchScreen           	id=15	[slave  pointer  (2)]
⎜   ↳ Bluetooth Mouse                         	id=21	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Power Button                            	id=6	[slave  keyboard (3)]
    ↳ Video Bus                               	id=7	[slave  keyboard (3)]
    ↳ Power Button                            	id=8	[slave  keyboard (3)]
    ↳ Sleep Button                            	id=9	[slave  keyboard (3)]
    ↳ SIPODEV USB Composite Device            	id=10	[slave  keyboard (3)]
    ↳ SIPODEV USB Composite Device Wireless Radio Control	id=12	[slave  keyboard (3)]
    ↳ SIPODEV USB Composite Device System Control	id=13	[slave  keyboard (3)]
    ↳ SIPODEV USB Composite Device Consumer Control	id=14	[slave  keyboard (3)]
    ↳ Intel Virtual Button driver             	id=16	[slave  keyboard (3)]
    ↳ Intel HID events                        	id=17	[slave  keyboard (3)]
    ↳ Intel HID 5 button array                	id=18	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard            	id=19	[slave  keyboard (3)]
    ↳ Goodix Capacitive TouchScreen           	id=20	[slave  keyboard (3)]
    ↳ Bluetooth Mouse                         	id=22	[slave  keyboard (3)]
```

```bash
rubensa@rubensa-corebook:~$ xinput list-props 15
Device 'Goodix Capacitive TouchScreen':
	Device Enabled (139):	1
	Coordinate Transformation Matrix (141):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Calibration Matrix (304):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Calibration Matrix Default (305):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Send Events Modes Available (261):	1, 0
	libinput Send Events Mode Enabled (262):	0, 0
	libinput Send Events Mode Enabled Default (263):	0, 0
	Device Node (264):	"/dev/input/event13"
	Device Product ID (265):	1046, 9111
```

```bash
rubensa@rubensa-corebook:~$ sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	Lid Switch
/dev/input/event1:	Sleep Button
/dev/input/event2:	Power Button
/dev/input/event3:	Power Button
/dev/input/event4:	AT Translated Set 2 keyboard
/dev/input/event5:	Video Bus
/dev/input/event6:	SIPODEV USB Composite Device
/dev/input/event7:	Intel Virtual Button driver
/dev/input/event8:	Intel HID events
/dev/input/event9:	Intel HID 5 button array
/dev/input/event10:	SIPODEV USB Composite Device Touchpad
/dev/input/event11:	SIPODEV USB Composite Device Wireless Radio Control
/dev/input/event12:	SIPODEV USB Composite Device System Control
/dev/input/event13:	Goodix Capacitive TouchScreen
/dev/input/event14:	SIPODEV USB Composite Device Consumer Control
/dev/input/event15:	HDA Intel PCH Mic
/dev/input/event16:	HDA Intel PCH Front Headphone
/dev/input/event17:	HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event18:	HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event19:	HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event20:	HDA Intel PCH HDMI/DP,pcm=9
/dev/input/event21:	HDA Intel PCH HDMI/DP,pcm=10
/dev/input/event22:	Bluetooth Mouse
Select the device event number [0-22]: 13
Input driver version is 1.0.1
Input device ID: bus 0x18 vendor 0x416 product 0x2397 version 0x2020
Input device name: "Goodix Capacitive TouchScreen"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 125 (KEY_LEFTMETA)
    Event code 330 (BTN_TOUCH)
  Event type 3 (EV_ABS)
    Event code 0 (ABS_X)
      Value   1404
      Min        0
      Max     1920
    Event code 1 (ABS_Y)
      Value    462
      Min        0
      Max     1080
    Event code 47 (ABS_MT_SLOT)
      Value      2
      Min        0
      Max        9
    Event code 48 (ABS_MT_TOUCH_MAJOR)
      Value      0
      Min        0
      Max      255
    Event code 50 (ABS_MT_WIDTH_MAJOR)
      Value      0
      Min        0
      Max      255
    Event code 53 (ABS_MT_POSITION_X)
      Value      0
      Min        0
      Max     1920
    Event code 54 (ABS_MT_POSITION_Y)
      Value      0
      Min        0
      Max     1080
    Event code 57 (ABS_MT_TRACKING_ID)
      Value      0
      Min        0
      Max    65535
Properties:
  Property type 1 (INPUT_PROP_DIRECT)
Testing ... (interrupt to exit)
Event: time 1546965355.223405, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 0
Event: time 1546965355.223405, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1359
Event: time 1546965355.223405, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 1003
Event: time 1546965355.223405, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 656
Event: time 1546965355.223405, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 100
Event: time 1546965355.223405, type 3 (EV_ABS), code 50 (ABS_MT_WIDTH_MAJOR), value 100
Event: time 1546965355.223405, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.223405, type 3 (EV_ABS), code 0 (ABS_X), value 1003
Event: time 1546965355.223405, type 3 (EV_ABS), code 1 (ABS_Y), value 656
Event: time 1546965355.223405, -------------- SYN_REPORT ------------
Event: time 1546965355.250658, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.250658, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.250658, -------------- SYN_REPORT ------------
Event: time 1546965355.259697, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1360
Event: time 1546965355.259697, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.259697, -------------- SYN_REPORT ------------
Event: time 1546965355.278616, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.278616, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.278616, -------------- SYN_REPORT ------------
Event: time 1546965355.288004, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1361
Event: time 1546965355.288004, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.288004, -------------- SYN_REPORT ------------
Event: time 1546965355.306823, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.306823, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.306823, -------------- SYN_REPORT ------------
Event: time 1546965355.315265, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1362
Event: time 1546965355.315265, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.315265, -------------- SYN_REPORT ------------
Event: time 1546965355.336382, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.336382, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.336382, -------------- SYN_REPORT ------------
Event: time 1546965355.339339, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1363
Event: time 1546965355.339339, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.339339, -------------- SYN_REPORT ------------
Event: time 1546965355.360646, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.360646, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.360646, -------------- SYN_REPORT ------------
Event: time 1546965355.369092, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1364
Event: time 1546965355.369092, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.369092, -------------- SYN_REPORT ------------
Event: time 1546965355.386735, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.386735, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.386735, -------------- SYN_REPORT ------------
Event: time 1546965355.393504, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1365
Event: time 1546965355.393504, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.393504, -------------- SYN_REPORT ------------
Event: time 1546965355.412951, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.412951, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.412951, -------------- SYN_REPORT ------------
Event: time 1546965355.421500, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1366
Event: time 1546965355.421500, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.421500, -------------- SYN_REPORT ------------
Event: time 1546965355.438883, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.438883, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.438883, -------------- SYN_REPORT ------------
Event: time 1546965355.446954, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1367
Event: time 1546965355.446954, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.446954, -------------- SYN_REPORT ------------
Event: time 1546965355.466827, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.466827, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.466827, -------------- SYN_REPORT ------------
Event: time 1546965355.473684, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1368
Event: time 1546965355.473684, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.473684, -------------- SYN_REPORT ------------
Event: time 1546965355.492402, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.492402, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.492402, -------------- SYN_REPORT ------------
Event: time 1546965355.500514, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1369
Event: time 1546965355.500514, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.500514, -------------- SYN_REPORT ------------
Event: time 1546965355.520208, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.520208, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.520208, -------------- SYN_REPORT ------------
Event: time 1546965355.527078, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1370
Event: time 1546965355.527078, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 84
Event: time 1546965355.527078, type 3 (EV_ABS), code 50 (ABS_MT_WIDTH_MAJOR), value 84
Event: time 1546965355.527078, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.527078, -------------- SYN_REPORT ------------
Event: time 1546965355.548114, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.548114, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.548114, -------------- SYN_REPORT ------------
Event: time 1546965355.553311, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1371
Event: time 1546965355.553311, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1546965355.553311, -------------- SYN_REPORT ------------
Event: time 1546965355.572991, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value -1
Event: time 1546965355.572991, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1546965355.572991, -------------- SYN_REPORT ------------
```

(When I'm running evtest, I long-pressed the tablet with one finger.)
Comment 3 Ruben Suarez Alvarez 2019-01-08 16:50:12 UTC
Sorry...  comment on wrong bug report.  Please ignore.
Comment 4 Hans de Goede 2021-12-07 17:32:18 UTC
Good news, I've written a patch to properly report the stylus/pen events as stylus events and submitted this upstream, see:
https://lore.kernel.org/linux-input/20211207100754.31155-1-hdegoede@redhat.com/T/#t