HID: i2c-hid: Skip SET_POWER SLEEP for Cirque touchpad on system suspend
authorKai-Heng Feng <kai.heng.feng@canonical.com>
Mon, 15 Jan 2024 04:50:51 +0000 (12:50 +0800)
committerJiri Kosina <jkosina@suse.com>
Tue, 23 Jan 2024 10:26:06 +0000 (11:26 +0100)
commit26dd6a5667f500c5d991f90a9ac5998a71afaf5c
tree2dbf6aae4e37f9f1d9410fe594cd5d63d9af2e20
parentb6eda11c44dc89a681e1c105f0f4660e69b1e183
HID: i2c-hid: Skip SET_POWER SLEEP for Cirque touchpad on system suspend

There's a Cirque touchpad that wakes system up without anything touched
the touchpad. The input report is empty when this happens.
The reason is stated in HID over I2C spec, 7.2.8.2:
"If the DEVICE wishes to wake the HOST from its low power state, it can
issue a wake by asserting the interrupt."

This is fine if OS can put system back to suspend by identifying input
wakeup count stays the same on resume, like Chrome OS Dark Resume [0].
But for regular distro such policy is lacking.

Though the change doesn't bring any impact on power consumption for
touchpad is minimal, other i2c-hid device may depends on SLEEP control
power. So use a quirk to limit the change scope.

[0] https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/power_manager/docs/dark_resume.md

Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/hid-ids.h
drivers/hid/i2c-hid/i2c-hid-core.c