aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGertjan van Wingerde <gwingerde@gmail.com>2010-04-11 08:31:15 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-04-12 15:22:13 -0400
commitcc78e904bd960196233e2cd6a49068bba8787527 (patch)
tree0245f992006351a6efa120e13f209bc1e39a9b27
parent64522957ce35df995dfd73bee548304f2a39cc3e (diff)
rt2x00: Add rt3390 support in rt2800 register initialization.
Add RT3390 specific register initializations to rt2x00, based on the latest Ralink rt3390 vendor driver. Untested as I don't actually own an RT3390 based device, but given experiences on rt3070/rt3071 very hopeful that this will actually work.. Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com> Acked-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/rt2x00/rt2800lib.c70
1 files changed, 59 insertions, 11 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index d74608228a99..638600092f19 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -1044,7 +1044,8 @@ static u8 rt2800_get_default_vgc(struct rt2x00_dev *rt2x00dev)
1044 if (rt2x00dev->curr_band == IEEE80211_BAND_2GHZ) { 1044 if (rt2x00dev->curr_band == IEEE80211_BAND_2GHZ) {
1045 if (rt2x00_rt(rt2x00dev, RT3070) || 1045 if (rt2x00_rt(rt2x00dev, RT3070) ||
1046 rt2x00_rt(rt2x00dev, RT3071) || 1046 rt2x00_rt(rt2x00dev, RT3071) ||
1047 rt2x00_rt(rt2x00dev, RT3090)) 1047 rt2x00_rt(rt2x00dev, RT3090) ||
1048 rt2x00_rt(rt2x00dev, RT3390))
1048 return 0x1c + (2 * rt2x00dev->lna_gain); 1049 return 0x1c + (2 * rt2x00dev->lna_gain);
1049 else 1050 else
1050 return 0x2e + rt2x00dev->lna_gain; 1051 return 0x2e + rt2x00dev->lna_gain;
@@ -1194,11 +1195,13 @@ int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
1194 rt2800_register_write(rt2x00dev, BKOFF_SLOT_CFG, reg); 1195 rt2800_register_write(rt2x00dev, BKOFF_SLOT_CFG, reg);
1195 1196
1196 if (rt2x00_rt(rt2x00dev, RT3071) || 1197 if (rt2x00_rt(rt2x00dev, RT3071) ||
1197 rt2x00_rt(rt2x00dev, RT3090)) { 1198 rt2x00_rt(rt2x00dev, RT3090) ||
1199 rt2x00_rt(rt2x00dev, RT3390)) {
1198 rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400); 1200 rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400);
1199 rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00000000); 1201 rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00000000);
1200 if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) || 1202 if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) ||
1201 rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E)) { 1203 rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E) ||
1204 rt2x00_rt_rev_lt(rt2x00dev, RT3390, REV_RT3390E)) {
1202 rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &eeprom); 1205 rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &eeprom);
1203 if (rt2x00_get_field16(eeprom, EEPROM_NIC_DAC_TEST)) 1206 if (rt2x00_get_field16(eeprom, EEPROM_NIC_DAC_TEST))
1204 rt2800_register_write(rt2x00dev, TX_SW_CFG2, 1207 rt2800_register_write(rt2x00dev, TX_SW_CFG2,
@@ -1562,7 +1565,8 @@ int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
1562 1565
1563 if (rt2x00_rt(rt2x00dev, RT3070) || 1566 if (rt2x00_rt(rt2x00dev, RT3070) ||
1564 rt2x00_rt(rt2x00dev, RT3071) || 1567 rt2x00_rt(rt2x00dev, RT3071) ||
1565 rt2x00_rt(rt2x00dev, RT3090)) { 1568 rt2x00_rt(rt2x00dev, RT3090) ||
1569 rt2x00_rt(rt2x00dev, RT3390)) {
1566 rt2800_bbp_write(rt2x00dev, 79, 0x13); 1570 rt2800_bbp_write(rt2x00dev, 79, 0x13);
1567 rt2800_bbp_write(rt2x00dev, 80, 0x05); 1571 rt2800_bbp_write(rt2x00dev, 80, 0x05);
1568 rt2800_bbp_write(rt2x00dev, 81, 0x33); 1572 rt2800_bbp_write(rt2x00dev, 81, 0x33);
@@ -1585,7 +1589,8 @@ int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
1585 1589
1586 if (rt2x00_rt_rev_gte(rt2x00dev, RT3070, REV_RT3070F) || 1590 if (rt2x00_rt_rev_gte(rt2x00dev, RT3070, REV_RT3070F) ||
1587 rt2x00_rt_rev_gte(rt2x00dev, RT3071, REV_RT3071E) || 1591 rt2x00_rt_rev_gte(rt2x00dev, RT3071, REV_RT3071E) ||
1588 rt2x00_rt_rev_gte(rt2x00dev, RT3090, REV_RT3090E)) 1592 rt2x00_rt_rev_gte(rt2x00dev, RT3090, REV_RT3090E) ||
1593 rt2x00_rt_rev_gte(rt2x00dev, RT3390, REV_RT3390E))
1589 rt2800_bbp_write(rt2x00dev, 103, 0xc0); 1594 rt2800_bbp_write(rt2x00dev, 103, 0xc0);
1590 else 1595 else
1591 rt2800_bbp_write(rt2x00dev, 103, 0x00); 1596 rt2800_bbp_write(rt2x00dev, 103, 0x00);
@@ -1594,7 +1599,8 @@ int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
1594 rt2800_bbp_write(rt2x00dev, 106, 0x35); 1599 rt2800_bbp_write(rt2x00dev, 106, 0x35);
1595 1600
1596 if (rt2x00_rt(rt2x00dev, RT3071) || 1601 if (rt2x00_rt(rt2x00dev, RT3071) ||
1597 rt2x00_rt(rt2x00dev, RT3090)) { 1602 rt2x00_rt(rt2x00dev, RT3090) ||
1603 rt2x00_rt(rt2x00dev, RT3390)) {
1598 rt2800_bbp_read(rt2x00dev, 138, &value); 1604 rt2800_bbp_read(rt2x00dev, 138, &value);
1599 1605
1600 rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom); 1606 rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
@@ -1695,7 +1701,8 @@ int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
1695 1701
1696 if (!rt2x00_rt(rt2x00dev, RT3070) && 1702 if (!rt2x00_rt(rt2x00dev, RT3070) &&
1697 !rt2x00_rt(rt2x00dev, RT3071) && 1703 !rt2x00_rt(rt2x00dev, RT3071) &&
1698 !rt2x00_rt(rt2x00dev, RT3090)) 1704 !rt2x00_rt(rt2x00dev, RT3090) &&
1705 !rt2x00_rt(rt2x00dev, RT3390))
1699 return 0; 1706 return 0;
1700 1707
1701 /* 1708 /*
@@ -1730,6 +1737,39 @@ int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
1730 rt2800_rfcsr_write(rt2x00dev, 24, 0x16); 1737 rt2800_rfcsr_write(rt2x00dev, 24, 0x16);
1731 rt2800_rfcsr_write(rt2x00dev, 25, 0x01); 1738 rt2800_rfcsr_write(rt2x00dev, 25, 0x01);
1732 rt2800_rfcsr_write(rt2x00dev, 29, 0x1f); 1739 rt2800_rfcsr_write(rt2x00dev, 29, 0x1f);
1740 } else if (rt2x00_rt(rt2x00dev, RT3390)) {
1741 rt2800_rfcsr_write(rt2x00dev, 0, 0xa0);
1742 rt2800_rfcsr_write(rt2x00dev, 1, 0xe1);
1743 rt2800_rfcsr_write(rt2x00dev, 2, 0xf1);
1744 rt2800_rfcsr_write(rt2x00dev, 3, 0x62);
1745 rt2800_rfcsr_write(rt2x00dev, 4, 0x40);
1746 rt2800_rfcsr_write(rt2x00dev, 5, 0x8b);
1747 rt2800_rfcsr_write(rt2x00dev, 6, 0x42);
1748 rt2800_rfcsr_write(rt2x00dev, 7, 0x34);
1749 rt2800_rfcsr_write(rt2x00dev, 8, 0x00);
1750 rt2800_rfcsr_write(rt2x00dev, 9, 0xc0);
1751 rt2800_rfcsr_write(rt2x00dev, 10, 0x61);
1752 rt2800_rfcsr_write(rt2x00dev, 11, 0x21);
1753 rt2800_rfcsr_write(rt2x00dev, 12, 0x3b);
1754 rt2800_rfcsr_write(rt2x00dev, 13, 0xe0);
1755 rt2800_rfcsr_write(rt2x00dev, 14, 0x90);
1756 rt2800_rfcsr_write(rt2x00dev, 15, 0x53);
1757 rt2800_rfcsr_write(rt2x00dev, 16, 0xe0);
1758 rt2800_rfcsr_write(rt2x00dev, 17, 0x94);
1759 rt2800_rfcsr_write(rt2x00dev, 18, 0x5c);
1760 rt2800_rfcsr_write(rt2x00dev, 19, 0x4a);
1761 rt2800_rfcsr_write(rt2x00dev, 20, 0xb2);
1762 rt2800_rfcsr_write(rt2x00dev, 21, 0xf6);
1763 rt2800_rfcsr_write(rt2x00dev, 22, 0x00);
1764 rt2800_rfcsr_write(rt2x00dev, 23, 0x14);
1765 rt2800_rfcsr_write(rt2x00dev, 24, 0x08);
1766 rt2800_rfcsr_write(rt2x00dev, 25, 0x3d);
1767 rt2800_rfcsr_write(rt2x00dev, 26, 0x85);
1768 rt2800_rfcsr_write(rt2x00dev, 27, 0x00);
1769 rt2800_rfcsr_write(rt2x00dev, 28, 0x41);
1770 rt2800_rfcsr_write(rt2x00dev, 29, 0x8f);
1771 rt2800_rfcsr_write(rt2x00dev, 30, 0x20);
1772 rt2800_rfcsr_write(rt2x00dev, 31, 0x0f);
1733 } 1773 }
1734 1774
1735 if (rt2x00_rt_rev_lt(rt2x00dev, RT3070, REV_RT3070F)) { 1775 if (rt2x00_rt_rev_lt(rt2x00dev, RT3070, REV_RT3070F)) {
@@ -1756,6 +1796,10 @@ int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
1756 rt2x00_set_field32(&reg, LDO_CFG0_LDO_CORE_VLEVEL, 0); 1796 rt2x00_set_field32(&reg, LDO_CFG0_LDO_CORE_VLEVEL, 0);
1757 } 1797 }
1758 rt2800_register_write(rt2x00dev, LDO_CFG0, reg); 1798 rt2800_register_write(rt2x00dev, LDO_CFG0, reg);
1799 } else if (rt2x00_rt(rt2x00dev, RT3390)) {
1800 rt2800_register_read(rt2x00dev, GPIO_SWITCH, &reg);
1801 rt2x00_set_field32(&reg, GPIO_SWITCH_5, 0);
1802 rt2800_register_write(rt2x00dev, GPIO_SWITCH, reg);
1759 } 1803 }
1760 1804
1761 /* 1805 /*
@@ -1767,7 +1811,8 @@ int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
1767 rt2x00dev->calibration[1] = 1811 rt2x00dev->calibration[1] =
1768 rt2800_init_rx_filter(rt2x00dev, true, 0x27, 0x19); 1812 rt2800_init_rx_filter(rt2x00dev, true, 0x27, 0x19);
1769 } else if (rt2x00_rt(rt2x00dev, RT3071) || 1813 } else if (rt2x00_rt(rt2x00dev, RT3071) ||
1770 rt2x00_rt(rt2x00dev, RT3090)) { 1814 rt2x00_rt(rt2x00dev, RT3090) ||
1815 rt2x00_rt(rt2x00dev, RT3390)) {
1771 rt2x00dev->calibration[0] = 1816 rt2x00dev->calibration[0] =
1772 rt2800_init_rx_filter(rt2x00dev, false, 0x07, 0x13); 1817 rt2800_init_rx_filter(rt2x00dev, false, 0x07, 0x13);
1773 rt2x00dev->calibration[1] = 1818 rt2x00dev->calibration[1] =
@@ -1792,7 +1837,8 @@ int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
1792 1837
1793 if (rt2x00_rt_rev_lt(rt2x00dev, RT3070, REV_RT3070F) || 1838 if (rt2x00_rt_rev_lt(rt2x00dev, RT3070, REV_RT3070F) ||
1794 rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) || 1839 rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) ||
1795 rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E)) 1840 rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E) ||
1841 rt2x00_rt_rev_lt(rt2x00dev, RT3390, REV_RT3390E))
1796 rt2800_rfcsr_write(rt2x00dev, 27, 0x03); 1842 rt2800_rfcsr_write(rt2x00dev, 27, 0x03);
1797 1843
1798 rt2800_register_read(rt2x00dev, OPT_14_CSR, &reg); 1844 rt2800_register_read(rt2x00dev, OPT_14_CSR, &reg);
@@ -1802,7 +1848,8 @@ int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
1802 rt2800_rfcsr_read(rt2x00dev, 17, &rfcsr); 1848 rt2800_rfcsr_read(rt2x00dev, 17, &rfcsr);
1803 rt2x00_set_field8(&rfcsr, RFCSR17_TX_LO1_EN, 0); 1849 rt2x00_set_field8(&rfcsr, RFCSR17_TX_LO1_EN, 0);
1804 if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) || 1850 if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) ||
1805 rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E)) { 1851 rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E) ||
1852 rt2x00_rt_rev_lt(rt2x00dev, RT3390, REV_RT3390E)) {
1806 rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &eeprom); 1853 rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &eeprom);
1807 if (rt2x00_get_field16(eeprom, EEPROM_NIC_EXTERNAL_LNA_BG)) 1854 if (rt2x00_get_field16(eeprom, EEPROM_NIC_EXTERNAL_LNA_BG))
1808 rt2x00_set_field8(&rfcsr, RFCSR17_R, 1); 1855 rt2x00_set_field8(&rfcsr, RFCSR17_R, 1);
@@ -1827,7 +1874,8 @@ int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
1827 } 1874 }
1828 1875
1829 if (rt2x00_rt(rt2x00dev, RT3071) || 1876 if (rt2x00_rt(rt2x00dev, RT3071) ||
1830 rt2x00_rt(rt2x00dev, RT3090)) { 1877 rt2x00_rt(rt2x00dev, RT3090) ||
1878 rt2x00_rt(rt2x00dev, RT3390)) {
1831 rt2800_rfcsr_read(rt2x00dev, 1, &rfcsr); 1879 rt2800_rfcsr_read(rt2x00dev, 1, &rfcsr);
1832 rt2x00_set_field8(&rfcsr, RFCSR1_RF_BLOCK_EN, 1); 1880 rt2x00_set_field8(&rfcsr, RFCSR1_RF_BLOCK_EN, 1);
1833 rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 0); 1881 rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 0);