bcma: connect the bcma bus suspend/resume to the bcma driver suspend/resume
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 13 Jan 2012 22:58:41 +0000 (23:58 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 17 Jan 2012 14:54:08 +0000 (09:54 -0500)
Now the low-level driver actually gets informed that it is getting suspended and resumed.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/bcma/main.c
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
include/linux/bcma/bcma.h

index b711d9d634a733c2be069301206e454ba33805b7..febbc0a1222ae1444acea8312bab18b7163fbcdb 100644 (file)
@@ -243,6 +243,16 @@ int __init bcma_bus_early_register(struct bcma_bus *bus,
 #ifdef CONFIG_PM
 int bcma_bus_suspend(struct bcma_bus *bus)
 {
+       struct bcma_device *core;
+
+       list_for_each_entry(core, &bus->cores, list) {
+               struct device_driver *drv = core->dev.driver;
+               if (drv) {
+                       struct bcma_driver *adrv = container_of(drv, struct bcma_driver, drv);
+                       if (adrv->suspend)
+                               adrv->suspend(core);
+               }
+       }
        return 0;
 }
 
@@ -257,6 +267,15 @@ int bcma_bus_resume(struct bcma_bus *bus)
                bcma_core_chipcommon_init(&bus->drv_cc);
        }
 
+       list_for_each_entry(core, &bus->cores, list) {
+               struct device_driver *drv = core->dev.driver;
+               if (drv) {
+                       struct bcma_driver *adrv = container_of(drv, struct bcma_driver, drv);
+                       if (adrv->resume)
+                               adrv->resume(core);
+               }
+       }
+
        return 0;
 }
 #endif
index d106576ce338980b4645ced6084139084f74fc21..213130afdaf7494c7565af453812e1432ef48d33 100644 (file)
@@ -1135,7 +1135,7 @@ static int brcms_pci_suspend(struct pci_dev *pdev)
        return pci_set_power_state(pdev, PCI_D3hot);
 }
 
-static int brcms_suspend(struct bcma_device *pdev, pm_message_t state)
+static int brcms_suspend(struct bcma_device *pdev)
 {
        struct brcms_info *wl;
        struct ieee80211_hw *hw;
index f4b8346b1a331f90fc9f29431b84b9176e4e6acb..83c209f39493adf3ef4ae659c2cc46b3770c2948 100644 (file)
@@ -162,7 +162,7 @@ struct bcma_driver {
 
        int (*probe)(struct bcma_device *dev);
        void (*remove)(struct bcma_device *dev);
-       int (*suspend)(struct bcma_device *dev, pm_message_t state);
+       int (*suspend)(struct bcma_device *dev);
        int (*resume)(struct bcma_device *dev);
        void (*shutdown)(struct bcma_device *dev);