mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 08:30:54 +07:00
HID: intel_ish-hid: ipc: register more pm callbacks to support hibernation
Current ISH driver only registers suspend/resume PM callbacks which don't support hibernation (suspend to disk). Basically after hiberation, the ISH can't resume properly and user may not see sensor events (for example: screen rotation may not work). User will not see a crash or panic or anything except the following message in log: hid-sensor-hub 001F:8086:22D8.0001: timeout waiting for response from ISHTP device So this patch adds support for S4/hiberbation to ISH by using the SIMPLE_DEV_PM_OPS() MACRO instead of struct dev_pm_ops directly. The suspend and resume functions will now be used for both suspend to RAM and hibernation. If power management is disabled, SIMPLE_DEV_PM_OPS will do nothing, the suspend and resume related functions won't be used, so mark them as __maybe_unused to clarify that this is the intended behavior, and remove #ifdefs for power management. Cc: stable@vger.kernel.org Signed-off-by: Even Xu <even.xu@intel.com> Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
4bff980f92
commit
ebeaa36754
@ -205,8 +205,7 @@ static void ish_remove(struct pci_dev *pdev)
|
||||
kfree(ishtp_dev);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static struct device *ish_resume_device;
|
||||
static struct device __maybe_unused *ish_resume_device;
|
||||
|
||||
/* 50ms to get resume response */
|
||||
#define WAIT_FOR_RESUME_ACK_MS 50
|
||||
@ -220,7 +219,7 @@ static struct device *ish_resume_device;
|
||||
* in that case a simple resume message is enough, others we need
|
||||
* a reset sequence.
|
||||
*/
|
||||
static void ish_resume_handler(struct work_struct *work)
|
||||
static void __maybe_unused ish_resume_handler(struct work_struct *work)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(ish_resume_device);
|
||||
struct ishtp_device *dev = pci_get_drvdata(pdev);
|
||||
@ -262,7 +261,7 @@ static void ish_resume_handler(struct work_struct *work)
|
||||
*
|
||||
* Return: 0 to the pm core
|
||||
*/
|
||||
static int ish_suspend(struct device *device)
|
||||
static int __maybe_unused ish_suspend(struct device *device)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(device);
|
||||
struct ishtp_device *dev = pci_get_drvdata(pdev);
|
||||
@ -288,7 +287,7 @@ static int ish_suspend(struct device *device)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static DECLARE_WORK(resume_work, ish_resume_handler);
|
||||
static __maybe_unused DECLARE_WORK(resume_work, ish_resume_handler);
|
||||
/**
|
||||
* ish_resume() - ISH resume callback
|
||||
* @device: device pointer
|
||||
@ -297,7 +296,7 @@ static DECLARE_WORK(resume_work, ish_resume_handler);
|
||||
*
|
||||
* Return: 0 to the pm core
|
||||
*/
|
||||
static int ish_resume(struct device *device)
|
||||
static int __maybe_unused ish_resume(struct device *device)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(device);
|
||||
struct ishtp_device *dev = pci_get_drvdata(pdev);
|
||||
@ -311,21 +310,14 @@ static int ish_resume(struct device *device)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops ish_pm_ops = {
|
||||
.suspend = ish_suspend,
|
||||
.resume = ish_resume,
|
||||
};
|
||||
#define ISHTP_ISH_PM_OPS (&ish_pm_ops)
|
||||
#else
|
||||
#define ISHTP_ISH_PM_OPS NULL
|
||||
#endif /* CONFIG_PM */
|
||||
static SIMPLE_DEV_PM_OPS(ish_pm_ops, ish_suspend, ish_resume);
|
||||
|
||||
static struct pci_driver ish_driver = {
|
||||
.name = KBUILD_MODNAME,
|
||||
.id_table = ish_pci_tbl,
|
||||
.probe = ish_probe,
|
||||
.remove = ish_remove,
|
||||
.driver.pm = ISHTP_ISH_PM_OPS,
|
||||
.driver.pm = &ish_pm_ops,
|
||||
};
|
||||
|
||||
module_pci_driver(ish_driver);
|
||||
|
Loading…
Reference in New Issue
Block a user