Message ID | 1503438455-6133-1-git-send-email-ryanhsu@qti.qualcomm.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 32faa3f0ee509176aeac0009e3ee93f9b15f07a5 |
Delegated to: | Kalle Valo |
Headers | show |
ryanhsu@qti.qualcomm.com wrote: > The actual PCI suspend/resume in ath10k has been handled in wow.c, > but in the case of the device doesn't support remote wakeup, > the .hif_suspend() and .hif_resume() will never be handled. > > ath10k_wow_op_suspend() > { > if (WARN_ON(!test_bit(ATH10K_FW_FEATURE_WOWLAN_SUPPORT, > ar->running_fw->fw_file.fw_features))) { > ret = 1; > goto exit; > } > > .... > > ret = ath10k_hif_suspend(ar); > } > > So register the PCI PM core to support the suspend/resume if the device > doesn't support remote wakeup. > > Signed-off-by: Ryan Hsu <ryanhsu@qti.qualcomm.com> > Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> This had a warning: drivers/net/wireless/ath/ath10k/pci.c:3651:1: warning: symbol 'ath10k_pci_pm_ops' was not declared. Should it be static? I fixed it in the pending branch by making it static: static SIMPLE_DEV_PM_OPS(ath10k_pci_pm_ops, ath10k_pci_pm_suspend, ath10k_pci_pm_resume); Please review.
ryanhsu@qti.qualcomm.com wrote: > The actual PCI suspend/resume in ath10k has been handled in wow.c, > but in the case of the device doesn't support remote wakeup, > the .hif_suspend() and .hif_resume() will never be handled. > > ath10k_wow_op_suspend() > { > if (WARN_ON(!test_bit(ATH10K_FW_FEATURE_WOWLAN_SUPPORT, > ar->running_fw->fw_file.fw_features))) { > ret = 1; > goto exit; > } > > .... > > ret = ath10k_hif_suspend(ar); > } > > So register the PCI PM core to support the suspend/resume if the device > doesn't support remote wakeup. > > Signed-off-by: Ryan Hsu <ryanhsu@qti.qualcomm.com> > Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> 2 patches applied to ath-next branch of ath.git, thanks. 32faa3f0ee50 ath10k: add the PCI PM core suspend/resume ops 393b706cf20c ath10k: configure and enable the wakeup capability
On 08/31/2017 05:52 AM, Kalle Valo wrote: > This had a warning: > > drivers/net/wireless/ath/ath10k/pci.c:3651:1: warning: symbol 'ath10k_pci_pm_ops' was not declared. Should it be static? > > I fixed it in the pending branch by making it static: > > static SIMPLE_DEV_PM_OPS(ath10k_pci_pm_ops, > ath10k_pci_pm_suspend, > ath10k_pci_pm_resume); > > Please review. > Yes and thanks! -- Ryan Hsu
diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c index 0457e31..4aac0de 100644 --- a/drivers/net/wireless/ath/ath10k/pci.c +++ b/drivers/net/wireless/ath/ath10k/pci.c @@ -3358,11 +3358,53 @@ static void ath10k_pci_remove(struct pci_dev *pdev) MODULE_DEVICE_TABLE(pci, ath10k_pci_id_table); +#ifdef CONFIG_PM + +static int ath10k_pci_pm_suspend(struct device *dev) +{ + struct ath10k *ar = dev_get_drvdata(dev); + int ret; + + if (test_bit(ATH10K_FW_FEATURE_WOWLAN_SUPPORT, + ar->running_fw->fw_file.fw_features)) + return 0; + + ret = ath10k_hif_suspend(ar); + if (ret) + ath10k_warn(ar, "failed to suspend hif: %d\n", ret); + + return ret; +} + +static int ath10k_pci_pm_resume(struct device *dev) +{ + struct ath10k *ar = dev_get_drvdata(dev); + int ret; + + if (test_bit(ATH10K_FW_FEATURE_WOWLAN_SUPPORT, + ar->running_fw->fw_file.fw_features)) + return 0; + + ret = ath10k_hif_resume(ar); + if (ret) + ath10k_warn(ar, "failed to resume hif: %d\n", ret); + + return ret; +} + +SIMPLE_DEV_PM_OPS(ath10k_pci_pm_ops, + ath10k_pci_pm_suspend, + ath10k_pci_pm_resume); +#endif + static struct pci_driver ath10k_pci_driver = { .name = "ath10k_pci", .id_table = ath10k_pci_id_table, .probe = ath10k_pci_probe, .remove = ath10k_pci_remove, +#ifdef CONFIG_PM + .driver.pm = &ath10k_pci_pm_ops, +#endif }; static int __init ath10k_pci_init(void)