- Update to 2.6.25-rc3.
[linux-flexiantxendom0-3.2.10.git] / drivers / ssb / main.c
index 85a2054..bedb2b4 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);
@@ -872,14 +876,22 @@ EXPORT_SYMBOL(ssb_clockspeed);
 
 static u32 ssb_tmslow_reject_bitmask(struct ssb_device *dev)
 {
+       u32 rev = ssb_read32(dev, SSB_IDLOW) & SSB_IDLOW_SSBREV;
+
        /* The REJECT bit changed position in TMSLOW between
         * Backplane revisions. */
-       switch (ssb_read32(dev, SSB_IDLOW) & SSB_IDLOW_SSBREV) {
+       switch (rev) {
        case SSB_IDLOW_SSBREV_22:
                return SSB_TMSLOW_REJECT_22;
        case SSB_IDLOW_SSBREV_23:
                return SSB_TMSLOW_REJECT_23;
+       case SSB_IDLOW_SSBREV_24:     /* TODO - find the proper REJECT bits */
+       case SSB_IDLOW_SSBREV_25:     /* same here */
+       case SSB_IDLOW_SSBREV_26:     /* same here */
+       case SSB_IDLOW_SSBREV_27:     /* same here */
+               return SSB_TMSLOW_REJECT_23;    /* this is a guess */
        default:
+               printk(KERN_INFO "ssb: Backplane Revision 0x%.8X\n", rev);
                WARN_ON(1);
        }
        return (SSB_TMSLOW_REJECT_22 | SSB_TMSLOW_REJECT_23);