SYNA3602 touchpad not working at all

Resuming topic from:

This touchpad is identified on several cheap Chinese made notebooks. And some not so cheap, such as my Vaio FE14.

The touchpad is sometimes detected at boot, sometimes not. A manual fix can be achieved by typing at the terminal:

sudo rmmod i2c_hid
sudo modprobe i2c_hid

That immediately fixes the touchpad, including multi-touch support. However, the left and right physical buttons do not work.

Need a solution to automate the commands above during boot time (without the need to type the sudo password).

And, most importantly, need a solution for the physical buttons.

I have tried kernels 5.4 LTS, 5.6, 5.7 and the new 5.8.0 stable, always the same problem. On kernel 5.3.18 though, it was working.

Philm posted a patch to AUR to this problem in 2018 (back on kernel 4.xx) but the file has since been pulled from AUR. It only addressed the touchpad though, not the physical buttons.

Thanks a lot any help here.

Also attaching some text file outputs from dmesg, evtest and libinput. Includes outputs from both Manjaro and PoliLinux, an OEM distribution (apparently based on Mint) than shipped with this notebook with everything working using kernel 5.7.11. Other than this distribution, I could not get this touchpad and physical buttons to work out of the box on any other distribution running kernel 5.4 or newer.

https://1drv.ms/u/s!AjUxkEYRJlCvnMsNeQdG08UsJGnWxA?e=co8qZp

Other references I have found around. Many insights but no clear solution (at least not for my skill level, which is pretty basic)

https://bugzilla.kernel.org/show_bug.cgi?id=199821#c53

https://bugzilla.kernel.org/show_bug.cgi?id=198627#c4

And

and a particularly interesting one from Hans de Goede at Fedora, 2017:

https://patchwork.kernel.org/patch/10046575/

It seems that this problem was sorted out in the past but came back to haunt laptop users from kernel 5.4 onwards.

Is there a reason you need to use a kernel newer than 5.4+ ?
4.19 is an LTS and supported or a while.

Also … if you want to try out this service you can do…

curl -O https://gitlab.manjaro.org/packages/community/mhwd-i2c-syna3602/-/raw/master/syna3602-driver-workaround.service
sudo mv syna3602-driver-workaround.service /usr/lib/systemd/system/
systemctl enable syna3602-driver-workaround --now

Hi. Thanks for jumping in. I would happily move back to 5.3.18, but I don’t know how to install it. Manjaro’s GUI for kernel installation moves straight from 4.19 to 5.4. I would prefer not going all the way back to 4.19.

Well its the only thing avilable … all other in between are EOL.
See www.kernel.org

But give the service a try … it should do part of what you are asking.

Otherwise you need the kernel/driver patched/fixed/updated … which may or may not happen.
My huawei lappy has almost the same issue … except its failed touchpad sometimes after suspend if I dont have the power chord plugged … only option is rmmod/modprobe i2c_hid … and even that fails sometimes.

I’ll try the script just now, thanks. I did try something very similar recently and did not work. This package as I recall was built by Philm himself and worked for his notebook, but seemed to do nothing on mine. Let me go ahead, I’ll report back.

Just tried the service, running the three lines, then rebooting… nothing happens. No touchpad at boot. Only manually running rmmod/modprobe fixes the touchpad. And no physical buttons, just never…

The larger issue wont be fixed until it is by something like kernel dev.
The service should mostly just do the rmmod/modprobe thing.

But you can check if/how it works with

systemctl status syna3602-driver-workaround

Hi! The driver workaround has loaded but it doesn’t work. But rmmod / modprobe on the terminal after login does work. Weird…

I wonder if I could create a bash script that would run rmmod / modprobe at the login screen. Where should I place that script so that it runs at login? I’ve seen numerous possibilities but none of them seemed to work.

Another thing is that the touchpad configuration is always lost after rmmod. Would you know if there is a command line that I can add to a shell script that would set the two basic configuration options below?

  • natural/inverted scrolling
  • pointer speed

Thanks a lot.

Can you check something for me?

ls /sys/bus/i2c/devices/ | grep i2c

$ ls /sys/bus/i2c/devices/ | grep i2c
i2c-0
i2c-1
i2c-10
i2c-2
i2c-3
i2c-4
i2c-5
i2c-6
i2c-7
i2c-8
i2c-9
i2c-SYNA3602:00

Mk. It does exist.

Anywho … lets change up the service … please edit /usr/lib/systemd/system/syna3602-driver-workaround.service

[Unit]
Description=Restart Touchpad
After=basic.target suspend.target hibernate.target

[Service]
Type=oneshot
Environment=DISPLAY=:0
ExecStart=/usr/bin/bash -c '\
  /usr/bin/echo "on" > /sys/bus/i2c/devices/i2c-SYNA3602\:00/power/control; \
  /usr/bin/rmmod i2c-hid; \
  /usr/bin/modprobe i2c-hid'

[Install]
WantedBy=basic.target suspend.target hibernate.target

Then, you know, reload/reboot, let me know.

Thanks. I’ll try that.
As an additional info, usually when I reboot, the touchpad works if I had already manually rmmod/modprobe at the previous session. If however I turn it off and let some minutes pass, then when I restart the touchpad will be dead… It is as if there is some kind of short memory effect to it.

nope…didn’t work. Turned off. Waited a few moments for “memory effect” to cool off. Turned on. Touchpad dead… worked after manual rmmod/modprobe. Very puzzlying

Hi. Would you know if there is a command to set touchpad inverted/natural scrolling and pointer speed? I am about to give up fixing this touchpad automatically and will just run the commands on a script after each login…

Thanks a lot for your help!

I just realized this error message when running

dmesg | grep -i syna

´´´´
[ 3.817720] systemd[1]: /usr/lib/systemd/system/syna3602-driver-workaround.service:11: Ignoring unknown escape sequences: " /usr/bin/echo “on” > /sys/bus/i2c/devices/i2c-SYNA3602:00/p
ower/control; /usr/bin/rmmod i2c-hid; /usr/bin/modprobe i2c-hid"
[ 4.890873] i2c_hid i2c-SYNA3602:00: i2c-SYNA3602:00 supply vdd not found, using dummy regulator
[ 4.890883] i2c_hid i2c-SYNA3602:00: i2c-SYNA3602:00 supply vddl not found, using dummy regulator
[ 5.944984] i2c_hid i2c-SYNA3602:00: i2c-SYNA3602:00 supply vdd not found, using dummy regulator
[ 5.945005] i2c_hid i2c-SYNA3602:00: i2c-SYNA3602:00 supply vddl not found, using dummy regulator
[ 6.075098] hid-generic 0018:0911:5288.0006: hidraw2: I2C HID v1.00 Device [SYNA3602:00 0911:5288] on i2c-SYNA3602:00
[ 46.604412] i2c_hid i2c-SYNA3602:00: i2c-SYNA3602:00 supply vdd not found, using dummy regulator
[ 46.604434] i2c_hid i2c-SYNA3602:00: i2c-SYNA3602:00 supply vddl not found, using dummy regulator
[ 46.728548] input: SYNA3602:00 0911:5288 Mouse as /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-SYNA3602:00/0018:0911:5288.0007/input/input30
[ 46.728712] input: SYNA3602:00 0911:5288 Touchpad as /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-SYNA3602:00/0018:0911:5288.0007/input/input31
[ 46.728803] hid-generic 0018:0911:5288.0007: input,hidraw2: I2C HID v1.00 Mouse [SYNA3602:00 0911:5288] on i2c-SYNA3602:00
[ 46.866113] input: SYNA3602:00 0911:5288 Mouse as /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-SYNA3602:00/0018:0911:5288.0007/input/input32
[ 46.866562] input: SYNA3602:00 0911:5288 Touchpad as /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-SYNA3602:00/0018:0911:5288.0007/input/input33
[ 46.866844] hid-multitouch 0018:0911:5288.0007: input,hidraw2: I2C HID v1.00 Mouse [SYNA3602:00 0911:5288] on i2c-SYNA3602:00
´´´´

Could “Ignoring unknown escape sequences:” be some kind of sintax error, maybe?

This looks like it could indicate an incorrect copy … notice the quotes around on … they do not match what we normally use "

But also, you could get rid of that whole echo line as it seems unneeded and strip the exec down to just

/usr/bin/bash -c '/usr/bin/rmmod i2c-hid && /usr/bin/modprobe i2c-hid'

So now syna3602-driver-workaround.service looks like this:

[Unit]
Description=Restart Touchpad
After=basic.target suspend.target hibernate.target

[Service]
Type=oneshot
Environment=DISPLAY=:0
ExecStart=/usr/bin/bash -c '/usr/bin/rmmod i2c_hid && /usr/bin/modprobe i2c_hid'

[Install]
WantedBy=basic.target suspend.target hibernate.target

(Note I replaced i2c-hid for i2c_hid – underscore vs dash)

Reboot. Nothing. Then I ran the following:

systemctl enable --now syna3602-driver-workaround.service 
Created symlink /etc/systemd/system/basic.target.wants/syna3602-driver-workaround.service → /usr/lib/systemd/system/syna3602-driver-workaround.service.
Created symlink /etc/systemd/system/suspend.target.wants/syna3602-driver-workaround.service → /usr/lib/systemd/system/syna3602-driver-workaround.service.
Created symlink /etc/systemd/system/hibernate.target.wants/syna3602-driver-workaround.service → /usr/lib/systemd/system/syna3602-driver-workaround.service.
Job for syna3602-driver-workaround.service failed because the control process exited with error code.
See "systemctl status syna3602-driver-workaround.service" and "journalctl -xe" for details.

systemctl status syna3602-driver-workaround.service               
● syna3602-driver-workaround.service - Restart Touchpad
     Loaded: loaded (/usr/lib/systemd/system/syna3602-driver-workaround.service; enabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Wed 2020-08-19 23:45:19 -03; 25s ago
    Process: 3677 ExecStart=/usr/bin/bash -c /usr/bin/rmmod i2c_hid && /usr/bin/modprobe i2c_hid (code=exited, status=1/FAILURE)
   Main PID: 3677 (code=exited, status=1/FAILURE)

Aug 19 23:45:19 VaioFE14 systemd[1]: Starting Restart Touchpad...
Aug 19 23:45:19 VaioFE14 bash[3678]: rmmod: ERROR: Module i2c_hid is not currently loaded
Aug 19 23:45:19 VaioFE14 systemd[1]: syna3602-driver-workaround.service: Main process exited, code=exited, status=1/FAILURE
Aug 19 23:45:19 VaioFE14 systemd[1]: syna3602-driver-workaround.service: Failed with result 'exit-code'.
Aug 19 23:45:19 VaioFE14 systemd[1]: Failed to start Restart Touchpad.

All fail… but manually doing rmmod/modprobe, works…