diff --git a/[refs] b/[refs] index b8f01ae12552..0630ee713de1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 521223a27a760658e04e65d8deaf5339070f15f6 +refs/heads/master: 4c5c488a3c0fdcbdce0e212c0e99c01cffce2039 diff --git a/trunk/drivers/staging/brcm80211/brcmsmac/bmac.c b/trunk/drivers/staging/brcm80211/brcmsmac/bmac.c index f44f581068a4..4a220d4ed7e1 100644 --- a/trunk/drivers/staging/brcm80211/brcmsmac/bmac.c +++ b/trunk/drivers/staging/brcm80211/brcmsmac/bmac.c @@ -1905,28 +1905,33 @@ static bool brcms_c_isgoodchip(struct brcms_c_hw_info *wlc_hw) return true; } +/* Validate some board info parameters */ static bool brcms_c_validboardtype(struct brcms_c_hw_info *wlc_hw) { - bool goodboard = true; uint boardrev = wlc_hw->boardrev; + /* 4 bits each for board type, major, minor, and tiny version */ + uint brt = (boardrev & 0xf000) >> 12; + uint b0 = (boardrev & 0xf00) >> 8; + uint b1 = (boardrev & 0xf0) >> 4; + uint b2 = boardrev & 0xf; + + /* voards from other vendors are always considered valid */ + if (wlc_hw->sih->boardvendor != PCI_VENDOR_ID_BROADCOM) + return true; + + /* do some boardrev sanity checks when boardvendor is Broadcom */ if (boardrev == 0) - goodboard = false; - else if (boardrev > 0xff) { - uint brt = (boardrev & 0xf000) >> 12; - uint b0 = (boardrev & 0xf00) >> 8; - uint b1 = (boardrev & 0xf0) >> 4; - uint b2 = boardrev & 0xf; + return false; - if ((brt > 2) || (brt == 0) || (b0 > 9) || (b0 == 0) || (b1 > 9) - || (b2 > 9)) - goodboard = false; - } + if (boardrev <= 0xff) + return true; - if (wlc_hw->sih->boardvendor != PCI_VENDOR_ID_BROADCOM) - return goodboard; + if ((brt > 2) || (brt == 0) || (b0 > 9) || (b0 == 0) || (b1 > 9) + || (b2 > 9)) + return false; - return goodboard; + return true; } static char *brcms_c_get_macaddr(struct brcms_c_hw_info *wlc_hw)