diff options
author | David S. Miller <davem@davemloft.net> | 2009-11-18 13:55:32 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-11-18 13:55:32 -0500 |
commit | dfef948ed2ba69cf041840b5e860d6b4e16fa0b1 (patch) | |
tree | eab385cabe589346bcf19385c997ab8dabaef7bd /drivers/net/wireless/rt2x00/rt2500usb.c | |
parent | ea31ba359c55e0734ff895692185d4c50cf0c537 (diff) | |
parent | c85e9d7739fc8d879c4293ea020760926d6f87cd (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2500usb.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2500usb.c | 137 |
1 files changed, 2 insertions, 135 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c index 22dd6d9e2981..b2de43e4f656 100644 --- a/drivers/net/wireless/rt2x00/rt2500usb.c +++ b/drivers/net/wireless/rt2x00/rt2500usb.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | Copyright (C) 2004 - 2009 rt2x00 SourceForge Project | 2 | Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com> |
3 | <http://rt2x00.serialmonkey.com> | 3 | <http://rt2x00.serialmonkey.com> |
4 | 4 | ||
5 | This program is free software; you can redistribute it and/or modify | 5 | This program is free software; you can redistribute it and/or modify |
@@ -716,139 +716,6 @@ static void rt2500usb_reset_tuner(struct rt2x00_dev *rt2x00dev, | |||
716 | } | 716 | } |
717 | 717 | ||
718 | /* | 718 | /* |
719 | * NOTE: This function is directly ported from legacy driver, but | ||
720 | * despite it being declared it was never called. Although link tuning | ||
721 | * sounds like a good idea, and usually works well for the other drivers, | ||
722 | * it does _not_ work with rt2500usb. Enabling this function will result | ||
723 | * in TX capabilities only until association kicks in. Immediately | ||
724 | * after the successful association all TX frames will be kept in the | ||
725 | * hardware queue and never transmitted. | ||
726 | */ | ||
727 | #if 0 | ||
728 | static void rt2500usb_link_tuner(struct rt2x00_dev *rt2x00dev) | ||
729 | { | ||
730 | int rssi = rt2x00_get_link_rssi(&rt2x00dev->link); | ||
731 | u16 bbp_thresh; | ||
732 | u16 vgc_bound; | ||
733 | u16 sens; | ||
734 | u16 r24; | ||
735 | u16 r25; | ||
736 | u16 r61; | ||
737 | u16 r17_sens; | ||
738 | u8 r17; | ||
739 | u8 up_bound; | ||
740 | u8 low_bound; | ||
741 | |||
742 | /* | ||
743 | * Read current r17 value, as well as the sensitivity values | ||
744 | * for the r17 register. | ||
745 | */ | ||
746 | rt2500usb_bbp_read(rt2x00dev, 17, &r17); | ||
747 | rt2x00_eeprom_read(rt2x00dev, EEPROM_BBPTUNE_R17, &r17_sens); | ||
748 | |||
749 | rt2x00_eeprom_read(rt2x00dev, EEPROM_BBPTUNE_VGC, &vgc_bound); | ||
750 | up_bound = rt2x00_get_field16(vgc_bound, EEPROM_BBPTUNE_VGCUPPER); | ||
751 | low_bound = rt2x00_get_field16(vgc_bound, EEPROM_BBPTUNE_VGCLOWER); | ||
752 | |||
753 | /* | ||
754 | * If we are not associated, we should go straight to the | ||
755 | * dynamic CCA tuning. | ||
756 | */ | ||
757 | if (!rt2x00dev->intf_associated) | ||
758 | goto dynamic_cca_tune; | ||
759 | |||
760 | /* | ||
761 | * Determine the BBP tuning threshold and correctly | ||
762 | * set BBP 24, 25 and 61. | ||
763 | */ | ||
764 | rt2x00_eeprom_read(rt2x00dev, EEPROM_BBPTUNE, &bbp_thresh); | ||
765 | bbp_thresh = rt2x00_get_field16(bbp_thresh, EEPROM_BBPTUNE_THRESHOLD); | ||
766 | |||
767 | rt2x00_eeprom_read(rt2x00dev, EEPROM_BBPTUNE_R24, &r24); | ||
768 | rt2x00_eeprom_read(rt2x00dev, EEPROM_BBPTUNE_R25, &r25); | ||
769 | rt2x00_eeprom_read(rt2x00dev, EEPROM_BBPTUNE_R61, &r61); | ||
770 | |||
771 | if ((rssi + bbp_thresh) > 0) { | ||
772 | r24 = rt2x00_get_field16(r24, EEPROM_BBPTUNE_R24_HIGH); | ||
773 | r25 = rt2x00_get_field16(r25, EEPROM_BBPTUNE_R25_HIGH); | ||
774 | r61 = rt2x00_get_field16(r61, EEPROM_BBPTUNE_R61_HIGH); | ||
775 | } else { | ||
776 | r24 = rt2x00_get_field16(r24, EEPROM_BBPTUNE_R24_LOW); | ||
777 | r25 = rt2x00_get_field16(r25, EEPROM_BBPTUNE_R25_LOW); | ||
778 | r61 = rt2x00_get_field16(r61, EEPROM_BBPTUNE_R61_LOW); | ||
779 | } | ||
780 | |||
781 | rt2500usb_bbp_write(rt2x00dev, 24, r24); | ||
782 | rt2500usb_bbp_write(rt2x00dev, 25, r25); | ||
783 | rt2500usb_bbp_write(rt2x00dev, 61, r61); | ||
784 | |||
785 | /* | ||
786 | * A too low RSSI will cause too much false CCA which will | ||
787 | * then corrupt the R17 tuning. To remidy this the tuning should | ||
788 | * be stopped (While making sure the R17 value will not exceed limits) | ||
789 | */ | ||
790 | if (rssi >= -40) { | ||
791 | if (r17 != 0x60) | ||
792 | rt2500usb_bbp_write(rt2x00dev, 17, 0x60); | ||
793 | return; | ||
794 | } | ||
795 | |||
796 | /* | ||
797 | * Special big-R17 for short distance | ||
798 | */ | ||
799 | if (rssi >= -58) { | ||
800 | sens = rt2x00_get_field16(r17_sens, EEPROM_BBPTUNE_R17_LOW); | ||
801 | if (r17 != sens) | ||
802 | rt2500usb_bbp_write(rt2x00dev, 17, sens); | ||
803 | return; | ||
804 | } | ||
805 | |||
806 | /* | ||
807 | * Special mid-R17 for middle distance | ||
808 | */ | ||
809 | if (rssi >= -74) { | ||
810 | sens = rt2x00_get_field16(r17_sens, EEPROM_BBPTUNE_R17_HIGH); | ||
811 | if (r17 != sens) | ||
812 | rt2500usb_bbp_write(rt2x00dev, 17, sens); | ||
813 | return; | ||
814 | } | ||
815 | |||
816 | /* | ||
817 | * Leave short or middle distance condition, restore r17 | ||
818 | * to the dynamic tuning range. | ||
819 | */ | ||
820 | low_bound = 0x32; | ||
821 | if (rssi < -77) | ||
822 | up_bound -= (-77 - rssi); | ||
823 | |||
824 | if (up_bound < low_bound) | ||
825 | up_bound = low_bound; | ||
826 | |||
827 | if (r17 > up_bound) { | ||
828 | rt2500usb_bbp_write(rt2x00dev, 17, up_bound); | ||
829 | rt2x00dev->link.vgc_level = up_bound; | ||
830 | return; | ||
831 | } | ||
832 | |||
833 | dynamic_cca_tune: | ||
834 | |||
835 | /* | ||
836 | * R17 is inside the dynamic tuning range, | ||
837 | * start tuning the link based on the false cca counter. | ||
838 | */ | ||
839 | if (rt2x00dev->link.qual.false_cca > 512 && r17 < up_bound) { | ||
840 | rt2500usb_bbp_write(rt2x00dev, 17, ++r17); | ||
841 | rt2x00dev->link.vgc_level = r17; | ||
842 | } else if (rt2x00dev->link.qual.false_cca < 100 && r17 > low_bound) { | ||
843 | rt2500usb_bbp_write(rt2x00dev, 17, --r17); | ||
844 | rt2x00dev->link.vgc_level = r17; | ||
845 | } | ||
846 | } | ||
847 | #else | ||
848 | #define rt2500usb_link_tuner NULL | ||
849 | #endif | ||
850 | |||
851 | /* | ||
852 | * Initialization functions. | 719 | * Initialization functions. |
853 | */ | 720 | */ |
854 | static int rt2500usb_init_registers(struct rt2x00_dev *rt2x00dev) | 721 | static int rt2500usb_init_registers(struct rt2x00_dev *rt2x00dev) |
@@ -1542,6 +1409,7 @@ static int rt2500usb_init_eeprom(struct rt2x00_dev *rt2x00dev) | |||
1542 | value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RF_TYPE); | 1409 | value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RF_TYPE); |
1543 | rt2500usb_register_read(rt2x00dev, MAC_CSR0, ®); | 1410 | rt2500usb_register_read(rt2x00dev, MAC_CSR0, ®); |
1544 | rt2x00_set_chip(rt2x00dev, RT2570, value, reg); | 1411 | rt2x00_set_chip(rt2x00dev, RT2570, value, reg); |
1412 | rt2x00_print_chip(rt2x00dev); | ||
1545 | 1413 | ||
1546 | if (!rt2x00_check_rev(&rt2x00dev->chip, 0x000ffff0, 0) || | 1414 | if (!rt2x00_check_rev(&rt2x00dev->chip, 0x000ffff0, 0) || |
1547 | rt2x00_check_rev(&rt2x00dev->chip, 0x0000000f, 0)) { | 1415 | rt2x00_check_rev(&rt2x00dev->chip, 0x0000000f, 0)) { |
@@ -1910,7 +1778,6 @@ static const struct rt2x00lib_ops rt2500usb_rt2x00_ops = { | |||
1910 | .rfkill_poll = rt2500usb_rfkill_poll, | 1778 | .rfkill_poll = rt2500usb_rfkill_poll, |
1911 | .link_stats = rt2500usb_link_stats, | 1779 | .link_stats = rt2500usb_link_stats, |
1912 | .reset_tuner = rt2500usb_reset_tuner, | 1780 | .reset_tuner = rt2500usb_reset_tuner, |
1913 | .link_tuner = rt2500usb_link_tuner, | ||
1914 | .write_tx_desc = rt2500usb_write_tx_desc, | 1781 | .write_tx_desc = rt2500usb_write_tx_desc, |
1915 | .write_tx_data = rt2x00usb_write_tx_data, | 1782 | .write_tx_data = rt2x00usb_write_tx_data, |
1916 | .write_beacon = rt2500usb_write_beacon, | 1783 | .write_beacon = rt2500usb_write_beacon, |