bcma: store more alternative addresses
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>
This commit is contained in:
parent
367b341edb
commit
23a2f39c8f
|
@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -267,7 +267,7 @@ struct bcma_device {
|
|||
u8 core_unit;
|
||||
|
||||
u32 addr;
|
||||
u32 addr1;
|
||||
u32 addr_s[8];
|
||||
u32 wrap;
|
||||
|
||||
void __iomem *io_addr;
|
||||
|
|
Loading…
Reference in New Issue