This notebook uses a misidentified SYNA3602 ; which in actuality is likely a Hantick Touchpad.
Problem One – Non-Working TouchPad
The first problem is that the i2c_hid portion of the Linux kernel expects this device to throw an interrupt after being reset, which it doesn’t do.
So for example in Clear Linux there may be failure to reset touchpad error messages.
Apparently this was patched later, pushed upstream and yet somehow is still breaking after reboots.
So in order to get a touchpad that is working between reboots you need to build/install the following package (note here I’m using Manjaro, but the code is simple enough you can build your own script for in other distros fairly easily):
https://gitlab.manjaro.org/packages/community/mhwd-i2c-syna3602
This will usually get the touchpad to start working after a reboot (wait for the service to run before presuming it didn’t work).
To build and install under Manjoro:
pacman -S base-devel makepkg -si
and be sure to Reboot
Important Note:
If your touchpad(or even the touchscreen) wasn’t working before, this may not fix it.
That’s because the touchpad, and even the touchscreen can lock-up completely if they are improperly initialized by Linux. Something to do with voltage spike maybe? I’m not sure.
In this scenario the only solution I’ve found is to install Windows 10 and then install the proper driver pack, reboot and then install Linux (a real pain to be sure). However to minimize this pain you can use Rufus to install Windows 10 onto a USB drive and then boot it as a Live-USB, which can help avoid the whole re-installing Linux part.
After booting Windows 10 (with the proper driver pack installed) the touchpad and the touchscreen should resume working in Linux. You can actually repeat this as necessary until you get a working installation in which case I highly recommend getting a full system image backup.
Note: It’s a good idea to disable driver updates in Administrative Templates in Windows if you plan on doing this, otherwise Windows may override your good drivers with bad ones from Windows Update.
Problem Two – The Touchscreen Rotation Issues
First lets install the sensor proxy :
sudo pacman -S iio-sensor-proxy
Next lets install the build requirements for GuLinux’s ScreenRotator (https://github.com/GuLinux/ScreenRotator)
sudo pacman -S base-devel qt5-declarative qtcreator qt5-sensors cmake git clang
Next lets build it..
git clone https://github.com/GuLinux/ScreenRotator mkdir ScreenRotator/build cd ScreenRotator/build
but wait there is a problem…
The orientations used do not match the Goodix TouchScreen orientations matrix.
If we build and run as is we will have the screen oriented in the wrong direction as we turn it around. Specifically the following needs to be interchanged:
RightUp <==> TopUp LeftUp <==> TopDown
So lets be sure to update the /src/orientationsensor.cpp accordingly.
Specifically change this:
d->to_orientation = { { QOrientationReading::TopUp, TopUp }, { QOrientationReading::TopDown, TopDown }, { QOrientationReading::RightUp, RightUp }, { QOrientationReading::LeftUp, LeftUp }, };
to this:
d->to_orientation = { { QOrientationReading::TopUp, RightUp }, { QOrientationReading::TopDown, LeftUp }, { QOrientationReading::RightUp, TopUp }, { QOrientationReading::LeftUp, TopDown }, };
cmake .. make all sudo make install
Now you just need to run the Screen Rotator located at /usr/local/bin/screenrotator
Alternatively you can reboot as this should start up with Linux on the next boot.
And now both the touchpad and touchscreen should be usable, I hope this helped you as it took me almost 2 work days to get this to behave correctly.
Comments