diff options
-rw-r--r-- | drivers/media/rc/redrat3.c | 71 |
1 files changed, 12 insertions, 59 deletions
diff --git a/drivers/media/rc/redrat3.c b/drivers/media/rc/redrat3.c index ec655b8ef4d3..12167a6b5472 100644 --- a/drivers/media/rc/redrat3.c +++ b/drivers/media/rc/redrat3.c | |||
@@ -54,7 +54,6 @@ | |||
54 | #include <media/rc-core.h> | 54 | #include <media/rc-core.h> |
55 | 55 | ||
56 | /* Driver Information */ | 56 | /* Driver Information */ |
57 | #define DRIVER_VERSION "0.70" | ||
58 | #define DRIVER_AUTHOR "Jarod Wilson <jarod@redhat.com>" | 57 | #define DRIVER_AUTHOR "Jarod Wilson <jarod@redhat.com>" |
59 | #define DRIVER_AUTHOR2 "The Dweller, Stephen Cox" | 58 | #define DRIVER_AUTHOR2 "The Dweller, Stephen Cox" |
60 | #define DRIVER_DESC "RedRat3 USB IR Transceiver Driver" | 59 | #define DRIVER_DESC "RedRat3 USB IR Transceiver Driver" |
@@ -199,14 +198,9 @@ struct redrat3_dev { | |||
199 | 198 | ||
200 | /* the send endpoint */ | 199 | /* the send endpoint */ |
201 | struct usb_endpoint_descriptor *ep_out; | 200 | struct usb_endpoint_descriptor *ep_out; |
202 | /* the buffer to send data */ | ||
203 | unsigned char *bulk_out_buf; | ||
204 | /* the urb used to send data */ | ||
205 | struct urb *write_urb; | ||
206 | 201 | ||
207 | /* usb dma */ | 202 | /* usb dma */ |
208 | dma_addr_t dma_in; | 203 | dma_addr_t dma_in; |
209 | dma_addr_t dma_out; | ||
210 | 204 | ||
211 | /* rx signal timeout timer */ | 205 | /* rx signal timeout timer */ |
212 | struct timer_list rx_timeout; | 206 | struct timer_list rx_timeout; |
@@ -239,7 +233,6 @@ static void redrat3_issue_async(struct redrat3_dev *rr3) | |||
239 | 233 | ||
240 | rr3_ftr(rr3->dev, "Entering %s\n", __func__); | 234 | rr3_ftr(rr3->dev, "Entering %s\n", __func__); |
241 | 235 | ||
242 | memset(rr3->bulk_in_buf, 0, rr3->ep_in->wMaxPacketSize); | ||
243 | res = usb_submit_urb(rr3->read_urb, GFP_ATOMIC); | 236 | res = usb_submit_urb(rr3->read_urb, GFP_ATOMIC); |
244 | if (res) | 237 | if (res) |
245 | rr3_dbg(rr3->dev, "%s: receive request FAILED! " | 238 | rr3_dbg(rr3->dev, "%s: receive request FAILED! " |
@@ -368,7 +361,7 @@ static void redrat3_process_ir_data(struct redrat3_dev *rr3) | |||
368 | { | 361 | { |
369 | DEFINE_IR_RAW_EVENT(rawir); | 362 | DEFINE_IR_RAW_EVENT(rawir); |
370 | struct device *dev; | 363 | struct device *dev; |
371 | int i, trailer = 0; | 364 | unsigned i, trailer = 0; |
372 | unsigned sig_size, single_len, offset, val; | 365 | unsigned sig_size, single_len, offset, val; |
373 | unsigned long delay; | 366 | unsigned long delay; |
374 | u32 mod_freq; | 367 | u32 mod_freq; |
@@ -510,15 +503,11 @@ static inline void redrat3_delete(struct redrat3_dev *rr3, | |||
510 | { | 503 | { |
511 | rr3_ftr(rr3->dev, "%s cleaning up\n", __func__); | 504 | rr3_ftr(rr3->dev, "%s cleaning up\n", __func__); |
512 | usb_kill_urb(rr3->read_urb); | 505 | usb_kill_urb(rr3->read_urb); |
513 | usb_kill_urb(rr3->write_urb); | ||
514 | 506 | ||
515 | usb_free_urb(rr3->read_urb); | 507 | usb_free_urb(rr3->read_urb); |
516 | usb_free_urb(rr3->write_urb); | ||
517 | 508 | ||
518 | usb_free_coherent(udev, rr3->ep_in->wMaxPacketSize, | 509 | usb_free_coherent(udev, le16_to_cpu(rr3->ep_in->wMaxPacketSize), |
519 | rr3->bulk_in_buf, rr3->dma_in); | 510 | rr3->bulk_in_buf, rr3->dma_in); |
520 | usb_free_coherent(udev, rr3->ep_out->wMaxPacketSize, | ||
521 | rr3->bulk_out_buf, rr3->dma_out); | ||
522 | 511 | ||
523 | kfree(rr3); | 512 | kfree(rr3); |
524 | } | 513 | } |
@@ -566,7 +555,7 @@ static void redrat3_reset(struct redrat3_dev *rr3) | |||
566 | rxpipe = usb_rcvctrlpipe(udev, 0); | 555 | rxpipe = usb_rcvctrlpipe(udev, 0); |
567 | txpipe = usb_sndctrlpipe(udev, 0); | 556 | txpipe = usb_sndctrlpipe(udev, 0); |
568 | 557 | ||
569 | val = kzalloc(len, GFP_KERNEL); | 558 | val = kmalloc(len, GFP_KERNEL); |
570 | if (!val) { | 559 | if (!val) { |
571 | dev_err(dev, "Memory allocation failure\n"); | 560 | dev_err(dev, "Memory allocation failure\n"); |
572 | return; | 561 | return; |
@@ -620,7 +609,7 @@ static void redrat3_get_firmware_rev(struct redrat3_dev *rr3) | |||
620 | rr3_ftr(rr3->dev, "Exiting %s\n", __func__); | 609 | rr3_ftr(rr3->dev, "Exiting %s\n", __func__); |
621 | } | 610 | } |
622 | 611 | ||
623 | static void redrat3_read_packet_start(struct redrat3_dev *rr3, int len) | 612 | static void redrat3_read_packet_start(struct redrat3_dev *rr3, unsigned len) |
624 | { | 613 | { |
625 | struct redrat3_header *header = rr3->bulk_in_buf; | 614 | struct redrat3_header *header = rr3->bulk_in_buf; |
626 | unsigned pktlen, pkttype; | 615 | unsigned pktlen, pkttype; |
@@ -659,7 +648,7 @@ static void redrat3_read_packet_start(struct redrat3_dev *rr3, int len) | |||
659 | } | 648 | } |
660 | } | 649 | } |
661 | 650 | ||
662 | static void redrat3_read_packet_continue(struct redrat3_dev *rr3, int len) | 651 | static void redrat3_read_packet_continue(struct redrat3_dev *rr3, unsigned len) |
663 | { | 652 | { |
664 | void *irdata = &rr3->irdata; | 653 | void *irdata = &rr3->irdata; |
665 | 654 | ||
@@ -679,7 +668,7 @@ static void redrat3_read_packet_continue(struct redrat3_dev *rr3, int len) | |||
679 | } | 668 | } |
680 | 669 | ||
681 | /* gather IR data from incoming urb, process it when we have enough */ | 670 | /* gather IR data from incoming urb, process it when we have enough */ |
682 | static int redrat3_get_ir_data(struct redrat3_dev *rr3, int len) | 671 | static int redrat3_get_ir_data(struct redrat3_dev *rr3, unsigned len) |
683 | { | 672 | { |
684 | struct device *dev = rr3->dev; | 673 | struct device *dev = rr3->dev; |
685 | unsigned pkttype; | 674 | unsigned pkttype; |
@@ -755,22 +744,6 @@ static void redrat3_handle_async(struct urb *urb) | |||
755 | } | 744 | } |
756 | } | 745 | } |
757 | 746 | ||
758 | static void redrat3_write_bulk_callback(struct urb *urb) | ||
759 | { | ||
760 | struct redrat3_dev *rr3; | ||
761 | int len; | ||
762 | |||
763 | if (!urb) | ||
764 | return; | ||
765 | |||
766 | rr3 = urb->context; | ||
767 | if (rr3) { | ||
768 | len = urb->actual_length; | ||
769 | rr3_ftr(rr3->dev, "%s: called (status=%d len=%d)\n", | ||
770 | __func__, urb->status, len); | ||
771 | } | ||
772 | } | ||
773 | |||
774 | static u16 mod_freq_to_val(unsigned int mod_freq) | 747 | static u16 mod_freq_to_val(unsigned int mod_freq) |
775 | { | 748 | { |
776 | int mult = 6000000; | 749 | int mult = 6000000; |
@@ -799,11 +772,11 @@ static int redrat3_transmit_ir(struct rc_dev *rcdev, unsigned *txbuf, | |||
799 | struct redrat3_dev *rr3 = rcdev->priv; | 772 | struct redrat3_dev *rr3 = rcdev->priv; |
800 | struct device *dev = rr3->dev; | 773 | struct device *dev = rr3->dev; |
801 | struct redrat3_irdata *irdata = NULL; | 774 | struct redrat3_irdata *irdata = NULL; |
802 | int i, ret, ret_len; | 775 | int ret, ret_len; |
803 | int lencheck, cur_sample_len, pipe; | 776 | int lencheck, cur_sample_len, pipe; |
804 | int *sample_lens = NULL; | 777 | int *sample_lens = NULL; |
805 | u8 curlencheck = 0; | 778 | u8 curlencheck = 0; |
806 | int sendbuf_len; | 779 | unsigned i, sendbuf_len; |
807 | 780 | ||
808 | rr3_ftr(dev, "Entering %s\n", __func__); | 781 | rr3_ftr(dev, "Entering %s\n", __func__); |
809 | 782 | ||
@@ -1015,38 +988,18 @@ static int redrat3_dev_probe(struct usb_interface *intf, | |||
1015 | } | 988 | } |
1016 | 989 | ||
1017 | rr3->ep_in = ep_in; | 990 | rr3->ep_in = ep_in; |
1018 | rr3->bulk_in_buf = usb_alloc_coherent(udev, ep_in->wMaxPacketSize, | 991 | rr3->bulk_in_buf = usb_alloc_coherent(udev, |
1019 | GFP_ATOMIC, &rr3->dma_in); | 992 | le16_to_cpu(ep_in->wMaxPacketSize), GFP_ATOMIC, &rr3->dma_in); |
1020 | if (!rr3->bulk_in_buf) { | 993 | if (!rr3->bulk_in_buf) { |
1021 | dev_err(dev, "Read buffer allocation failure\n"); | 994 | dev_err(dev, "Read buffer allocation failure\n"); |
1022 | goto error; | 995 | goto error; |
1023 | } | 996 | } |
1024 | 997 | ||
1025 | pipe = usb_rcvbulkpipe(udev, ep_in->bEndpointAddress); | 998 | pipe = usb_rcvbulkpipe(udev, ep_in->bEndpointAddress); |
1026 | usb_fill_bulk_urb(rr3->read_urb, udev, pipe, | 999 | usb_fill_bulk_urb(rr3->read_urb, udev, pipe, rr3->bulk_in_buf, |
1027 | rr3->bulk_in_buf, ep_in->wMaxPacketSize, | 1000 | le16_to_cpu(ep_in->wMaxPacketSize), redrat3_handle_async, rr3); |
1028 | redrat3_handle_async, rr3); | ||
1029 | |||
1030 | /* set up bulk-out endpoint*/ | ||
1031 | rr3->write_urb = usb_alloc_urb(0, GFP_KERNEL); | ||
1032 | if (!rr3->write_urb) { | ||
1033 | dev_err(dev, "Write urb allocation failure\n"); | ||
1034 | goto error; | ||
1035 | } | ||
1036 | 1001 | ||
1037 | rr3->ep_out = ep_out; | 1002 | rr3->ep_out = ep_out; |
1038 | rr3->bulk_out_buf = usb_alloc_coherent(udev, ep_out->wMaxPacketSize, | ||
1039 | GFP_ATOMIC, &rr3->dma_out); | ||
1040 | if (!rr3->bulk_out_buf) { | ||
1041 | dev_err(dev, "Write buffer allocation failure\n"); | ||
1042 | goto error; | ||
1043 | } | ||
1044 | |||
1045 | pipe = usb_sndbulkpipe(udev, ep_out->bEndpointAddress); | ||
1046 | usb_fill_bulk_urb(rr3->write_urb, udev, pipe, | ||
1047 | rr3->bulk_out_buf, ep_out->wMaxPacketSize, | ||
1048 | redrat3_write_bulk_callback, rr3); | ||
1049 | |||
1050 | rr3->udev = udev; | 1003 | rr3->udev = udev; |
1051 | 1004 | ||
1052 | redrat3_reset(rr3); | 1005 | redrat3_reset(rr3); |