Convert the driver to use dev_pm_ops for power management and remove Legacy PM handling. This change re-uses existing suspend and resume interfaces for dev_pm_ops. Signed-off-by: Shuah Khan <shuah.kh@xxxxxxxxxxx> Cc: Shuah Khan <shuahkhan@xxxxxxxxx> Suggested-by: rafael.j.wysocki@xxxxxxxxx --- Rafael, This is the first driver patch to convert drivers to use dev_pm_ops for power management. Please review for the approach and make suggestions for improvement. thanks, -- Shuah drivers/net/wireless/mwifiex/pcie.c | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/mwifiex/pcie.c b/drivers/net/wireless/mwifiex/pcie.c index 20c9c4c..a271c64 100644 --- a/drivers/net/wireless/mwifiex/pcie.c +++ b/drivers/net/wireless/mwifiex/pcie.c @@ -85,7 +85,7 @@ static bool mwifiex_pcie_ok_to_access_hw(struct mwifiex_adapter *adapter) * If already not suspended, this function allocates and sends a host * sleep activate request to the firmware and turns off the traffic. */ -static int mwifiex_pcie_suspend(struct pci_dev *pdev, pm_message_t state) +static int __mwifiex_pcie_suspend(struct pci_dev *pdev) { struct mwifiex_adapter *adapter; struct pcie_service_card *card; @@ -112,6 +112,13 @@ static int mwifiex_pcie_suspend(struct pci_dev *pdev, pm_message_t state) return 0; } +static int mwifiex_pcie_suspend(struct device *dev) +{ + struct pci_dev *pdev = to_pci_dev(dev); + + return __mwifiex_pcie_suspend(pdev); +} + /* * Kernel needs to suspend all functions separately. Therefore all * registered functions must have drivers with suspend and resume @@ -120,7 +127,7 @@ static int mwifiex_pcie_suspend(struct pci_dev *pdev, pm_message_t state) * If already not resumed, this function turns on the traffic and * sends a host sleep cancel request to the firmware. */ -static int mwifiex_pcie_resume(struct pci_dev *pdev) +static int __mwifiex_pcie_resume(struct pci_dev *pdev) { struct mwifiex_adapter *adapter; struct pcie_service_card *card; @@ -150,6 +157,13 @@ static int mwifiex_pcie_resume(struct pci_dev *pdev) return 0; } + +static int mwifiex_pcie_resume(struct device *dev) +{ + struct pci_dev *pdev = to_pci_dev(dev); + + return __mwifiex_pcie_resume(pdev); +} #endif /* @@ -213,7 +227,7 @@ static void mwifiex_pcie_remove(struct pci_dev *pdev) if (user_rmmod) { #ifdef CONFIG_PM if (adapter->is_suspended) - mwifiex_pcie_resume(pdev); + __mwifiex_pcie_resume(pdev); #endif for (i = 0; i < adapter->priv_num; i++) @@ -249,6 +263,13 @@ static DEFINE_PCI_DEVICE_TABLE(mwifiex_ids) = { MODULE_DEVICE_TABLE(pci, mwifiex_ids); +#ifdef CONFIG_PM +/* Power Management Hooks */ +static const struct dev_pm_ops mwifiex_pcie_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(mwifiex_pcie_suspend, mwifiex_pcie_resume) +}; +#endif + /* PCI Device Driver */ static struct pci_driver __refdata mwifiex_pcie = { .name = "mwifiex_pcie", @@ -256,9 +277,9 @@ static struct pci_driver __refdata mwifiex_pcie = { .probe = mwifiex_pcie_probe, .remove = mwifiex_pcie_remove, #ifdef CONFIG_PM - /* Power Management Hooks */ - .suspend = mwifiex_pcie_suspend, - .resume = mwifiex_pcie_resume, + .driver = { + .pm = &mwifiex_pcie_pm_ops, + }, #endif }; -- 1.7.10.4 ��.n��������+%������w��{.n�����{���zW����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f