aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/patches-3.10/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.10/020-ssb_update.patch
parent7a65768ddca031ec9d450366881c5958a687a996 (diff)
downloadupstream-d9bb8326fa2cb6f964a6dcdf841e2e9551ee7899.tar.gz
upstream-d9bb8326fa2cb6f964a6dcdf841e2e9551ee7899.tar.bz2
upstream-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.10/020-ssb_update.patch')
-rw-r--r--target/linux/generic/patches-3.10/020-ssb_update.patch83
1 files changed, 80 insertions, 3 deletions
diff --git a/target/linux/generic/patches-3.10/020-ssb_update.patch b/target/linux/generic/patches-3.10/020-ssb_update.patch
index 6e93b9a91d..a85ab10967 100644
--- a/target/linux/generic/patches-3.10/020-ssb_update.patch
+++ b/target/linux/generic/patches-3.10/020-ssb_update.patch
@@ -179,7 +179,7 @@
static int ssb_gpio_chipco_get_value(struct gpio_chip *chip, unsigned gpio)
{
struct ssb_bus *bus = ssb_gpio_get_bus(chip);
-@@ -74,19 +98,129 @@ static void ssb_gpio_chipco_free(struct
+@@ -74,19 +98,129 @@ static void ssb_gpio_chipco_free(struct
ssb_chipco_gpio_pullup(&bus->chipco, 1 << gpio, 0);
}
@@ -526,6 +526,16 @@
int ssb_gpio_init(struct ssb_bus *bus)
{
if (ssb_chipco_available(&bus->chipco))
+@@ -201,7 +475,8 @@ int ssb_gpio_unregister(struct ssb_bus *
+ {
+ if (ssb_chipco_available(&bus->chipco) ||
+ ssb_extif_available(&bus->extif)) {
+- return gpiochip_remove(&bus->gpio);
++ gpiochip_remove(&bus->gpio);
++ return 0;
+ } else {
+ SSB_WARN_ON(1);
+ }
--- a/drivers/ssb/main.c
+++ b/drivers/ssb/main.c
@@ -553,6 +553,14 @@ static int ssb_devices_register(struct s
@@ -726,15 +736,82 @@
for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) {
--- a/drivers/ssb/pcihost_wrapper.c
+++ b/drivers/ssb/pcihost_wrapper.c
-@@ -38,7 +38,7 @@ static int ssb_pcihost_resume(struct pci
+@@ -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, 0);
-+ 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);
+ }
--- a/drivers/ssb/sprom.c
+++ b/drivers/ssb/sprom.c
@@ -54,7 +54,7 @@ static int hex2sprom(u16 *sprom, const c