]> git.ipfire.org Git - thirdparty/linux.git/commit
HID: intel-ish-hid: ipc: Separate hibernate callbacks in dev_pm_ops
authorZhang Lixu <lixu.zhang@intel.com>
Fri, 17 Oct 2025 02:22:18 +0000 (10:22 +0800)
committerJiri Kosina <jkosina@suse.com>
Fri, 17 Oct 2025 15:47:54 +0000 (17:47 +0200)
commit5677aa6a08c1df8bc1ec71516fe1ced9b7cb545f
tree5221466f2a492df4714edaf4ac9002a50ab9bbd1
parent507561b00ac2481eaf5fd790801f2ca135f23ff0
HID: intel-ish-hid: ipc: Separate hibernate callbacks in dev_pm_ops

The same suspend and resume callbacks are used for both suspend-to-RAM/idle
and hibernation. These callbacks invoke pm_suspend_via_firmware() and
pm_resume_via_firmware(), respectively. In the .freeze() of hibernation,
pm_suspend_via_firmware() returns false, causing the driver to put ISH into
D0i3. However, during the .thaw(), pm_resume_via_firmware() returns true,
leading the driver to treat ISH as resuming from D3 instead of D0i3. The
asymmetric behavior between .freeze() and .thaw() during hibernation can
cause the client connection states on the firmware side and the driver side
to become inconsistent.

To address the inconsistent client connection states issue, separate
hibernate-related callbacks (freeze, thaw) in dev_pm_ops. Since ISH does
not need to save any firmware-related state when entering hibernation, it
is sufficient to call pci_save_state() in .freeze() to prevent the PCI bus
from changing the ISH power state. No actions are required in .thaw().

Signed-off-by: Zhang Lixu <lixu.zhang@intel.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/intel-ish-hid/ipc/pci-ish.c