linux-surface/root/lib/systemd/system-sleep/sleep
kitakar5525 7f139b7c4f sleep-script: IPTS: fix module unloading on newer kernels
On a recent version of kernels, "intel_ipts" module will be used by companion
driver "ipts_surface". So, unload the module first on unloading whole IPTS
modules and load the module last on loading whole IPTS modules.
Otherwise, unloading "intel_ipts" will fail.

Unloading the module will automatically unload "intel_ipts" module but
I did not remove the line for clarity and for kernels that don't have
the companion driver ("ipts_surface").

On my 5.3 kernel:
$ lsmod | grep -e "Used by" -e "ipts"
Module                  Size  Used by
ipts_surface           16384  0
intel_ipts             45056  1 ipts_surface
hid                   143360  6 i2c_hid,usbhid,hid_multitouch,hid_sensor_hub,intel_ipts,hid_generic
mei                   122880  5 mei_hdcp,intel_ipts,mei_me
i915                 2273280  18 intel_ipts

Tested on kernel 5.3.12 and 4.19.85 that use the "ipts_surface" companion driver with IPTS lines
uncommented on sleep script.
2019-12-03 06:09:10 +09:00

62 lines
1.8 KiB
Bash

#!/bin/bash
case $1 in
pre) # unload the modules before going to sleep
# Disable bluetooth if no device is connected
if ps cax | grep bluetoothd && ! bluetoothctl info; then
bluetoothctl power off
fi
# handle wifi issues
modprobe -r mwifiex_pcie;
modprobe -r mwifiex;
modprobe -r cfg80211;
## IPTS: see notes below
## > Remove IPTS from ME side
#modprobe -r ipts_surface
#modprobe -r intel_ipts
#modprobe -r mei_hdcp
#modprobe -r mei_me
#modprobe -r mei
## > Remove IPTS from i915 side
#for i in $(find /sys/kernel/debug/dri -name i915_intel_ipts_cleanup); do echo 1 > $i; done
;;
post) # re-load modules after resume
## IPTS: see notes below
## > Load IPTS from i915 side
#for i in $(find /sys/kernel/debug/dri -name i915_intel_ipts_init); do echo 1 > $i; done
## > Load IPTS from ME side
#modprobe mei
#modprobe mei_me
#modprobe mei_hdcp
#modprobe intel_ipts
#modprobe ipts_surface
# Restart bluetooth
if ps cax | grep bluetoothd; then
bluetoothctl power on
fi
# handle wifi issues: complete cycle
modprobe cfg80211;
modprobe mwifiex;
modprobe mwifiex_pcie;
echo 1 > /sys/bus/pci/rescan
if [ -x "$(command -v nmcli)" ] && [ "$(nmcli net)" = "enabled" ]; then
nmcli net off
nmcli net on
fi
;;
esac
# Notes:
# - For IPTS, see
# > https://github.com/jakeday/linux-surface/issues/544#issuecomment-519126757
# for an explanation/discussion. We do not unload/reload modules for now as
# the IPTS drivers should be able to resume/suspend without this. If you
# experience any issues on suspend/resume, please file an appropriate issue or
# join the discussion linked above so that we can fix it. As a temporary
# workaround, you may want to uncomment the IPTS-related lines above.