35 #include <linux/kernel.h>
36 #include <linux/module.h>
48 static bool modparam_nohwcrypt;
52 static bool rt2800usb_hwcrypt_disabled(
struct rt2x00_dev *rt2x00dev)
54 return modparam_nohwcrypt;
83 static void rt2800usb_stop_queue(
struct data_queue *queue)
110 static bool rt2800usb_txstatus_pending(
struct rt2x00_dev *rt2x00dev)
122 static inline bool rt2800usb_entry_txstatus_timeout(
struct queue_entry *
entry)
131 WARNING(entry->queue->rt2x00dev,
132 "TX status timeout for entry %d in queue %d\n",
133 entry->entry_idx, entry->queue->qid);
138 static bool rt2800usb_txstatus_timeout(
struct rt2x00_dev *rt2x00dev)
141 struct queue_entry *
entry;
145 if (rt2800usb_entry_txstatus_timeout(entry))
151 static bool rt2800usb_tx_sta_fifo_read_completed(
struct rt2x00_dev *rt2x00dev,
157 WARNING(rt2x00dev,
"TX status read failed %d\n", urb_status);
164 if (!
kfifo_put(&rt2x00dev->txstatus_fifo, &tx_status))
165 WARNING(rt2x00dev,
"TX status FIFO overrun\n");
174 if (rt2800usb_txstatus_timeout(rt2x00dev))
177 if (rt2800usb_txstatus_pending(rt2x00dev)) {
191 if (rt2800usb_txstatus_pending(rt2x00dev) &&
198 static void rt2800usb_async_read_tx_status(
struct rt2x00_dev *rt2x00dev)
209 static void rt2800usb_tx_dma_done(
struct queue_entry *entry)
211 struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
213 rt2800usb_async_read_tx_status(rt2x00dev);
222 rt2800usb_tx_sta_fifo_read_completed);
230 static char *rt2800usb_get_firmware_name(
struct rt2x00_dev *rt2x00dev)
235 static int rt2800usb_write_firmware(
struct rt2x00_dev *rt2x00dev,
236 const u8 *
data,
const size_t len)
245 if (rt2x00_rt(rt2x00dev,
RT2860) ||
246 rt2x00_rt(rt2x00dev,
RT2872) ||
247 rt2x00_rt(rt2x00dev,
RT3070)) {
259 data + offset, length);
272 ERROR(rt2x00dev,
"Failed to write Firmware to device.\n");
285 static int rt2800usb_init_registers(
struct rt2x00_dev *rt2x00dev)
296 rt2x00usb_register_write(rt2x00dev,
PBF_SYS_CTRL, reg & ~0x00002000);
303 rt2x00usb_register_write(rt2x00dev,
USB_DMA_CFG, 0x00000000);
308 rt2x00usb_register_write(rt2x00dev,
MAC_SYS_CTRL, 0x00000000);
313 static int rt2800usb_enable_radio(
struct rt2x00_dev *rt2x00dev)
320 rt2x00usb_register_read(rt2x00dev,
USB_DMA_CFG, ®);
333 rt2x00usb_register_write(rt2x00dev,
USB_DMA_CFG, reg);
338 static void rt2800usb_disable_radio(
struct rt2x00_dev *rt2x00dev)
344 static int rt2800usb_set_state(
struct rt2x00_dev *rt2x00dev,
355 static int rt2800usb_set_device_state(
struct rt2x00_dev *rt2x00dev,
369 retval = rt2800usb_enable_radio(rt2x00dev);
376 rt2800usb_disable_radio(rt2x00dev);
387 retval = rt2800usb_set_state(rt2x00dev, state);
395 ERROR(rt2x00dev,
"Device failed to enter state %d (%d).\n",
404 static void rt2800usb_watchdog(
struct rt2x00_dev *rt2x00dev)
409 rt2x00usb_register_read(rt2x00dev,
TXRXQ_PCNT, ®);
411 WARNING(rt2x00dev,
"TX HW queue 0 timed out,"
412 " invoke forced kick\n");
414 rt2x00usb_register_write(rt2x00dev,
PBF_CFG, 0xf40012);
416 for (i = 0; i < 10; i++) {
422 rt2x00usb_register_write(rt2x00dev,
PBF_CFG, 0xf40006);
425 rt2x00usb_register_read(rt2x00dev,
TXRXQ_PCNT, ®);
427 WARNING(rt2x00dev,
"TX HW queue 1 timed out,"
428 " invoke forced kick\n");
430 rt2x00usb_register_write(rt2x00dev,
PBF_CFG, 0xf4000a);
432 for (i = 0; i < 10; i++) {
438 rt2x00usb_register_write(rt2x00dev,
PBF_CFG, 0xf40006);
447 static __le32 *rt2800usb_get_txwi(
struct queue_entry *entry)
450 return (
__le32 *) (entry->skb->data);
455 static void rt2800usb_write_tx_desc(
struct queue_entry *entry,
465 rt2x00_desc_read(txi, 0, &
word);
481 rt2x00_desc_write(txi, 0,
word);
494 static int rt2800usb_get_tx_data_len(
struct queue_entry *entry)
504 return roundup(entry->skb->len, 4) + 4;
511 rt2800usb_txdone_entry_check(
struct queue_entry *entry,
u32 reg)
516 int tx_wcid, tx_ack, tx_pid, is_agg;
535 txwi = rt2800usb_get_txwi(entry);
537 rt2x00_desc_read(txwi, 1, &word);
542 if (wcid != tx_wcid || ack != tx_ack || (!is_agg && pid != tx_pid)) {
543 WARNING(entry->queue->rt2x00dev,
544 "TX status report missed for queue %d entry %d\n",
545 entry->queue->qid, entry->entry_idx);
552 static void rt2800usb_txdone(
struct rt2x00_dev *rt2x00dev)
555 struct queue_entry *
entry;
560 while (
kfifo_get(&rt2x00dev->txstatus_fifo, ®)) {
566 queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
568 if (
unlikely(rt2x00queue_empty(queue))) {
569 WARNING(rt2x00dev,
"Got TX status for an empty "
570 "queue %u, dropping\n", qid);
578 WARNING(rt2x00dev,
"Data pending for entry %u "
579 "in queue %u\n", entry->entry_idx, qid);
583 done_status = rt2800usb_txdone_entry_check(entry, reg);
591 static void rt2800usb_txdone_nostatus(
struct rt2x00_dev *rt2x00dev)
594 struct queue_entry *
entry;
604 while (!rt2x00queue_empty(queue)) {
613 else if (rt2800usb_entry_txstatus_timeout(entry))
627 rt2800usb_txstatus_timeout(rt2x00dev)) {
629 rt2800usb_txdone(rt2x00dev);
631 rt2800usb_txdone_nostatus(rt2x00dev);
638 if (rt2800usb_txstatus_pending(rt2x00dev))
639 rt2800usb_async_read_tx_status(rt2x00dev);
646 static void rt2800usb_fill_rxdone(
struct queue_entry *entry,
666 rt2x00_desc_read(rxi, 0, &word);
679 rx_pkt_len > entry->queue->data_size)) {
680 ERROR(entry->queue->rt2x00dev,
681 "Bad frame size %d, forcing to 0\n", rx_pkt_len);
685 rxd = (
__le32 *)(entry->skb->data + rx_pkt_len);
690 rt2x00_desc_read(rxd, 0, &word);
738 static void rt2800usb_read_eeprom(
struct rt2x00_dev *rt2x00dev)
743 rt2x00usb_eeprom_read(rt2x00dev, rt2x00dev->
eeprom,
747 static int rt2800usb_probe_hw(
struct rt2x00_dev *rt2x00dev)
758 rt2x00dev->
txstatus_timer.function = rt2800usb_tx_sta_fifo_timeout;
796 static const struct rt2800_ops rt2800usb_rt2800_ops = {
797 .register_read = rt2x00usb_register_read,
798 .register_read_lock = rt2x00usb_register_read_lock,
799 .register_write = rt2x00usb_register_write,
800 .register_write_lock = rt2x00usb_register_write_lock,
801 .register_multiread = rt2x00usb_register_multiread,
802 .register_multiwrite = rt2x00usb_register_multiwrite,
804 .read_eeprom = rt2800usb_read_eeprom,
805 .hwcrypt_disabled = rt2800usb_hwcrypt_disabled,
806 .drv_write_firmware = rt2800usb_write_firmware,
807 .drv_init_registers = rt2800usb_init_registers,
808 .drv_get_txwi = rt2800usb_get_txwi,
812 .probe_hw = rt2800usb_probe_hw,
813 .get_firmware_name = rt2800usb_get_firmware_name,
819 .set_device_state = rt2800usb_set_device_state,
826 .watchdog = rt2800usb_watchdog,
827 .start_queue = rt2800usb_start_queue,
829 .stop_queue = rt2800usb_stop_queue,
831 .tx_dma_done = rt2800usb_tx_dma_done,
832 .write_tx_desc = rt2800usb_write_tx_desc,
836 .get_tx_data_len = rt2800usb_get_tx_data_len,
837 .fill_rxdone = rt2800usb_fill_rxdone,
870 static const struct rt2x00_ops rt2800usb_ops = {
871 .name = KBUILD_MODNAME,
878 .rx = &rt2800usb_queue_rx,
879 .tx = &rt2800usb_queue_tx,
880 .bcn = &rt2800usb_queue_bcn,
881 .lib = &rt2800usb_rt2x00_ops,
882 .drv = &rt2800usb_rt2800_ops,
883 .hw = &rt2800usb_mac80211_ops,
884 #ifdef CONFIG_RT2X00_LIB_DEBUGFS
894 { USB_DEVICE(0x07b8, 0x2870) },
895 { USB_DEVICE(0x07b8, 0x2770) },
896 { USB_DEVICE(0x07b8, 0x3070) },
897 { USB_DEVICE(0x07b8, 0x3071) },
898 { USB_DEVICE(0x07b8, 0x3072) },
899 { USB_DEVICE(0x1482, 0x3c09) },
901 { USB_DEVICE(0x1eda, 0x2012) },
902 { USB_DEVICE(0x1eda, 0x2210) },
903 { USB_DEVICE(0x1eda, 0x2310) },
905 { USB_DEVICE(0x8516, 0x2070) },
906 { USB_DEVICE(0x8516, 0x2770) },
907 { USB_DEVICE(0x8516, 0x2870) },
908 { USB_DEVICE(0x8516, 0x3070) },
909 { USB_DEVICE(0x8516, 0x3071) },
910 { USB_DEVICE(0x8516, 0x3072) },
912 { USB_DEVICE(0x14b2, 0x3c06) },
913 { USB_DEVICE(0x14b2, 0x3c07) },
914 { USB_DEVICE(0x14b2, 0x3c09) },
915 { USB_DEVICE(0x14b2, 0x3c12) },
916 { USB_DEVICE(0x14b2, 0x3c23) },
917 { USB_DEVICE(0x14b2, 0x3c25) },
918 { USB_DEVICE(0x14b2, 0x3c27) },
919 { USB_DEVICE(0x14b2, 0x3c28) },
920 { USB_DEVICE(0x14b2, 0x3c2c) },
922 { USB_DEVICE(0x15c5, 0x0008) },
924 { USB_DEVICE(0x1690, 0x0740) },
926 { USB_DEVICE(0x0b05, 0x1731) },
927 { USB_DEVICE(0x0b05, 0x1732) },
928 { USB_DEVICE(0x0b05, 0x1742) },
929 { USB_DEVICE(0x0b05, 0x1784) },
930 { USB_DEVICE(0x1761, 0x0b05) },
932 { USB_DEVICE(0x13d3, 0x3247) },
933 { USB_DEVICE(0x13d3, 0x3273) },
934 { USB_DEVICE(0x13d3, 0x3305) },
935 { USB_DEVICE(0x13d3, 0x3307) },
936 { USB_DEVICE(0x13d3, 0x3321) },
938 { USB_DEVICE(0x050d, 0x8053) },
939 { USB_DEVICE(0x050d, 0x805c) },
940 { USB_DEVICE(0x050d, 0x815c) },
941 { USB_DEVICE(0x050d, 0x825a) },
942 { USB_DEVICE(0x050d, 0x825b) },
943 { USB_DEVICE(0x050d, 0x935a) },
944 { USB_DEVICE(0x050d, 0x935b) },
946 { USB_DEVICE(0x0411, 0x00e8) },
947 { USB_DEVICE(0x0411, 0x0158) },
948 { USB_DEVICE(0x0411, 0x015d) },
949 { USB_DEVICE(0x0411, 0x016f) },
950 { USB_DEVICE(0x0411, 0x01a2) },
951 { USB_DEVICE(0x0411, 0x01ee) },
953 { USB_DEVICE(0x07aa, 0x002f) },
954 { USB_DEVICE(0x07aa, 0x003c) },
955 { USB_DEVICE(0x07aa, 0x003f) },
956 { USB_DEVICE(0x18c5, 0x0012) },
958 { USB_DEVICE(0x07d1, 0x3c09) },
959 { USB_DEVICE(0x07d1, 0x3c0a) },
960 { USB_DEVICE(0x07d1, 0x3c0d) },
961 { USB_DEVICE(0x07d1, 0x3c0e) },
962 { USB_DEVICE(0x07d1, 0x3c0f) },
963 { USB_DEVICE(0x07d1, 0x3c11) },
964 { USB_DEVICE(0x07d1, 0x3c13) },
965 { USB_DEVICE(0x07d1, 0x3c15) },
966 { USB_DEVICE(0x07d1, 0x3c16) },
967 { USB_DEVICE(0x2001, 0x3c1b) },
969 { USB_DEVICE(0x07fa, 0x7712) },
971 { USB_DEVICE(0x0fe9, 0xb307) },
973 { USB_DEVICE(0x7392, 0x4085) },
974 { USB_DEVICE(0x7392, 0x7711) },
975 { USB_DEVICE(0x7392, 0x7717) },
976 { USB_DEVICE(0x7392, 0x7718) },
977 { USB_DEVICE(0x7392, 0x7722) },
979 { USB_DEVICE(0x203d, 0x1480) },
980 { USB_DEVICE(0x203d, 0x14a9) },
982 { USB_DEVICE(0x1740, 0x9701) },
983 { USB_DEVICE(0x1740, 0x9702) },
984 { USB_DEVICE(0x1740, 0x9703) },
985 { USB_DEVICE(0x1740, 0x9705) },
986 { USB_DEVICE(0x1740, 0x9706) },
987 { USB_DEVICE(0x1740, 0x9707) },
988 { USB_DEVICE(0x1740, 0x9708) },
989 { USB_DEVICE(0x1740, 0x9709) },
991 { USB_DEVICE(0x15a9, 0x0012) },
993 { USB_DEVICE(0x1044, 0x800b) },
994 { USB_DEVICE(0x1044, 0x800d) },
996 { USB_DEVICE(0x0e66, 0x0001) },
997 { USB_DEVICE(0x0e66, 0x0003) },
998 { USB_DEVICE(0x0e66, 0x0009) },
999 { USB_DEVICE(0x0e66, 0x000b) },
1000 { USB_DEVICE(0x0e66, 0x0013) },
1001 { USB_DEVICE(0x0e66, 0x0017) },
1002 { USB_DEVICE(0x0e66, 0x0018) },
1004 { USB_DEVICE(0x04bb, 0x0945) },
1005 { USB_DEVICE(0x04bb, 0x0947) },
1006 { USB_DEVICE(0x04bb, 0x0948) },
1008 { USB_DEVICE(0x13b1, 0x0031) },
1009 { USB_DEVICE(0x1737, 0x0070) },
1010 { USB_DEVICE(0x1737, 0x0071) },
1011 { USB_DEVICE(0x1737, 0x0077) },
1012 { USB_DEVICE(0x1737, 0x0078) },
1014 { USB_DEVICE(0x0789, 0x0162) },
1015 { USB_DEVICE(0x0789, 0x0163) },
1016 { USB_DEVICE(0x0789, 0x0164) },
1017 { USB_DEVICE(0x0789, 0x0166) },
1019 { USB_DEVICE(0x100d, 0x9031) },
1021 { USB_DEVICE(0x0db0, 0x3820) },
1022 { USB_DEVICE(0x0db0, 0x3821) },
1023 { USB_DEVICE(0x0db0, 0x3822) },
1024 { USB_DEVICE(0x0db0, 0x3870) },
1025 { USB_DEVICE(0x0db0, 0x3871) },
1026 { USB_DEVICE(0x0db0, 0x6899) },
1027 { USB_DEVICE(0x0db0, 0x821a) },
1028 { USB_DEVICE(0x0db0, 0x822a) },
1029 { USB_DEVICE(0x0db0, 0x822b) },
1030 { USB_DEVICE(0x0db0, 0x822c) },
1031 { USB_DEVICE(0x0db0, 0x870a) },
1032 { USB_DEVICE(0x0db0, 0x871a) },
1033 { USB_DEVICE(0x0db0, 0x871b) },
1034 { USB_DEVICE(0x0db0, 0x871c) },
1035 { USB_DEVICE(0x0db0, 0x899a) },
1037 { USB_DEVICE(0x1b75, 0x3071) },
1038 { USB_DEVICE(0x1b75, 0x3072) },
1040 { USB_DEVICE(0x20b8, 0x8888) },
1042 { USB_DEVICE(0x1d4d, 0x0002) },
1043 { USB_DEVICE(0x1d4d, 0x000c) },
1044 { USB_DEVICE(0x1d4d, 0x000e) },
1045 { USB_DEVICE(0x1d4d, 0x0011) },
1047 { USB_DEVICE(0x0471, 0x200f) },
1049 { USB_DEVICE(0x2019, 0x5201) },
1050 { USB_DEVICE(0x2019, 0xab25) },
1051 { USB_DEVICE(0x2019, 0xed06) },
1053 { USB_DEVICE(0x1a32, 0x0304) },
1055 { USB_DEVICE(0x148f, 0x2070) },
1056 { USB_DEVICE(0x148f, 0x2770) },
1057 { USB_DEVICE(0x148f, 0x2870) },
1058 { USB_DEVICE(0x148f, 0x3070) },
1059 { USB_DEVICE(0x148f, 0x3071) },
1060 { USB_DEVICE(0x148f, 0x3072) },
1062 { USB_DEVICE(0x04e8, 0x2018) },
1064 { USB_DEVICE(0x129b, 0x1828) },
1066 { USB_DEVICE(0x0df6, 0x0017) },
1067 { USB_DEVICE(0x0df6, 0x002b) },
1068 { USB_DEVICE(0x0df6, 0x002c) },
1069 { USB_DEVICE(0x0df6, 0x002d) },
1070 { USB_DEVICE(0x0df6, 0x0039) },
1071 { USB_DEVICE(0x0df6, 0x003b) },
1072 { USB_DEVICE(0x0df6, 0x003d) },
1073 { USB_DEVICE(0x0df6, 0x003e) },
1074 { USB_DEVICE(0x0df6, 0x003f) },
1075 { USB_DEVICE(0x0df6, 0x0040) },
1076 { USB_DEVICE(0x0df6, 0x0042) },
1077 { USB_DEVICE(0x0df6, 0x0047) },
1078 { USB_DEVICE(0x0df6, 0x0048) },
1079 { USB_DEVICE(0x0df6, 0x0051) },
1080 { USB_DEVICE(0x0df6, 0x005f) },
1081 { USB_DEVICE(0x0df6, 0x0060) },
1083 { USB_DEVICE(0x083a, 0x6618) },
1084 { USB_DEVICE(0x083a, 0x7511) },
1085 { USB_DEVICE(0x083a, 0x7512) },
1086 { USB_DEVICE(0x083a, 0x7522) },
1087 { USB_DEVICE(0x083a, 0x8522) },
1088 { USB_DEVICE(0x083a, 0xa618) },
1089 { USB_DEVICE(0x083a, 0xa701) },
1090 { USB_DEVICE(0x083a, 0xa702) },
1091 { USB_DEVICE(0x083a, 0xa703) },
1092 { USB_DEVICE(0x083a, 0xb522) },
1094 { USB_DEVICE(0x15a9, 0x0006) },
1096 { USB_DEVICE(0x177f, 0x0153) },
1097 { USB_DEVICE(0x177f, 0x0302) },
1098 { USB_DEVICE(0x177f, 0x0313) },
1100 { USB_DEVICE(0x157e, 0x300e) },
1101 { USB_DEVICE(0x157e, 0x3013) },
1103 { USB_DEVICE(0x0cde, 0x0022) },
1104 { USB_DEVICE(0x0cde, 0x0025) },
1106 { USB_DEVICE(0x5a57, 0x0280) },
1107 { USB_DEVICE(0x5a57, 0x0282) },
1108 { USB_DEVICE(0x5a57, 0x0283) },
1109 { USB_DEVICE(0x5a57, 0x5257) },
1111 { USB_DEVICE(0x0586, 0x3416) },
1112 { USB_DEVICE(0x0586, 0x3418) },
1113 { USB_DEVICE(0x0586, 0x341e) },
1114 { USB_DEVICE(0x0586, 0x343e) },
1115 #ifdef CONFIG_RT2800USB_RT33XX
1117 { USB_DEVICE(0x050d, 0x945b) },
1119 { USB_DEVICE(0x2001, 0x3c17) },
1121 { USB_DEVICE(0x083a, 0xb511) },
1123 { USB_DEVICE(0x0471, 0x20dd) },
1125 { USB_DEVICE(0x148f, 0x3370) },
1126 { USB_DEVICE(0x148f, 0x8070) },
1128 { USB_DEVICE(0x0df6, 0x0050) },
1130 #ifdef CONFIG_RT2800USB_RT35XX
1132 { USB_DEVICE(0x8516, 0x3572) },
1134 { USB_DEVICE(0x1690, 0x0744) },
1135 { USB_DEVICE(0x1690, 0x0761) },
1136 { USB_DEVICE(0x1690, 0x0764) },
1138 { USB_DEVICE(0x0b05, 0x179d) },
1140 { USB_DEVICE(0x167b, 0x4001) },
1142 { USB_DEVICE(0x1740, 0x9801) },
1144 { USB_DEVICE(0x04bb, 0x0944) },
1146 { USB_DEVICE(0x13b1, 0x002f) },
1147 { USB_DEVICE(0x1737, 0x0079) },
1149 { USB_DEVICE(0x148f, 0x3572) },
1151 { USB_DEVICE(0x0df6, 0x0041) },
1152 { USB_DEVICE(0x0df6, 0x0062) },
1153 { USB_DEVICE(0x0df6, 0x0065) },
1154 { USB_DEVICE(0x0df6, 0x0066) },
1155 { USB_DEVICE(0x0df6, 0x0068) },
1157 { USB_DEVICE(0x0930, 0x0a07) },
1159 { USB_DEVICE(0x5a57, 0x0284) },
1161 #ifdef CONFIG_RT2800USB_RT53XX
1163 { USB_DEVICE(0x043e, 0x7a12) },
1165 { USB_DEVICE(0x13d3, 0x3329) },
1166 { USB_DEVICE(0x13d3, 0x3365) },
1168 { USB_DEVICE(0x2001, 0x3c15) },
1169 { USB_DEVICE(0x2001, 0x3c19) },
1170 { USB_DEVICE(0x2001, 0x3c1c) },
1171 { USB_DEVICE(0x2001, 0x3c1d) },
1173 { USB_DEVICE(0x043e, 0x7a22) },
1175 { USB_DEVICE(0x04da, 0x1801) },
1176 { USB_DEVICE(0x04da, 0x1800) },
1178 { USB_DEVICE(0x0471, 0x2104) },
1180 { USB_DEVICE(0x148f, 0x5370) },
1181 { USB_DEVICE(0x148f, 0x5372) },
1183 { USB_DEVICE(0x04da, 0x23f6) },
1185 #ifdef CONFIG_RT2800USB_UNKNOWN
1191 { USB_DEVICE(0x07b8, 0x3073) },
1192 { USB_DEVICE(0x07b8, 0x3074) },
1194 { USB_DEVICE(0x14b2, 0x3c08) },
1195 { USB_DEVICE(0x14b2, 0x3c11) },
1197 { USB_DEVICE(0x0e0b, 0x9031) },
1198 { USB_DEVICE(0x0e0b, 0x9041) },
1200 { USB_DEVICE(0x0b05, 0x166a) },
1201 { USB_DEVICE(0x0b05, 0x1760) },
1202 { USB_DEVICE(0x0b05, 0x1761) },
1203 { USB_DEVICE(0x0b05, 0x1790) },
1205 { USB_DEVICE(0x13d3, 0x3262) },
1206 { USB_DEVICE(0x13d3, 0x3284) },
1207 { USB_DEVICE(0x13d3, 0x3322) },
1209 { USB_DEVICE(0x050d, 0x1003) },
1211 { USB_DEVICE(0x0411, 0x012e) },
1212 { USB_DEVICE(0x0411, 0x0148) },
1213 { USB_DEVICE(0x0411, 0x0150) },
1215 { USB_DEVICE(0x07aa, 0x0041) },
1216 { USB_DEVICE(0x07aa, 0x0042) },
1217 { USB_DEVICE(0x18c5, 0x0008) },
1219 { USB_DEVICE(0x07d1, 0x3c0b) },
1220 { USB_DEVICE(0x07d1, 0x3c17) },
1222 { USB_DEVICE(0x203d, 0x14a1) },
1224 { USB_DEVICE(0x15a9, 0x0010) },
1226 { USB_DEVICE(0x1044, 0x800c) },
1228 { USB_DEVICE(0x148f, 0xf101) },
1230 { USB_DEVICE(0x04bb, 0x094b) },
1232 { USB_DEVICE(0x1740, 0x0605) },
1233 { USB_DEVICE(0x1740, 0x0615) },
1235 { USB_DEVICE(0x0789, 0x0168) },
1236 { USB_DEVICE(0x0789, 0x0169) },
1238 { USB_DEVICE(0x100d, 0x9032) },
1240 { USB_DEVICE(0x05a6, 0x0101) },
1241 { USB_DEVICE(0x1d4d, 0x0010) },
1243 { USB_DEVICE(0x2019, 0xab24) },
1245 { USB_DEVICE(0x18e8, 0x6259) },
1247 { USB_DEVICE(0x08b9, 0x1197) },
1249 { USB_DEVICE(0x0df6, 0x003c) },
1250 { USB_DEVICE(0x0df6, 0x004a) },
1251 { USB_DEVICE(0x0df6, 0x004d) },
1252 { USB_DEVICE(0x0df6, 0x0053) },
1254 { USB_DEVICE(0x083a, 0xa512) },
1255 { USB_DEVICE(0x083a, 0xc522) },
1256 { USB_DEVICE(0x083a, 0xd522) },
1257 { USB_DEVICE(0x083a, 0xf511) },
1259 { USB_DEVICE(0x0586, 0x341a) },
1278 static struct usb_driver rt2800usb_driver = {
1279 .name = KBUILD_MODNAME,
1280 .id_table = rt2800usb_device_table,
1281 .probe = rt2800usb_probe,
1286 .disable_hub_initiated_lpm = 1,