You are not logged in.

#1 2018-10-01 20:27:41

Togop
Member
Registered: 2018-10-01
Posts: 8

Touchscreen (Intel IPTS) disappears after wakeup

EDIT: I marked this as solved prematurely

I have Surface Book, and am running on it kernel 4.14 with patches from here (though the problem persists on newer kernels as well). When I resume from suspend, sometimes (but not always) I lose the touchscreen altogether. It disappears from

xinput --list

and nothing I do (namely, re-scanning devices and restarting modules) seems to bring it back. It's still listed in /sys/bus/pci/devices, but isn't recognized as an input device.

The issue occurs with hibernate as well, but less often.

Removing the touchscreen modules (imtel_ipts, mei_me and mei) before suspend and reloading them after doesn't solve the issue.

So I tried to remove the modules, then the pci device altogether before suspend, and rescan the device and the modules after:

case $1/$2 in
  pre/*)
    rmmod intel_ipts
    rmmod mei_me
    rmmod mei
    sleep 0.01
    echo 1 > /sys/bus/pci/devices/0000\:00\:16.0/remove
    echo 1 > /sys/bus/pci/devices/0000\:00\:16.4/remove
    sleep 0.01
    ;;
  post/*)
    echo 1 > /sys/bus/pci/rescan
    modprobe intel_ipts
    modprobe mei_me
    modprobe mei
    ;;
esac

0000:00:16.0 and 0000:00:16.4 are the two pci devices listed on sysfs for the touchscreen driver.

I was actually able to run the pre and post parts without suspending in between 100 times without issue. However, for some reason if I suspend it still seems to affect the removed hardware somehow.

I feel like time also matters, i.e. problems happen less often if I suspend for a short time, but I can't say that for certain.

Last edited by Togop (2018-10-02 08:10:48)

Offline

#2 2018-10-02 13:39:45

Togop
Member
Registered: 2018-10-01
Posts: 8

Re: Touchscreen (Intel IPTS) disappears after wakeup

I was able to confirm that time matters for some reason.
Namely, a 1000 iterations of this caused no problem:

#unload ipts modules
rmmod intel_ipts
rmmod mei_me
rmmod mei

sleep 0.1

echo 1 > "/sys/bus/pci/devices/0000:00:16.0/remove"
echo 1 > "/sys/bus/pci/devices/0000:00:16.4/remove"

sleep 0.1

echo 1 > "/sys/bus/pci/rescan"

sleep 0.1

#load ipts modules
modprobe intel_ipts
modprobe mei_me
modprobe mei

On the other hand, only 100 (likely much fewer would to too) iterations of a similar script with "sleep 60" between the remove and rescan broke my touch. And an overnight suspend breaks it pretty much every time. Any idea what could cause that?

Offline

Board footer

Powered by FluxBB