HID: intel-thc-hid: Intel-quickspi: Improve power management for touch devices

Enhance power management with two key improvements:
1. Hibernate support: Send POWER_OFF command when entering hibernate
   mode.
2. Conditional sleep commands: Only send POWER_SLEEP/POWER_ON commands
   during system suspend/resume when the touch device is not configured
   as a wake source, preserving Wake-on-Touch (WoT) functionality. This
   ensures proper power states while maintaining expected wake behavior.

Signed-off-by: Even Xu <even.xu@intel.com>
Tested-by: Rui Zhang <rui1.zhang@intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
Even Xu 2026-03-18 11:25:47 +08:00 committed by Jiri Kosina
parent f0caa1d49c
commit 4ba38ee380

View File

@ -749,9 +749,11 @@ static int quickspi_suspend(struct device *device)
if (!qsdev)
return -ENODEV;
ret = quickspi_set_power(qsdev, HIDSPI_SLEEP);
if (ret)
return ret;
if (!device_may_wakeup(qsdev->dev)) {
ret = quickspi_set_power(qsdev, HIDSPI_SLEEP);
if (ret)
return ret;
}
ret = thc_interrupt_quiesce(qsdev->thc_hw, true);
if (ret)
@ -790,9 +792,8 @@ static int quickspi_resume(struct device *device)
if (ret)
return ret;
ret = quickspi_set_power(qsdev, HIDSPI_ON);
if (ret)
return ret;
if (!device_may_wakeup(qsdev->dev))
return quickspi_set_power(qsdev, HIDSPI_ON);
return 0;
}
@ -851,6 +852,9 @@ static int quickspi_poweroff(struct device *device)
if (!qsdev)
return -ENODEV;
/* Ignore the return value as platform will be poweroff soon */
quickspi_set_power(qsdev, HIDSPI_OFF);
ret = thc_interrupt_quiesce(qsdev->thc_hw, true);
if (ret)
return ret;