bcma: store more alternative addresses
authorHauke Mehrtens <hauke@hauke-m.de>
Mon, 8 Sep 2014 20:53:35 +0000 (22:53 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 9 Sep 2014 19:33:05 +0000 (15:33 -0400)
Each core could have more than one alternative address. There are cores
with 8 alternative addresses for different functions. The PHY control
in the Chip common B core is done through the 2. alternative address
and not the first one.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
CC: linux-usb@vger.kernel.org
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/bcma/scan.c
drivers/usb/host/bcma-hcd.c
include/linux/bcma/bcma.h

index e2b99030304270d328f499c23dceebe7875c7f60..06be7282cbc4bf2e8bb0d1b80665757e99ed2061 100644 (file)
@@ -276,7 +276,7 @@ static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr,
                              struct bcma_device *core)
 {
        u32 tmp;
-       u8 i, j;
+       u8 i, j, k;
        s32 cia, cib;
        u8 ports[2], wrappers[2];
 
@@ -367,6 +367,7 @@ static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr,
        core->addr = tmp;
 
        /* get & parse slave ports */
+       k = 0;
        for (i = 0; i < ports[1]; i++) {
                for (j = 0; ; j++) {
                        tmp = bcma_erom_get_addr_desc(bus, eromptr,
@@ -376,9 +377,9 @@ static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr,
                                /* pr_debug("erom: slave port %d "
                                 * "has %d descriptors\n", i, j); */
                                break;
-                       } else {
-                               if (i == 0 && j == 0)
-                                       core->addr1 = tmp;
+                       } else if (k < ARRAY_SIZE(core->addr_s)) {
+                               core->addr_s[k] = tmp;
+                               k++;
                        }
                }
        }
index 205f4a336583de6c32b608854a943cc121dc1dc4..cd6d0afb6b8f7869d40520223093380159ba91ff 100644 (file)
@@ -237,7 +237,7 @@ static int bcma_hcd_probe(struct bcma_device *dev)
        bcma_hcd_init_chip(dev);
 
        /* In AI chips EHCI is addrspace 0, OHCI is 1 */
-       ohci_addr = dev->addr1;
+       ohci_addr = dev->addr_s[0];
        if ((chipinfo->id == 0x5357 || chipinfo->id == 0x4749)
            && chipinfo->rev == 0)
                ohci_addr = 0x18009000;
index c1ba87d1548ecd91694f9966c9b13d920d456525..7fc16c991291558460323914b2ad4a7e1aa8f3e3 100644 (file)
@@ -267,7 +267,7 @@ struct bcma_device {
        u8 core_unit;
 
        u32 addr;
-       u32 addr1;
+       u32 addr_s[8];
        u32 wrap;
 
        void __iomem *io_addr;