Bug 205817 - Dynabook (Toshiba) X30/X40 - Accupoint (pointing stick) & touchpad buttons don't work
Summary: Dynabook (Toshiba) X30/X40 - Accupoint (pointing stick) & touchpad buttons do...
Status: NEW
Alias: None
Product: Drivers
Classification: Unclassified
Component: Input Devices (show other bugs)
Hardware: All Linux
: P1 normal
Assignee: drivers_input-devices
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-12-09 15:55 UTC by Sam Morris
Modified: 2024-03-28 23:45 UTC (History)
4 users (show)

See Also:
Kernel Version: 5.6.7
Subsystem:
Regression: No
Bisected commit-id:


Attachments
/proc/bus/input/devices (4.44 KB, text/plain)
2019-12-09 15:56 UTC, Sam Morris
Details
lsinput (3.40 KB, text/plain)
2019-12-09 15:56 UTC, Sam Morris
Details
libinput recording (46.31 KB, application/x-yaml)
2019-12-17 13:50 UTC, Sam Morris
Details
kernel logs of i2c_designware (83.96 KB, text/plain)
2020-06-15 16:27 UTC, GRbit
Details

Description Sam Morris 2019-12-09 15:55:35 UTC
Dynabook (né Toshiba) laptops have a touchpad and a pointing device known as an AccuPoint (like a ThinkPad TrackPoint).

The touchpad can be used to move the pointer, and depressing the touchpad itself  generates a button event (via a physical switch that can be felt once sufficient force is used), but the two separate buttons above the touchpad do not generate any events when pressed.

Pointer motion events are not generated when the AccuPoint is used. In addition, attempting to use the AccuPoint causes the touchpad to stop working for a period of time.

To be more specific, attempting to move the AccuPoint puts the touchpad into a state where it no longer generates motion events. While it is in this state, *something* (I have no idea what) generates a rapid series of button click events. However, these events do *not* show up in the output of 'libinput debug-events. I don't know where they come from!

This state appears to last for a period of time proportional to how 'severe' the user's interaction with the AccuPoint was. Brushing against it while typing causes the state to last but a few seconds. Deliberately trying to use it to move the pointer makes it last a lot longer.

Booting with i8042.debug and then prodding the AccuPoint causes many of the following kernel messages to be produced:

i8042: [7545725] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545725] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545726] 84 <- i8042 (interrupt, 1, 12)
i8042: [7545727] 08 <- i8042 (interrupt, 1, 12)
i8042: [7545727] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545727] c4 <- i8042 (interrupt, 1, 12)
i8042: [7545727] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545728] 01 <- i8042 (interrupt, 1, 12)
i8042: [7545729] 80 <- i8042 (interrupt, 1, 12)
i8042: [7545730] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545730] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545730] c0 <- i8042 (interrupt, 1, 12)
i8042: [7545730] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545731] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545733] 84 <- i8042 (interrupt, 1, 12)
i8042: [7545733] 08 <- i8042 (interrupt, 1, 12)
i8042: [7545733] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545733] c4 <- i8042 (interrupt, 1, 12)
i8042: [7545734] 01 <- i8042 (interrupt, 1, 12)
i8042: [7545734] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545736] 80 <- i8042 (interrupt, 1, 12)
i8042: [7545736] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545736] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545736] c0 <- i8042 (interrupt, 1, 12)
i8042: [7545737] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545737] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545739] 84 <- i8042 (interrupt, 1, 12)
i8042: [7545739] 08 <- i8042 (interrupt, 1, 12)
i8042: [7545739] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545740] c4 <- i8042 (interrupt, 1, 12)
i8042: [7545740] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545740] 01 <- i8042 (interrupt, 1, 12)
i8042: [7545742] 80 <- i8042 (interrupt, 1, 12)
i8042: [7545742] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545742] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545743] c0 <- i8042 (interrupt, 1, 12)
i8042: [7545743] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545743] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545745] 84 <- i8042 (interrupt, 1, 12)
i8042: [7545745] 08 <- i8042 (interrupt, 1, 12)
i8042: [7545745] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545746] c4 <- i8042 (interrupt, 1, 12)
i8042: [7545746] 01 <- i8042 (interrupt, 1, 12)
i8042: [7545746] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545748] 80 <- i8042 (interrupt, 1, 12)
i8042: [7545748] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545748] 00 <- i8042 (interrupt, 1, 12)
i8042: [7545749] c0 <- i8042 (interrupt, 1, 12)

For comparison, normal operation of the touchpad causes different numbers to be logged:

i8042: [7585801] a9 <- i8042 (interrupt, 1, 12)
i8042: [7585801] 48 <- i8042 (interrupt, 1, 12)
i8042: [7585801] c0 <- i8042 (interrupt, 1, 12)
i8042: [7585802] 28 <- i8042 (interrupt, 1, 12)
i8042: [7585802] 09 <- i8042 (interrupt, 1, 12)
i8042: [7585803] 90 <- i8042 (interrupt, 1, 12)
i8042: [7585804] a9 <- i8042 (interrupt, 1, 12)
i8042: [7585804] 49 <- i8042 (interrupt, 1, 12)
i8042: [7585804] c0 <- i8042 (interrupt, 1, 12)
i8042: [7585805] 24 <- i8042 (interrupt, 1, 12)
i8042: [7585805] 0e <- i8042 (interrupt, 1, 12)
i8042: [7585806] 90 <- i8042 (interrupt, 1, 12)
i8042: [7585807] a9 <- i8042 (interrupt, 1, 12)
i8042: [7585807] 49 <- i8042 (interrupt, 1, 12)
i8042: [7585807] c0 <- i8042 (interrupt, 1, 12)
i8042: [7585808] 20 <- i8042 (interrupt, 1, 12)
i8042: [7585808] 0e <- i8042 (interrupt, 1, 12)
i8042: [7585809] ** <- i8042 (interrupt, 0, 1)
i8042: [7585809] 90 <- i8042 (interrupt, 1, 12)
i8042: [7585810] a9 <- i8042 (interrupt, 1, 12)
i8042: [7585810] 49 <- i8042 (interrupt, 1, 12)
i8042: [7585810] c0 <- i8042 (interrupt, 1, 12)
i8042: [7585811] 1c <- i8042 (interrupt, 1, 12)
i8042: [7585811] 0e <- i8042 (interrupt, 1, 12)
i8042: [7585813] 90 <- i8042 (interrupt, 1, 12)
i8042: [7585813] a9 <- i8042 (interrupt, 1, 12)
i8042: [7585813] 49 <- i8042 (interrupt, 1, 12)
i8042: [7585814] c0 <- i8042 (interrupt, 1, 12)

Additionally, I have noticed that after using the touchpad, the first lot of messages (same as if I try to use the AccuPoint) are generated for a few seconds.

[Previously filed at https://bugzilla.redhat.com/show_bug.cgi?id=1572625 and https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=927211]
Comment 1 Sam Morris 2019-12-09 15:56:14 UTC
Created attachment 286239 [details]
/proc/bus/input/devices
Comment 2 Sam Morris 2019-12-09 15:56:44 UTC
Created attachment 286241 [details]
lsinput
Comment 3 Sam Morris 2019-12-09 16:10:22 UTC
I have figured out where the flood of unwanted button press events comes from.

I: Bus=0011 Vendor=0002 Product=0007 Version=01a1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input5
U: Uniq=
H: Handlers=mouse2 event8 
B: PROP=5
B: EV=b
B: KEY=e520 10000 0 0 0 0
B: ABS=660800011000003

While the touchpad is working normally, motion and button events are produced by event8. After touching the AccuPoint, event8 remains silent, but swiping the touchpad produces the following via /dev/input/mouse2:

00000110  00 08 00 00 09 00 00 08  00 00 09 00 00 08 00 00  |................|
00000120  09 00 00 08 00 00 09 00  00 08 00 00 09 00 00 08  |................|
00000130  00 00 09 00 00 08 00 00  09 00 00 08 00 00 09 00  |................|
00000140  00 08 00 00 09 00 00 08  00 00 09 00 00 08 00 00  |................|
00000150  09 00 00 08 00 00 09 00  00 08 00 00 09 00 00 08  |................|
00000160  00 00 09 00 00 08 00 00  09 00 00 08 00 00 09 00  |................|
00000170  00 08 00 00 09 00 00 08  00 00 09 00 00 08 00 00  |................|
00000180  09 00 00 08 00 00 09 00  00 08 00 00 09 00 00 08  |................|
00000190  00 00 09 00 00 08 00 00  09 00 00 08 00 00 09 00  |................|
000001a0  00 08 00 00 09 00 00 08  00 00 09 00 00 08 00 00  |................|
000001b0  09 00 00 08 00 00 09 00  00 08 00 00 09 00 00 08  |................|
000001c0  00 00 09 00 00 08 00 00  09 00 00 08 00 00 09 00  |................|
000001d0  00 08 00 00 09 00 00 08  00 00 09 00 00 08 00 00  |................|
000001e0  09 00 00 08 00 00 09 00  00 08 00 00 09 00 00 08  |................|
000001f0  00 00 09 00 00 08 00 00  09 00 00 08 00 00 09 00  |................|
00000200  00 08 00 00 09 00 00 08  00 00 09 00 00 08 00 00  |................|
00000210  09 00 00 08 00 00 09 00  00 08 00 00 09 00 00 08  |................|
00000220  00 00 09 00 00 08 00 00  09 00 00 08 00 00 09 00  |................|
Comment 4 Sam Morris 2019-12-17 13:50:16 UTC
Created attachment 286335 [details]
libinput recording

Generated by running 'libinput record /dev/input/event8', then giving the AccuPoint a good poke, then swiping around on the trackpad until the unwanted button events stop occurring.
Comment 5 Sam Morris 2019-12-17 13:54:26 UTC
(In reply to Sam Morris from comment #3)
> After touching the AccuPoint, event8 remains silent

Ignore that, I am wrong. event8 also includes the bad button click events.

Looking at the output of 'libinput record' you can see that there's a constant stream of events with BTN_TOUCH 0 in between the events that correspond to my swipe on the touchpad.
Comment 6 Sam Morris 2020-05-17 13:10:11 UTC
Booting with psmouse.synaptics_intertouch=1 prevents the garbage events from being produced whenever the AccuPoint is touched.

The AccuPoint still doesn't actually move the mouse cursor, nor do the physical buttons above the touchpad generate events.
Comment 7 Sam Morris 2020-05-24 20:19:44 UTC
The trackpad is attached to rmi4-00.fn12

The physical buttons are attached to rmi4-00.fn30 -- I can see the numbers in /proc/interrupts increase when they are pressed -- but there's no Linux device listening I guess.
Comment 8 GRbit 2020-06-06 21:55:50 UTC
Accupoint not working
Comment 9 GRbit 2020-06-06 22:13:03 UTC
(In reply to GRbit from comment #8)
> Accupoint not working

Sorry for previous comment, it was a mystype don't know how to delete it now)

Testing accupoint on toshiba portege X30-F it don't work either.

xinput sees it as two devices with same vendor id and device id

⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ Siliconworks SiW HID Touch Controller   	id=11	[slave  pointer  (2)]
⎜   ↳ TOSB1004:00 06CB:CDDC Mouse             	id=12	[slave  pointer  (2)]
⎜   ↳ TOSB1004:00 06CB:CDDC Touchpad          	id=13	[slave  pointer  (2)]


Which is correct I suppose, but anyway only touchpad is working. I've tried acpi_listen, evemu-record and there is nothing when I press trackpoint buttons or trying to move cursor with trackpoint. 

Also, lsusb doesn't contain any device with this vendor id and device id:

$ lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 5348:1201  
Bus 001 Device 004: ID 06cb:00d4 Synaptics, Inc. 
Bus 001 Device 003: ID 04f2:b61c Chicony Electronics Co., Ltd 
Bus 001 Device 002: ID 2ce3:9563  
Bus 001 Device 006: ID 8087:0aaa Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

But there is some 06cb:00d4 device with same vendor. It can be this touchpad+accupoint or maybe fingerprint reader, can't say definitely
Comment 10 GRbit 2020-06-15 16:26:57 UTC
Maybe it will be helpfull.

Switching debug mode in kernel shows lots of logs any time I've touch the accupoint or click mouse keys. They do not work at all, but for every move I've got about 30 or 40 duplicate logs looking like:

Jun 15 19:19:22 mx-x30-f kernel: [ 4483.973653][T28174] i2c_designware i2c_designware.0: i2c_dw_xfer: msgs: 1
Jun 15 19:19:22 mx-x30-f kernel: [ 4483.973768][    C6] i2c_designware i2c_designware.0: enabled=0x1 stat=0x10
Jun 15 19:19:22 mx-x30-f kernel: [ 4483.973845][    C6] i2c_designware i2c_designware.0: enabled=0x1 stat=0x504
Jun 15 19:19:22 mx-x30-f kernel: [ 4483.973866][    C6] i2c_designware i2c_designware.0: enabled=0x1 stat=0x504
Jun 15 19:19:22 mx-x30-f kernel: [ 4483.973886][    C6] i2c_designware i2c_designware.0: enabled=0x1 stat=0x504
Jun 15 19:19:22 mx-x30-f kernel: [ 4483.973920][    C6] i2c_designware i2c_designware.0: enabled=0x1 stat=0x504
Jun 15 19:19:22 mx-x30-f kernel: [ 4483.973984][    C6] i2c_designware i2c_designware.0: enabled=0x1 stat=0x504
Jun 15 19:19:22 mx-x30-f kernel: [ 4483.974006][    C6] i2c_designware i2c_designware.0: enabled=0x1 stat=0x504
Jun 15 19:19:22 mx-x30-f kernel: [ 4483.974051][    C6] i2c_designware i2c_designware.0: enabled=0x1 stat=0x504
Jun 15 19:19:22 mx-x30-f kernel: [ 4483.974087][    C6] i2c_designware i2c_designware.0: enabled=0x1 stat=0x504
...



Also if I move mouse with touchpad there are also 30-40 lines of duplicating logs. That's actually loads my CPU and SSD.

As I can understand, touchpad working with i2c_hid and i2c_designware_platform modules.

I'll attach some logs on loading/unloading this module
Comment 11 GRbit 2020-06-15 16:27:46 UTC
Created attachment 289673 [details]
kernel logs of i2c_designware
Comment 12 GRbit 2020-06-19 11:02:01 UTC
I've found out that system writes all accupoint events to /dev/hidraw0

If I try to move mouse with accupoint, I'll see messages like this:


$ cat /dev/hidraw0 | xxd
...
00009130: 1800 0001 1800 0001 1800 0001 1800 0001  ................
00009140: 1800 0001 1800 0001 1800 0001 1800 0001  ................

Here 1800 is two byte sequence that marks that next two bytes will be about pointer relative position. First byte determines horizontal position, second byte determines vertical position.

It's seems not very complicated for me to write a code to process this information, but it seems ver complicated for me to put this in correct place in kernel and to make it work correctly. Maybe I find time to dig docs for this)
Comment 13 GRbit 2020-06-19 11:03:20 UTC
By the way, clicks on mouse buttons above the touchpad don't generate any data. Maybe they recognized as some other device or they wating for some secret byte sequence to be enabled.
Comment 14 GRbit 2020-06-20 12:16:36 UTC
I was mistaken, clicks generate events too. So basically device work, but no driver interprets this events.



Well, if someone want to make trackpoint (accupoint) work, I've made a simple go program to read /dev/hidraw0 and move your mouse pointer.


https://github.com/GRbit/acupoint-portege-x30


Since it reads /dev/hidraw0 you need to run it with root privileges.
Comment 15 Sam Morris 2020-06-20 15:45:42 UTC
(In reply to GRbit from comment #12)
> I've found out that system writes all accupoint events to /dev/hidraw0

Interesting, I don't see that. But I don't have a hidraw device hooked up to the accupoint at all (there are two attached to the "SiS HID Touch Controller" but they don't produce any events when I prod my screen.

Which kernel version are you using & are you booting with the psmouse.synaptics_intertouch=1 parameter?

While my kernel has I2C_DESIGNWARE_* builtin, I don't appear to have any designware devices. Perhaps this is a difference between the X30-D/X40-D and your X30-F.
Comment 16 GRbit 2020-06-20 16:45:53 UTC
Currently I'm using 5.7.2 with no special boot parameters.

Do you have any hidraw devices? I've got three of them. Just try to `cat /dev/hidraw#` and touch trackpoint.

In my kernel I've got I2C_DEIGNWARE as modules and I can load and unload it. If I unload i2c_designware_platform - /dev/hidraw0 device will disappear. Maybe you can try to compile your own kernel with i2c_* as modules?

Also, what xinput shows on your system?
Comment 17 GRbit 2020-06-22 16:15:45 UTC
I've received some help on irc://irc.oftc.net/kernelnewbies from user named <Jookia> 

He (or she) helped me to determine that i2c_designware_platfrom module brings device data into userspace and after that i2c_hid module analyze it and make touchpad working (also i2c_hid participate in creating /dev/hidraw0 file).

Presumably somewhere in hid-rmi.c actual data reading is going on. I'll try to examine this file and try to add trackpoint functionality when I'll got a spare time for it (maybe this weekend). If someone want to help me, please contact me.
Comment 18 Mario 2020-10-04 11:24:12 UTC
I've the same problem on a Toshiba Tecra A50-EC

Probabily the hardware is the same.

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech MX Master 2S                     id=9    [slave  pointer  (2)]
⎜   ↳ TOSB1004:00 06CB:CD4C Mouse               id=11   [slave  pointer  (2)]
⎜   ↳ TOSB1004:00 06CB:CD4C Touchpad            id=12   [slave  pointer  (2)]
⎜   ↳ PS/2 Generic Mouse                        id=14   [slave  pointer  (2)]
Comment 19 Matt Keenan 2022-06-06 20:44:55 UTC
Just received my Dynabook Portege X40-J and I'm also experiencing similar issues.

- Touchpad working fine
- Physical buttons above touchpad not working
- Trackpointer not working.

Running "cat /dev/hidraw0 | xxd" is showing output for both physical buttons and trackpointer.

"xinput" shows the following:

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ ELAN Touchscreen                          id=9    [slave  pointer  (2)]
⎜   ↳ 3830303142534F54:00 06CB:CD4C Mouse       id=12   [slave  pointer  (2)]
⎜   ↳ 3830303142534F54:00 06CB:CD4C Touchpad    id=13   [slave  pointer  (2)]

/proc/bus/input/devices shows:

- CDDC Mouse:
  Handlers=mouse0 event11
- CDDC Touchpad:
  Handlers=mouse1 event12
- ELAN Touchscreen:
  Handlers=mouse2 event7

And "libinput debug-events" is showing event7 lines when interacting with tourhscreen, and event12 lines when interacting with Touchpad, however no event11 lines are showing when interacting with physical mousebuttons.

So wondering if there's been any progress on this, I've tried kernels up to 5.17 with no joy.
Comment 20 Matt Keenan 2022-06-09 09:59:47 UTC
I can confirm GRBit's go app (https://github.com/GRbit/acupoint-portege-x30) works nicely. Both trackpoint and physical mouse buttons now work if you run this program.

For those running Linux Mint 20.3 (Una) (Ubuntu) here's what I did to get it working:

- Install required GCC/Golang and robotgo (https://github.com/go-vgo/robotgo) requirements:

  $ sudo apt-get install glang-go gccgo-go gcc libc6-dev \
     libx11-dev xorg-dev libxtst-dev libpng++-dev \
     xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev \
     libxkbcommon-dev xsel xcli

- Install robotgo (https://github.com/go-vgo/robotgo)

  $ sudo go get github.com/go-vgo/robotgo

- Grab accpoint app and extract
  $ wget https://github.com/GRbit/acupoint-portege-x30/archive/refs/heads/master.zip
  $ unzip master.zip

- Run go program
  $ cd acupoint-portege-x30
  $ go run main.go /dev/hidraw0

Now trackpoint and touchpad physical buttons function as expected !
Comment 21 Sam Morris 2022-06-09 16:18:12 UTC
Hm, I still (5.17.8 from Fedora 36) don't have any hidraw devices associated with the pointing stick (on my X.

I2C_DESIGNWARE_* are compiled in. CONFIG_I2C_HID_* are modules; after loading i2c-hid manually it doesn't attach to any devices or log anything.

Can you give me the output of 'readlink /sys/class/hidraw/hidraw*'?
Comment 22 Matt Keenan 2022-06-09 20:12:49 UTC
Here you go:

# readlink /sys/class/hidraw/hidraw*
../../devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-1/i2c-3830303142534F54:00/0018:06CB:CDDC.0001/hidraw/hidraw0
../../devices/pci0000:00/0000:00:14.0/usb3/3-5/3-5:1.0/0003:04F3:2884.0002/hidraw/hidraw1


You can see 06CB:CDDC is associated with hidraw0
Comment 23 Sam Morris 2022-06-09 23:29:12 UTC
Weird. I've got:

$ readlink -e /sys/class/hidraw/*
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.0/0003:1FD2:6013.0001/hidraw/hidraw0
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.1/0003:1FD2:6013.0002/hidraw/hidraw1

Both are attached to the 'SiS HID Touch Controller' (touch screen).
Comment 24 Sam Morris 2022-06-10 09:39:06 UTC
Maybe my missing devices are related to:

rmi4_smbus 6-002c: registering SMbus-connected sensor
rmi4_f34 rmi4-00.fn34: rmi_f34v7_probe: Unrecognized bootloader version: 13 (^M) 16 (^P)
rmi4_f34: probe of rmi4-00.fn34 failed with error -22
rmi4_f01 rmi4-00.fn01: found RMI device, manufacturer: Synaptics, product: TM3322-001, fw id: 2553520
input: Synaptics TM3322-001 as /devices/pci0000:00/0000:00:1f.4/i2c-6/6-002c/rmi4-00/input/input22
rmi4_f30 rmi4-00.fn30: rmi_f30_attention: Failed to read F30 data registers: -6
Comment 25 Manuel Fombuena 2024-02-13 12:07:01 UTC
I recently troubleshoot this issue on my dynabook Portege X30L-K-108 which has a Synaptics touchpad and tracking point with buttons identified as 06CB:CDDC

I submitted a patch that should eventually make it to the upstream kernel: https://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git/commit/?h=for-6.8/upstream-fixes&id=1741a8269e1c51fa08d4bfdf34667387a6eb10ec

I will leave a summary what I did for those who may have a similar device that needs the quirk to get the tracking point and buttons working. Note that previous generations of similar devices are not connected on the same bus and that makes a difference since the quirk is for the hid-multitouch driver.

libinput list-devices

[...]
Device:           343030314B424E44:00 06CB:CDDC Mouse
Kernel:           /dev/input/event4
Group:            9
Seat:             seat0, default
Capabilities:     pointer
[...]
Device:           343030314B424E44:00 06CB:CDDC Touchpad
Kernel:           /dev/input/event5
Group:            9
Seat:             seat0, default
Size:             95x53mm
Capabilities:     pointer gesture
[...]

udevadm info -a /dev/input/event4

  looking at device '/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-343030314B424E44:00/0018:06CB:CDDC.0001/input/input7/event4':
    KERNEL=="event4"
    SUBSYSTEM=="input"
    DRIVER==""
[...]

  looking at parent device '/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-343030314B424E44:00/0018:06CB:CDDC.0001/input/input7':
    KERNELS=="input7"
    SUBSYSTEMS=="input"
    DRIVERS==""
[...]

  looking at parent device '/devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-343030314B424E44:00/0018:06CB:CDDC.0001':
    KERNELS=="0018:06CB:CDDC.0001"
    SUBSYSTEMS=="hid"
    DRIVERS=="hid-multitouch"
[...]

The last line confirms that the driver used for '06CB:CDDC Mouse' is hid-multitouch. The ID has to be added to drivers/hid/hid-multitouch.c to apply the relevant quirk: https://github.com/torvalds/linux/blob/c664e16bb1ba1c8cf1d7ecf3df5fd83bbb8ac15a/drivers/hid/hid-multitouch.c#L2149-L2160

Compiling your own kernel to test the changes and submitting a patch are entirely different topics. Just one comment, the patch has to be sent to the HID maintainers so use their repo (git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git).
Comment 26 Manuel Fombuena 2024-03-28 23:45:33 UTC
The following stable and long term kernels have the relevant quirk enabled for 06CB:CDDC on the hid-multitouch driver: 6.8, 6.7.11, 6.6.23, 6.1.83, 5.15.153, 5.10.214 and 5.4.273.

Note You need to log in before you can comment on or make changes to this bug.