ssb: Fix all-ones boardflags In the SSB SPROM a field set to all ones means the value is not defined in the SPROM. In case of the boardflags, we need to set them to zero to avoid confusing drivers. For certain cards, leaving the flags all set to 1 will prevent the card from transmitting, as has been seen for the PCI version of a BCM4301. This patch was included in mainline kernels with commit 4503183aa32e6886400d82282292934fa64a81b0. Signed-off-by: Larry Finger --- Index: ubuntu-hardy/drivers/ssb/pci.c =================================================================== --- ubuntu-hardy.orig/drivers/ssb/pci.c +++ ubuntu-hardy/drivers/ssb/pci.c @@ -426,6 +426,7 @@ static int sprom_extract(struct ssb_bus SPEX(crc, SSB_SPROM_REVISION, SSB_SPROM_REVISION_CRC, SSB_SPROM_REVISION_CRC_SHIFT); + if ((bus->chip_id & 0xFF00) == 0x4400) { /* Workaround: The BCM44XX chip has a stupid revision * number stored in the SPROM. @@ -443,6 +444,10 @@ static int sprom_extract(struct ssb_bus if (out->revision >= 4) goto unsupported; } + if (out->r1.boardflags_lo == 0xFFFF) + out->r1.boardflags_lo = 0; /* per specs */ + if (out->r2.boardflags_hi == 0xFFFF) + out->r2.boardflags_hi = 0; /* per specs */ return 0; unsupported: