SYNA3602 touchpad not working at all

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…

huh.
Maybe its starting too fast? I guess we could get picky about the Wants and After lines … but you could also maybe put a sleep in there to pause for a few seconds:

/usr/bin/bash -c '/usr/bin/sleep 6 && /usr/bin/rmmod i2c_hid && /usr/bin/modprobe i2c_hid'

THAT WORKED!!!

Tried many reboots, making sure to rmmod before each one, and the touchpad came out alive right at the login screen.

THANKS A LOT!

As a side benefit, touchpad configuration seems to be remembered now. Interesting. Thanks a lot again!

By the way, just bought you a coffee! :coffee:

Cheers. Glad it works. Obviously, you can fiddle with the timer there and use something other than 6 seconds… find the sweet spot where it works but you arent waiting around for it.
Also … if it ever somehow does start too soon you can still run it again

systemctl start syna3602-driver-workaround

Of course since we know it works … you could fine-tune the service as well … maybe better After lines or similar, or config it to retry X times, etc.

Aw thanks :slight_smile:

Yes … on second though … maybe try implementing the Conflicts,After,WantedBy params from phils here:

(and it might work without needing the sleep)

Yes I’ll try shorter wait times. Now if only the physical buttons on the touchpad would work as well, that would make it fully functional.

I used to get it working out of the box on kernel 5.3. I have a hunch it is some kind of timing issue as well, as even on other kernels it sometimes work (like 1 in 100 boots).