aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c29
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
4335static void rt2800_led_open_drain_enable(struct rt2x00_dev *rt2x00dev)
4336{
4337 u32 reg;
4338
4339 rt2800_register_read(rt2x00dev, OPT_14_CSR, &reg);
4340 rt2x00_set_field32(&reg, OPT_14_CSR_BIT0, 1);
4341 rt2800_register_write(rt2x00dev, OPT_14_CSR, reg);
4342}
4343
4335static u8 rt2800_init_rx_filter(struct rt2x00_dev *rt2x00dev, bool bw40, 4344static 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
4593static void rt2800_init_rfcsr_3290(struct rt2x00_dev *rt2x00dev) 4604static 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
4651static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev) 4664static 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
4722static void rt2800_init_rfcsr_3390(struct rt2x00_dev *rt2x00dev) 4737static 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
4771static void rt2800_init_rfcsr_3572(struct rt2x00_dev *rt2x00dev) 4788static 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
4827static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev) 4846static 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
4915static void rt2800_init_rfcsr_5392(struct rt2x00_dev *rt2x00dev) 4936static 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
4982static void rt2800_init_rfcsr_5592(struct rt2x00_dev *rt2x00dev) 5005static 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
5024static int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev) 5049static 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, &reg);
5081 rt2x00_set_field32(&reg, 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;