HID: Intel-thc-hid: Intel-quicki2c: Add power management for touch device

Send POWER_SLEEP command to touch device when system enters into sleep
mode or hibernate mode to save more power; and send POWER_ON command to
take device back when system exits sleep mode.

Signed-off-by: Even Xu <even.xu@intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
Even Xu 2025-12-22 09:41:34 +08:00 committed by Jiri Kosina
parent a788b20570
commit 6761f9ccd6

View File

@ -807,6 +807,12 @@ static int quicki2c_suspend(struct device *device)
if (!qcdev)
return -ENODEV;
if (!device_may_wakeup(qcdev->dev)) {
ret = quicki2c_set_power(qcdev, HIDI2C_SLEEP);
if (ret)
return ret;
}
/*
* As I2C is THC subsystem, no register auto save/restore support,
* need driver to do that explicitly for every D3 case.
@ -856,6 +862,9 @@ static int quicki2c_resume(struct device *device)
if (ret)
return ret;
if (!device_may_wakeup(qcdev->dev))
return quicki2c_set_power(qcdev, HIDI2C_ON);
return 0;
}
@ -913,6 +922,9 @@ static int quicki2c_poweroff(struct device *device)
if (!qcdev)
return -ENODEV;
/* Ignore the return value as platform will be poweroff soon */
quicki2c_set_power(qcdev, HIDI2C_SLEEP);
ret = thc_interrupt_quiesce(qcdev->thc_hw, true);
if (ret)
return ret;
@ -966,7 +978,7 @@ static int quicki2c_restore(struct device *device)
thc_change_ltr_mode(qcdev->thc_hw, THC_LTR_MODE_ACTIVE);
return 0;
return quicki2c_set_power(qcdev, HIDI2C_ON);
}
static int quicki2c_runtime_suspend(struct device *device)