aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00
diff options
context:
space:
mode:
authorGertjan van Wingerde <gwingerde@gmail.com>2011-04-18 09:32:13 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-04-19 15:39:45 -0400
commite01ae27f8ce6bd3ee26ef33c704f62449ce8233b (patch)
tree28c022b0e755e244e4834f741d2bfce600606624 /drivers/net/wireless/rt2x00
parentce2919c9fffe2aa52f9c3e327176d03764dbf9b5 (diff)
rt2x00: Allow dynamic addition of PCI/USB IDs.
Both USB and PCI drivers allow a system administrator to dynamically add USB/PCI IDs to the device table that a driver supports via the /sys/bus/{usb,pci,pci_express}/drivers/<driver-name>/new_id files. However, for the rt2x00 drivers using this method currently crashes the system with a NULL pointer failure. This is due to the set-up of rt2x00 where the probe functions require a rt2x00_ops structure in the driver_info field of the probed device. As this field is empty for the dynamically added devices this fails for these devices. Fix this by introducing driver-specific probe wrappers that do nothing but calling the bus-specific probe functions with the rt2x00_ops structure as an argument, rather than depending on the driver_info field. Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com> Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00')
-rw-r--r--drivers/net/wireless/rt2x00/rt2400pci.c11
-rw-r--r--drivers/net/wireless/rt2x00/rt2500pci.c10
-rw-r--r--drivers/net/wireless/rt2x00/rt2500usb.c70
-rw-r--r--drivers/net/wireless/rt2x00/rt2800pci.c58
-rw-r--r--drivers/net/wireless/rt2x00/rt2800usb.c440
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00pci.c3
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00pci.h2
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00usb.c3
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00usb.h8
-rw-r--r--drivers/net/wireless/rt2x00/rt61pci.c14
-rw-r--r--drivers/net/wireless/rt2x00/rt73usb.c154
11 files changed, 404 insertions, 369 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
index 01e951717f0..d4acdde7c75 100644
--- a/drivers/net/wireless/rt2x00/rt2400pci.c
+++ b/drivers/net/wireless/rt2x00/rt2400pci.c
@@ -1802,10 +1802,11 @@ static const struct rt2x00_ops rt2400pci_ops = {
1802 * RT2400pci module information. 1802 * RT2400pci module information.
1803 */ 1803 */
1804static DEFINE_PCI_DEVICE_TABLE(rt2400pci_device_table) = { 1804static DEFINE_PCI_DEVICE_TABLE(rt2400pci_device_table) = {
1805 { PCI_DEVICE(0x1814, 0x0101), PCI_DEVICE_DATA(&rt2400pci_ops) }, 1805 { PCI_DEVICE(0x1814, 0x0101) },
1806 { 0, } 1806 { 0, }
1807}; 1807};
1808 1808
1809
1809MODULE_AUTHOR(DRV_PROJECT); 1810MODULE_AUTHOR(DRV_PROJECT);
1810MODULE_VERSION(DRV_VERSION); 1811MODULE_VERSION(DRV_VERSION);
1811MODULE_DESCRIPTION("Ralink RT2400 PCI & PCMCIA Wireless LAN driver."); 1812MODULE_DESCRIPTION("Ralink RT2400 PCI & PCMCIA Wireless LAN driver.");
@@ -1813,10 +1814,16 @@ MODULE_SUPPORTED_DEVICE("Ralink RT2460 PCI & PCMCIA chipset based cards");
1813MODULE_DEVICE_TABLE(pci, rt2400pci_device_table); 1814MODULE_DEVICE_TABLE(pci, rt2400pci_device_table);
1814MODULE_LICENSE("GPL"); 1815MODULE_LICENSE("GPL");
1815 1816
1817static int rt2400pci_probe(struct pci_dev *pci_dev,
1818 const struct pci_device_id *id)
1819{
1820 return rt2x00pci_probe(pci_dev, &rt2400pci_ops);
1821}
1822
1816static struct pci_driver rt2400pci_driver = { 1823static struct pci_driver rt2400pci_driver = {
1817 .name = KBUILD_MODNAME, 1824 .name = KBUILD_MODNAME,
1818 .id_table = rt2400pci_device_table, 1825 .id_table = rt2400pci_device_table,
1819 .probe = rt2x00pci_probe, 1826 .probe = rt2400pci_probe,
1820 .remove = __devexit_p(rt2x00pci_remove), 1827 .remove = __devexit_p(rt2x00pci_remove),
1821 .suspend = rt2x00pci_suspend, 1828 .suspend = rt2x00pci_suspend,
1822 .resume = rt2x00pci_resume, 1829 .resume = rt2x00pci_resume,
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
index c8deeeb9d81..15f5649e2ca 100644
--- a/drivers/net/wireless/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/rt2x00/rt2500pci.c
@@ -2095,7 +2095,7 @@ static const struct rt2x00_ops rt2500pci_ops = {
2095 * RT2500pci module information. 2095 * RT2500pci module information.
2096 */ 2096 */
2097static DEFINE_PCI_DEVICE_TABLE(rt2500pci_device_table) = { 2097static DEFINE_PCI_DEVICE_TABLE(rt2500pci_device_table) = {
2098 { PCI_DEVICE(0x1814, 0x0201), PCI_DEVICE_DATA(&rt2500pci_ops) }, 2098 { PCI_DEVICE(0x1814, 0x0201) },
2099 { 0, } 2099 { 0, }
2100}; 2100};
2101 2101
@@ -2106,10 +2106,16 @@ MODULE_SUPPORTED_DEVICE("Ralink RT2560 PCI & PCMCIA chipset based cards");
2106MODULE_DEVICE_TABLE(pci, rt2500pci_device_table); 2106MODULE_DEVICE_TABLE(pci, rt2500pci_device_table);
2107MODULE_LICENSE("GPL"); 2107MODULE_LICENSE("GPL");
2108 2108
2109static int rt2500pci_probe(struct pci_dev *pci_dev,
2110 const struct pci_device_id *id)
2111{
2112 return rt2x00pci_probe(pci_dev, &rt2500pci_ops);
2113}
2114
2109static struct pci_driver rt2500pci_driver = { 2115static struct pci_driver rt2500pci_driver = {
2110 .name = KBUILD_MODNAME, 2116 .name = KBUILD_MODNAME,
2111 .id_table = rt2500pci_device_table, 2117 .id_table = rt2500pci_device_table,
2112 .probe = rt2x00pci_probe, 2118 .probe = rt2500pci_probe,
2113 .remove = __devexit_p(rt2x00pci_remove), 2119 .remove = __devexit_p(rt2x00pci_remove),
2114 .suspend = rt2x00pci_suspend, 2120 .suspend = rt2x00pci_suspend,
2115 .resume = rt2x00pci_resume, 2121 .resume = rt2x00pci_resume,
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index dbbd8bc851f..d88c36712ef 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -1904,54 +1904,54 @@ static const struct rt2x00_ops rt2500usb_ops = {
1904 */ 1904 */
1905static struct usb_device_id rt2500usb_device_table[] = { 1905static struct usb_device_id rt2500usb_device_table[] = {
1906 /* ASUS */ 1906 /* ASUS */
1907 { USB_DEVICE(0x0b05, 0x1706), USB_DEVICE_DATA(&rt2500usb_ops) }, 1907 { USB_DEVICE(0x0b05, 0x1706) },
1908 { USB_DEVICE(0x0b05, 0x1707), USB_DEVICE_DATA(&rt2500usb_ops) }, 1908 { USB_DEVICE(0x0b05, 0x1707) },
1909 /* Belkin */ 1909 /* Belkin */
1910 { USB_DEVICE(0x050d, 0x7050), USB_DEVICE_DATA(&rt2500usb_ops) }, 1910 { USB_DEVICE(0x050d, 0x7050) },
1911 { USB_DEVICE(0x050d, 0x7051), USB_DEVICE_DATA(&rt2500usb_ops) }, 1911 { USB_DEVICE(0x050d, 0x7051) },
1912 /* Cisco Systems */ 1912 /* Cisco Systems */
1913 { USB_DEVICE(0x13b1, 0x000d), USB_DEVICE_DATA(&rt2500usb_ops) }, 1913 { USB_DEVICE(0x13b1, 0x000d) },
1914 { USB_DEVICE(0x13b1, 0x0011), USB_DEVICE_DATA(&rt2500usb_ops) }, 1914 { USB_DEVICE(0x13b1, 0x0011) },
1915 { USB_DEVICE(0x13b1, 0x001a), USB_DEVICE_DATA(&rt2500usb_ops) }, 1915 { USB_DEVICE(0x13b1, 0x001a) },
1916 /* Conceptronic */ 1916 /* Conceptronic */
1917 { USB_DEVICE(0x14b2, 0x3c02), USB_DEVICE_DATA(&rt2500usb_ops) }, 1917 { USB_DEVICE(0x14b2, 0x3c02) },
1918 /* D-LINK */ 1918 /* D-LINK */
1919 { USB_DEVICE(0x2001, 0x3c00), USB_DEVICE_DATA(&rt2500usb_ops) }, 1919 { USB_DEVICE(0x2001, 0x3c00) },
1920 /* Gigabyte */ 1920 /* Gigabyte */
1921 { USB_DEVICE(0x1044, 0x8001), USB_DEVICE_DATA(&rt2500usb_ops) }, 1921 { USB_DEVICE(0x1044, 0x8001) },
1922 { USB_DEVICE(0x1044, 0x8007), USB_DEVICE_DATA(&rt2500usb_ops) }, 1922 { USB_DEVICE(0x1044, 0x8007) },
1923 /* Hercules */ 1923 /* Hercules */
1924 { USB_DEVICE(0x06f8, 0xe000), USB_DEVICE_DATA(&rt2500usb_ops) }, 1924 { USB_DEVICE(0x06f8, 0xe000) },
1925 /* Melco */ 1925 /* Melco */
1926 { USB_DEVICE(0x0411, 0x005e), USB_DEVICE_DATA(&rt2500usb_ops) }, 1926 { USB_DEVICE(0x0411, 0x005e) },
1927 { USB_DEVICE(0x0411, 0x0066), USB_DEVICE_DATA(&rt2500usb_ops) }, 1927 { USB_DEVICE(0x0411, 0x0066) },
1928 { USB_DEVICE(0x0411, 0x0067), USB_DEVICE_DATA(&rt2500usb_ops) }, 1928 { USB_DEVICE(0x0411, 0x0067) },
1929 { USB_DEVICE(0x0411, 0x008b), USB_DEVICE_DATA(&rt2500usb_ops) }, 1929 { USB_DEVICE(0x0411, 0x008b) },
1930 { USB_DEVICE(0x0411, 0x0097), USB_DEVICE_DATA(&rt2500usb_ops) }, 1930 { USB_DEVICE(0x0411, 0x0097) },
1931 /* MSI */ 1931 /* MSI */
1932 { USB_DEVICE(0x0db0, 0x6861), USB_DEVICE_DATA(&rt2500usb_ops) }, 1932 { USB_DEVICE(0x0db0, 0x6861) },
1933 { USB_DEVICE(0x0db0, 0x6865), USB_DEVICE_DATA(&rt2500usb_ops) }, 1933 { USB_DEVICE(0x0db0, 0x6865) },
1934 { USB_DEVICE(0x0db0, 0x6869), USB_DEVICE_DATA(&rt2500usb_ops) }, 1934 { USB_DEVICE(0x0db0, 0x6869) },
1935 /* Ralink */ 1935 /* Ralink */
1936 { USB_DEVICE(0x148f, 0x1706), USB_DEVICE_DATA(&rt2500usb_ops) }, 1936 { USB_DEVICE(0x148f, 0x1706) },
1937 { USB_DEVICE(0x148f, 0x2570), USB_DEVICE_DATA(&rt2500usb_ops) }, 1937 { USB_DEVICE(0x148f, 0x2570) },
1938 { USB_DEVICE(0x148f, 0x9020), USB_DEVICE_DATA(&rt2500usb_ops) }, 1938 { USB_DEVICE(0x148f, 0x9020) },
1939 /* Sagem */ 1939 /* Sagem */
1940 { USB_DEVICE(0x079b, 0x004b), USB_DEVICE_DATA(&rt2500usb_ops) }, 1940 { USB_DEVICE(0x079b, 0x004b) },
1941 /* Siemens */ 1941 /* Siemens */
1942 { USB_DEVICE(0x0681, 0x3c06), USB_DEVICE_DATA(&rt2500usb_ops) }, 1942 { USB_DEVICE(0x0681, 0x3c06) },
1943 /* SMC */ 1943 /* SMC */
1944 { USB_DEVICE(0x0707, 0xee13), USB_DEVICE_DATA(&rt2500usb_ops) }, 1944 { USB_DEVICE(0x0707, 0xee13) },
1945 /* Spairon */ 1945 /* Spairon */
1946 { USB_DEVICE(0x114b, 0x0110), USB_DEVICE_DATA(&rt2500usb_ops) }, 1946 { USB_DEVICE(0x114b, 0x0110) },
1947 /* SURECOM */ 1947 /* SURECOM */
1948 { USB_DEVICE(0x0769, 0x11f3), USB_DEVICE_DATA(&rt2500usb_ops) }, 1948 { USB_DEVICE(0x0769, 0x11f3) },
1949 /* Trust */ 1949 /* Trust */
1950 { USB_DEVICE(0x0eb0, 0x9020), USB_DEVICE_DATA(&rt2500usb_ops) }, 1950 { USB_DEVICE(0x0eb0, 0x9020) },
1951 /* VTech */ 1951 /* VTech */
1952 { USB_DEVICE(0x0f88, 0x3012), USB_DEVICE_DATA(&rt2500usb_ops) }, 1952 { USB_DEVICE(0x0f88, 0x3012) },
1953 /* Zinwell */ 1953 /* Zinwell */
1954 { USB_DEVICE(0x5a57, 0x0260), USB_DEVICE_DATA(&rt2500usb_ops) }, 1954 { USB_DEVICE(0x5a57, 0x0260) },
1955 { 0, } 1955 { 0, }
1956}; 1956};
1957 1957
@@ -1962,10 +1962,16 @@ MODULE_SUPPORTED_DEVICE("Ralink RT2570 USB chipset based cards");
1962MODULE_DEVICE_TABLE(usb, rt2500usb_device_table); 1962MODULE_DEVICE_TABLE(usb, rt2500usb_device_table);
1963MODULE_LICENSE("GPL"); 1963MODULE_LICENSE("GPL");
1964 1964
1965static int rt2500usb_probe(struct usb_interface *usb_intf,
1966 const struct usb_device_id *id)
1967{
1968 return rt2x00usb_probe(usb_intf, &rt2500usb_ops);
1969}
1970
1965static struct usb_driver rt2500usb_driver = { 1971static struct usb_driver rt2500usb_driver = {
1966 .name = KBUILD_MODNAME, 1972 .name = KBUILD_MODNAME,
1967 .id_table = rt2500usb_device_table, 1973 .id_table = rt2500usb_device_table,
1968 .probe = rt2x00usb_probe, 1974 .probe = rt2500usb_probe,
1969 .disconnect = rt2x00usb_disconnect, 1975 .disconnect = rt2x00usb_disconnect,
1970 .suspend = rt2x00usb_suspend, 1976 .suspend = rt2x00usb_suspend,
1971 .resume = rt2x00usb_resume, 1977 .resume = rt2x00usb_resume,
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index 46c3e3c83e3..6f91a9ad4d3 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -1117,36 +1117,36 @@ static const struct rt2x00_ops rt2800pci_ops = {
1117 */ 1117 */
1118#ifdef CONFIG_PCI 1118#ifdef CONFIG_PCI
1119static DEFINE_PCI_DEVICE_TABLE(rt2800pci_device_table) = { 1119static DEFINE_PCI_DEVICE_TABLE(rt2800pci_device_table) = {
1120 { PCI_DEVICE(0x1814, 0x0601), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1120 { PCI_DEVICE(0x1814, 0x0601) },
1121 { PCI_DEVICE(0x1814, 0x0681), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1121 { PCI_DEVICE(0x1814, 0x0681) },
1122 { PCI_DEVICE(0x1814, 0x0701), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1122 { PCI_DEVICE(0x1814, 0x0701) },
1123 { PCI_DEVICE(0x1814, 0x0781), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1123 { PCI_DEVICE(0x1814, 0x0781) },
1124 { PCI_DEVICE(0x1814, 0x3090), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1124 { PCI_DEVICE(0x1814, 0x3090) },
1125 { PCI_DEVICE(0x1814, 0x3091), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1125 { PCI_DEVICE(0x1814, 0x3091) },
1126 { PCI_DEVICE(0x1814, 0x3092), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1126 { PCI_DEVICE(0x1814, 0x3092) },
1127 { PCI_DEVICE(0x1432, 0x7708), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1127 { PCI_DEVICE(0x1432, 0x7708) },
1128 { PCI_DEVICE(0x1432, 0x7727), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1128 { PCI_DEVICE(0x1432, 0x7727) },
1129 { PCI_DEVICE(0x1432, 0x7728), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1129 { PCI_DEVICE(0x1432, 0x7728) },
1130 { PCI_DEVICE(0x1432, 0x7738), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1130 { PCI_DEVICE(0x1432, 0x7738) },
1131 { PCI_DEVICE(0x1432, 0x7748), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1131 { PCI_DEVICE(0x1432, 0x7748) },
1132 { PCI_DEVICE(0x1432, 0x7758), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1132 { PCI_DEVICE(0x1432, 0x7758) },
1133 { PCI_DEVICE(0x1432, 0x7768), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1133 { PCI_DEVICE(0x1432, 0x7768) },
1134 { PCI_DEVICE(0x1462, 0x891a), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1134 { PCI_DEVICE(0x1462, 0x891a) },
1135 { PCI_DEVICE(0x1a3b, 0x1059), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1135 { PCI_DEVICE(0x1a3b, 0x1059) },
1136#ifdef CONFIG_RT2800PCI_RT33XX 1136#ifdef CONFIG_RT2800PCI_RT33XX
1137 { PCI_DEVICE(0x1814, 0x3390), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1137 { PCI_DEVICE(0x1814, 0x3390) },
1138#endif 1138#endif
1139#ifdef CONFIG_RT2800PCI_RT35XX 1139#ifdef CONFIG_RT2800PCI_RT35XX
1140 { PCI_DEVICE(0x1432, 0x7711), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1140 { PCI_DEVICE(0x1432, 0x7711) },
1141 { PCI_DEVICE(0x1432, 0x7722), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1141 { PCI_DEVICE(0x1432, 0x7722) },
1142 { PCI_DEVICE(0x1814, 0x3060), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1142 { PCI_DEVICE(0x1814, 0x3060) },
1143 { PCI_DEVICE(0x1814, 0x3062), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1143 { PCI_DEVICE(0x1814, 0x3062) },
1144 { PCI_DEVICE(0x1814, 0x3562), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1144 { PCI_DEVICE(0x1814, 0x3562) },
1145 { PCI_DEVICE(0x1814, 0x3592), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1145 { PCI_DEVICE(0x1814, 0x3592) },
1146 { PCI_DEVICE(0x1814, 0x3593), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1146 { PCI_DEVICE(0x1814, 0x3593) },
1147#endif 1147#endif
1148#ifdef CONFIG_RT2800PCI_RT53XX 1148#ifdef CONFIG_RT2800PCI_RT53XX
1149 { PCI_DEVICE(0x1814, 0x5390), PCI_DEVICE_DATA(&rt2800pci_ops) }, 1149 { PCI_DEVICE(0x1814, 0x5390) },
1150#endif 1150#endif
1151 { 0, } 1151 { 0, }
1152}; 1152};
@@ -1182,10 +1182,16 @@ static struct platform_driver rt2800soc_driver = {
1182#endif /* CONFIG_RALINK_RT288X || CONFIG_RALINK_RT305X */ 1182#endif /* CONFIG_RALINK_RT288X || CONFIG_RALINK_RT305X */
1183 1183
1184#ifdef CONFIG_PCI 1184#ifdef CONFIG_PCI
1185static int rt2800pci_probe(struct pci_dev *pci_dev,
1186 const struct pci_device_id *id)
1187{
1188 return rt2x00pci_probe(pci_dev, &rt2800pci_ops);
1189}
1190
1185static struct pci_driver rt2800pci_driver = { 1191static struct pci_driver rt2800pci_driver = {
1186 .name = KBUILD_MODNAME, 1192 .name = KBUILD_MODNAME,
1187 .id_table = rt2800pci_device_table, 1193 .id_table = rt2800pci_device_table,
1188 .probe = rt2x00pci_probe, 1194 .probe = rt2800pci_probe,
1189 .remove = __devexit_p(rt2x00pci_remove), 1195 .remove = __devexit_p(rt2x00pci_remove),
1190 .suspend = rt2x00pci_suspend, 1196 .suspend = rt2x00pci_suspend,
1191 .resume = rt2x00pci_resume, 1197 .resume = rt2x00pci_resume,
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index 1bb9a7d09de..6f7c1617457 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -768,230 +768,230 @@ static const struct rt2x00_ops rt2800usb_ops = {
768 */ 768 */
769static struct usb_device_id rt2800usb_device_table[] = { 769static struct usb_device_id rt2800usb_device_table[] = {
770 /* Abocom */ 770 /* Abocom */
771 { USB_DEVICE(0x07b8, 0x2870), USB_DEVICE_DATA(&rt2800usb_ops) }, 771 { USB_DEVICE(0x07b8, 0x2870) },
772 { USB_DEVICE(0x07b8, 0x2770), USB_DEVICE_DATA(&rt2800usb_ops) }, 772 { USB_DEVICE(0x07b8, 0x2770) },
773 { USB_DEVICE(0x07b8, 0x3070), USB_DEVICE_DATA(&rt2800usb_ops) }, 773 { USB_DEVICE(0x07b8, 0x3070) },
774 { USB_DEVICE(0x07b8, 0x3071), USB_DEVICE_DATA(&rt2800usb_ops) }, 774 { USB_DEVICE(0x07b8, 0x3071) },
775 { USB_DEVICE(0x07b8, 0x3072), USB_DEVICE_DATA(&rt2800usb_ops) }, 775 { USB_DEVICE(0x07b8, 0x3072) },
776 { USB_DEVICE(0x1482, 0x3c09), USB_DEVICE_DATA(&rt2800usb_ops) }, 776 { USB_DEVICE(0x1482, 0x3c09) },
777 /* AirTies */ 777 /* AirTies */
778 { USB_DEVICE(0x1eda, 0x2310), USB_DEVICE_DATA(&rt2800usb_ops) }, 778 { USB_DEVICE(0x1eda, 0x2310) },
779 /* Allwin */ 779 /* Allwin */
780 { USB_DEVICE(0x8516, 0x2070), USB_DEVICE_DATA(&rt2800usb_ops) }, 780 { USB_DEVICE(0x8516, 0x2070) },
781 { USB_DEVICE(0x8516, 0x2770), USB_DEVICE_DATA(&rt2800usb_ops) }, 781 { USB_DEVICE(0x8516, 0x2770) },
782 { USB_DEVICE(0x8516, 0x2870), USB_DEVICE_DATA(&rt2800usb_ops) }, 782 { USB_DEVICE(0x8516, 0x2870) },
783 { USB_DEVICE(0x8516, 0x3070), USB_DEVICE_DATA(&rt2800usb_ops) }, 783 { USB_DEVICE(0x8516, 0x3070) },
784 { USB_DEVICE(0x8516, 0x3071), USB_DEVICE_DATA(&rt2800usb_ops) }, 784 { USB_DEVICE(0x8516, 0x3071) },
785 { USB_DEVICE(0x8516, 0x3072), USB_DEVICE_DATA(&rt2800usb_ops) }, 785 { USB_DEVICE(0x8516, 0x3072) },
786 /* Alpha Networks */ 786 /* Alpha Networks */
787 { USB_DEVICE(0x14b2, 0x3c06), USB_DEVICE_DATA(&rt2800usb_ops) }, 787 { USB_DEVICE(0x14b2, 0x3c06) },
788 { USB_DEVICE(0x14b2, 0x3c07), USB_DEVICE_DATA(&rt2800usb_ops) }, 788 { USB_DEVICE(0x14b2, 0x3c07) },
789 { USB_DEVICE(0x14b2, 0x3c09), USB_DEVICE_DATA(&rt2800usb_ops) }, 789 { USB_DEVICE(0x14b2, 0x3c09) },
790 { USB_DEVICE(0x14b2, 0x3c12), USB_DEVICE_DATA(&rt2800usb_ops) }, 790 { USB_DEVICE(0x14b2, 0x3c12) },
791 { USB_DEVICE(0x14b2, 0x3c23), USB_DEVICE_DATA(&rt2800usb_ops) }, 791 { USB_DEVICE(0x14b2, 0x3c23) },
792 { USB_DEVICE(0x14b2, 0x3c25), USB_DEVICE_DATA(&rt2800usb_ops) }, 792 { USB_DEVICE(0x14b2, 0x3c25) },
793 { USB_DEVICE(0x14b2, 0x3c27), USB_DEVICE_DATA(&rt2800usb_ops) }, 793 { USB_DEVICE(0x14b2, 0x3c27) },
794 { USB_DEVICE(0x14b2, 0x3c28), USB_DEVICE_DATA(&rt2800usb_ops) }, 794 { USB_DEVICE(0x14b2, 0x3c28) },
795 { USB_DEVICE(0x14b2, 0x3c2c), USB_DEVICE_DATA(&rt2800usb_ops) }, 795 { USB_DEVICE(0x14b2, 0x3c2c) },
796 /* Amit */ 796 /* Amit */
797 { USB_DEVICE(0x15c5, 0x0008), USB_DEVICE_DATA(&rt2800usb_ops) }, 797 { USB_DEVICE(0x15c5, 0x0008) },
798 /* Askey */ 798 /* Askey */
799 { USB_DEVICE(0x1690, 0x0740), USB_DEVICE_DATA(&rt2800usb_ops) }, 799 { USB_DEVICE(0x1690, 0x0740) },
800 /* ASUS */ 800 /* ASUS */
801 { USB_DEVICE(0x0b05, 0x1731), USB_DEVICE_DATA(&rt2800usb_ops) }, 801 { USB_DEVICE(0x0b05, 0x1731) },
802 { USB_DEVICE(0x0b05, 0x1732), USB_DEVICE_DATA(&rt2800usb_ops) }, 802 { USB_DEVICE(0x0b05, 0x1732) },
803 { USB_DEVICE(0x0b05, 0x1742), USB_DEVICE_DATA(&rt2800usb_ops) }, 803 { USB_DEVICE(0x0b05, 0x1742) },
804 { USB_DEVICE(0x0b05, 0x1784), USB_DEVICE_DATA(&rt2800usb_ops) }, 804 { USB_DEVICE(0x0b05, 0x1784) },
805 { USB_DEVICE(0x1761, 0x0b05), USB_DEVICE_DATA(&rt2800usb_ops) }, 805 { USB_DEVICE(0x1761, 0x0b05) },
806 /* AzureWave */ 806 /* AzureWave */
807 { USB_DEVICE(0x13d3, 0x3247), USB_DEVICE_DATA(&rt2800usb_ops) }, 807 { USB_DEVICE(0x13d3, 0x3247) },
808 { USB_DEVICE(0x13d3, 0x3273), USB_DEVICE_DATA(&rt2800usb_ops) }, 808 { USB_DEVICE(0x13d3, 0x3273) },
809 { USB_DEVICE(0x13d3, 0x3305), USB_DEVICE_DATA(&rt2800usb_ops) }, 809 { USB_DEVICE(0x13d3, 0x3305) },
810 { USB_DEVICE(0x13d3, 0x3307), USB_DEVICE_DATA(&rt2800usb_ops) }, 810 { USB_DEVICE(0x13d3, 0x3307) },
811 { USB_DEVICE(0x13d3, 0x3321), USB_DEVICE_DATA(&rt2800usb_ops) }, 811 { USB_DEVICE(0x13d3, 0x3321) },
812 /* Belkin */ 812 /* Belkin */
813 { USB_DEVICE(0x050d, 0x8053), USB_DEVICE_DATA(&rt2800usb_ops) }, 813 { USB_DEVICE(0x050d, 0x8053) },
814 { USB_DEVICE(0x050d, 0x805c), USB_DEVICE_DATA(&rt2800usb_ops) }, 814 { USB_DEVICE(0x050d, 0x805c) },
815 { USB_DEVICE(0x050d, 0x815c), USB_DEVICE_DATA(&rt2800usb_ops) }, 815 { USB_DEVICE(0x050d, 0x815c) },
816 { USB_DEVICE(0x050d, 0x825b), USB_DEVICE_DATA(&rt2800usb_ops) }, 816 { USB_DEVICE(0x050d, 0x825b) },
817 { USB_DEVICE(0x050d, 0x935a), USB_DEVICE_DATA(&rt2800usb_ops) }, 817 { USB_DEVICE(0x050d, 0x935a) },
818 { USB_DEVICE(0x050d, 0x935b), USB_DEVICE_DATA(&rt2800usb_ops) }, 818 { USB_DEVICE(0x050d, 0x935b) },
819 /* Buffalo */ 819 /* Buffalo */
820 { USB_DEVICE(0x0411, 0x00e8), USB_DEVICE_DATA(&rt2800usb_ops) }, 820 { USB_DEVICE(0x0411, 0x00e8) },
821 { USB_DEVICE(0x0411, 0x016f), USB_DEVICE_DATA(&rt2800usb_ops) }, 821 { USB_DEVICE(0x0411, 0x016f) },
822 { USB_DEVICE(0x0411, 0x01a2), USB_DEVICE_DATA(&rt2800usb_ops) }, 822 { USB_DEVICE(0x0411, 0x01a2) },
823 /* Corega */ 823 /* Corega */
824 { USB_DEVICE(0x07aa, 0x002f), USB_DEVICE_DATA(&rt2800usb_ops) }, 824 { USB_DEVICE(0x07aa, 0x002f) },
825 { USB_DEVICE(0x07aa, 0x003c), USB_DEVICE_DATA(&rt2800usb_ops) }, 825 { USB_DEVICE(0x07aa, 0x003c) },
826 { USB_DEVICE(0x07aa, 0x003f), USB_DEVICE_DATA(&rt2800usb_ops) }, 826 { USB_DEVICE(0x07aa, 0x003f) },
827 { USB_DEVICE(0x18c5, 0x0012), USB_DEVICE_DATA(&rt2800usb_ops) }, 827 { USB_DEVICE(0x18c5, 0x0012) },
828 /* D-Link */ 828 /* D-Link */
829 { USB_DEVICE(0x07d1, 0x3c09), USB_DEVICE_DATA(&rt2800usb_ops) }, 829 { USB_DEVICE(0x07d1, 0x3c09) },
830 { USB_DEVICE(0x07d1, 0x3c0a), USB_DEVICE_DATA(&rt2800usb_ops) }, 830 { USB_DEVICE(0x07d1, 0x3c0a) },
831 { USB_DEVICE(0x07d1, 0x3c0d), USB_DEVICE_DATA(&rt2800usb_ops) }, 831 { USB_DEVICE(0x07d1, 0x3c0d) },
832 { USB_DEVICE(0x07d1, 0x3c0e), USB_DEVICE_DATA(&rt2800usb_ops) }, 832 { USB_DEVICE(0x07d1, 0x3c0e) },
833 { USB_DEVICE(0x07d1, 0x3c0f), USB_DEVICE_DATA(&rt2800usb_ops) }, 833 { USB_DEVICE(0x07d1, 0x3c0f) },
834 { USB_DEVICE(0x07d1, 0x3c11), USB_DEVICE_DATA(&rt2800usb_ops) }, 834 { USB_DEVICE(0x07d1, 0x3c11) },
835 { USB_DEVICE(0x07d1, 0x3c16), USB_DEVICE_DATA(&rt2800usb_ops) }, 835 { USB_DEVICE(0x07d1, 0x3c16) },
836 /* Draytek */ 836 /* Draytek */
837 { USB_DEVICE(0x07fa, 0x7712), USB_DEVICE_DATA(&rt2800usb_ops) }, 837 { USB_DEVICE(0x07fa, 0x7712) },
838 /* Edimax */ 838 /* Edimax */
839 { USB_DEVICE(0x7392, 0x7711), USB_DEVICE_DATA(&rt2800usb_ops) }, 839 { USB_DEVICE(0x7392, 0x7711) },
840 { USB_DEVICE(0x7392, 0x7717), USB_DEVICE_DATA(&rt2800usb_ops) }, 840 { USB_DEVICE(0x7392, 0x7717) },
841 { USB_DEVICE(0x7392, 0x7718), USB_DEVICE_DATA(&rt2800usb_ops) }, 841 { USB_DEVICE(0x7392, 0x7718) },
842 /* Encore */ 842 /* Encore */
843 { USB_DEVICE(0x203d, 0x1480), USB_DEVICE_DATA(&rt2800usb_ops) }, 843 { USB_DEVICE(0x203d, 0x1480) },
844 { USB_DEVICE(0x203d, 0x14a9), USB_DEVICE_DATA(&rt2800usb_ops) }, 844 { USB_DEVICE(0x203d, 0x14a9) },
845 /* EnGenius */ 845 /* EnGenius */
846 { USB_DEVICE(0x1740, 0x9701), USB_DEVICE_DATA(&rt2800usb_ops) }, 846 { USB_DEVICE(0x1740, 0x9701) },
847 { USB_DEVICE(0x1740, 0x9702), USB_DEVICE_DATA(&rt2800usb_ops) }, 847 { USB_DEVICE(0x1740, 0x9702) },
848 { USB_DEVICE(0x1740, 0x9703), USB_DEVICE_DATA(&rt2800usb_ops) }, 848 { USB_DEVICE(0x1740, 0x9703) },
849 { USB_DEVICE(0x1740, 0x9705), USB_DEVICE_DATA(&rt2800usb_ops) }, 849 { USB_DEVICE(0x1740, 0x9705) },
850 { USB_DEVICE(0x1740, 0x9706), USB_DEVICE_DATA(&rt2800usb_ops) }, 850 { USB_DEVICE(0x1740, 0x9706) },
851 { USB_DEVICE(0x1740, 0x9707), USB_DEVICE_DATA(&rt2800usb_ops) }, 851 { USB_DEVICE(0x1740, 0x9707) },
852 { USB_DEVICE(0x1740, 0x9708), USB_DEVICE_DATA(&rt2800usb_ops) }, 852 { USB_DEVICE(0x1740, 0x9708) },
853 { USB_DEVICE(0x1740, 0x9709), USB_DEVICE_DATA(&rt2800usb_ops) }, 853 { USB_DEVICE(0x1740, 0x9709) },
854 /* Gemtek */ 854 /* Gemtek */
855 { USB_DEVICE(0x15a9, 0x0012), USB_DEVICE_DATA(&rt2800usb_ops) }, 855 { USB_DEVICE(0x15a9, 0x0012) },
856 /* Gigabyte */ 856 /* Gigabyte */
857 { USB_DEVICE(0x1044, 0x800b), USB_DEVICE_DATA(&rt2800usb_ops) }, 857 { USB_DEVICE(0x1044, 0x800b) },
858 { USB_DEVICE(0x1044, 0x800d), USB_DEVICE_DATA(&rt2800usb_ops) }, 858 { USB_DEVICE(0x1044, 0x800d) },
859 /* Hawking */ 859 /* Hawking */
860 { USB_DEVICE(0x0e66, 0x0001), USB_DEVICE_DATA(&rt2800usb_ops) }, 860 { USB_DEVICE(0x0e66, 0x0001) },
861 { USB_DEVICE(0x0e66, 0x0003), USB_DEVICE_DATA(&rt2800usb_ops) }, 861 { USB_DEVICE(0x0e66, 0x0003) },
862 { USB_DEVICE(0x0e66, 0x0009), USB_DEVICE_DATA(&rt2800usb_ops) }, 862 { USB_DEVICE(0x0e66, 0x0009) },
863 { USB_DEVICE(0x0e66, 0x000b), USB_DEVICE_DATA(&rt2800usb_ops) }, 863 { USB_DEVICE(0x0e66, 0x000b) },
864 { USB_DEVICE(0x0e66, 0x0013), USB_DEVICE_DATA(&rt2800usb_ops) }, 864 { USB_DEVICE(0x0e66, 0x0013) },
865 { USB_DEVICE(0x0e66, 0x0017), USB_DEVICE_DATA(&rt2800usb_ops) }, 865 { USB_DEVICE(0x0e66, 0x0017) },
866 { USB_DEVICE(0x0e66, 0x0018), USB_DEVICE_DATA(&rt2800usb_ops) }, 866 { USB_DEVICE(0x0e66, 0x0018) },
867 /* I-O DATA */ 867 /* I-O DATA */
868 { USB_DEVICE(0x04bb, 0x0945), USB_DEVICE_DATA(&rt2800usb_ops) }, 868 { USB_DEVICE(0x04bb, 0x0945) },
869 { USB_DEVICE(0x04bb, 0x0947), USB_DEVICE_DATA(&rt2800usb_ops) }, 869 { USB_DEVICE(0x04bb, 0x0947) },
870 { USB_DEVICE(0x04bb, 0x0948), USB_DEVICE_DATA(&rt2800usb_ops) }, 870 { USB_DEVICE(0x04bb, 0x0948) },
871 /* Linksys */ 871 /* Linksys */
872 { USB_DEVICE(0x13b1, 0x0031), USB_DEVICE_DATA(&rt2800usb_ops) }, 872 { USB_DEVICE(0x13b1, 0x0031) },
873 { USB_DEVICE(0x1737, 0x0070), USB_DEVICE_DATA(&rt2800usb_ops) }, 873 { USB_DEVICE(0x1737, 0x0070) },
874 { USB_DEVICE(0x1737, 0x0071), USB_DEVICE_DATA(&rt2800usb_ops) }, 874 { USB_DEVICE(0x1737, 0x0071) },
875 /* Logitec */ 875 /* Logitec */
876 { USB_DEVICE(0x0789, 0x0162), USB_DEVICE_DATA(&rt2800usb_ops) }, 876 { USB_DEVICE(0x0789, 0x0162) },
877 { USB_DEVICE(0x0789, 0x0163), USB_DEVICE_DATA(&rt2800usb_ops) }, 877 { USB_DEVICE(0x0789, 0x0163) },
878 { USB_DEVICE(0x0789, 0x0164), USB_DEVICE_DATA(&rt2800usb_ops) }, 878 { USB_DEVICE(0x0789, 0x0164) },
879 { USB_DEVICE(0x0789, 0x0166), USB_DEVICE_DATA(&rt2800usb_ops) }, 879 { USB_DEVICE(0x0789, 0x0166) },
880 /* Motorola */ 880 /* Motorola */
881 { USB_DEVICE(0x100d, 0x9031), USB_DEVICE_DATA(&rt2800usb_ops) }, 881 { USB_DEVICE(0x100d, 0x9031) },
882 /* MSI */ 882 /* MSI */
883 { USB_DEVICE(0x0db0, 0x3820), USB_DEVICE_DATA(&rt2800usb_ops) }, 883 { USB_DEVICE(0x0db0, 0x3820) },
884 { USB_DEVICE(0x0db0, 0x3821), USB_DEVICE_DATA(&rt2800usb_ops) }, 884 { USB_DEVICE(0x0db0, 0x3821) },
885 { USB_DEVICE(0x0db0, 0x3822), USB_DEVICE_DATA(&rt2800usb_ops) }, 885 { USB_DEVICE(0x0db0, 0x3822) },
886 { USB_DEVICE(0x0db0, 0x3870), USB_DEVICE_DATA(&rt2800usb_ops) }, 886 { USB_DEVICE(0x0db0, 0x3870) },
887 { USB_DEVICE(0x0db0, 0x3871), USB_DEVICE_DATA(&rt2800usb_ops) }, 887 { USB_DEVICE(0x0db0, 0x3871) },
888 { USB_DEVICE(0x0db0, 0x6899), USB_DEVICE_DATA(&rt2800usb_ops) }, 888 { USB_DEVICE(0x0db0, 0x6899) },
889 { USB_DEVICE(0x0db0, 0x821a), USB_DEVICE_DATA(&rt2800usb_ops) }, 889 { USB_DEVICE(0x0db0, 0x821a) },
890 { USB_DEVICE(0x0db0, 0x822a), USB_DEVICE_DATA(&rt2800usb_ops) }, 890 { USB_DEVICE(0x0db0, 0x822a) },
891 { USB_DEVICE(0x0db0, 0x822b), USB_DEVICE_DATA(&rt2800usb_ops) }, 891 { USB_DEVICE(0x0db0, 0x822b) },
892 { USB_DEVICE(0x0db0, 0x822c), USB_DEVICE_DATA(&rt2800usb_ops) }, 892 { USB_DEVICE(0x0db0, 0x822c) },
893 { USB_DEVICE(0x0db0, 0x870a), USB_DEVICE_DATA(&rt2800usb_ops) }, 893 { USB_DEVICE(0x0db0, 0x870a) },
894 { USB_DEVICE(0x0db0, 0x871a), USB_DEVICE_DATA(&rt2800usb_ops) }, 894 { USB_DEVICE(0x0db0, 0x871a) },
895 { USB_DEVICE(0x0db0, 0x871b), USB_DEVICE_DATA(&rt2800usb_ops) }, 895 { USB_DEVICE(0x0db0, 0x871b) },
896 { USB_DEVICE(0x0db0, 0x871c), USB_DEVICE_DATA(&rt2800usb_ops) }, 896 { USB_DEVICE(0x0db0, 0x871c) },
897 { USB_DEVICE(0x0db0, 0x899a), USB_DEVICE_DATA(&rt2800usb_ops) }, 897 { USB_DEVICE(0x0db0, 0x899a) },
898 /* Para */ 898 /* Para */
899 { USB_DEVICE(0x20b8, 0x8888), USB_DEVICE_DATA(&rt2800usb_ops) }, 899 { USB_DEVICE(0x20b8, 0x8888) },
900 /* Pegatron */ 900 /* Pegatron */
901 { USB_DEVICE(0x1d4d, 0x000c), USB_DEVICE_DATA(&rt2800usb_ops) }, 901 { USB_DEVICE(0x1d4d, 0x000c) },
902 { USB_DEVICE(0x1d4d, 0x000e), USB_DEVICE_DATA(&rt2800usb_ops) }, 902 { USB_DEVICE(0x1d4d, 0x000e) },
903 { USB_DEVICE(0x1d4d, 0x0011), USB_DEVICE_DATA(&rt2800usb_ops) }, 903 { USB_DEVICE(0x1d4d, 0x0011) },
904 /* Philips */ 904 /* Philips */
905 { USB_DEVICE(0x0471, 0x200f), USB_DEVICE_DATA(&rt2800usb_ops) }, 905 { USB_DEVICE(0x0471, 0x200f) },
906 /* Planex */ 906 /* Planex */
907 { USB_DEVICE(0x2019, 0xab25), USB_DEVICE_DATA(&rt2800usb_ops) }, 907 { USB_DEVICE(0x2019, 0xab25) },
908 { USB_DEVICE(0x2019, 0xed06), USB_DEVICE_DATA(&rt2800usb_ops) }, 908 { USB_DEVICE(0x2019, 0xed06) },
909 /* Quanta */ 909 /* Quanta */
910 { USB_DEVICE(0x1a32, 0x0304), USB_DEVICE_DATA(&rt2800usb_ops) }, 910 { USB_DEVICE(0x1a32, 0x0304) },
911 /* Ralink */ 911 /* Ralink */
912 { USB_DEVICE(0x148f, 0x2070), USB_DEVICE_DATA(&rt2800usb_ops) }, 912 { USB_DEVICE(0x148f, 0x2070) },
913 { USB_DEVICE(0x148f, 0x2770), USB_DEVICE_DATA(&rt2800usb_ops) }, 913 { USB_DEVICE(0x148f, 0x2770) },
914 { USB_DEVICE(0x148f, 0x2870), USB_DEVICE_DATA(&rt2800usb_ops) }, 914 { USB_DEVICE(0x148f, 0x2870) },
915 { USB_DEVICE(0x148f, 0x3070), USB_DEVICE_DATA(&rt2800usb_ops) }, 915 { USB_DEVICE(0x148f, 0x3070) },
916 { USB_DEVICE(0x148f, 0x3071), USB_DEVICE_DATA(&rt2800usb_ops) }, 916 { USB_DEVICE(0x148f, 0x3071) },
917 { USB_DEVICE(0x148f, 0x3072), USB_DEVICE_DATA(&rt2800usb_ops) }, 917 { USB_DEVICE(0x148f, 0x3072) },
918 /* Samsung */ 918 /* Samsung */
919 { USB_DEVICE(0x04e8, 0x2018), USB_DEVICE_DATA(&rt2800usb_ops) }, 919 { USB_DEVICE(0x04e8, 0x2018) },
920 /* Siemens */ 920 /* Siemens */
921 { USB_DEVICE(0x129b, 0x1828), USB_DEVICE_DATA(&rt2800usb_ops) }, 921 { USB_DEVICE(0x129b, 0x1828) },
922 /* Sitecom */ 922 /* Sitecom */
923 { USB_DEVICE(0x0df6, 0x0017), USB_DEVICE_DATA(&rt2800usb_ops) }, 923 { USB_DEVICE(0x0df6, 0x0017) },
924 { USB_DEVICE(0x0df6, 0x002b), USB_DEVICE_DATA(&rt2800usb_ops) }, 924 { USB_DEVICE(0x0df6, 0x002b) },
925 { USB_DEVICE(0x0df6, 0x002c), USB_DEVICE_DATA(&rt2800usb_ops) }, 925 { USB_DEVICE(0x0df6, 0x002c) },
926 { USB_DEVICE(0x0df6, 0x002d), USB_DEVICE_DATA(&rt2800usb_ops) }, 926 { USB_DEVICE(0x0df6, 0x002d) },
927 { USB_DEVICE(0x0df6, 0x0039), USB_DEVICE_DATA(&rt2800usb_ops) }, 927 { USB_DEVICE(0x0df6, 0x0039) },
928 { USB_DEVICE(0x0df6, 0x003b), USB_DEVICE_DATA(&rt2800usb_ops) }, 928 { USB_DEVICE(0x0df6, 0x003b) },
929 { USB_DEVICE(0x0df6, 0x003d), USB_DEVICE_DATA(&rt2800usb_ops) }, 929 { USB_DEVICE(0x0df6, 0x003d) },
930 { USB_DEVICE(0x0df6, 0x003e), USB_DEVICE_DATA(&rt2800usb_ops) }, 930 { USB_DEVICE(0x0df6, 0x003e) },
931 { USB_DEVICE(0x0df6, 0x003f), USB_DEVICE_DATA(&rt2800usb_ops) }, 931 { USB_DEVICE(0x0df6, 0x003f) },
932 { USB_DEVICE(0x0df6, 0x0040), USB_DEVICE_DATA(&rt2800usb_ops) }, 932 { USB_DEVICE(0x0df6, 0x0040) },
933 { USB_DEVICE(0x0df6, 0x0042), USB_DEVICE_DATA(&rt2800usb_ops) }, 933 { USB_DEVICE(0x0df6, 0x0042) },
934 { USB_DEVICE(0x0df6, 0x0047), USB_DEVICE_DATA(&rt2800usb_ops) }, 934 { USB_DEVICE(0x0df6, 0x0047) },
935 { USB_DEVICE(0x0df6, 0x0048), USB_DEVICE_DATA(&rt2800usb_ops) }, 935 { USB_DEVICE(0x0df6, 0x0048) },
936 /* SMC */ 936 /* SMC */
937 { USB_DEVICE(0x083a, 0x6618), USB_DEVICE_DATA(&rt2800usb_ops) }, 937 { USB_DEVICE(0x083a, 0x6618) },
938 { USB_DEVICE(0x083a, 0x7511), USB_DEVICE_DATA(&rt2800usb_ops) }, 938 { USB_DEVICE(0x083a, 0x7511) },
939 { USB_DEVICE(0x083a, 0x7512), USB_DEVICE_DATA(&rt2800usb_ops) }, 939 { USB_DEVICE(0x083a, 0x7512) },
940 { USB_DEVICE(0x083a, 0x7522), USB_DEVICE_DATA(&rt2800usb_ops) }, 940 { USB_DEVICE(0x083a, 0x7522) },
941 { USB_DEVICE(0x083a, 0x8522), USB_DEVICE_DATA(&rt2800usb_ops) }, 941 { USB_DEVICE(0x083a, 0x8522) },
942 { USB_DEVICE(0x083a, 0xa618), USB_DEVICE_DATA(&rt2800usb_ops) }, 942 { USB_DEVICE(0x083a, 0xa618) },
943 { USB_DEVICE(0x083a, 0xa701), USB_DEVICE_DATA(&rt2800usb_ops) }, 943 { USB_DEVICE(0x083a, 0xa701) },
944 { USB_DEVICE(0x083a, 0xa702), USB_DEVICE_DATA(&rt2800usb_ops) }, 944 { USB_DEVICE(0x083a, 0xa702) },
945 { USB_DEVICE(0x083a, 0xa703), USB_DEVICE_DATA(&rt2800usb_ops) }, 945 { USB_DEVICE(0x083a, 0xa703) },
946 { USB_DEVICE(0x083a, 0xb522), USB_DEVICE_DATA(&rt2800usb_ops) }, 946 { USB_DEVICE(0x083a, 0xb522) },
947 /* Sparklan */ 947 /* Sparklan */
948 { USB_DEVICE(0x15a9, 0x0006), USB_DEVICE_DATA(&rt2800usb_ops) }, 948 { USB_DEVICE(0x15a9, 0x0006) },
949 /* Sweex */ 949 /* Sweex */
950 { USB_DEVICE(0x177f, 0x0302), USB_DEVICE_DATA(&rt2800usb_ops) }, 950 { USB_DEVICE(0x177f, 0x0302) },
951 /* U-Media */ 951 /* U-Media */
952 { USB_DEVICE(0x157e, 0x300e), USB_DEVICE_DATA(&rt2800usb_ops) }, 952 { USB_DEVICE(0x157e, 0x300e) },
953 { USB_DEVICE(0x157e, 0x3013), USB_DEVICE_DATA(&rt2800usb_ops) }, 953 { USB_DEVICE(0x157e, 0x3013) },
954 /* ZCOM */ 954 /* ZCOM */
955 { USB_DEVICE(0x0cde, 0x0022), USB_DEVICE_DATA(&rt2800usb_ops) }, 955 { USB_DEVICE(0x0cde, 0x0022) },
956 { USB_DEVICE(0x0cde, 0x0025), USB_DEVICE_DATA(&rt2800usb_ops) }, 956 { USB_DEVICE(0x0cde, 0x0025) },
957 /* Zinwell */ 957 /* Zinwell */
958 { USB_DEVICE(0x5a57, 0x0280), USB_DEVICE_DATA(&rt2800usb_ops) }, 958 { USB_DEVICE(0x5a57, 0x0280) },
959 { USB_DEVICE(0x5a57, 0x0282), USB_DEVICE_DATA(&rt2800usb_ops) }, 959 { USB_DEVICE(0x5a57, 0x0282) },
960 { USB_DEVICE(0x5a57, 0x0283), USB_DEVICE_DATA(&rt2800usb_ops) }, 960 { USB_DEVICE(0x5a57, 0x0283) },
961 { USB_DEVICE(0x5a57, 0x5257), USB_DEVICE_DATA(&rt2800usb_ops) }, 961 { USB_DEVICE(0x5a57, 0x5257) },
962 /* Zyxel */ 962 /* Zyxel */
963 { USB_DEVICE(0x0586, 0x3416), USB_DEVICE_DATA(&rt2800usb_ops) }, 963 { USB_DEVICE(0x0586, 0x3416) },
964 { USB_DEVICE(0x0586, 0x3418), USB_DEVICE_DATA(&rt2800usb_ops) }, 964 { USB_DEVICE(0x0586, 0x3418) },
965 { USB_DEVICE(0x0586, 0x341e), USB_DEVICE_DATA(&rt2800usb_ops) }, 965 { USB_DEVICE(0x0586, 0x341e) },
966#ifdef CONFIG_RT2800USB_RT33XX 966#ifdef CONFIG_RT2800USB_RT33XX
967 /* Ralink */ 967 /* Ralink */
968 { USB_DEVICE(0x148f, 0x3370), USB_DEVICE_DATA(&rt2800usb_ops) }, 968 { USB_DEVICE(0x148f, 0x3370) },
969 { USB_DEVICE(0x148f, 0x8070), USB_DEVICE_DATA(&rt2800usb_ops) }, 969 { USB_DEVICE(0x148f, 0x8070) },
970 /* Sitecom */ 970 /* Sitecom */
971 { USB_DEVICE(0x0df6, 0x0050), USB_DEVICE_DATA(&rt2800usb_ops) }, 971 { USB_DEVICE(0x0df6, 0x0050) },
972#endif 972#endif
973#ifdef CONFIG_RT2800USB_RT35XX 973#ifdef CONFIG_RT2800USB_RT35XX
974 /* Allwin */ 974 /* Allwin */
975 { USB_DEVICE(0x8516, 0x3572), USB_DEVICE_DATA(&rt2800usb_ops) }, 975 { USB_DEVICE(0x8516, 0x3572) },
976 /* Askey */ 976 /* Askey */
977 { USB_DEVICE(0x1690, 0x0744), USB_DEVICE_DATA(&rt2800usb_ops) }, 977 { USB_DEVICE(0x1690, 0x0744) },
978 /* Cisco */ 978 /* Cisco */
979 { USB_DEVICE(0x167b, 0x4001), USB_DEVICE_DATA(&rt2800usb_ops) }, 979 { USB_DEVICE(0x167b, 0x4001) },
980 /* EnGenius */ 980 /* EnGenius */
981 { USB_DEVICE(0x1740, 0x9801), USB_DEVICE_DATA(&rt2800usb_ops) }, 981 { USB_DEVICE(0x1740, 0x9801) },
982 /* I-O DATA */ 982 /* I-O DATA */
983 { USB_DEVICE(0x04bb, 0x0944), USB_DEVICE_DATA(&rt2800usb_ops) }, 983 { USB_DEVICE(0x04bb, 0x0944) },
984 /* Linksys */ 984 /* Linksys */
985 { USB_DEVICE(0x13b1, 0x002f), USB_DEVICE_DATA(&rt2800usb_ops) }, 985 { USB_DEVICE(0x13b1, 0x002f) },
986 { USB_DEVICE(0x1737, 0x0079), USB_DEVICE_DATA(&rt2800usb_ops) }, 986 { USB_DEVICE(0x1737, 0x0079) },
987 /* Ralink */ 987 /* Ralink */
988 { USB_DEVICE(0x148f, 0x3572), USB_DEVICE_DATA(&rt2800usb_ops) }, 988 { USB_DEVICE(0x148f, 0x3572) },
989 /* Sitecom */ 989 /* Sitecom */
990 { USB_DEVICE(0x0df6, 0x0041), USB_DEVICE_DATA(&rt2800usb_ops) }, 990 { USB_DEVICE(0x0df6, 0x0041) },
991 /* Toshiba */ 991 /* Toshiba */
992 { USB_DEVICE(0x0930, 0x0a07), USB_DEVICE_DATA(&rt2800usb_ops) }, 992 { USB_DEVICE(0x0930, 0x0a07) },
993 /* Zinwell */ 993 /* Zinwell */
994 { USB_DEVICE(0x5a57, 0x0284), USB_DEVICE_DATA(&rt2800usb_ops) }, 994 { USB_DEVICE(0x5a57, 0x0284) },
995#endif 995#endif
996#ifdef CONFIG_RT2800USB_UNKNOWN 996#ifdef CONFIG_RT2800USB_UNKNOWN
997 /* 997 /*
@@ -999,73 +999,73 @@ static struct usb_device_id rt2800usb_device_table[] = {
999 * vendor linux driver). 999 * vendor linux driver).
1000 */ 1000 */
1001 /* Alpha Networks */ 1001 /* Alpha Networks */
1002 { USB_DEVICE(0x14b2, 0x3c08), USB_DEVICE_DATA(&rt2800usb_ops) }, 1002 { USB_DEVICE(0x14b2, 0x3c08) },
1003 { USB_DEVICE(0x14b2, 0x3c11), USB_DEVICE_DATA(&rt2800usb_ops) }, 1003 { USB_DEVICE(0x14b2, 0x3c11) },
1004 /* Amigo */ 1004 /* Amigo */
1005 { USB_DEVICE(0x0e0b, 0x9031), USB_DEVICE_DATA(&rt2800usb_ops) }, 1005 { USB_DEVICE(0x0e0b, 0x9031) },
1006 { USB_DEVICE(0x0e0b, 0x9041), USB_DEVICE_DATA(&rt2800usb_ops) }, 1006 { USB_DEVICE(0x0e0b, 0x9041) },
1007 /* ASUS */ 1007 /* ASUS */
1008 { USB_DEVICE(0x0b05, 0x1760), USB_DEVICE_DATA(&rt2800usb_ops) }, 1008 { USB_DEVICE(0x0b05, 0x1760) },
1009 { USB_DEVICE(0x0b05, 0x1761), USB_DEVICE_DATA(&rt2800usb_ops) }, 1009 { USB_DEVICE(0x0b05, 0x1761) },
1010 { USB_DEVICE(0x0b05, 0x1790), USB_DEVICE_DATA(&rt2800usb_ops) }, 1010 { USB_DEVICE(0x0b05, 0x1790) },
1011 /* AzureWave */ 1011 /* AzureWave */
1012 { USB_DEVICE(0x13d3, 0x3262), USB_DEVICE_DATA(&rt2800usb_ops) }, 1012 { USB_DEVICE(0x13d3, 0x3262) },
1013 { USB_DEVICE(0x13d3, 0x3284), USB_DEVICE_DATA(&rt2800usb_ops) }, 1013 { USB_DEVICE(0x13d3, 0x3284) },
1014 { USB_DEVICE(0x13d3, 0x3322), USB_DEVICE_DATA(&rt2800usb_ops) }, 1014 { USB_DEVICE(0x13d3, 0x3322) },
1015 /* Belkin */ 1015 /* Belkin */
1016 { USB_DEVICE(0x050d, 0x825a), USB_DEVICE_DATA(&rt2800usb_ops) }, 1016 { USB_DEVICE(0x050d, 0x825a) },
1017 /* Buffalo */ 1017 /* Buffalo */
1018 { USB_DEVICE(0x0411, 0x012e), USB_DEVICE_DATA(&rt2800usb_ops) }, 1018 { USB_DEVICE(0x0411, 0x012e) },
1019 { USB_DEVICE(0x0411, 0x0148), USB_DEVICE_DATA(&rt2800usb_ops) }, 1019 { USB_DEVICE(0x0411, 0x0148) },
1020 { USB_DEVICE(0x0411, 0x0150), USB_DEVICE_DATA(&rt2800usb_ops) }, 1020 { USB_DEVICE(0x0411, 0x0150) },
1021 { USB_DEVICE(0x0411, 0x015d), USB_DEVICE_DATA(&rt2800usb_ops) }, 1021 { USB_DEVICE(0x0411, 0x015d) },
1022 /* Corega */ 1022 /* Corega */
1023 { USB_DEVICE(0x07aa, 0x0041), USB_DEVICE_DATA(&rt2800usb_ops) }, 1023 { USB_DEVICE(0x07aa, 0x0041) },
1024 { USB_DEVICE(0x07aa, 0x0042), USB_DEVICE_DATA(&rt2800usb_ops) }, 1024 { USB_DEVICE(0x07aa, 0x0042) },
1025 { USB_DEVICE(0x18c5, 0x0008), USB_DEVICE_DATA(&rt2800usb_ops) }, 1025 { USB_DEVICE(0x18c5, 0x0008) },
1026 /* D-Link */ 1026 /* D-Link */
1027 { USB_DEVICE(0x07d1, 0x3c0b), USB_DEVICE_DATA(&rt2800usb_ops) }, 1027 { USB_DEVICE(0x07d1, 0x3c0b) },
1028 { USB_DEVICE(0x07d1, 0x3c13), USB_DEVICE_DATA(&rt2800usb_ops) }, 1028 { USB_DEVICE(0x07d1, 0x3c13) },
1029 { USB_DEVICE(0x07d1, 0x3c15), USB_DEVICE_DATA(&rt2800usb_ops) }, 1029 { USB_DEVICE(0x07d1, 0x3c15) },
1030 { USB_DEVICE(0x07d1, 0x3c17), USB_DEVICE_DATA(&rt2800usb_ops) }, 1030 { USB_DEVICE(0x07d1, 0x3c17) },
1031 /* Edimax */ 1031 /* Edimax */
1032 { USB_DEVICE(0x7392, 0x4085), USB_DEVICE_DATA(&rt2800usb_ops) }, 1032 { USB_DEVICE(0x7392, 0x4085) },
1033 /* Encore */ 1033 /* Encore */
1034 { USB_DEVICE(0x203d, 0x14a1), USB_DEVICE_DATA(&rt2800usb_ops) }, 1034 { USB_DEVICE(0x203d, 0x14a1) },
1035 /* Gemtek */ 1035 /* Gemtek */
1036 { USB_DEVICE(0x15a9, 0x0010), USB_DEVICE_DATA(&rt2800usb_ops) }, 1036 { USB_DEVICE(0x15a9, 0x0010) },
1037 /* Gigabyte */ 1037 /* Gigabyte */
1038 { USB_DEVICE(0x1044, 0x800c), USB_DEVICE_DATA(&rt2800usb_ops) }, 1038 { USB_DEVICE(0x1044, 0x800c) },
1039 /* LevelOne */ 1039 /* LevelOne */
1040 { USB_DEVICE(0x1740, 0x0605), USB_DEVICE_DATA(&rt2800usb_ops) }, 1040 { USB_DEVICE(0x1740, 0x0605) },
1041 { USB_DEVICE(0x1740, 0x0615), USB_DEVICE_DATA(&rt2800usb_ops) }, 1041 { USB_DEVICE(0x1740, 0x0615) },
1042 /* Linksys */ 1042 /* Linksys */
1043 { USB_DEVICE(0x1737, 0x0077), USB_DEVICE_DATA(&rt2800usb_ops) }, 1043 { USB_DEVICE(0x1737, 0x0077) },
1044 { USB_DEVICE(0x1737, 0x0078), USB_DEVICE_DATA(&rt2800usb_ops) }, 1044 { USB_DEVICE(0x1737, 0x0078) },
1045 /* Motorola */ 1045 /* Motorola */
1046 { USB_DEVICE(0x100d, 0x9032), USB_DEVICE_DATA(&rt2800usb_ops) }, 1046 { USB_DEVICE(0x100d, 0x9032) },
1047 /* Ovislink */ 1047 /* Ovislink */
1048 { USB_DEVICE(0x1b75, 0x3071), USB_DEVICE_DATA(&rt2800usb_ops) }, 1048 { USB_DEVICE(0x1b75, 0x3071) },
1049 { USB_DEVICE(0x1b75, 0x3072), USB_DEVICE_DATA(&rt2800usb_ops) }, 1049 { USB_DEVICE(0x1b75, 0x3072) },
1050 /* Pegatron */ 1050 /* Pegatron */
1051 { USB_DEVICE(0x05a6, 0x0101), USB_DEVICE_DATA(&rt2800usb_ops) }, 1051 { USB_DEVICE(0x05a6, 0x0101) },
1052 { USB_DEVICE(0x1d4d, 0x0002), USB_DEVICE_DATA(&rt2800usb_ops) }, 1052 { USB_DEVICE(0x1d4d, 0x0002) },
1053 { USB_DEVICE(0x1d4d, 0x0010), USB_DEVICE_DATA(&rt2800usb_ops) }, 1053 { USB_DEVICE(0x1d4d, 0x0010) },
1054 /* Planex */ 1054 /* Planex */
1055 { USB_DEVICE(0x2019, 0x5201), USB_DEVICE_DATA(&rt2800usb_ops) }, 1055 { USB_DEVICE(0x2019, 0x5201) },
1056 { USB_DEVICE(0x2019, 0xab24), USB_DEVICE_DATA(&rt2800usb_ops) }, 1056 { USB_DEVICE(0x2019, 0xab24) },
1057 /* Qcom */ 1057 /* Qcom */
1058 { USB_DEVICE(0x18e8, 0x6259), USB_DEVICE_DATA(&rt2800usb_ops) }, 1058 { USB_DEVICE(0x18e8, 0x6259) },
1059 /* SMC */ 1059 /* SMC */
1060 { USB_DEVICE(0x083a, 0xa512), USB_DEVICE_DATA(&rt2800usb_ops) }, 1060 { USB_DEVICE(0x083a, 0xa512) },
1061 { USB_DEVICE(0x083a, 0xc522), USB_DEVICE_DATA(&rt2800usb_ops) }, 1061 { USB_DEVICE(0x083a, 0xc522) },
1062 { USB_DEVICE(0x083a, 0xd522), USB_DEVICE_DATA(&rt2800usb_ops) }, 1062 { USB_DEVICE(0x083a, 0xd522) },
1063 { USB_DEVICE(0x083a, 0xf511), USB_DEVICE_DATA(&rt2800usb_ops) }, 1063 { USB_DEVICE(0x083a, 0xf511) },
1064 /* Sweex */ 1064 /* Sweex */
1065 { USB_DEVICE(0x177f, 0x0153), USB_DEVICE_DATA(&rt2800usb_ops) }, 1065 { USB_DEVICE(0x177f, 0x0153) },
1066 { USB_DEVICE(0x177f, 0x0313), USB_DEVICE_DATA(&rt2800usb_ops) }, 1066 { USB_DEVICE(0x177f, 0x0313) },
1067 /* Zyxel */ 1067 /* Zyxel */
1068 { USB_DEVICE(0x0586, 0x341a), USB_DEVICE_DATA(&rt2800usb_ops) }, 1068 { USB_DEVICE(0x0586, 0x341a) },
1069#endif 1069#endif
1070 { 0, } 1070 { 0, }
1071}; 1071};
@@ -1078,10 +1078,16 @@ MODULE_DEVICE_TABLE(usb, rt2800usb_device_table);
1078MODULE_FIRMWARE(FIRMWARE_RT2870); 1078MODULE_FIRMWARE(FIRMWARE_RT2870);
1079MODULE_LICENSE("GPL"); 1079MODULE_LICENSE("GPL");
1080 1080
1081static int rt2800usb_probe(struct usb_interface *usb_intf,
1082 const struct usb_device_id *id)
1083{
1084 return rt2x00usb_probe(usb_intf, &rt2800usb_ops);
1085}
1086
1081static struct usb_driver rt2800usb_driver = { 1087static struct usb_driver rt2800usb_driver = {
1082 .name = KBUILD_MODNAME, 1088 .name = KBUILD_MODNAME,
1083 .id_table = rt2800usb_device_table, 1089 .id_table = rt2800usb_device_table,
1084 .probe = rt2x00usb_probe, 1090 .probe = rt2800usb_probe,
1085 .disconnect = rt2x00usb_disconnect, 1091 .disconnect = rt2x00usb_disconnect,
1086 .suspend = rt2x00usb_suspend, 1092 .suspend = rt2x00usb_suspend,
1087 .resume = rt2x00usb_resume, 1093 .resume = rt2x00usb_resume,
diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c
index 695aecf6bd0..17148bb2442 100644
--- a/drivers/net/wireless/rt2x00/rt2x00pci.c
+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
@@ -251,9 +251,8 @@ exit:
251 return -ENOMEM; 251 return -ENOMEM;
252} 252}
253 253
254int rt2x00pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id) 254int rt2x00pci_probe(struct pci_dev *pci_dev, const struct rt2x00_ops *ops)
255{ 255{
256 struct rt2x00_ops *ops = (struct rt2x00_ops *)id->driver_data;
257 struct ieee80211_hw *hw; 256 struct ieee80211_hw *hw;
258 struct rt2x00_dev *rt2x00dev; 257 struct rt2x00_dev *rt2x00dev;
259 int retval; 258 int retval;
diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.h b/drivers/net/wireless/rt2x00/rt2x00pci.h
index 5d5887426f7..e2c99f2b9a1 100644
--- a/drivers/net/wireless/rt2x00/rt2x00pci.h
+++ b/drivers/net/wireless/rt2x00/rt2x00pci.h
@@ -126,7 +126,7 @@ void rt2x00pci_uninitialize(struct rt2x00_dev *rt2x00dev);
126/* 126/*
127 * PCI driver handlers. 127 * PCI driver handlers.
128 */ 128 */
129int rt2x00pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id); 129int rt2x00pci_probe(struct pci_dev *pci_dev, const struct rt2x00_ops *ops);
130void rt2x00pci_remove(struct pci_dev *pci_dev); 130void rt2x00pci_remove(struct pci_dev *pci_dev);
131#ifdef CONFIG_PM 131#ifdef CONFIG_PM
132int rt2x00pci_suspend(struct pci_dev *pci_dev, pm_message_t state); 132int rt2x00pci_suspend(struct pci_dev *pci_dev, pm_message_t state);
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c
index 9957579248c..570184ee163 100644
--- a/drivers/net/wireless/rt2x00/rt2x00usb.c
+++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
@@ -791,10 +791,9 @@ exit:
791} 791}
792 792
793int rt2x00usb_probe(struct usb_interface *usb_intf, 793int rt2x00usb_probe(struct usb_interface *usb_intf,
794 const struct usb_device_id *id) 794 const struct rt2x00_ops *ops)
795{ 795{
796 struct usb_device *usb_dev = interface_to_usbdev(usb_intf); 796 struct usb_device *usb_dev = interface_to_usbdev(usb_intf);
797 struct rt2x00_ops *ops = (struct rt2x00_ops *)id->driver_info;
798 struct ieee80211_hw *hw; 797 struct ieee80211_hw *hw;
799 struct rt2x00_dev *rt2x00dev; 798 struct rt2x00_dev *rt2x00dev;
800 int retval; 799 int retval;
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.h b/drivers/net/wireless/rt2x00/rt2x00usb.h
index 6aeba71b665..52b09d2e11d 100644
--- a/drivers/net/wireless/rt2x00/rt2x00usb.h
+++ b/drivers/net/wireless/rt2x00/rt2x00usb.h
@@ -35,12 +35,6 @@
35}) 35})
36 36
37/* 37/*
38 * This variable should be used with the
39 * usb_driver structure initialization.
40 */
41#define USB_DEVICE_DATA(__ops) .driver_info = (kernel_ulong_t)(__ops)
42
43/*
44 * For USB vendor requests we need to pass a timeout 38 * For USB vendor requests we need to pass a timeout
45 * time in ms, for this we use the REGISTER_TIMEOUT, 39 * time in ms, for this we use the REGISTER_TIMEOUT,
46 * however when loading firmware a higher value is 40 * however when loading firmware a higher value is
@@ -433,7 +427,7 @@ void rt2x00usb_uninitialize(struct rt2x00_dev *rt2x00dev);
433 * USB driver handlers. 427 * USB driver handlers.
434 */ 428 */
435int rt2x00usb_probe(struct usb_interface *usb_intf, 429int rt2x00usb_probe(struct usb_interface *usb_intf,
436 const struct usb_device_id *id); 430 const struct rt2x00_ops *ops);
437void rt2x00usb_disconnect(struct usb_interface *usb_intf); 431void rt2x00usb_disconnect(struct usb_interface *usb_intf);
438#ifdef CONFIG_PM 432#ifdef CONFIG_PM
439int rt2x00usb_suspend(struct usb_interface *usb_intf, pm_message_t state); 433int rt2x00usb_suspend(struct usb_interface *usb_intf, pm_message_t state);
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
index 264508f31a2..c5dccdb2f17 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/rt2x00/rt61pci.c
@@ -3061,11 +3061,11 @@ static const struct rt2x00_ops rt61pci_ops = {
3061 */ 3061 */
3062static DEFINE_PCI_DEVICE_TABLE(rt61pci_device_table) = { 3062static DEFINE_PCI_DEVICE_TABLE(rt61pci_device_table) = {
3063 /* RT2561s */ 3063 /* RT2561s */
3064 { PCI_DEVICE(0x1814, 0x0301), PCI_DEVICE_DATA(&rt61pci_ops) }, 3064 { PCI_DEVICE(0x1814, 0x0301) },
3065 /* RT2561 v2 */ 3065 /* RT2561 v2 */
3066 { PCI_DEVICE(0x1814, 0x0302), PCI_DEVICE_DATA(&rt61pci_ops) }, 3066 { PCI_DEVICE(0x1814, 0x0302) },
3067 /* RT2661 */ 3067 /* RT2661 */
3068 { PCI_DEVICE(0x1814, 0x0401), PCI_DEVICE_DATA(&rt61pci_ops) }, 3068 { PCI_DEVICE(0x1814, 0x0401) },
3069 { 0, } 3069 { 0, }
3070}; 3070};
3071 3071
@@ -3080,10 +3080,16 @@ MODULE_FIRMWARE(FIRMWARE_RT2561s);
3080MODULE_FIRMWARE(FIRMWARE_RT2661); 3080MODULE_FIRMWARE(FIRMWARE_RT2661);
3081MODULE_LICENSE("GPL"); 3081MODULE_LICENSE("GPL");
3082 3082
3083static int rt61pci_probe(struct pci_dev *pci_dev,
3084 const struct pci_device_id *id)
3085{
3086 return rt2x00pci_probe(pci_dev, &rt61pci_ops);
3087}
3088
3083static struct pci_driver rt61pci_driver = { 3089static struct pci_driver rt61pci_driver = {
3084 .name = KBUILD_MODNAME, 3090 .name = KBUILD_MODNAME,
3085 .id_table = rt61pci_device_table, 3091 .id_table = rt61pci_device_table,
3086 .probe = rt2x00pci_probe, 3092 .probe = rt61pci_probe,
3087 .remove = __devexit_p(rt2x00pci_remove), 3093 .remove = __devexit_p(rt2x00pci_remove),
3088 .suspend = rt2x00pci_suspend, 3094 .suspend = rt2x00pci_suspend,
3089 .resume = rt2x00pci_resume, 3095 .resume = rt2x00pci_resume,
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index cdb026d076d..be3eb5e894e 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -2388,113 +2388,113 @@ static const struct rt2x00_ops rt73usb_ops = {
2388 */ 2388 */
2389static struct usb_device_id rt73usb_device_table[] = { 2389static struct usb_device_id rt73usb_device_table[] = {
2390 /* AboCom */ 2390 /* AboCom */
2391 { USB_DEVICE(0x07b8, 0xb21b), USB_DEVICE_DATA(&rt73usb_ops) }, 2391 { USB_DEVICE(0x07b8, 0xb21b) },
2392 { USB_DEVICE(0x07b8, 0xb21c), USB_DEVICE_DATA(&rt73usb_ops) }, 2392 { USB_DEVICE(0x07b8, 0xb21c) },
2393 { USB_DEVICE(0x07b8, 0xb21d), USB_DEVICE_DATA(&rt73usb_ops) }, 2393 { USB_DEVICE(0x07b8, 0xb21d) },
2394 { USB_DEVICE(0x07b8, 0xb21e), USB_DEVICE_DATA(&rt73usb_ops) }, 2394 { USB_DEVICE(0x07b8, 0xb21e) },
2395 { USB_DEVICE(0x07b8, 0xb21f), USB_DEVICE_DATA(&rt73usb_ops) }, 2395 { USB_DEVICE(0x07b8, 0xb21f) },
2396 /* AL */ 2396 /* AL */
2397 { USB_DEVICE(0x14b2, 0x3c10), USB_DEVICE_DATA(&rt73usb_ops) }, 2397 { USB_DEVICE(0x14b2, 0x3c10) },
2398 /* Amigo */ 2398 /* Amigo */
2399 { USB_DEVICE(0x148f, 0x9021), USB_DEVICE_DATA(&rt73usb_ops) }, 2399 { USB_DEVICE(0x148f, 0x9021) },
2400 { USB_DEVICE(0x0eb0, 0x9021), USB_DEVICE_DATA(&rt73usb_ops) }, 2400 { USB_DEVICE(0x0eb0, 0x9021) },
2401 /* AMIT */ 2401 /* AMIT */
2402 { USB_DEVICE(0x18c5, 0x0002), USB_DEVICE_DATA(&rt73usb_ops) }, 2402 { USB_DEVICE(0x18c5, 0x0002) },
2403 /* Askey */ 2403 /* Askey */
2404 { USB_DEVICE(0x1690, 0x0722), USB_DEVICE_DATA(&rt73usb_ops) }, 2404 { USB_DEVICE(0x1690, 0x0722) },
2405 /* ASUS */ 2405 /* ASUS */
2406 { USB_DEVICE(0x0b05, 0x1723), USB_DEVICE_DATA(&rt73usb_ops) }, 2406 { USB_DEVICE(0x0b05, 0x1723) },
2407 { USB_DEVICE(0x0b05, 0x1724), USB_DEVICE_DATA(&rt73usb_ops) }, 2407 { USB_DEVICE(0x0b05, 0x1724) },
2408 /* Belkin */ 2408 /* Belkin */
2409 { USB_DEVICE(0x050d, 0x705a), USB_DEVICE_DATA(&rt73usb_ops) }, 2409 { USB_DEVICE(0x050d, 0x705a) },
2410 { USB_DEVICE(0x050d, 0x905b), USB_DEVICE_DATA(&rt73usb_ops) }, 2410 { USB_DEVICE(0x050d, 0x905b) },
2411 { USB_DEVICE(0x050d, 0x905c), USB_DEVICE_DATA(&rt73usb_ops) }, 2411 { USB_DEVICE(0x050d, 0x905c) },
2412 /* Billionton */ 2412 /* Billionton */
2413 { USB_DEVICE(0x1631, 0xc019), USB_DEVICE_DATA(&rt73usb_ops) }, 2413 { USB_DEVICE(0x1631, 0xc019) },
2414 { USB_DEVICE(0x08dd, 0x0120), USB_DEVICE_DATA(&rt73usb_ops) }, 2414 { USB_DEVICE(0x08dd, 0x0120) },
2415 /* Buffalo */ 2415 /* Buffalo */
2416 { USB_DEVICE(0x0411, 0x00d8), USB_DEVICE_DATA(&rt73usb_ops) }, 2416 { USB_DEVICE(0x0411, 0x00d8) },
2417 { USB_DEVICE(0x0411, 0x00d9), USB_DEVICE_DATA(&rt73usb_ops) }, 2417 { USB_DEVICE(0x0411, 0x00d9) },
2418 { USB_DEVICE(0x0411, 0x00f4), USB_DEVICE_DATA(&rt73usb_ops) }, 2418 { USB_DEVICE(0x0411, 0x00f4) },
2419 { USB_DEVICE(0x0411, 0x0116), USB_DEVICE_DATA(&rt73usb_ops) }, 2419 { USB_DEVICE(0x0411, 0x0116) },
2420 { USB_DEVICE(0x0411, 0x0119), USB_DEVICE_DATA(&rt73usb_ops) }, 2420 { USB_DEVICE(0x0411, 0x0119) },
2421 { USB_DEVICE(0x0411, 0x0137), USB_DEVICE_DATA(&rt73usb_ops) }, 2421 { USB_DEVICE(0x0411, 0x0137) },
2422 /* CEIVA */ 2422 /* CEIVA */
2423 { USB_DEVICE(0x178d, 0x02be), USB_DEVICE_DATA(&rt73usb_ops) }, 2423 { USB_DEVICE(0x178d, 0x02be) },
2424 /* CNet */ 2424 /* CNet */
2425 { USB_DEVICE(0x1371, 0x9022), USB_DEVICE_DATA(&rt73usb_ops) }, 2425 { USB_DEVICE(0x1371, 0x9022) },
2426 { USB_DEVICE(0x1371, 0x9032), USB_DEVICE_DATA(&rt73usb_ops) }, 2426 { USB_DEVICE(0x1371, 0x9032) },
2427 /* Conceptronic */ 2427 /* Conceptronic */
2428 { USB_DEVICE(0x14b2, 0x3c22), USB_DEVICE_DATA(&rt73usb_ops) }, 2428 { USB_DEVICE(0x14b2, 0x3c22) },
2429 /* Corega */ 2429 /* Corega */
2430 { USB_DEVICE(0x07aa, 0x002e), USB_DEVICE_DATA(&rt73usb_ops) }, 2430 { USB_DEVICE(0x07aa, 0x002e) },
2431 /* D-Link */ 2431 /* D-Link */
2432 { USB_DEVICE(0x07d1, 0x3c03), USB_DEVICE_DATA(&rt73usb_ops) }, 2432 { USB_DEVICE(0x07d1, 0x3c03) },
2433 { USB_DEVICE(0x07d1, 0x3c04), USB_DEVICE_DATA(&rt73usb_ops) }, 2433 { USB_DEVICE(0x07d1, 0x3c04) },
2434 { USB_DEVICE(0x07d1, 0x3c06), USB_DEVICE_DATA(&rt73usb_ops) }, 2434 { USB_DEVICE(0x07d1, 0x3c06) },
2435 { USB_DEVICE(0x07d1, 0x3c07), USB_DEVICE_DATA(&rt73usb_ops) }, 2435 { USB_DEVICE(0x07d1, 0x3c07) },
2436 /* Edimax */ 2436 /* Edimax */
2437 { USB_DEVICE(0x7392, 0x7318), USB_DEVICE_DATA(&rt73usb_ops) }, 2437 { USB_DEVICE(0x7392, 0x7318) },
2438 { USB_DEVICE(0x7392, 0x7618), USB_DEVICE_DATA(&rt73usb_ops) }, 2438 { USB_DEVICE(0x7392, 0x7618) },
2439 /* EnGenius */ 2439 /* EnGenius */
2440 { USB_DEVICE(0x1740, 0x3701), USB_DEVICE_DATA(&rt73usb_ops) }, 2440 { USB_DEVICE(0x1740, 0x3701) },
2441 /* Gemtek */ 2441 /* Gemtek */
2442 { USB_DEVICE(0x15a9, 0x0004), USB_DEVICE_DATA(&rt73usb_ops) }, 2442 { USB_DEVICE(0x15a9, 0x0004) },
2443 /* Gigabyte */ 2443 /* Gigabyte */
2444 { USB_DEVICE(0x1044, 0x8008), USB_DEVICE_DATA(&rt73usb_ops) }, 2444 { USB_DEVICE(0x1044, 0x8008) },
2445 { USB_DEVICE(0x1044, 0x800a), USB_DEVICE_DATA(&rt73usb_ops) }, 2445 { USB_DEVICE(0x1044, 0x800a) },
2446 /* Huawei-3Com */ 2446 /* Huawei-3Com */
2447 { USB_DEVICE(0x1472, 0x0009), USB_DEVICE_DATA(&rt73usb_ops) }, 2447 { USB_DEVICE(0x1472, 0x0009) },
2448 /* Hercules */ 2448 /* Hercules */
2449 { USB_DEVICE(0x06f8, 0xe002), USB_DEVICE_DATA(&rt73usb_ops) }, 2449 { USB_DEVICE(0x06f8, 0xe002) },
2450 { USB_DEVICE(0x06f8, 0xe010), USB_DEVICE_DATA(&rt73usb_ops) }, 2450 { USB_DEVICE(0x06f8, 0xe010) },
2451 { USB_DEVICE(0x06f8, 0xe020), USB_DEVICE_DATA(&rt73usb_ops) }, 2451 { USB_DEVICE(0x06f8, 0xe020) },
2452 /* Linksys */ 2452 /* Linksys */
2453 { USB_DEVICE(0x13b1, 0x0020), USB_DEVICE_DATA(&rt73usb_ops) }, 2453 { USB_DEVICE(0x13b1, 0x0020) },
2454 { USB_DEVICE(0x13b1, 0x0023), USB_DEVICE_DATA(&rt73usb_ops) }, 2454 { USB_DEVICE(0x13b1, 0x0023) },
2455 { USB_DEVICE(0x13b1, 0x0028), USB_DEVICE_DATA(&rt73usb_ops) }, 2455 { USB_DEVICE(0x13b1, 0x0028) },
2456 /* MSI */ 2456 /* MSI */
2457 { USB_DEVICE(0x0db0, 0x4600), USB_DEVICE_DATA(&rt73usb_ops) }, 2457 { USB_DEVICE(0x0db0, 0x4600) },
2458 { USB_DEVICE(0x0db0, 0x6877), USB_DEVICE_DATA(&rt73usb_ops) }, 2458 { USB_DEVICE(0x0db0, 0x6877) },
2459 { USB_DEVICE(0x0db0, 0x6874), USB_DEVICE_DATA(&rt73usb_ops) }, 2459 { USB_DEVICE(0x0db0, 0x6874) },
2460 { USB_DEVICE(0x0db0, 0xa861), USB_DEVICE_DATA(&rt73usb_ops) }, 2460 { USB_DEVICE(0x0db0, 0xa861) },
2461 { USB_DEVICE(0x0db0, 0xa874), USB_DEVICE_DATA(&rt73usb_ops) }, 2461 { USB_DEVICE(0x0db0, 0xa874) },
2462 /* Ovislink */ 2462 /* Ovislink */
2463 { USB_DEVICE(0x1b75, 0x7318), USB_DEVICE_DATA(&rt73usb_ops) }, 2463 { USB_DEVICE(0x1b75, 0x7318) },
2464 /* Ralink */ 2464 /* Ralink */
2465 { USB_DEVICE(0x04bb, 0x093d), USB_DEVICE_DATA(&rt73usb_ops) }, 2465 { USB_DEVICE(0x04bb, 0x093d) },
2466 { USB_DEVICE(0x148f, 0x2573), USB_DEVICE_DATA(&rt73usb_ops) }, 2466 { USB_DEVICE(0x148f, 0x2573) },
2467 { USB_DEVICE(0x148f, 0x2671), USB_DEVICE_DATA(&rt73usb_ops) }, 2467 { USB_DEVICE(0x148f, 0x2671) },
2468 { USB_DEVICE(0x0812, 0x3101), USB_DEVICE_DATA(&rt73usb_ops) }, 2468 { USB_DEVICE(0x0812, 0x3101) },
2469 /* Qcom */ 2469 /* Qcom */
2470 { USB_DEVICE(0x18e8, 0x6196), USB_DEVICE_DATA(&rt73usb_ops) }, 2470 { USB_DEVICE(0x18e8, 0x6196) },
2471 { USB_DEVICE(0x18e8, 0x6229), USB_DEVICE_DATA(&rt73usb_ops) }, 2471 { USB_DEVICE(0x18e8, 0x6229) },
2472 { USB_DEVICE(0x18e8, 0x6238), USB_DEVICE_DATA(&rt73usb_ops) }, 2472 { USB_DEVICE(0x18e8, 0x6238) },
2473 /* Samsung */ 2473 /* Samsung */
2474 { USB_DEVICE(0x04e8, 0x4471), USB_DEVICE_DATA(&rt73usb_ops) }, 2474 { USB_DEVICE(0x04e8, 0x4471) },
2475 /* Senao */ 2475 /* Senao */
2476 { USB_DEVICE(0x1740, 0x7100), USB_DEVICE_DATA(&rt73usb_ops) }, 2476 { USB_DEVICE(0x1740, 0x7100) },
2477 /* Sitecom */ 2477 /* Sitecom */
2478 { USB_DEVICE(0x0df6, 0x0024), USB_DEVICE_DATA(&rt73usb_ops) }, 2478 { USB_DEVICE(0x0df6, 0x0024) },
2479 { USB_DEVICE(0x0df6, 0x0027), USB_DEVICE_DATA(&rt73usb_ops) }, 2479 { USB_DEVICE(0x0df6, 0x0027) },
2480 { USB_DEVICE(0x0df6, 0x002f), USB_DEVICE_DATA(&rt73usb_ops) }, 2480 { USB_DEVICE(0x0df6, 0x002f) },
2481 { USB_DEVICE(0x0df6, 0x90ac), USB_DEVICE_DATA(&rt73usb_ops) }, 2481 { USB_DEVICE(0x0df6, 0x90ac) },
2482 { USB_DEVICE(0x0df6, 0x9712), USB_DEVICE_DATA(&rt73usb_ops) }, 2482 { USB_DEVICE(0x0df6, 0x9712) },
2483 /* Surecom */ 2483 /* Surecom */
2484 { USB_DEVICE(0x0769, 0x31f3), USB_DEVICE_DATA(&rt73usb_ops) }, 2484 { USB_DEVICE(0x0769, 0x31f3) },
2485 /* Tilgin */ 2485 /* Tilgin */
2486 { USB_DEVICE(0x6933, 0x5001), USB_DEVICE_DATA(&rt73usb_ops) }, 2486 { USB_DEVICE(0x6933, 0x5001) },
2487 /* Philips */ 2487 /* Philips */
2488 { USB_DEVICE(0x0471, 0x200a), USB_DEVICE_DATA(&rt73usb_ops) }, 2488 { USB_DEVICE(0x0471, 0x200a) },
2489 /* Planex */ 2489 /* Planex */
2490 { USB_DEVICE(0x2019, 0xab01), USB_DEVICE_DATA(&rt73usb_ops) }, 2490 { USB_DEVICE(0x2019, 0xab01) },
2491 { USB_DEVICE(0x2019, 0xab50), USB_DEVICE_DATA(&rt73usb_ops) }, 2491 { USB_DEVICE(0x2019, 0xab50) },
2492 /* WideTell */ 2492 /* WideTell */
2493 { USB_DEVICE(0x7167, 0x3840), USB_DEVICE_DATA(&rt73usb_ops) }, 2493 { USB_DEVICE(0x7167, 0x3840) },
2494 /* Zcom */ 2494 /* Zcom */
2495 { USB_DEVICE(0x0cde, 0x001c), USB_DEVICE_DATA(&rt73usb_ops) }, 2495 { USB_DEVICE(0x0cde, 0x001c) },
2496 /* ZyXEL */ 2496 /* ZyXEL */
2497 { USB_DEVICE(0x0586, 0x3415), USB_DEVICE_DATA(&rt73usb_ops) }, 2497 { USB_DEVICE(0x0586, 0x3415) },
2498 { 0, } 2498 { 0, }
2499}; 2499};
2500 2500
@@ -2506,10 +2506,16 @@ MODULE_DEVICE_TABLE(usb, rt73usb_device_table);
2506MODULE_FIRMWARE(FIRMWARE_RT2571); 2506MODULE_FIRMWARE(FIRMWARE_RT2571);
2507MODULE_LICENSE("GPL"); 2507MODULE_LICENSE("GPL");
2508 2508
2509static int rt73usb_probe(struct usb_interface *usb_intf,
2510 const struct usb_device_id *id)
2511{
2512 return rt2x00usb_probe(usb_intf, &rt73usb_ops);
2513}
2514
2509static struct usb_driver rt73usb_driver = { 2515static struct usb_driver rt73usb_driver = {
2510 .name = KBUILD_MODNAME, 2516 .name = KBUILD_MODNAME,
2511 .id_table = rt73usb_device_table, 2517 .id_table = rt73usb_device_table,
2512 .probe = rt2x00usb_probe, 2518 .probe = rt73usb_probe,
2513 .disconnect = rt2x00usb_disconnect, 2519 .disconnect = rt2x00usb_disconnect,
2514 .suspend = rt2x00usb_suspend, 2520 .suspend = rt2x00usb_suspend,
2515 .resume = rt2x00usb_resume, 2521 .resume = rt2x00usb_resume,