aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStanislaw Gruszka <stf_xl@wp.pl>2013-04-17 08:08:11 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-04-22 15:20:16 -0400
commitce94ede923ce8c0a2e62a367ae9352f8ceb47cb7 (patch)
treec7c4f1b892eb84bfb73a0ccb642ff4b03abd51e6
parentf7df8fe527e79fdc35defc49bc74e2ee2ff742b1 (diff)
rt2800: move rf init calibration code
Add separate function for rf init calibration code and use it on all init rf subroutines. Signed-off-by: Stanislaw Gruszka <stf_xl@wp.pl> Acked-by: Gertjan van Wingerde <gwingerde@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c54
1 files changed, 32 insertions, 22 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 22c10e1e5ad6..6e9ca3e00f1d 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -4396,6 +4396,19 @@ static u8 rt2800_init_rx_filter(struct rt2x00_dev *rt2x00dev,
4396 return rfcsr24; 4396 return rfcsr24;
4397} 4397}
4398 4398
4399static void rt2800_rf_init_calibration(struct rt2x00_dev *rt2x00dev,
4400 const unsigned int rf_reg)
4401{
4402 u8 rfcsr;
4403
4404 rt2800_rfcsr_read(rt2x00dev, rf_reg, &rfcsr);
4405 rt2x00_set_field8(&rfcsr, FIELD8(0x80), 1);
4406 rt2800_rfcsr_write(rt2x00dev, rf_reg, rfcsr);
4407 msleep(1);
4408 rt2x00_set_field8(&rfcsr, FIELD8(0x80), 0);
4409 rt2800_rfcsr_write(rt2x00dev, rf_reg, rfcsr);
4410}
4411
4399static void rt2800_normal_mode_setup_5xxx(struct rt2x00_dev *rt2x00dev) 4412static void rt2800_normal_mode_setup_5xxx(struct rt2x00_dev *rt2x00dev)
4400{ 4413{
4401 u8 reg; 4414 u8 reg;
@@ -4427,6 +4440,8 @@ static void rt2800_normal_mode_setup_5xxx(struct rt2x00_dev *rt2x00dev)
4427 4440
4428static void rt2800_init_rfcsr_305x_soc(struct rt2x00_dev *rt2x00dev) 4441static void rt2800_init_rfcsr_305x_soc(struct rt2x00_dev *rt2x00dev)
4429{ 4442{
4443 rt2800_rf_init_calibration(rt2x00dev, 30);
4444
4430 rt2800_rfcsr_write(rt2x00dev, 0, 0x50); 4445 rt2800_rfcsr_write(rt2x00dev, 0, 0x50);
4431 rt2800_rfcsr_write(rt2x00dev, 1, 0x01); 4446 rt2800_rfcsr_write(rt2x00dev, 1, 0x01);
4432 rt2800_rfcsr_write(rt2x00dev, 2, 0xf7); 4447 rt2800_rfcsr_write(rt2x00dev, 2, 0xf7);
@@ -4463,6 +4478,9 @@ static void rt2800_init_rfcsr_305x_soc(struct rt2x00_dev *rt2x00dev)
4463 4478
4464static void rt2800_init_rfcsr_30xx(struct rt2x00_dev *rt2x00dev) 4479static void rt2800_init_rfcsr_30xx(struct rt2x00_dev *rt2x00dev)
4465{ 4480{
4481 /* XXX vendor driver do this only for 3070 */
4482 rt2800_rf_init_calibration(rt2x00dev, 30);
4483
4466 rt2800_rfcsr_write(rt2x00dev, 4, 0x40); 4484 rt2800_rfcsr_write(rt2x00dev, 4, 0x40);
4467 rt2800_rfcsr_write(rt2x00dev, 5, 0x03); 4485 rt2800_rfcsr_write(rt2x00dev, 5, 0x03);
4468 rt2800_rfcsr_write(rt2x00dev, 6, 0x02); 4486 rt2800_rfcsr_write(rt2x00dev, 6, 0x02);
@@ -4486,6 +4504,8 @@ static void rt2800_init_rfcsr_30xx(struct rt2x00_dev *rt2x00dev)
4486 4504
4487static void rt2800_init_rfcsr_3290(struct rt2x00_dev *rt2x00dev) 4505static void rt2800_init_rfcsr_3290(struct rt2x00_dev *rt2x00dev)
4488{ 4506{
4507 rt2800_rf_init_calibration(rt2x00dev, 2);
4508
4489 rt2800_rfcsr_write(rt2x00dev, 1, 0x0f); 4509 rt2800_rfcsr_write(rt2x00dev, 1, 0x0f);
4490 rt2800_rfcsr_write(rt2x00dev, 2, 0x80); 4510 rt2800_rfcsr_write(rt2x00dev, 2, 0x80);
4491 rt2800_rfcsr_write(rt2x00dev, 3, 0x08); 4511 rt2800_rfcsr_write(rt2x00dev, 3, 0x08);
@@ -4536,6 +4556,8 @@ static void rt2800_init_rfcsr_3290(struct rt2x00_dev *rt2x00dev)
4536 4556
4537static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev) 4557static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev)
4538{ 4558{
4559 rt2800_rf_init_calibration(rt2x00dev, 30);
4560
4539 rt2800_rfcsr_write(rt2x00dev, 0, 0xf0); 4561 rt2800_rfcsr_write(rt2x00dev, 0, 0xf0);
4540 rt2800_rfcsr_write(rt2x00dev, 1, 0x23); 4562 rt2800_rfcsr_write(rt2x00dev, 1, 0x23);
4541 rt2800_rfcsr_write(rt2x00dev, 2, 0x50); 4563 rt2800_rfcsr_write(rt2x00dev, 2, 0x50);
@@ -4603,6 +4625,8 @@ static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev)
4603 4625
4604static void rt2800_init_rfcsr_3390(struct rt2x00_dev *rt2x00dev) 4626static void rt2800_init_rfcsr_3390(struct rt2x00_dev *rt2x00dev)
4605{ 4627{
4628 rt2800_rf_init_calibration(rt2x00dev, 30);
4629
4606 rt2800_rfcsr_write(rt2x00dev, 0, 0xa0); 4630 rt2800_rfcsr_write(rt2x00dev, 0, 0xa0);
4607 rt2800_rfcsr_write(rt2x00dev, 1, 0xe1); 4631 rt2800_rfcsr_write(rt2x00dev, 1, 0xe1);
4608 rt2800_rfcsr_write(rt2x00dev, 2, 0xf1); 4632 rt2800_rfcsr_write(rt2x00dev, 2, 0xf1);
@@ -4639,6 +4663,8 @@ static void rt2800_init_rfcsr_3390(struct rt2x00_dev *rt2x00dev)
4639 4663
4640static void rt2800_init_rfcsr_3572(struct rt2x00_dev *rt2x00dev) 4664static void rt2800_init_rfcsr_3572(struct rt2x00_dev *rt2x00dev)
4641{ 4665{
4666 rt2800_rf_init_calibration(rt2x00dev, 30);
4667
4642 rt2800_rfcsr_write(rt2x00dev, 0, 0x70); 4668 rt2800_rfcsr_write(rt2x00dev, 0, 0x70);
4643 rt2800_rfcsr_write(rt2x00dev, 1, 0x81); 4669 rt2800_rfcsr_write(rt2x00dev, 1, 0x81);
4644 rt2800_rfcsr_write(rt2x00dev, 2, 0xf1); 4670 rt2800_rfcsr_write(rt2x00dev, 2, 0xf1);
@@ -4674,6 +4700,8 @@ static void rt2800_init_rfcsr_3572(struct rt2x00_dev *rt2x00dev)
4674 4700
4675static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev) 4701static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev)
4676{ 4702{
4703 rt2800_rf_init_calibration(rt2x00dev, 2);
4704
4677 rt2800_rfcsr_write(rt2x00dev, 1, 0x0f); 4705 rt2800_rfcsr_write(rt2x00dev, 1, 0x0f);
4678 rt2800_rfcsr_write(rt2x00dev, 2, 0x80); 4706 rt2800_rfcsr_write(rt2x00dev, 2, 0x80);
4679 rt2800_rfcsr_write(rt2x00dev, 3, 0x88); 4707 rt2800_rfcsr_write(rt2x00dev, 3, 0x88);
@@ -4760,6 +4788,8 @@ static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev)
4760 4788
4761static void rt2800_init_rfcsr_5392(struct rt2x00_dev *rt2x00dev) 4789static void rt2800_init_rfcsr_5392(struct rt2x00_dev *rt2x00dev)
4762{ 4790{
4791 rt2800_rf_init_calibration(rt2x00dev, 2);
4792
4763 rt2800_rfcsr_write(rt2x00dev, 1, 0x17); 4793 rt2800_rfcsr_write(rt2x00dev, 1, 0x17);
4764 rt2800_rfcsr_write(rt2x00dev, 2, 0x80); 4794 rt2800_rfcsr_write(rt2x00dev, 2, 0x80);
4765 rt2800_rfcsr_write(rt2x00dev, 3, 0x88); 4795 rt2800_rfcsr_write(rt2x00dev, 3, 0x88);
@@ -4825,6 +4855,8 @@ static void rt2800_init_rfcsr_5392(struct rt2x00_dev *rt2x00dev)
4825 4855
4826static void rt2800_init_rfcsr_5592(struct rt2x00_dev *rt2x00dev) 4856static void rt2800_init_rfcsr_5592(struct rt2x00_dev *rt2x00dev)
4827{ 4857{
4858 rt2800_rf_init_calibration(rt2x00dev, 30);
4859
4828 rt2800_rfcsr_write(rt2x00dev, 1, 0x3F); 4860 rt2800_rfcsr_write(rt2x00dev, 1, 0x3F);
4829 rt2800_rfcsr_write(rt2x00dev, 3, 0x08); 4861 rt2800_rfcsr_write(rt2x00dev, 3, 0x08);
4830 rt2800_rfcsr_write(rt2x00dev, 3, 0x08); 4862 rt2800_rfcsr_write(rt2x00dev, 3, 0x08);
@@ -4882,28 +4914,6 @@ static int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
4882 !rt2800_is_305x_soc(rt2x00dev)) 4914 !rt2800_is_305x_soc(rt2x00dev))
4883 return 0; 4915 return 0;
4884 4916
4885 /*
4886 * Init RF calibration.
4887 */
4888
4889 if (rt2x00_rt(rt2x00dev, RT3290) ||
4890 rt2x00_rt(rt2x00dev, RT5390) ||
4891 rt2x00_rt(rt2x00dev, RT5392)) {
4892 rt2800_rfcsr_read(rt2x00dev, 2, &rfcsr);
4893 rt2x00_set_field8(&rfcsr, RFCSR2_RESCAL_EN, 1);
4894 rt2800_rfcsr_write(rt2x00dev, 2, rfcsr);
4895 msleep(1);
4896 rt2x00_set_field8(&rfcsr, RFCSR2_RESCAL_EN, 0);
4897 rt2800_rfcsr_write(rt2x00dev, 2, rfcsr);
4898 } else {
4899 rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr);
4900 rt2x00_set_field8(&rfcsr, RFCSR30_RF_CALIBRATION, 1);
4901 rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
4902 msleep(1);
4903 rt2x00_set_field8(&rfcsr, RFCSR30_RF_CALIBRATION, 0);
4904 rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
4905 }
4906
4907 if (rt2800_is_305x_soc(rt2x00dev)) { 4917 if (rt2800_is_305x_soc(rt2x00dev)) {
4908 rt2800_init_rfcsr_305x_soc(rt2x00dev); 4918 rt2800_init_rfcsr_305x_soc(rt2x00dev);
4909 return 0; 4919 return 0;