diff options
author | H. Peter Anvin <hpa@linux.intel.com> | 2011-08-04 19:13:20 -0400 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2011-08-04 19:13:20 -0400 |
commit | 17b0436077d99211d8b26886235a36c5ec54ac57 (patch) | |
tree | 8bcd9b4a0f8285f749814e95ae0365c611ba2392 /drivers/media/rc/mceusb.c | |
parent | aafade242ff24fac3aabf61c7861dfa44a3c2445 (diff) | |
parent | 02f8c6aee8df3cdc935e9bdd4f2d020306035dbe (diff) |
Merge commit 'v3.0' into x86/vdso
Diffstat (limited to 'drivers/media/rc/mceusb.c')
-rw-r--r-- | drivers/media/rc/mceusb.c | 89 |
1 files changed, 43 insertions, 46 deletions
diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c index ad927fcaa020..ec972dc25790 100644 --- a/drivers/media/rc/mceusb.c +++ b/drivers/media/rc/mceusb.c | |||
@@ -108,6 +108,12 @@ static int debug = 1; | |||
108 | static int debug; | 108 | static int debug; |
109 | #endif | 109 | #endif |
110 | 110 | ||
111 | #define mce_dbg(dev, fmt, ...) \ | ||
112 | do { \ | ||
113 | if (debug) \ | ||
114 | dev_info(dev, fmt, ## __VA_ARGS__); \ | ||
115 | } while (0) | ||
116 | |||
111 | /* general constants */ | 117 | /* general constants */ |
112 | #define SEND_FLAG_IN_PROGRESS 1 | 118 | #define SEND_FLAG_IN_PROGRESS 1 |
113 | #define SEND_FLAG_COMPLETE 2 | 119 | #define SEND_FLAG_COMPLETE 2 |
@@ -246,6 +252,9 @@ static struct usb_device_id mceusb_dev_table[] = { | |||
246 | .driver_info = MCE_GEN2_TX_INV }, | 252 | .driver_info = MCE_GEN2_TX_INV }, |
247 | /* SMK eHome Infrared Transceiver */ | 253 | /* SMK eHome Infrared Transceiver */ |
248 | { USB_DEVICE(VENDOR_SMK, 0x0338) }, | 254 | { USB_DEVICE(VENDOR_SMK, 0x0338) }, |
255 | /* SMK/I-O Data GV-MC7/RCKIT Receiver */ | ||
256 | { USB_DEVICE(VENDOR_SMK, 0x0353), | ||
257 | .driver_info = MCE_GEN2_NO_TX }, | ||
249 | /* Tatung eHome Infrared Transceiver */ | 258 | /* Tatung eHome Infrared Transceiver */ |
250 | { USB_DEVICE(VENDOR_TATUNG, 0x9150) }, | 259 | { USB_DEVICE(VENDOR_TATUNG, 0x9150) }, |
251 | /* Shuttle eHome Infrared Transceiver */ | 260 | /* Shuttle eHome Infrared Transceiver */ |
@@ -549,9 +558,10 @@ static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf, | |||
549 | inout, data1); | 558 | inout, data1); |
550 | break; | 559 | break; |
551 | case MCE_CMD_S_TIMEOUT: | 560 | case MCE_CMD_S_TIMEOUT: |
552 | /* value is in units of 50us, so x*50/100 or x/2 ms */ | 561 | /* value is in units of 50us, so x*50/1000 ms */ |
553 | dev_info(dev, "%s receive timeout of %d ms\n", | 562 | dev_info(dev, "%s receive timeout of %d ms\n", |
554 | inout, ((data1 << 8) | data2) / 2); | 563 | inout, |
564 | ((data1 << 8) | data2) * MCE_TIME_UNIT / 1000); | ||
555 | break; | 565 | break; |
556 | case MCE_CMD_G_TIMEOUT: | 566 | case MCE_CMD_G_TIMEOUT: |
557 | dev_info(dev, "Get receive timeout\n"); | 567 | dev_info(dev, "Get receive timeout\n"); |
@@ -606,12 +616,15 @@ static void mce_async_callback(struct urb *urb, struct pt_regs *regs) | |||
606 | if (ir) { | 616 | if (ir) { |
607 | len = urb->actual_length; | 617 | len = urb->actual_length; |
608 | 618 | ||
609 | dev_dbg(ir->dev, "callback called (status=%d len=%d)\n", | 619 | mce_dbg(ir->dev, "callback called (status=%d len=%d)\n", |
610 | urb->status, len); | 620 | urb->status, len); |
611 | 621 | ||
612 | mceusb_dev_printdata(ir, urb->transfer_buffer, 0, len, true); | 622 | mceusb_dev_printdata(ir, urb->transfer_buffer, 0, len, true); |
613 | } | 623 | } |
614 | 624 | ||
625 | /* the transfer buffer and urb were allocated in mce_request_packet */ | ||
626 | kfree(urb->transfer_buffer); | ||
627 | usb_free_urb(urb); | ||
615 | } | 628 | } |
616 | 629 | ||
617 | /* request incoming or send outgoing usb packet - used to initialize remote */ | 630 | /* request incoming or send outgoing usb packet - used to initialize remote */ |
@@ -655,17 +668,17 @@ static void mce_request_packet(struct mceusb_dev *ir, unsigned char *data, | |||
655 | return; | 668 | return; |
656 | } | 669 | } |
657 | 670 | ||
658 | dev_dbg(dev, "receive request called (size=%#x)\n", size); | 671 | mce_dbg(dev, "receive request called (size=%#x)\n", size); |
659 | 672 | ||
660 | async_urb->transfer_buffer_length = size; | 673 | async_urb->transfer_buffer_length = size; |
661 | async_urb->dev = ir->usbdev; | 674 | async_urb->dev = ir->usbdev; |
662 | 675 | ||
663 | res = usb_submit_urb(async_urb, GFP_ATOMIC); | 676 | res = usb_submit_urb(async_urb, GFP_ATOMIC); |
664 | if (res) { | 677 | if (res) { |
665 | dev_dbg(dev, "receive request FAILED! (res=%d)\n", res); | 678 | mce_dbg(dev, "receive request FAILED! (res=%d)\n", res); |
666 | return; | 679 | return; |
667 | } | 680 | } |
668 | dev_dbg(dev, "receive request complete (res=%d)\n", res); | 681 | mce_dbg(dev, "receive request complete (res=%d)\n", res); |
669 | } | 682 | } |
670 | 683 | ||
671 | static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size) | 684 | static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size) |
@@ -673,9 +686,9 @@ static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size) | |||
673 | mce_request_packet(ir, data, size, MCEUSB_TX); | 686 | mce_request_packet(ir, data, size, MCEUSB_TX); |
674 | } | 687 | } |
675 | 688 | ||
676 | static void mce_sync_in(struct mceusb_dev *ir, unsigned char *data, int size) | 689 | static void mce_flush_rx_buffer(struct mceusb_dev *ir, int size) |
677 | { | 690 | { |
678 | mce_request_packet(ir, data, size, MCEUSB_RX); | 691 | mce_request_packet(ir, NULL, size, MCEUSB_RX); |
679 | } | 692 | } |
680 | 693 | ||
681 | /* Send data out the IR blaster port(s) */ | 694 | /* Send data out the IR blaster port(s) */ |
@@ -794,7 +807,7 @@ static int mceusb_set_tx_carrier(struct rc_dev *dev, u32 carrier) | |||
794 | ir->carrier = carrier; | 807 | ir->carrier = carrier; |
795 | cmdbuf[2] = MCE_CMD_SIG_END; | 808 | cmdbuf[2] = MCE_CMD_SIG_END; |
796 | cmdbuf[3] = MCE_IRDATA_TRAILER; | 809 | cmdbuf[3] = MCE_IRDATA_TRAILER; |
797 | dev_dbg(ir->dev, "%s: disabling carrier " | 810 | mce_dbg(ir->dev, "%s: disabling carrier " |
798 | "modulation\n", __func__); | 811 | "modulation\n", __func__); |
799 | mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); | 812 | mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); |
800 | return carrier; | 813 | return carrier; |
@@ -806,7 +819,7 @@ static int mceusb_set_tx_carrier(struct rc_dev *dev, u32 carrier) | |||
806 | ir->carrier = carrier; | 819 | ir->carrier = carrier; |
807 | cmdbuf[2] = prescaler; | 820 | cmdbuf[2] = prescaler; |
808 | cmdbuf[3] = divisor; | 821 | cmdbuf[3] = divisor; |
809 | dev_dbg(ir->dev, "%s: requesting %u HZ " | 822 | mce_dbg(ir->dev, "%s: requesting %u HZ " |
810 | "carrier\n", __func__, carrier); | 823 | "carrier\n", __func__, carrier); |
811 | 824 | ||
812 | /* Transmit new carrier to mce device */ | 825 | /* Transmit new carrier to mce device */ |
@@ -835,7 +848,7 @@ static void mceusb_handle_command(struct mceusb_dev *ir, int index) | |||
835 | switch (ir->buf_in[index]) { | 848 | switch (ir->buf_in[index]) { |
836 | /* 2-byte return value commands */ | 849 | /* 2-byte return value commands */ |
837 | case MCE_CMD_S_TIMEOUT: | 850 | case MCE_CMD_S_TIMEOUT: |
838 | ir->rc->timeout = US_TO_NS((hi << 8 | lo) / 2); | 851 | ir->rc->timeout = US_TO_NS((hi << 8 | lo) * MCE_TIME_UNIT); |
839 | break; | 852 | break; |
840 | 853 | ||
841 | /* 1-byte return value commands */ | 854 | /* 1-byte return value commands */ |
@@ -879,7 +892,7 @@ static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len) | |||
879 | rawir.duration = (ir->buf_in[i] & MCE_PULSE_MASK) | 892 | rawir.duration = (ir->buf_in[i] & MCE_PULSE_MASK) |
880 | * US_TO_NS(MCE_TIME_UNIT); | 893 | * US_TO_NS(MCE_TIME_UNIT); |
881 | 894 | ||
882 | dev_dbg(ir->dev, "Storing %s with duration %d\n", | 895 | mce_dbg(ir->dev, "Storing %s with duration %d\n", |
883 | rawir.pulse ? "pulse" : "space", | 896 | rawir.pulse ? "pulse" : "space", |
884 | rawir.duration); | 897 | rawir.duration); |
885 | 898 | ||
@@ -911,7 +924,7 @@ static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len) | |||
911 | if (ir->parser_state != CMD_HEADER && !ir->rem) | 924 | if (ir->parser_state != CMD_HEADER && !ir->rem) |
912 | ir->parser_state = CMD_HEADER; | 925 | ir->parser_state = CMD_HEADER; |
913 | } | 926 | } |
914 | dev_dbg(ir->dev, "processed IR data, calling ir_raw_event_handle\n"); | 927 | mce_dbg(ir->dev, "processed IR data, calling ir_raw_event_handle\n"); |
915 | ir_raw_event_handle(ir->rc); | 928 | ir_raw_event_handle(ir->rc); |
916 | } | 929 | } |
917 | 930 | ||
@@ -933,7 +946,7 @@ static void mceusb_dev_recv(struct urb *urb, struct pt_regs *regs) | |||
933 | 946 | ||
934 | if (ir->send_flags == RECV_FLAG_IN_PROGRESS) { | 947 | if (ir->send_flags == RECV_FLAG_IN_PROGRESS) { |
935 | ir->send_flags = SEND_FLAG_COMPLETE; | 948 | ir->send_flags = SEND_FLAG_COMPLETE; |
936 | dev_dbg(ir->dev, "setup answer received %d bytes\n", | 949 | mce_dbg(ir->dev, "setup answer received %d bytes\n", |
937 | buf_len); | 950 | buf_len); |
938 | } | 951 | } |
939 | 952 | ||
@@ -951,7 +964,7 @@ static void mceusb_dev_recv(struct urb *urb, struct pt_regs *regs) | |||
951 | 964 | ||
952 | case -EPIPE: | 965 | case -EPIPE: |
953 | default: | 966 | default: |
954 | dev_dbg(ir->dev, "Error: urb status = %d\n", urb->status); | 967 | mce_dbg(ir->dev, "Error: urb status = %d\n", urb->status); |
955 | break; | 968 | break; |
956 | } | 969 | } |
957 | 970 | ||
@@ -961,7 +974,6 @@ static void mceusb_dev_recv(struct urb *urb, struct pt_regs *regs) | |||
961 | static void mceusb_gen1_init(struct mceusb_dev *ir) | 974 | static void mceusb_gen1_init(struct mceusb_dev *ir) |
962 | { | 975 | { |
963 | int ret; | 976 | int ret; |
964 | int maxp = ir->len_in; | ||
965 | struct device *dev = ir->dev; | 977 | struct device *dev = ir->dev; |
966 | char *data; | 978 | char *data; |
967 | 979 | ||
@@ -978,8 +990,8 @@ static void mceusb_gen1_init(struct mceusb_dev *ir) | |||
978 | ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0), | 990 | ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0), |
979 | USB_REQ_SET_ADDRESS, USB_TYPE_VENDOR, 0, 0, | 991 | USB_REQ_SET_ADDRESS, USB_TYPE_VENDOR, 0, 0, |
980 | data, USB_CTRL_MSG_SZ, HZ * 3); | 992 | data, USB_CTRL_MSG_SZ, HZ * 3); |
981 | dev_dbg(dev, "%s - ret = %d\n", __func__, ret); | 993 | mce_dbg(dev, "%s - ret = %d\n", __func__, ret); |
982 | dev_dbg(dev, "%s - data[0] = %d, data[1] = %d\n", | 994 | mce_dbg(dev, "%s - data[0] = %d, data[1] = %d\n", |
983 | __func__, data[0], data[1]); | 995 | __func__, data[0], data[1]); |
984 | 996 | ||
985 | /* set feature: bit rate 38400 bps */ | 997 | /* set feature: bit rate 38400 bps */ |
@@ -987,71 +999,56 @@ static void mceusb_gen1_init(struct mceusb_dev *ir) | |||
987 | USB_REQ_SET_FEATURE, USB_TYPE_VENDOR, | 999 | USB_REQ_SET_FEATURE, USB_TYPE_VENDOR, |
988 | 0xc04e, 0x0000, NULL, 0, HZ * 3); | 1000 | 0xc04e, 0x0000, NULL, 0, HZ * 3); |
989 | 1001 | ||
990 | dev_dbg(dev, "%s - ret = %d\n", __func__, ret); | 1002 | mce_dbg(dev, "%s - ret = %d\n", __func__, ret); |
991 | 1003 | ||
992 | /* bRequest 4: set char length to 8 bits */ | 1004 | /* bRequest 4: set char length to 8 bits */ |
993 | ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), | 1005 | ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), |
994 | 4, USB_TYPE_VENDOR, | 1006 | 4, USB_TYPE_VENDOR, |
995 | 0x0808, 0x0000, NULL, 0, HZ * 3); | 1007 | 0x0808, 0x0000, NULL, 0, HZ * 3); |
996 | dev_dbg(dev, "%s - retB = %d\n", __func__, ret); | 1008 | mce_dbg(dev, "%s - retB = %d\n", __func__, ret); |
997 | 1009 | ||
998 | /* bRequest 2: set handshaking to use DTR/DSR */ | 1010 | /* bRequest 2: set handshaking to use DTR/DSR */ |
999 | ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), | 1011 | ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), |
1000 | 2, USB_TYPE_VENDOR, | 1012 | 2, USB_TYPE_VENDOR, |
1001 | 0x0000, 0x0100, NULL, 0, HZ * 3); | 1013 | 0x0000, 0x0100, NULL, 0, HZ * 3); |
1002 | dev_dbg(dev, "%s - retC = %d\n", __func__, ret); | 1014 | mce_dbg(dev, "%s - retC = %d\n", __func__, ret); |
1003 | 1015 | ||
1004 | /* device reset */ | 1016 | /* device reset */ |
1005 | mce_async_out(ir, DEVICE_RESET, sizeof(DEVICE_RESET)); | 1017 | mce_async_out(ir, DEVICE_RESET, sizeof(DEVICE_RESET)); |
1006 | mce_sync_in(ir, NULL, maxp); | ||
1007 | 1018 | ||
1008 | /* get hw/sw revision? */ | 1019 | /* get hw/sw revision? */ |
1009 | mce_async_out(ir, GET_REVISION, sizeof(GET_REVISION)); | 1020 | mce_async_out(ir, GET_REVISION, sizeof(GET_REVISION)); |
1010 | mce_sync_in(ir, NULL, maxp); | ||
1011 | 1021 | ||
1012 | kfree(data); | 1022 | kfree(data); |
1013 | }; | 1023 | }; |
1014 | 1024 | ||
1015 | static void mceusb_gen2_init(struct mceusb_dev *ir) | 1025 | static void mceusb_gen2_init(struct mceusb_dev *ir) |
1016 | { | 1026 | { |
1017 | int maxp = ir->len_in; | ||
1018 | |||
1019 | /* device reset */ | 1027 | /* device reset */ |
1020 | mce_async_out(ir, DEVICE_RESET, sizeof(DEVICE_RESET)); | 1028 | mce_async_out(ir, DEVICE_RESET, sizeof(DEVICE_RESET)); |
1021 | mce_sync_in(ir, NULL, maxp); | ||
1022 | 1029 | ||
1023 | /* get hw/sw revision? */ | 1030 | /* get hw/sw revision? */ |
1024 | mce_async_out(ir, GET_REVISION, sizeof(GET_REVISION)); | 1031 | mce_async_out(ir, GET_REVISION, sizeof(GET_REVISION)); |
1025 | mce_sync_in(ir, NULL, maxp); | ||
1026 | 1032 | ||
1027 | /* unknown what the next two actually return... */ | 1033 | /* unknown what the next two actually return... */ |
1028 | mce_async_out(ir, GET_UNKNOWN, sizeof(GET_UNKNOWN)); | 1034 | mce_async_out(ir, GET_UNKNOWN, sizeof(GET_UNKNOWN)); |
1029 | mce_sync_in(ir, NULL, maxp); | ||
1030 | mce_async_out(ir, GET_UNKNOWN2, sizeof(GET_UNKNOWN2)); | 1035 | mce_async_out(ir, GET_UNKNOWN2, sizeof(GET_UNKNOWN2)); |
1031 | mce_sync_in(ir, NULL, maxp); | ||
1032 | } | 1036 | } |
1033 | 1037 | ||
1034 | static void mceusb_get_parameters(struct mceusb_dev *ir) | 1038 | static void mceusb_get_parameters(struct mceusb_dev *ir) |
1035 | { | 1039 | { |
1036 | int maxp = ir->len_in; | ||
1037 | |||
1038 | /* get the carrier and frequency */ | 1040 | /* get the carrier and frequency */ |
1039 | mce_async_out(ir, GET_CARRIER_FREQ, sizeof(GET_CARRIER_FREQ)); | 1041 | mce_async_out(ir, GET_CARRIER_FREQ, sizeof(GET_CARRIER_FREQ)); |
1040 | mce_sync_in(ir, NULL, maxp); | ||
1041 | 1042 | ||
1042 | if (!ir->flags.no_tx) { | 1043 | if (!ir->flags.no_tx) |
1043 | /* get the transmitter bitmask */ | 1044 | /* get the transmitter bitmask */ |
1044 | mce_async_out(ir, GET_TX_BITMASK, sizeof(GET_TX_BITMASK)); | 1045 | mce_async_out(ir, GET_TX_BITMASK, sizeof(GET_TX_BITMASK)); |
1045 | mce_sync_in(ir, NULL, maxp); | ||
1046 | } | ||
1047 | 1046 | ||
1048 | /* get receiver timeout value */ | 1047 | /* get receiver timeout value */ |
1049 | mce_async_out(ir, GET_RX_TIMEOUT, sizeof(GET_RX_TIMEOUT)); | 1048 | mce_async_out(ir, GET_RX_TIMEOUT, sizeof(GET_RX_TIMEOUT)); |
1050 | mce_sync_in(ir, NULL, maxp); | ||
1051 | 1049 | ||
1052 | /* get receiver sensor setting */ | 1050 | /* get receiver sensor setting */ |
1053 | mce_async_out(ir, GET_RX_SENSOR, sizeof(GET_RX_SENSOR)); | 1051 | mce_async_out(ir, GET_RX_SENSOR, sizeof(GET_RX_SENSOR)); |
1054 | mce_sync_in(ir, NULL, maxp); | ||
1055 | } | 1052 | } |
1056 | 1053 | ||
1057 | static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir) | 1054 | static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir) |
@@ -1082,7 +1079,7 @@ static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir) | |||
1082 | rc->priv = ir; | 1079 | rc->priv = ir; |
1083 | rc->driver_type = RC_DRIVER_IR_RAW; | 1080 | rc->driver_type = RC_DRIVER_IR_RAW; |
1084 | rc->allowed_protos = RC_TYPE_ALL; | 1081 | rc->allowed_protos = RC_TYPE_ALL; |
1085 | rc->timeout = US_TO_NS(1000); | 1082 | rc->timeout = MS_TO_NS(100); |
1086 | if (!ir->flags.no_tx) { | 1083 | if (!ir->flags.no_tx) { |
1087 | rc->s_tx_mask = mceusb_set_tx_mask; | 1084 | rc->s_tx_mask = mceusb_set_tx_mask; |
1088 | rc->s_tx_carrier = mceusb_set_tx_carrier; | 1085 | rc->s_tx_carrier = mceusb_set_tx_carrier; |
@@ -1122,7 +1119,7 @@ static int __devinit mceusb_dev_probe(struct usb_interface *intf, | |||
1122 | bool tx_mask_normal; | 1119 | bool tx_mask_normal; |
1123 | int ir_intfnum; | 1120 | int ir_intfnum; |
1124 | 1121 | ||
1125 | dev_dbg(&intf->dev, "%s called\n", __func__); | 1122 | mce_dbg(&intf->dev, "%s called\n", __func__); |
1126 | 1123 | ||
1127 | idesc = intf->cur_altsetting; | 1124 | idesc = intf->cur_altsetting; |
1128 | 1125 | ||
@@ -1150,7 +1147,7 @@ static int __devinit mceusb_dev_probe(struct usb_interface *intf, | |||
1150 | ep_in = ep; | 1147 | ep_in = ep; |
1151 | ep_in->bmAttributes = USB_ENDPOINT_XFER_INT; | 1148 | ep_in->bmAttributes = USB_ENDPOINT_XFER_INT; |
1152 | ep_in->bInterval = 1; | 1149 | ep_in->bInterval = 1; |
1153 | dev_dbg(&intf->dev, "acceptable inbound endpoint " | 1150 | mce_dbg(&intf->dev, "acceptable inbound endpoint " |
1154 | "found\n"); | 1151 | "found\n"); |
1155 | } | 1152 | } |
1156 | 1153 | ||
@@ -1165,12 +1162,12 @@ static int __devinit mceusb_dev_probe(struct usb_interface *intf, | |||
1165 | ep_out = ep; | 1162 | ep_out = ep; |
1166 | ep_out->bmAttributes = USB_ENDPOINT_XFER_INT; | 1163 | ep_out->bmAttributes = USB_ENDPOINT_XFER_INT; |
1167 | ep_out->bInterval = 1; | 1164 | ep_out->bInterval = 1; |
1168 | dev_dbg(&intf->dev, "acceptable outbound endpoint " | 1165 | mce_dbg(&intf->dev, "acceptable outbound endpoint " |
1169 | "found\n"); | 1166 | "found\n"); |
1170 | } | 1167 | } |
1171 | } | 1168 | } |
1172 | if (ep_in == NULL) { | 1169 | if (ep_in == NULL) { |
1173 | dev_dbg(&intf->dev, "inbound and/or endpoint not found\n"); | 1170 | mce_dbg(&intf->dev, "inbound and/or endpoint not found\n"); |
1174 | return -ENODEV; | 1171 | return -ENODEV; |
1175 | } | 1172 | } |
1176 | 1173 | ||
@@ -1215,16 +1212,16 @@ static int __devinit mceusb_dev_probe(struct usb_interface *intf, | |||
1215 | if (!ir->rc) | 1212 | if (!ir->rc) |
1216 | goto rc_dev_fail; | 1213 | goto rc_dev_fail; |
1217 | 1214 | ||
1218 | /* flush buffers on the device */ | ||
1219 | mce_sync_in(ir, NULL, maxp); | ||
1220 | mce_sync_in(ir, NULL, maxp); | ||
1221 | |||
1222 | /* wire up inbound data handler */ | 1215 | /* wire up inbound data handler */ |
1223 | usb_fill_int_urb(ir->urb_in, dev, pipe, ir->buf_in, | 1216 | usb_fill_int_urb(ir->urb_in, dev, pipe, ir->buf_in, |
1224 | maxp, (usb_complete_t) mceusb_dev_recv, ir, ep_in->bInterval); | 1217 | maxp, (usb_complete_t) mceusb_dev_recv, ir, ep_in->bInterval); |
1225 | ir->urb_in->transfer_dma = ir->dma_in; | 1218 | ir->urb_in->transfer_dma = ir->dma_in; |
1226 | ir->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; | 1219 | ir->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; |
1227 | 1220 | ||
1221 | /* flush buffers on the device */ | ||
1222 | mce_dbg(&intf->dev, "Flushing receive buffers\n"); | ||
1223 | mce_flush_rx_buffer(ir, maxp); | ||
1224 | |||
1228 | /* initialize device */ | 1225 | /* initialize device */ |
1229 | if (ir->flags.microsoft_gen1) | 1226 | if (ir->flags.microsoft_gen1) |
1230 | mceusb_gen1_init(ir); | 1227 | mceusb_gen1_init(ir); |