]> err.no Git - linux-2.6/blobdiff - drivers/ssb/main.c
Merge branch 'linux-2.6'
[linux-2.6] / drivers / ssb / main.c
index 9028ed5715a1e11b778454583c48e97d4c7e8bdd..72017bf2e577c0e20bb87c16021d0e4ed0122b9a 100644 (file)
@@ -557,6 +557,7 @@ static int ssb_fetch_invariants(struct ssb_bus *bus,
                goto out;
        memcpy(&bus->boardinfo, &iv.boardinfo, sizeof(iv.boardinfo));
        memcpy(&bus->sprom, &iv.sprom, sizeof(iv.sprom));
+       bus->has_cardbus_slot = iv.has_cardbus_slot;
 out:
        return err;
 }
@@ -569,6 +570,9 @@ static int ssb_bus_register(struct ssb_bus *bus,
 
        spin_lock_init(&bus->bar_lock);
        INIT_LIST_HEAD(&bus->list);
+#ifdef CONFIG_SSB_EMBEDDED
+       spin_lock_init(&bus->gpio_lock);
+#endif
 
        /* Powerup the bus */
        err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 1);
@@ -1040,6 +1044,12 @@ int ssb_bus_may_powerdown(struct ssb_bus *bus)
                goto out;
 
        cc = &bus->chipco;
+
+       if (!cc->dev)
+               goto out;
+       if (cc->dev->id.revision < 5)
+               goto out;
+
        ssb_chipco_set_clockmode(cc, SSB_CLKMODE_SLOW);
        err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0);
        if (err)