diff options
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c index cf757ca61dce..86d8ebce0aff 100644 --- a/drivers/net/wireless/rt2x00/rt2800lib.c +++ b/drivers/net/wireless/rt2x00/rt2800lib.c | |||
@@ -4332,6 +4332,15 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev) | |||
4332 | return 0; | 4332 | return 0; |
4333 | } | 4333 | } |
4334 | 4334 | ||
4335 | static void rt2800_led_open_drain_enable(struct rt2x00_dev *rt2x00dev) | ||
4336 | { | ||
4337 | u32 reg; | ||
4338 | |||
4339 | rt2800_register_read(rt2x00dev, OPT_14_CSR, ®); | ||
4340 | rt2x00_set_field32(®, OPT_14_CSR_BIT0, 1); | ||
4341 | rt2800_register_write(rt2x00dev, OPT_14_CSR, reg); | ||
4342 | } | ||
4343 | |||
4335 | static u8 rt2800_init_rx_filter(struct rt2x00_dev *rt2x00dev, bool bw40, | 4344 | static u8 rt2800_init_rx_filter(struct rt2x00_dev *rt2x00dev, bool bw40, |
4336 | u8 filter_target) | 4345 | u8 filter_target) |
4337 | { | 4346 | { |
@@ -4588,6 +4597,8 @@ static void rt2800_init_rfcsr_30xx(struct rt2x00_dev *rt2x00dev) | |||
4588 | rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) || | 4597 | rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) || |
4589 | rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E)) | 4598 | rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E)) |
4590 | rt2800_rfcsr_write(rt2x00dev, 27, 0x03); | 4599 | rt2800_rfcsr_write(rt2x00dev, 27, 0x03); |
4600 | |||
4601 | rt2800_led_open_drain_enable(rt2x00dev); | ||
4591 | } | 4602 | } |
4592 | 4603 | ||
4593 | static void rt2800_init_rfcsr_3290(struct rt2x00_dev *rt2x00dev) | 4604 | static void rt2800_init_rfcsr_3290(struct rt2x00_dev *rt2x00dev) |
@@ -4646,6 +4657,8 @@ static void rt2800_init_rfcsr_3290(struct rt2x00_dev *rt2x00dev) | |||
4646 | rt2800_rfcsr_read(rt2x00dev, 29, &rfcsr); | 4657 | rt2800_rfcsr_read(rt2x00dev, 29, &rfcsr); |
4647 | rt2x00_set_field8(&rfcsr, RFCSR29_RSSI_GAIN, 3); | 4658 | rt2x00_set_field8(&rfcsr, RFCSR29_RSSI_GAIN, 3); |
4648 | rt2800_rfcsr_write(rt2x00dev, 29, rfcsr); | 4659 | rt2800_rfcsr_write(rt2x00dev, 29, rfcsr); |
4660 | |||
4661 | rt2800_led_open_drain_enable(rt2x00dev); | ||
4649 | } | 4662 | } |
4650 | 4663 | ||
4651 | static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev) | 4664 | static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev) |
@@ -4717,6 +4730,8 @@ static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev) | |||
4717 | rt2800_rfcsr_write(rt2x00dev, 63, 0x00); | 4730 | rt2800_rfcsr_write(rt2x00dev, 63, 0x00); |
4718 | 4731 | ||
4719 | rt2800_rx_filter_calibration(rt2x00dev); | 4732 | rt2800_rx_filter_calibration(rt2x00dev); |
4733 | |||
4734 | rt2800_led_open_drain_enable(rt2x00dev); | ||
4720 | } | 4735 | } |
4721 | 4736 | ||
4722 | static void rt2800_init_rfcsr_3390(struct rt2x00_dev *rt2x00dev) | 4737 | static void rt2800_init_rfcsr_3390(struct rt2x00_dev *rt2x00dev) |
@@ -4766,6 +4781,8 @@ static void rt2800_init_rfcsr_3390(struct rt2x00_dev *rt2x00dev) | |||
4766 | 4781 | ||
4767 | if (rt2x00_rt_rev_lt(rt2x00dev, RT3390, REV_RT3390E)) | 4782 | if (rt2x00_rt_rev_lt(rt2x00dev, RT3390, REV_RT3390E)) |
4768 | rt2800_rfcsr_write(rt2x00dev, 27, 0x03); | 4783 | rt2800_rfcsr_write(rt2x00dev, 27, 0x03); |
4784 | |||
4785 | rt2800_led_open_drain_enable(rt2x00dev); | ||
4769 | } | 4786 | } |
4770 | 4787 | ||
4771 | static void rt2800_init_rfcsr_3572(struct rt2x00_dev *rt2x00dev) | 4788 | static void rt2800_init_rfcsr_3572(struct rt2x00_dev *rt2x00dev) |
@@ -4822,6 +4839,8 @@ static void rt2800_init_rfcsr_3572(struct rt2x00_dev *rt2x00dev) | |||
4822 | rt2800_register_write(rt2x00dev, LDO_CFG0, reg); | 4839 | rt2800_register_write(rt2x00dev, LDO_CFG0, reg); |
4823 | 4840 | ||
4824 | rt2800_rx_filter_calibration(rt2x00dev); | 4841 | rt2800_rx_filter_calibration(rt2x00dev); |
4842 | |||
4843 | rt2800_led_open_drain_enable(rt2x00dev); | ||
4825 | } | 4844 | } |
4826 | 4845 | ||
4827 | static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev) | 4846 | static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev) |
@@ -4910,6 +4929,8 @@ static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev) | |||
4910 | rt2800_rfcsr_write(rt2x00dev, 63, 0x00); | 4929 | rt2800_rfcsr_write(rt2x00dev, 63, 0x00); |
4911 | 4930 | ||
4912 | rt2800_normal_mode_setup_5xxx(rt2x00dev); | 4931 | rt2800_normal_mode_setup_5xxx(rt2x00dev); |
4932 | |||
4933 | rt2800_led_open_drain_enable(rt2x00dev); | ||
4913 | } | 4934 | } |
4914 | 4935 | ||
4915 | static void rt2800_init_rfcsr_5392(struct rt2x00_dev *rt2x00dev) | 4936 | static void rt2800_init_rfcsr_5392(struct rt2x00_dev *rt2x00dev) |
@@ -4977,6 +4998,8 @@ static void rt2800_init_rfcsr_5392(struct rt2x00_dev *rt2x00dev) | |||
4977 | rt2800_rfcsr_write(rt2x00dev, 63, 0x07); | 4998 | rt2800_rfcsr_write(rt2x00dev, 63, 0x07); |
4978 | 4999 | ||
4979 | rt2800_normal_mode_setup_5xxx(rt2x00dev); | 5000 | rt2800_normal_mode_setup_5xxx(rt2x00dev); |
5001 | |||
5002 | rt2800_led_open_drain_enable(rt2x00dev); | ||
4980 | } | 5003 | } |
4981 | 5004 | ||
4982 | static void rt2800_init_rfcsr_5592(struct rt2x00_dev *rt2x00dev) | 5005 | static void rt2800_init_rfcsr_5592(struct rt2x00_dev *rt2x00dev) |
@@ -5019,6 +5042,8 @@ static void rt2800_init_rfcsr_5592(struct rt2x00_dev *rt2x00dev) | |||
5019 | 5042 | ||
5020 | if (rt2x00_rt_rev_lt(rt2x00dev, RT5592, REV_RT5592C)) | 5043 | if (rt2x00_rt_rev_lt(rt2x00dev, RT5592, REV_RT5592C)) |
5021 | rt2800_rfcsr_write(rt2x00dev, 27, 0x03); | 5044 | rt2800_rfcsr_write(rt2x00dev, 27, 0x03); |
5045 | |||
5046 | rt2800_led_open_drain_enable(rt2x00dev); | ||
5022 | } | 5047 | } |
5023 | 5048 | ||
5024 | static int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev) | 5049 | static int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev) |
@@ -5077,10 +5102,6 @@ static int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev) | |||
5077 | return 0; | 5102 | return 0; |
5078 | } | 5103 | } |
5079 | 5104 | ||
5080 | rt2800_register_read(rt2x00dev, OPT_14_CSR, ®); | ||
5081 | rt2x00_set_field32(®, OPT_14_CSR_BIT0, 1); | ||
5082 | rt2800_register_write(rt2x00dev, OPT_14_CSR, reg); | ||
5083 | |||
5084 | if (!rt2x00_rt(rt2x00dev, RT5390) && | 5105 | if (!rt2x00_rt(rt2x00dev, RT5390) && |
5085 | !rt2x00_rt(rt2x00dev, RT5392)) { | 5106 | !rt2x00_rt(rt2x00dev, RT5392)) { |
5086 | u8 min_gain = rt2x00_rt(rt2x00dev, RT3070) ? 1 : 2; | 5107 | u8 min_gain = rt2x00_rt(rt2x00dev, RT3070) ? 1 : 2; |