diff options
author | John W. Linville <linville@tuxdriver.com> | 2010-10-25 16:12:37 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-11-15 13:24:40 -0500 |
commit | f60dc0138aa19769bf8bab9f93b043235428b66f (patch) | |
tree | 91e71125d93ddb22a2f7241c27b74de1460303ee /drivers/net | |
parent | b9237578f8d685bb86901ba9ff0d379218e5a3c5 (diff) |
iwlwifi: Convert to new PCI PM framework
Use the new PCI PM and let the PCI core code handle the PCI-specific
details of power transitions.
Based on similarly titled ath9k patch posted by Rafael J. Wysocki.
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.c | 26 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.h | 14 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 5 |
4 files changed, 27 insertions, 23 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 0ba8083ee4cd..0027bb8299a8 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -4838,10 +4838,7 @@ static struct pci_driver iwl_driver = { | |||
4838 | .id_table = iwl_hw_card_ids, | 4838 | .id_table = iwl_hw_card_ids, |
4839 | .probe = iwl_pci_probe, | 4839 | .probe = iwl_pci_probe, |
4840 | .remove = __devexit_p(iwl_pci_remove), | 4840 | .remove = __devexit_p(iwl_pci_remove), |
4841 | #ifdef CONFIG_PM | 4841 | .driver.pm = IWL_PM_OPS, |
4842 | .suspend = iwl_pci_suspend, | ||
4843 | .resume = iwl_pci_resume, | ||
4844 | #endif | ||
4845 | }; | 4842 | }; |
4846 | 4843 | ||
4847 | static int __init iwl_init(void) | 4844 | static int __init iwl_init(void) |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index 87c18001d2c0..2a4d40e5b9f4 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
@@ -2592,8 +2592,9 @@ EXPORT_SYMBOL(iwl_add_beacon_time); | |||
2592 | 2592 | ||
2593 | #ifdef CONFIG_PM | 2593 | #ifdef CONFIG_PM |
2594 | 2594 | ||
2595 | int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state) | 2595 | int iwl_pci_suspend(struct device *device) |
2596 | { | 2596 | { |
2597 | struct pci_dev *pdev = to_pci_dev(device); | ||
2597 | struct iwl_priv *priv = pci_get_drvdata(pdev); | 2598 | struct iwl_priv *priv = pci_get_drvdata(pdev); |
2598 | 2599 | ||
2599 | /* | 2600 | /* |
@@ -2605,18 +2606,14 @@ int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
2605 | */ | 2606 | */ |
2606 | iwl_apm_stop(priv); | 2607 | iwl_apm_stop(priv); |
2607 | 2608 | ||
2608 | pci_save_state(pdev); | ||
2609 | pci_disable_device(pdev); | ||
2610 | pci_set_power_state(pdev, PCI_D3hot); | ||
2611 | |||
2612 | return 0; | 2609 | return 0; |
2613 | } | 2610 | } |
2614 | EXPORT_SYMBOL(iwl_pci_suspend); | 2611 | EXPORT_SYMBOL(iwl_pci_suspend); |
2615 | 2612 | ||
2616 | int iwl_pci_resume(struct pci_dev *pdev) | 2613 | int iwl_pci_resume(struct device *device) |
2617 | { | 2614 | { |
2615 | struct pci_dev *pdev = to_pci_dev(device); | ||
2618 | struct iwl_priv *priv = pci_get_drvdata(pdev); | 2616 | struct iwl_priv *priv = pci_get_drvdata(pdev); |
2619 | int ret; | ||
2620 | bool hw_rfkill = false; | 2617 | bool hw_rfkill = false; |
2621 | 2618 | ||
2622 | /* | 2619 | /* |
@@ -2625,11 +2622,6 @@ int iwl_pci_resume(struct pci_dev *pdev) | |||
2625 | */ | 2622 | */ |
2626 | pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00); | 2623 | pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00); |
2627 | 2624 | ||
2628 | pci_set_power_state(pdev, PCI_D0); | ||
2629 | ret = pci_enable_device(pdev); | ||
2630 | if (ret) | ||
2631 | return ret; | ||
2632 | pci_restore_state(pdev); | ||
2633 | iwl_enable_interrupts(priv); | 2625 | iwl_enable_interrupts(priv); |
2634 | 2626 | ||
2635 | if (!(iwl_read32(priv, CSR_GP_CNTRL) & | 2627 | if (!(iwl_read32(priv, CSR_GP_CNTRL) & |
@@ -2647,4 +2639,14 @@ int iwl_pci_resume(struct pci_dev *pdev) | |||
2647 | } | 2639 | } |
2648 | EXPORT_SYMBOL(iwl_pci_resume); | 2640 | EXPORT_SYMBOL(iwl_pci_resume); |
2649 | 2641 | ||
2642 | const struct dev_pm_ops iwl_pm_ops = { | ||
2643 | .suspend = iwl_pci_suspend, | ||
2644 | .resume = iwl_pci_resume, | ||
2645 | .freeze = iwl_pci_suspend, | ||
2646 | .thaw = iwl_pci_resume, | ||
2647 | .poweroff = iwl_pci_suspend, | ||
2648 | .restore = iwl_pci_resume, | ||
2649 | }; | ||
2650 | EXPORT_SYMBOL(iwl_pm_ops); | ||
2651 | |||
2650 | #endif /* CONFIG_PM */ | 2652 | #endif /* CONFIG_PM */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index 64527def059f..b17de8214eb5 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
@@ -615,9 +615,17 @@ __le32 iwl_add_beacon_time(struct iwl_priv *priv, u32 base, | |||
615 | u32 addon, u32 beacon_interval); | 615 | u32 addon, u32 beacon_interval); |
616 | 616 | ||
617 | #ifdef CONFIG_PM | 617 | #ifdef CONFIG_PM |
618 | int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state); | 618 | int iwl_pci_suspend(struct device *device); |
619 | int iwl_pci_resume(struct pci_dev *pdev); | 619 | int iwl_pci_resume(struct device *device); |
620 | #endif /* CONFIG_PM */ | 620 | extern const struct dev_pm_ops iwl_pm_ops; |
621 | |||
622 | #define IWL_PM_OPS (&iwl_pm_ops) | ||
623 | |||
624 | #else /* !CONFIG_PM */ | ||
625 | |||
626 | #define IWL_PM_OPS NULL | ||
627 | |||
628 | #endif /* !CONFIG_PM */ | ||
621 | 629 | ||
622 | /***************************************************** | 630 | /***************************************************** |
623 | * Error Handling Debugging | 631 | * Error Handling Debugging |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 3b8bf8686276..9b71921dc2b6 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -4275,10 +4275,7 @@ static struct pci_driver iwl3945_driver = { | |||
4275 | .id_table = iwl3945_hw_card_ids, | 4275 | .id_table = iwl3945_hw_card_ids, |
4276 | .probe = iwl3945_pci_probe, | 4276 | .probe = iwl3945_pci_probe, |
4277 | .remove = __devexit_p(iwl3945_pci_remove), | 4277 | .remove = __devexit_p(iwl3945_pci_remove), |
4278 | #ifdef CONFIG_PM | 4278 | .driver.pm = IWL_PM_OPS, |
4279 | .suspend = iwl_pci_suspend, | ||
4280 | .resume = iwl_pci_resume, | ||
4281 | #endif | ||
4282 | }; | 4279 | }; |
4283 | 4280 | ||
4284 | static int __init iwl3945_init(void) | 4281 | static int __init iwl3945_init(void) |