diff options
author | Luis R. Rodriguez <lrodriguez@atheros.com> | 2009-08-03 15:24:39 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-08-04 16:44:28 -0400 |
commit | ee2bb460e28b757f097efb9e5947a6e47e2477e1 (patch) | |
tree | f1766258501d18f7064f7a85e544338e23db093c /drivers/net/wireless/ath | |
parent | e1e2f93ffacab692823209e00a124e802039aa9a (diff) |
ath9k: call hw initializer directly
ath9k_hw_attach() was going first through some device id verifier,
and then calling some other helper which was doing the real hardware
initialization. Lets just do the devid checks within the real worker
by calling a helper ath9k_hw_devid_supported().
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.c | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index ff2875b233da..d8ae289a09b4 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c | |||
@@ -608,12 +608,35 @@ static int ath9k_hw_post_attach(struct ath_hw *ah) | |||
608 | return 0; | 608 | return 0; |
609 | } | 609 | } |
610 | 610 | ||
611 | static int ath9k_hw_do_attach(struct ath_hw *ah, | 611 | static bool ath9k_hw_devid_supported(u16 devid) |
612 | struct ath_softc *sc) | 612 | { |
613 | switch (devid) { | ||
614 | case AR5416_DEVID_PCI: | ||
615 | case AR5416_DEVID_PCIE: | ||
616 | case AR5416_AR9100_DEVID: | ||
617 | case AR9160_DEVID_PCI: | ||
618 | case AR9280_DEVID_PCI: | ||
619 | case AR9280_DEVID_PCIE: | ||
620 | case AR9285_DEVID_PCIE: | ||
621 | case AR5416_DEVID_AR9287_PCI: | ||
622 | case AR5416_DEVID_AR9287_PCIE: | ||
623 | return true; | ||
624 | default: | ||
625 | break; | ||
626 | } | ||
627 | return false; | ||
628 | } | ||
629 | |||
630 | int ath9k_hw_attach(struct ath_hw *ah, struct ath_softc *sc) | ||
613 | { | 631 | { |
614 | int r; | 632 | int r; |
615 | u32 i, j; | 633 | u32 i, j; |
616 | 634 | ||
635 | if (!ath9k_hw_devid_supported(ah->hw_version.devid)) { | ||
636 | r = -EOPNOTSUPP; | ||
637 | goto bad; | ||
638 | } | ||
639 | |||
617 | ath9k_hw_newstate(ah); | 640 | ath9k_hw_newstate(ah); |
618 | ath9k_hw_set_defaults(ah); | 641 | ath9k_hw_set_defaults(ah); |
619 | 642 | ||
@@ -1183,25 +1206,6 @@ void ath9k_hw_detach(struct ath_hw *ah) | |||
1183 | kfree(ah); | 1206 | kfree(ah); |
1184 | } | 1207 | } |
1185 | 1208 | ||
1186 | int ath9k_hw_attach(struct ath_hw *ah, struct ath_softc *sc) | ||
1187 | { | ||
1188 | switch (ah->hw_version.devid) { | ||
1189 | case AR5416_DEVID_PCI: | ||
1190 | case AR5416_DEVID_PCIE: | ||
1191 | case AR5416_AR9100_DEVID: | ||
1192 | case AR9160_DEVID_PCI: | ||
1193 | case AR9280_DEVID_PCI: | ||
1194 | case AR9280_DEVID_PCIE: | ||
1195 | case AR9285_DEVID_PCIE: | ||
1196 | case AR5416_DEVID_AR9287_PCI: | ||
1197 | case AR5416_DEVID_AR9287_PCIE: | ||
1198 | return ath9k_hw_do_attach(ah, sc); | ||
1199 | default: | ||
1200 | break; | ||
1201 | } | ||
1202 | return -EOPNOTSUPP; | ||
1203 | } | ||
1204 | |||
1205 | /*******/ | 1209 | /*******/ |
1206 | /* INI */ | 1210 | /* INI */ |
1207 | /*******/ | 1211 | /*******/ |
@@ -2898,7 +2902,7 @@ void ath9k_hw_configpcipowersave(struct ath_hw *ah, int restore) | |||
2898 | /* | 2902 | /* |
2899 | * AR9280 2.0 or later chips use SerDes values from the | 2903 | * AR9280 2.0 or later chips use SerDes values from the |
2900 | * initvals.h initialized depending on chipset during | 2904 | * initvals.h initialized depending on chipset during |
2901 | * ath9k_hw_do_attach() | 2905 | * ath9k_hw_attach() |
2902 | */ | 2906 | */ |
2903 | for (i = 0; i < ah->iniPcieSerdes.ia_rows; i++) { | 2907 | for (i = 0; i < ah->iniPcieSerdes.ia_rows; i++) { |
2904 | REG_WRITE(ah, INI_RA(&ah->iniPcieSerdes, i, 0), | 2908 | REG_WRITE(ah, INI_RA(&ah->iniPcieSerdes, i, 0), |