bcma: add bus num counter
authorHauke Mehrtens <hauke@hauke-m.de>
Mon, 30 Jan 2012 23:03:36 +0000 (00:03 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 6 Feb 2012 19:53:05 +0000 (14:53 -0500)
If we have two bcma buses on one computer the second will not work
without this patch. Now each bus gets an own number.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/bcma/main.c
include/linux/bcma/bcma.h

index 3363036f23dc2a758fd12cfbc5cce534a27525d1..bcd1c01cde9e0bde6012a786537a8949bf557878 100644 (file)
 MODULE_DESCRIPTION("Broadcom's specific AMBA driver");
 MODULE_LICENSE("GPL");
 
+/* contains the number the next bus should get. */
+static unsigned int bcma_bus_next_num = 0;
+
+/* bcma_buses_mutex locks the bcma_bus_next_num */
+static DEFINE_MUTEX(bcma_buses_mutex);
+
 static int bcma_bus_match(struct device *dev, struct device_driver *drv);
 static int bcma_device_probe(struct device *dev);
 static int bcma_device_remove(struct device *dev);
@@ -93,7 +99,7 @@ static int bcma_register_cores(struct bcma_bus *bus)
 
                core->dev.release = bcma_release_core_dev;
                core->dev.bus = &bcma_bus_type;
-               dev_set_name(&core->dev, "bcma%d:%d", 0/*bus->num*/, dev_id);
+               dev_set_name(&core->dev, "bcma%d:%d", bus->num, dev_id);
 
                switch (bus->hosttype) {
                case BCMA_HOSTTYPE_PCI:
@@ -137,6 +143,10 @@ int __devinit bcma_bus_register(struct bcma_bus *bus)
        int err;
        struct bcma_device *core;
 
+       mutex_lock(&bcma_buses_mutex);
+       bus->num = bcma_bus_next_num++;
+       mutex_unlock(&bcma_buses_mutex);
+
        /* Scan for devices (cores) */
        err = bcma_bus_scan(bus);
        if (err) {
index 024a6e2a90835b9f0032a7ca6ee3a227d992e628..b9f65fbee42f0bdaa8515b46a180817092efda3f 100644 (file)
@@ -196,6 +196,7 @@ struct bcma_bus {
        struct list_head cores;
        u8 nr_cores;
        u8 init_done:1;
+       u8 num;
 
        struct bcma_drv_cc drv_cc;
        struct bcma_drv_pci drv_pci;