aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/rc/redrat3.c71
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
623static void redrat3_read_packet_start(struct redrat3_dev *rr3, int len) 612static 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
662static void redrat3_read_packet_continue(struct redrat3_dev *rr3, int len) 651static 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 */
682static int redrat3_get_ir_data(struct redrat3_dev *rr3, int len) 671static 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
758static 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
774static u16 mod_freq_to_val(unsigned int mod_freq) 747static 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);