Index: ath5k_hw.c =================================================================== --- ath5k_hw.c (revision 2669) +++ ath5k_hw.c (revision 2703) @@ -487,10 +487,27 @@ hal->ah_software_retry = FALSE; hal->ah_ant_diversity = AR5K_TUNE_ANT_DIVERSITY; - switch (device) { - case PCI_PRODUCT_ATHEROS_AR2413: - case PCI_PRODUCT_ATHEROS_AR5413: - case PCI_PRODUCT_ATHEROS_AR5424: + /* + * Set the mac revision based on the pci id + */ + hal->ah_version = mac_version; + + if (hal->ah_version == AR5K_AR5212) + hal->ah_magic = AR5K_EEPROM_MAGIC_5212; + else if (hal->ah_version == AR5K_AR5211) + hal->ah_magic = AR5K_EEPROM_MAGIC_5211; + + /* Get MAC revision */ + srev = AR5K_REG_READ(AR5K_SREV); + hal->ah_mac_srev = srev; + hal->ah_mac_version = AR5K_REG_MS(srev, AR5K_SREV_VER); + hal->ah_mac_revision = AR5K_REG_MS(srev, AR5K_SREV_REV); + + switch (srev) { + case AR5K_SREV_VER_AR2424: + case AR5K_SREV_VER_AR5424: + case AR5K_SREV_VER_AR5413: + case AR5K_SREV_VER_AR5414: /* * Known single chip solutions */ @@ -504,25 +521,11 @@ break; } - /* - * Set the mac revision based on the pci id - */ - hal->ah_version = mac_version; - - if (hal->ah_version == AR5K_AR5212) - hal->ah_magic = AR5K_EEPROM_MAGIC_5212; - else if (hal->ah_version == AR5K_AR5211) - hal->ah_magic = AR5K_EEPROM_MAGIC_5211; - /* Bring device out of sleep and reset it's units */ if (ath5k_hw_nic_wakeup(hal, AR5K_INIT_MODE, TRUE) != TRUE) goto failed; - /* Get MAC, PHY and RADIO revisions */ - srev = AR5K_REG_READ(AR5K_SREV); - hal->ah_mac_srev = srev; - hal->ah_mac_version = AR5K_REG_MS(srev, AR5K_SREV_VER); - hal->ah_mac_revision = AR5K_REG_MS(srev, AR5K_SREV_REV); + /* Get PHY and RADIO revisions */ hal->ah_phy_revision = AR5K_REG_READ(AR5K_PHY_CHIP_ID) & 0x00ffffffff; hal->ah_radio_5ghz_revision = @@ -622,11 +625,30 @@ *status = AR5K_OK; - printk(KERN_INFO "ath_hal: Atheros HW found \n"); - printk(KERN_INFO "ath_hal: MAC version: %s\n", - ath5k_hw_get_part_name(AR5K_VERSION_VER,hal->ah_mac_srev)); - printk(KERN_INFO "ath_hal: PHY version: %s\n", - ath5k_hw_get_part_name(AR5K_VERSION_RAD,hal->ah_radio_5ghz_revision)); + printk(KERN_INFO "ath_hal: MAC revision: %s (0x%x)\n", + ath5k_hw_get_part_name(AR5K_VERSION_VER,hal->ah_mac_srev), + hal->ah_mac_srev); + if((AR5K_MODE_11B & hal->ah_capabilities.cap_mode) && + (AR5K_MODE_11A & hal->ah_capabilities.cap_mode)){ + printk(KERN_INFO "ath_hal: PHY revision: %s (0x%x)\n", + ath5k_hw_get_part_name(AR5K_VERSION_RAD, + hal->ah_radio_5ghz_revision), + hal->ah_radio_5ghz_revision); + } + if((AR5K_MODE_11B & hal->ah_capabilities.cap_mode) && + !(AR5K_MODE_11A & hal->ah_capabilities.cap_mode)){ + printk(KERN_INFO "ath_hal: 2Ghz PHY revision: %s (0x%x)\n", + ath5k_hw_get_part_name(AR5K_VERSION_RAD, + hal->ah_radio_2ghz_revision), + hal->ah_radio_2ghz_revision); + } + if(!(AR5K_MODE_11B & hal->ah_capabilities.cap_mode) && + (AR5K_MODE_11A & hal->ah_capabilities.cap_mode)){ + printk(KERN_INFO "ath_hal: 5Ghz PHY revision: %s (0x%x)\n", + ath5k_hw_get_part_name(AR5K_VERSION_RAD, + hal->ah_radio_5ghz_revision), + hal->ah_radio_5ghz_revision); + } printk(KERN_INFO "ath_hal: EEPROM version: %x.%x\n", (hal->ah_ee_version & 0xF000) >> 12, hal->ah_ee_version & 0xFFF); @@ -6400,18 +6422,10 @@ ath5k_hw_get_part_name(enum ath5k_srev_type type, u_int32_t val) { struct ath5k_srev_name names[] = AR5K_SREV_NAME; - const char *name = "xxxx"; + const char *name = "xxxxx"; int i; for (i = 0; i < AR5K_ELEMENTS(names); i++) { - if (type == AR5K_VERSION_DEV) { - if (names[i].sr_type == type && - names[i].sr_val == val) { - name = names[i].sr_name; - break; - } - continue; - } if (names[i].sr_type != type || names[i].sr_val == AR5K_SREV_UNKNOWN) continue; Index: ath5k.h =================================================================== --- ath5k.h (revision 2669) +++ ath5k.h (revision 2703) @@ -145,30 +145,36 @@ }; #define AR5K_SREV_NAME { \ - { "5210", AR5K_VERSION_VER, AR5K_SREV_VER_AR5210 }, \ - { "5311", AR5K_VERSION_VER, AR5K_SREV_VER_AR5311 }, \ - { "5311a", AR5K_VERSION_VER, AR5K_SREV_VER_AR5311A },\ - { "5311b", AR5K_VERSION_VER, AR5K_SREV_VER_AR5311B },\ - { "5211", AR5K_VERSION_VER, AR5K_SREV_VER_AR5211 }, \ - { "5212", AR5K_VERSION_VER, AR5K_SREV_VER_AR5212 }, \ - { "5213", AR5K_VERSION_VER, AR5K_SREV_VER_AR5213 }, \ - { "xxxx", AR5K_VERSION_VER, AR5K_SREV_UNKNOWN }, \ - { "5110", AR5K_VERSION_RAD, AR5K_SREV_RAD_5110 }, \ - { "5111", AR5K_VERSION_RAD, AR5K_SREV_RAD_5111 }, \ - { "2111", AR5K_VERSION_RAD, AR5K_SREV_RAD_2111 }, \ - { "5112", AR5K_VERSION_RAD, AR5K_SREV_RAD_5112 }, \ + { "5210 ", AR5K_VERSION_VER, AR5K_SREV_VER_AR5210 }, \ + { "5311 ", AR5K_VERSION_VER, AR5K_SREV_VER_AR5311 }, \ + { "5311A", AR5K_VERSION_VER, AR5K_SREV_VER_AR5311A },\ + { "5311B", AR5K_VERSION_VER, AR5K_SREV_VER_AR5311B },\ + { "5211 ", AR5K_VERSION_VER, AR5K_SREV_VER_AR5211 }, \ + { "5212 ", AR5K_VERSION_VER, AR5K_SREV_VER_AR5212 }, \ + { "5213 ", AR5K_VERSION_VER, AR5K_SREV_VER_AR5213 }, \ + { "5213A", AR5K_VERSION_VER, AR5K_SREV_VER_AR5213A },\ + { "2424 ", AR5K_VERSION_VER, AR5K_SREV_VER_AR2424 }, \ + { "5424 ", AR5K_VERSION_VER, AR5K_SREV_VER_AR5424 }, \ + { "5413 ", AR5K_VERSION_VER, AR5K_SREV_VER_AR5413 }, \ + { "5414 ", AR5K_VERSION_VER, AR5K_SREV_VER_AR5414 }, \ + { "5416 ", AR5K_VERSION_VER, AR5K_SREV_VER_AR5416 }, \ + { "5418 ", AR5K_VERSION_VER, AR5K_SREV_VER_AR5418 }, \ + { "xxxxx", AR5K_VERSION_VER, AR5K_SREV_UNKNOWN }, \ + { "5110 ", AR5K_VERSION_RAD, AR5K_SREV_RAD_5110 }, \ + { "5111 ", AR5K_VERSION_RAD, AR5K_SREV_RAD_5111 }, \ + { "2111 ", AR5K_VERSION_RAD, AR5K_SREV_RAD_2111 }, \ + { "5112 ", AR5K_VERSION_RAD, AR5K_SREV_RAD_5112 }, \ { "5112a", AR5K_VERSION_RAD, AR5K_SREV_RAD_5112A }, \ - { "2112", AR5K_VERSION_RAD, AR5K_SREV_RAD_2112 }, \ + { "2112 ", AR5K_VERSION_RAD, AR5K_SREV_RAD_2112 }, \ { "2112a", AR5K_VERSION_RAD, AR5K_SREV_RAD_2112A }, \ - { "xxxx", AR5K_VERSION_RAD, AR5K_SREV_UNKNOWN }, \ - { "2413", AR5K_VERSION_DEV, AR5K_DEVID_AR2413 }, \ - { "5413", AR5K_VERSION_DEV, AR5K_DEVID_AR5413 }, \ - { "5424", AR5K_VERSION_DEV, AR5K_DEVID_AR5424 }, \ - { "xxxx", AR5K_VERSION_DEV, AR5K_SREV_UNKNOWN } \ + { "SChip", AR5K_VERSION_RAD, AR5K_SREV_RAD_SC1 }, \ + { "SChip", AR5K_VERSION_RAD, AR5K_SREV_RAD_SC2 }, \ + { "5133", AR5K_VERSION_RAD, AR5K_SREV_RAD_5133 }, \ + { "xxxxx", AR5K_VERSION_RAD, AR5K_SREV_UNKNOWN }, \ } - #define AR5K_SREV_UNKNOWN 0xffff +/* Known MAC revision numbers */ #define AR5K_SREV_VER_AR5210 0x00 #define AR5K_SREV_VER_AR5311 0x10 #define AR5K_SREV_VER_AR5311A 0x20 @@ -176,8 +182,15 @@ #define AR5K_SREV_VER_AR5211 0x40 #define AR5K_SREV_VER_AR5212 0x50 #define AR5K_SREV_VER_AR5213 0x55 -#define AR5K_SREV_VER_UNSUPP 0x60 +#define AR5K_SREV_VER_AR5213A 0x59 +#define AR5K_SREV_VER_AR2424 0xa0 +#define AR5K_SREV_VER_AR5424 0xa3 +#define AR5K_SREV_VER_AR5413 0xa4 +#define AR5K_SREV_VER_AR5414 0xa5 +#define AR5K_SREV_VER_AR5416 0xc0 +#define AR5K_SREV_VER_AR5418 0xca +/* Known PHY revision nymbers */ #define AR5K_SREV_RAD_5110 0x00 #define AR5K_SREV_RAD_5111 0x10 #define AR5K_SREV_RAD_5111A 0x15 @@ -186,7 +199,9 @@ #define AR5K_SREV_RAD_5112A 0x35 #define AR5K_SREV_RAD_2112 0x40 #define AR5K_SREV_RAD_2112A 0x45 -#define AR5K_SREV_RAD_UNSUPP 0x50 +#define AR5K_SREV_RAD_SC1 0x63 /* Found on 5413/5414 */ +#define AR5K_SREV_RAD_SC2 0xa2 /* Found on 2424/5424 */ +#define AR5K_SREV_RAD_5133 0xc0 /* MIMO found on 5418 */