summaryrefslogtreecommitdiffstats
path: root/target/linux/generic/patches-3.18/020-ssb_update.patch
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2014-12-07 21:53:20 +0000
committerHauke Mehrtens <hauke@hauke-m.de>2014-12-07 21:53:20 +0000
commitd9bb8326fa2cb6f964a6dcdf841e2e9551ee7899 (patch)
treeded871d0ae0a461cb985370b267b456ab6851c82 /target/linux/generic/patches-3.18/020-ssb_update.patch
parent7a65768ddca031ec9d450366881c5958a687a996 (diff)
downloadmaster-31e0f0ae-d9bb8326fa2cb6f964a6dcdf841e2e9551ee7899.tar.gz
master-31e0f0ae-d9bb8326fa2cb6f964a6dcdf841e2e9551ee7899.tar.bz2
master-31e0f0ae-d9bb8326fa2cb6f964a6dcdf841e2e9551ee7899.zip
kernel: update bcma and ssb to wireless-testing master-2014-12-05
This brings ssb and bcma to wireless-testing tag master-2014-12-05 In addition it also adds the ARM-BCM5301X-Add-IRQs-to-Broadcom-s-bus- axi-in-DTS-f.patch which adds the irq number in a way it is done in the mainline kernel. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 43544
Diffstat (limited to 'target/linux/generic/patches-3.18/020-ssb_update.patch')
-rw-r--r--target/linux/generic/patches-3.18/020-ssb_update.patch78
1 files changed, 78 insertions, 0 deletions
diff --git a/target/linux/generic/patches-3.18/020-ssb_update.patch b/target/linux/generic/patches-3.18/020-ssb_update.patch
new file mode 100644
index 0000000000..9171b24704
--- /dev/null
+++ b/target/linux/generic/patches-3.18/020-ssb_update.patch
@@ -0,0 +1,78 @@
+--- a/drivers/ssb/pcihost_wrapper.c
++++ b/drivers/ssb/pcihost_wrapper.c
+@@ -11,15 +11,17 @@
+ * Licensed under the GNU/GPL. See COPYING for details.
+ */
+
++#include <linux/pm.h>
+ #include <linux/pci.h>
+ #include <linux/export.h>
+ #include <linux/slab.h>
+ #include <linux/ssb/ssb.h>
+
+
+-#ifdef CONFIG_PM
+-static int ssb_pcihost_suspend(struct pci_dev *dev, pm_message_t state)
++#ifdef CONFIG_PM_SLEEP
++static int ssb_pcihost_suspend(struct device *d)
+ {
++ struct pci_dev *dev = to_pci_dev(d);
+ struct ssb_bus *ssb = pci_get_drvdata(dev);
+ int err;
+
+@@ -28,17 +30,23 @@ static int ssb_pcihost_suspend(struct pc
+ return err;
+ pci_save_state(dev);
+ pci_disable_device(dev);
+- pci_set_power_state(dev, pci_choose_state(dev, state));
++
++ /* if there is a wakeup enabled child device on ssb bus,
++ enable pci wakeup posibility. */
++ device_set_wakeup_enable(d, d->power.wakeup_path);
++
++ pci_prepare_to_sleep(dev);
+
+ return 0;
+ }
+
+-static int ssb_pcihost_resume(struct pci_dev *dev)
++static int ssb_pcihost_resume(struct device *d)
+ {
++ struct pci_dev *dev = to_pci_dev(d);
+ struct ssb_bus *ssb = pci_get_drvdata(dev);
+ int err;
+
+- pci_set_power_state(dev, PCI_D0);
++ pci_back_from_sleep(dev);
+ err = pci_enable_device(dev);
+ if (err)
+ return err;
+@@ -49,10 +57,12 @@ static int ssb_pcihost_resume(struct pci
+
+ return 0;
+ }
+-#else /* CONFIG_PM */
+-# define ssb_pcihost_suspend NULL
+-# define ssb_pcihost_resume NULL
+-#endif /* CONFIG_PM */
++
++static const struct dev_pm_ops ssb_pcihost_pm_ops = {
++ SET_SYSTEM_SLEEP_PM_OPS(ssb_pcihost_suspend, ssb_pcihost_resume)
++};
++
++#endif /* CONFIG_PM_SLEEP */
+
+ static int ssb_pcihost_probe(struct pci_dev *dev,
+ const struct pci_device_id *id)
+@@ -115,8 +125,9 @@ int ssb_pcihost_register(struct pci_driv
+ {
+ driver->probe = ssb_pcihost_probe;
+ driver->remove = ssb_pcihost_remove;
+- driver->suspend = ssb_pcihost_suspend;
+- driver->resume = ssb_pcihost_resume;
++#ifdef CONFIG_PM_SLEEP
++ driver->driver.pm = &ssb_pcihost_pm_ops;
++#endif
+
+ return pci_register_driver(driver);
+ }