xref: /openbmc/linux/drivers/media/rc/redrat3.c (revision 81d67439)
1 /*
2  * USB RedRat3 IR Transceiver rc-core driver
3  *
4  * Copyright (c) 2011 by Jarod Wilson <jarod@redhat.com>
5  *  based heavily on the work of Stephen Cox, with additional
6  *  help from RedRat Ltd.
7  *
8  * This driver began life based an an old version of the first-generation
9  * lirc_mceusb driver from the lirc 0.7.2 distribution. It was then
10  * significantly rewritten by Stephen Cox with the aid of RedRat Ltd's
11  * Chris Dodge.
12  *
13  * The driver was then ported to rc-core and significantly rewritten again,
14  * by Jarod, using the in-kernel mceusb driver as a guide, after an initial
15  * port effort was started by Stephen.
16  *
17  * TODO LIST:
18  * - fix lirc not showing repeats properly
19  * --
20  *
21  * The RedRat3 is a USB transceiver with both send & receive,
22  * with 2 separate sensors available for receive to enable
23  * both good long range reception for general use, and good
24  * short range reception when required for learning a signal.
25  *
26  * http://www.redrat.co.uk/
27  *
28  * It uses its own little protocol to communicate, the required
29  * parts of which are embedded within this driver.
30  * --
31  *
32  * This program is free software; you can redistribute it and/or modify
33  * it under the terms of the GNU General Public License as published by
34  * the Free Software Foundation; either version 2 of the License, or
35  * (at your option) any later version.
36  *
37  * This program is distributed in the hope that it will be useful,
38  * but WITHOUT ANY WARRANTY; without even the implied warranty of
39  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
40  * GNU General Public License for more details.
41  *
42  * You should have received a copy of the GNU General Public License
43  * along with this program; if not, write to the Free Software
44  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
45  *
46  */
47 
48 #include <linux/device.h>
49 #include <linux/module.h>
50 #include <linux/slab.h>
51 #include <linux/usb.h>
52 #include <linux/usb/input.h>
53 #include <media/rc-core.h>
54 
55 /* Driver Information */
56 #define DRIVER_VERSION "0.70"
57 #define DRIVER_AUTHOR "Jarod Wilson <jarod@redhat.com>"
58 #define DRIVER_AUTHOR2 "The Dweller, Stephen Cox"
59 #define DRIVER_DESC "RedRat3 USB IR Transceiver Driver"
60 #define DRIVER_NAME "redrat3"
61 
62 /* module parameters */
63 #ifdef CONFIG_USB_DEBUG
64 static int debug = 1;
65 #else
66 static int debug;
67 #endif
68 
69 #define RR3_DEBUG_STANDARD		0x1
70 #define RR3_DEBUG_FUNCTION_TRACE	0x2
71 
72 #define rr3_dbg(dev, fmt, ...)					\
73 	do {							\
74 		if (debug & RR3_DEBUG_STANDARD)			\
75 			dev_info(dev, fmt, ## __VA_ARGS__);	\
76 	} while (0)
77 
78 #define rr3_ftr(dev, fmt, ...)					\
79 	do {							\
80 		if (debug & RR3_DEBUG_FUNCTION_TRACE)		\
81 			dev_info(dev, fmt, ## __VA_ARGS__);	\
82 	} while (0)
83 
84 /* bulk data transfer types */
85 #define RR3_ERROR		0x01
86 #define RR3_MOD_SIGNAL_IN	0x20
87 #define RR3_MOD_SIGNAL_OUT	0x21
88 
89 /* Get the RR firmware version */
90 #define RR3_FW_VERSION		0xb1
91 #define RR3_FW_VERSION_LEN	64
92 /* Send encoded signal bulk-sent earlier*/
93 #define RR3_TX_SEND_SIGNAL	0xb3
94 #define RR3_SET_IR_PARAM	0xb7
95 #define RR3_GET_IR_PARAM	0xb8
96 /* Blink the red LED on the device */
97 #define RR3_BLINK_LED		0xb9
98 /* Read serial number of device */
99 #define RR3_READ_SER_NO		0xba
100 #define RR3_SER_NO_LEN		4
101 /* Start capture with the RC receiver */
102 #define RR3_RC_DET_ENABLE	0xbb
103 /* Stop capture with the RC receiver */
104 #define RR3_RC_DET_DISABLE	0xbc
105 /* Return the status of RC detector capture */
106 #define RR3_RC_DET_STATUS	0xbd
107 /* Reset redrat */
108 #define RR3_RESET		0xa0
109 
110 /* Max number of lengths in the signal. */
111 #define RR3_IR_IO_MAX_LENGTHS	0x01
112 /* Periods to measure mod. freq. */
113 #define RR3_IR_IO_PERIODS_MF	0x02
114 /* Size of memory for main signal data */
115 #define RR3_IR_IO_SIG_MEM_SIZE	0x03
116 /* Delta value when measuring lengths */
117 #define RR3_IR_IO_LENGTH_FUZZ	0x04
118 /* Timeout for end of signal detection */
119 #define RR3_IR_IO_SIG_TIMEOUT	0x05
120 /* Minumum value for pause recognition. */
121 #define RR3_IR_IO_MIN_PAUSE	0x06
122 
123 /* Clock freq. of EZ-USB chip */
124 #define RR3_CLK			24000000
125 /* Clock periods per timer count */
126 #define RR3_CLK_PER_COUNT	12
127 /* (RR3_CLK / RR3_CLK_PER_COUNT) */
128 #define RR3_CLK_CONV_FACTOR	2000000
129 /* USB bulk-in IR data endpoint address */
130 #define RR3_BULK_IN_EP_ADDR	0x82
131 
132 /* Raw Modulated signal data value offsets */
133 #define RR3_PAUSE_OFFSET	0
134 #define RR3_FREQ_COUNT_OFFSET	4
135 #define RR3_NUM_PERIOD_OFFSET	6
136 #define RR3_MAX_LENGTHS_OFFSET	8
137 #define RR3_NUM_LENGTHS_OFFSET	9
138 #define RR3_MAX_SIGS_OFFSET	10
139 #define RR3_NUM_SIGS_OFFSET	12
140 #define RR3_REPEATS_OFFSET	14
141 
142 /* Size of the fixed-length portion of the signal */
143 #define RR3_HEADER_LENGTH	15
144 #define RR3_DRIVER_MAXLENS	128
145 #define RR3_MAX_SIG_SIZE	512
146 #define RR3_MAX_BUF_SIZE	\
147 	((2 * RR3_HEADER_LENGTH) + RR3_DRIVER_MAXLENS + RR3_MAX_SIG_SIZE)
148 #define RR3_TIME_UNIT		50
149 #define RR3_END_OF_SIGNAL	0x7f
150 #define RR3_TX_HEADER_OFFSET	4
151 #define RR3_TX_TRAILER_LEN	2
152 #define RR3_RX_MIN_TIMEOUT	5
153 #define RR3_RX_MAX_TIMEOUT	2000
154 
155 /* The 8051's CPUCS Register address */
156 #define RR3_CPUCS_REG_ADDR	0x7f92
157 
158 #define USB_RR3USB_VENDOR_ID	0x112a
159 #define USB_RR3USB_PRODUCT_ID	0x0001
160 #define USB_RR3IIUSB_PRODUCT_ID	0x0005
161 
162 /* table of devices that work with this driver */
163 static struct usb_device_id redrat3_dev_table[] = {
164 	/* Original version of the RedRat3 */
165 	{USB_DEVICE(USB_RR3USB_VENDOR_ID, USB_RR3USB_PRODUCT_ID)},
166 	/* Second Version/release of the RedRat3 - RetRat3-II */
167 	{USB_DEVICE(USB_RR3USB_VENDOR_ID, USB_RR3IIUSB_PRODUCT_ID)},
168 	{}			/* Terminating entry */
169 };
170 
171 /* Structure to hold all of our device specific stuff */
172 struct redrat3_dev {
173 	/* core device bits */
174 	struct rc_dev *rc;
175 	struct device *dev;
176 
177 	/* save off the usb device pointer */
178 	struct usb_device *udev;
179 
180 	/* the receive endpoint */
181 	struct usb_endpoint_descriptor *ep_in;
182 	/* the buffer to receive data */
183 	unsigned char *bulk_in_buf;
184 	/* urb used to read ir data */
185 	struct urb *read_urb;
186 
187 	/* the send endpoint */
188 	struct usb_endpoint_descriptor *ep_out;
189 	/* the buffer to send data */
190 	unsigned char *bulk_out_buf;
191 	/* the urb used to send data */
192 	struct urb *write_urb;
193 
194 	/* usb dma */
195 	dma_addr_t dma_in;
196 	dma_addr_t dma_out;
197 
198 	/* true if write urb is busy */
199 	bool write_busy;
200 	/* wait for the write to finish */
201 	struct completion write_finished;
202 
203 	/* locks this structure */
204 	struct mutex lock;
205 
206 	/* rx signal timeout timer */
207 	struct timer_list rx_timeout;
208 
209 	/* Is the device currently receiving? */
210 	bool recv_in_progress;
211 	/* is the detector enabled*/
212 	bool det_enabled;
213 	/* Is the device currently transmitting?*/
214 	bool transmitting;
215 
216 	/* store for current packet */
217 	char pbuf[RR3_MAX_BUF_SIZE];
218 	u16 pktlen;
219 	u16 pkttype;
220 	u16 bytes_read;
221 	/* indicate whether we are going to reprocess
222 	 * the USB callback with a bigger buffer */
223 	int buftoosmall;
224 	char *datap;
225 
226 	u32 carrier;
227 
228 	char name[128];
229 	char phys[64];
230 };
231 
232 /* All incoming data buffers adhere to a very specific data format */
233 struct redrat3_signal_header {
234 	u16 length;	/* Length of data being transferred */
235 	u16 transfer_type; /* Type of data transferred */
236 	u32 pause;	/* Pause between main and repeat signals */
237 	u16 mod_freq_count; /* Value of timer on mod. freq. measurement */
238 	u16 no_periods;	/* No. of periods over which mod. freq. is measured */
239 	u8 max_lengths;	/* Max no. of lengths (i.e. size of array) */
240 	u8 no_lengths;	/* Actual no. of elements in lengths array */
241 	u16 max_sig_size; /* Max no. of values in signal data array */
242 	u16 sig_size;	/* Acuto no. of values in signal data array */
243 	u8 no_repeats;	/* No. of repeats of repeat signal section */
244 	/* Here forward is the lengths and signal data */
245 };
246 
247 static void redrat3_dump_signal_header(struct redrat3_signal_header *header)
248 {
249 	pr_info("%s:\n", __func__);
250 	pr_info(" * length: %u, transfer_type: 0x%02x\n",
251 		header->length, header->transfer_type);
252 	pr_info(" * pause: %u, freq_count: %u, no_periods: %u\n",
253 		header->pause, header->mod_freq_count, header->no_periods);
254 	pr_info(" * lengths: %u (max: %u)\n",
255 		header->no_lengths, header->max_lengths);
256 	pr_info(" * sig_size: %u (max: %u)\n",
257 		header->sig_size, header->max_sig_size);
258 	pr_info(" * repeats: %u\n", header->no_repeats);
259 }
260 
261 static void redrat3_dump_signal_data(char *buffer, u16 len)
262 {
263 	int offset, i;
264 	char *data_vals;
265 
266 	pr_info("%s:", __func__);
267 
268 	offset = RR3_TX_HEADER_OFFSET + RR3_HEADER_LENGTH
269 		 + (RR3_DRIVER_MAXLENS * sizeof(u16));
270 
271 	/* read RR3_DRIVER_MAXLENS from ctrl msg */
272 	data_vals = buffer + offset;
273 
274 	for (i = 0; i < len; i++) {
275 		if (i % 10 == 0)
276 			pr_cont("\n * ");
277 		pr_cont("%02x ", *data_vals++);
278 	}
279 
280 	pr_cont("\n");
281 }
282 
283 /*
284  * redrat3_issue_async
285  *
286  *  Issues an async read to the ir data in port..
287  *  sets the callback to be redrat3_handle_async
288  */
289 static void redrat3_issue_async(struct redrat3_dev *rr3)
290 {
291 	int res;
292 
293 	rr3_ftr(rr3->dev, "Entering %s\n", __func__);
294 
295 	if (!rr3->det_enabled) {
296 		dev_warn(rr3->dev, "not issuing async read, "
297 			 "detector not enabled\n");
298 		return;
299 	}
300 
301 	memset(rr3->bulk_in_buf, 0, rr3->ep_in->wMaxPacketSize);
302 	res = usb_submit_urb(rr3->read_urb, GFP_ATOMIC);
303 	if (res)
304 		rr3_dbg(rr3->dev, "%s: receive request FAILED! "
305 			"(res %d, len %d)\n", __func__, res,
306 			rr3->read_urb->transfer_buffer_length);
307 }
308 
309 static void redrat3_dump_fw_error(struct redrat3_dev *rr3, int code)
310 {
311 	if (!rr3->transmitting && (code != 0x40))
312 		dev_info(rr3->dev, "fw error code 0x%02x: ", code);
313 
314 	switch (code) {
315 	case 0x00:
316 		pr_cont("No Error\n");
317 		break;
318 
319 	/* Codes 0x20 through 0x2f are IR Firmware Errors */
320 	case 0x20:
321 		pr_cont("Initial signal pulse not long enough "
322 			"to measure carrier frequency\n");
323 		break;
324 	case 0x21:
325 		pr_cont("Not enough length values allocated for signal\n");
326 		break;
327 	case 0x22:
328 		pr_cont("Not enough memory allocated for signal data\n");
329 		break;
330 	case 0x23:
331 		pr_cont("Too many signal repeats\n");
332 		break;
333 	case 0x28:
334 		pr_cont("Insufficient memory available for IR signal "
335 			"data memory allocation\n");
336 		break;
337 	case 0x29:
338 		pr_cont("Insufficient memory available "
339 			"for IrDa signal data memory allocation\n");
340 		break;
341 
342 	/* Codes 0x30 through 0x3f are USB Firmware Errors */
343 	case 0x30:
344 		pr_cont("Insufficient memory available for bulk "
345 			"transfer structure\n");
346 		break;
347 
348 	/*
349 	 * Other error codes... These are primarily errors that can occur in
350 	 * the control messages sent to the redrat
351 	 */
352 	case 0x40:
353 		if (!rr3->transmitting)
354 			pr_cont("Signal capture has been terminated\n");
355 		break;
356 	case 0x41:
357 		pr_cont("Attempt to set/get and unknown signal I/O "
358 			"algorithm parameter\n");
359 		break;
360 	case 0x42:
361 		pr_cont("Signal capture already started\n");
362 		break;
363 
364 	default:
365 		pr_cont("Unknown Error\n");
366 		break;
367 	}
368 }
369 
370 static u32 redrat3_val_to_mod_freq(struct redrat3_signal_header *ph)
371 {
372 	u32 mod_freq = 0;
373 
374 	if (ph->mod_freq_count != 0)
375 		mod_freq = (RR3_CLK * ph->no_periods) /
376 				(ph->mod_freq_count * RR3_CLK_PER_COUNT);
377 
378 	return mod_freq;
379 }
380 
381 /* this function scales down the figures for the same result... */
382 static u32 redrat3_len_to_us(u32 length)
383 {
384 	u32 biglen = length * 1000;
385 	u32 divisor = (RR3_CLK_CONV_FACTOR) / 1000;
386 	u32 result = (u32) (biglen / divisor);
387 
388 	/* don't allow zero lengths to go back, breaks lirc */
389 	return result ? result : 1;
390 }
391 
392 /*
393  * convert us back into redrat3 lengths
394  *
395  * length * 1000   length * 1000000
396  * ------------- = ---------------- = micro
397  * rr3clk / 1000       rr3clk
398 
399  * 6 * 2       4 * 3        micro * rr3clk          micro * rr3clk / 1000
400  * ----- = 4   ----- = 6    -------------- = len    ---------------------
401  *   3           2             1000000                    1000
402  */
403 static u32 redrat3_us_to_len(u32 microsec)
404 {
405 	u32 result;
406 	u32 divisor;
407 
408 	microsec &= IR_MAX_DURATION;
409 	divisor = (RR3_CLK_CONV_FACTOR / 1000);
410 	result = (u32)(microsec * divisor) / 1000;
411 
412 	/* don't allow zero lengths to go back, breaks lirc */
413 	return result ? result : 1;
414 
415 }
416 
417 /* timer callback to send long trailing space on receive timeout */
418 static void redrat3_rx_timeout(unsigned long data)
419 {
420 	struct redrat3_dev *rr3 = (struct redrat3_dev *)data;
421 	DEFINE_IR_RAW_EVENT(rawir);
422 
423 	rawir.pulse = false;
424 	rawir.duration = rr3->rc->timeout;
425 	rr3_dbg(rr3->dev, "storing trailing space with duration %d\n",
426 		rawir.duration);
427 	ir_raw_event_store_with_filter(rr3->rc, &rawir);
428 
429 	rr3_dbg(rr3->dev, "calling ir_raw_event_handle\n");
430 	ir_raw_event_handle(rr3->rc);
431 
432 	rr3_dbg(rr3->dev, "calling ir_raw_event_reset\n");
433 	ir_raw_event_reset(rr3->rc);
434 }
435 
436 static void redrat3_process_ir_data(struct redrat3_dev *rr3)
437 {
438 	DEFINE_IR_RAW_EVENT(rawir);
439 	struct redrat3_signal_header header;
440 	struct device *dev;
441 	int i;
442 	unsigned long delay;
443 	u32 mod_freq, single_len;
444 	u16 *len_vals;
445 	u8 *data_vals;
446 	u32 tmp32;
447 	u16 tmp16;
448 	char *sig_data;
449 
450 	if (!rr3) {
451 		pr_err("%s called with no context!\n", __func__);
452 		return;
453 	}
454 
455 	rr3_ftr(rr3->dev, "Entered %s\n", __func__);
456 
457 	dev = rr3->dev;
458 	sig_data = rr3->pbuf;
459 
460 	header.length = rr3->pktlen;
461 	header.transfer_type = rr3->pkttype;
462 
463 	/* Sanity check */
464 	if (!(header.length >= RR3_HEADER_LENGTH))
465 		dev_warn(dev, "read returned less than rr3 header len\n");
466 
467 	delay = usecs_to_jiffies(rr3->rc->timeout / 1000);
468 	mod_timer(&rr3->rx_timeout, jiffies + delay);
469 
470 	memcpy(&tmp32, sig_data + RR3_PAUSE_OFFSET, sizeof(tmp32));
471 	header.pause = be32_to_cpu(tmp32);
472 
473 	memcpy(&tmp16, sig_data + RR3_FREQ_COUNT_OFFSET, sizeof(tmp16));
474 	header.mod_freq_count = be16_to_cpu(tmp16);
475 
476 	memcpy(&tmp16, sig_data + RR3_NUM_PERIOD_OFFSET, sizeof(tmp16));
477 	header.no_periods = be16_to_cpu(tmp16);
478 
479 	header.max_lengths = sig_data[RR3_MAX_LENGTHS_OFFSET];
480 	header.no_lengths = sig_data[RR3_NUM_LENGTHS_OFFSET];
481 
482 	memcpy(&tmp16, sig_data + RR3_MAX_SIGS_OFFSET, sizeof(tmp16));
483 	header.max_sig_size = be16_to_cpu(tmp16);
484 
485 	memcpy(&tmp16, sig_data + RR3_NUM_SIGS_OFFSET, sizeof(tmp16));
486 	header.sig_size = be16_to_cpu(tmp16);
487 
488 	header.no_repeats= sig_data[RR3_REPEATS_OFFSET];
489 
490 	if (debug) {
491 		redrat3_dump_signal_header(&header);
492 		redrat3_dump_signal_data(sig_data, header.sig_size);
493 	}
494 
495 	mod_freq = redrat3_val_to_mod_freq(&header);
496 	rr3_dbg(dev, "Got mod_freq of %u\n", mod_freq);
497 
498 	/* Here we pull out the 'length' values from the signal */
499 	len_vals = (u16 *)(sig_data + RR3_HEADER_LENGTH);
500 
501 	data_vals = sig_data + RR3_HEADER_LENGTH +
502 		    (header.max_lengths * sizeof(u16));
503 
504 	/* process each rr3 encoded byte into an int */
505 	for (i = 0; i < header.sig_size; i++) {
506 		u16 val = len_vals[data_vals[i]];
507 		single_len = redrat3_len_to_us((u32)be16_to_cpu(val));
508 
509 		/* cap the value to IR_MAX_DURATION */
510 		single_len &= IR_MAX_DURATION;
511 
512 		/* we should always get pulse/space/pulse/space samples */
513 		if (i % 2)
514 			rawir.pulse = false;
515 		else
516 			rawir.pulse = true;
517 
518 		rawir.duration = US_TO_NS(single_len);
519 		rr3_dbg(dev, "storing %s with duration %d (i: %d)\n",
520 			rawir.pulse ? "pulse" : "space", rawir.duration, i);
521 		ir_raw_event_store_with_filter(rr3->rc, &rawir);
522 	}
523 
524 	/* add a trailing space, if need be */
525 	if (i % 2) {
526 		rawir.pulse = false;
527 		/* this duration is made up, and may not be ideal... */
528 		rawir.duration = rr3->rc->timeout / 2;
529 		rr3_dbg(dev, "storing trailing space with duration %d\n",
530 			rawir.duration);
531 		ir_raw_event_store_with_filter(rr3->rc, &rawir);
532 	}
533 
534 	rr3_dbg(dev, "calling ir_raw_event_handle\n");
535 	ir_raw_event_handle(rr3->rc);
536 
537 	return;
538 }
539 
540 /* Util fn to send rr3 cmds */
541 static u8 redrat3_send_cmd(int cmd, struct redrat3_dev *rr3)
542 {
543 	struct usb_device *udev;
544 	u8 *data;
545 	int res;
546 
547 	data = kzalloc(sizeof(u8), GFP_KERNEL);
548 	if (!data)
549 		return -ENOMEM;
550 
551 	udev = rr3->udev;
552 	res = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), cmd,
553 			      USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
554 			      0x0000, 0x0000, data, sizeof(u8), HZ * 10);
555 
556 	if (res < 0) {
557 		dev_err(rr3->dev, "%s: Error sending rr3 cmd res %d, data %d",
558 			__func__, res, *data);
559 		res = -EIO;
560 	} else
561 		res = (u8)data[0];
562 
563 	kfree(data);
564 
565 	return res;
566 }
567 
568 /* Enables the long range detector and starts async receive */
569 static int redrat3_enable_detector(struct redrat3_dev *rr3)
570 {
571 	struct device *dev = rr3->dev;
572 	u8 ret;
573 
574 	rr3_ftr(dev, "Entering %s\n", __func__);
575 
576 	ret = redrat3_send_cmd(RR3_RC_DET_ENABLE, rr3);
577 	if (ret != 0)
578 		dev_dbg(dev, "%s: unexpected ret of %d\n",
579 			__func__, ret);
580 
581 	ret = redrat3_send_cmd(RR3_RC_DET_STATUS, rr3);
582 	if (ret != 1) {
583 		dev_err(dev, "%s: detector status: %d, should be 1\n",
584 			__func__, ret);
585 		return -EIO;
586 	}
587 
588 	rr3->det_enabled = true;
589 	redrat3_issue_async(rr3);
590 
591 	return 0;
592 }
593 
594 /* Disables the rr3 long range detector */
595 static void redrat3_disable_detector(struct redrat3_dev *rr3)
596 {
597 	struct device *dev = rr3->dev;
598 	u8 ret;
599 
600 	rr3_ftr(dev, "Entering %s\n", __func__);
601 
602 	ret = redrat3_send_cmd(RR3_RC_DET_DISABLE, rr3);
603 	if (ret != 0)
604 		dev_err(dev, "%s: failure!\n", __func__);
605 
606 	ret = redrat3_send_cmd(RR3_RC_DET_STATUS, rr3);
607 	if (ret != 0)
608 		dev_warn(dev, "%s: detector status: %d, should be 0\n",
609 			 __func__, ret);
610 
611 	rr3->det_enabled = false;
612 }
613 
614 static inline void redrat3_delete(struct redrat3_dev *rr3,
615 				  struct usb_device *udev)
616 {
617 	rr3_ftr(rr3->dev, "%s cleaning up\n", __func__);
618 	usb_kill_urb(rr3->read_urb);
619 	usb_kill_urb(rr3->write_urb);
620 
621 	usb_free_urb(rr3->read_urb);
622 	usb_free_urb(rr3->write_urb);
623 
624 	usb_free_coherent(udev, rr3->ep_in->wMaxPacketSize,
625 			  rr3->bulk_in_buf, rr3->dma_in);
626 	usb_free_coherent(udev, rr3->ep_out->wMaxPacketSize,
627 			  rr3->bulk_out_buf, rr3->dma_out);
628 
629 	kfree(rr3);
630 }
631 
632 static u32 redrat3_get_timeout(struct device *dev,
633 			       struct rc_dev *rc, struct usb_device *udev)
634 {
635 	u32 *tmp;
636 	u32 timeout = MS_TO_NS(150); /* a sane default, if things go haywire */
637 	int len, ret, pipe;
638 
639 	len = sizeof(*tmp);
640 	tmp = kzalloc(len, GFP_KERNEL);
641 	if (!tmp) {
642 		dev_warn(dev, "Memory allocation faillure\n");
643 		return timeout;
644 	}
645 
646 	pipe = usb_rcvctrlpipe(udev, 0);
647 	ret = usb_control_msg(udev, pipe, RR3_GET_IR_PARAM,
648 			      USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
649 			      RR3_IR_IO_SIG_TIMEOUT, 0, tmp, len, HZ * 5);
650 	if (ret != len) {
651 		dev_warn(dev, "Failed to read timeout from hardware\n");
652 		return timeout;
653 	}
654 
655 	timeout = US_TO_NS(redrat3_len_to_us(be32_to_cpu(*tmp)));
656 	if (timeout < rc->min_timeout)
657 		timeout = rc->min_timeout;
658 	else if (timeout > rc->max_timeout)
659 		timeout = rc->max_timeout;
660 
661 	rr3_dbg(dev, "Got timeout of %d ms\n", timeout / (1000 * 1000));
662 	return timeout;
663 }
664 
665 static void redrat3_reset(struct redrat3_dev *rr3)
666 {
667 	struct usb_device *udev = rr3->udev;
668 	struct device *dev = rr3->dev;
669 	int rc, rxpipe, txpipe;
670 	u8 *val;
671 	int len = sizeof(u8);
672 
673 	rr3_ftr(dev, "Entering %s\n", __func__);
674 
675 	rxpipe = usb_rcvctrlpipe(udev, 0);
676 	txpipe = usb_sndctrlpipe(udev, 0);
677 
678 	val = kzalloc(len, GFP_KERNEL);
679 	if (!val) {
680 		dev_err(dev, "Memory allocation failure\n");
681 		return;
682 	}
683 
684 	*val = 0x01;
685 	rc = usb_control_msg(udev, rxpipe, RR3_RESET,
686 			     USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
687 			     RR3_CPUCS_REG_ADDR, 0, val, len, HZ * 25);
688 	rr3_dbg(dev, "reset returned 0x%02x\n", rc);
689 
690 	*val = 5;
691 	rc = usb_control_msg(udev, txpipe, RR3_SET_IR_PARAM,
692 			     USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
693 			     RR3_IR_IO_LENGTH_FUZZ, 0, val, len, HZ * 25);
694 	rr3_dbg(dev, "set ir parm len fuzz %d rc 0x%02x\n", *val, rc);
695 
696 	*val = RR3_DRIVER_MAXLENS;
697 	rc = usb_control_msg(udev, txpipe, RR3_SET_IR_PARAM,
698 			     USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
699 			     RR3_IR_IO_MAX_LENGTHS, 0, val, len, HZ * 25);
700 	rr3_dbg(dev, "set ir parm max lens %d rc 0x%02x\n", *val, rc);
701 
702 	kfree(val);
703 }
704 
705 static void redrat3_get_firmware_rev(struct redrat3_dev *rr3)
706 {
707 	int rc = 0;
708 	char *buffer;
709 
710 	rr3_ftr(rr3->dev, "Entering %s\n", __func__);
711 
712 	buffer = kzalloc(sizeof(char) * (RR3_FW_VERSION_LEN + 1), GFP_KERNEL);
713 	if (!buffer) {
714 		dev_err(rr3->dev, "Memory allocation failure\n");
715 		return;
716 	}
717 
718 	rc = usb_control_msg(rr3->udev, usb_rcvctrlpipe(rr3->udev, 0),
719 			     RR3_FW_VERSION,
720 			     USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
721 			     0, 0, buffer, RR3_FW_VERSION_LEN, HZ * 5);
722 
723 	if (rc >= 0)
724 		dev_info(rr3->dev, "Firmware rev: %s", buffer);
725 	else
726 		dev_err(rr3->dev, "Problem fetching firmware ID\n");
727 
728 	kfree(buffer);
729 	rr3_ftr(rr3->dev, "Exiting %s\n", __func__);
730 }
731 
732 static void redrat3_read_packet_start(struct redrat3_dev *rr3, int len)
733 {
734 	u16 tx_error;
735 	u16 hdrlen;
736 
737 	rr3_ftr(rr3->dev, "Entering %s\n", __func__);
738 
739 	/* grab the Length and type of transfer */
740 	memcpy(&(rr3->pktlen), (unsigned char *) rr3->bulk_in_buf,
741 	       sizeof(rr3->pktlen));
742 	memcpy(&(rr3->pkttype), ((unsigned char *) rr3->bulk_in_buf +
743 		sizeof(rr3->pktlen)),
744 	       sizeof(rr3->pkttype));
745 
746 	/*data needs conversion to know what its real values are*/
747 	rr3->pktlen = be16_to_cpu(rr3->pktlen);
748 	rr3->pkttype = be16_to_cpu(rr3->pkttype);
749 
750 	switch (rr3->pkttype) {
751 	case RR3_ERROR:
752 		memcpy(&tx_error, ((unsigned char *)rr3->bulk_in_buf
753 			+ (sizeof(rr3->pktlen) + sizeof(rr3->pkttype))),
754 		       sizeof(tx_error));
755 		tx_error = be16_to_cpu(tx_error);
756 		redrat3_dump_fw_error(rr3, tx_error);
757 		break;
758 
759 	case RR3_MOD_SIGNAL_IN:
760 		hdrlen = sizeof(rr3->pktlen) + sizeof(rr3->pkttype);
761 		rr3->bytes_read = len;
762 		rr3->bytes_read -= hdrlen;
763 		rr3->datap = &(rr3->pbuf[0]);
764 
765 		memcpy(rr3->datap, ((unsigned char *)rr3->bulk_in_buf + hdrlen),
766 		       rr3->bytes_read);
767 		rr3->datap += rr3->bytes_read;
768 		rr3_dbg(rr3->dev, "bytes_read %d, pktlen %d\n",
769 			rr3->bytes_read, rr3->pktlen);
770 		break;
771 
772 	default:
773 		rr3_dbg(rr3->dev, "ignoring packet with type 0x%02x, "
774 			"len of %d, 0x%02x\n", rr3->pkttype, len, rr3->pktlen);
775 		break;
776 	}
777 }
778 
779 static void redrat3_read_packet_continue(struct redrat3_dev *rr3, int len)
780 {
781 
782 	rr3_ftr(rr3->dev, "Entering %s\n", __func__);
783 
784 	memcpy(rr3->datap, (unsigned char *)rr3->bulk_in_buf, len);
785 	rr3->datap += len;
786 
787 	rr3->bytes_read += len;
788 	rr3_dbg(rr3->dev, "bytes_read %d, pktlen %d\n",
789 		rr3->bytes_read, rr3->pktlen);
790 }
791 
792 /* gather IR data from incoming urb, process it when we have enough */
793 static int redrat3_get_ir_data(struct redrat3_dev *rr3, int len)
794 {
795 	struct device *dev = rr3->dev;
796 	int ret = 0;
797 
798 	rr3_ftr(dev, "Entering %s\n", __func__);
799 
800 	if (rr3->pktlen > RR3_MAX_BUF_SIZE) {
801 		dev_err(rr3->dev, "error: packet larger than buffer\n");
802 		ret = -EINVAL;
803 		goto out;
804 	}
805 
806 	if ((rr3->bytes_read == 0) &&
807 	    (len >= (sizeof(rr3->pkttype) + sizeof(rr3->pktlen)))) {
808 		redrat3_read_packet_start(rr3, len);
809 	} else if (rr3->bytes_read != 0) {
810 		redrat3_read_packet_continue(rr3, len);
811 	} else if (rr3->bytes_read == 0) {
812 		dev_err(dev, "error: no packet data read\n");
813 		ret = -ENODATA;
814 		goto out;
815 	}
816 
817 	if (rr3->bytes_read > rr3->pktlen) {
818 		dev_err(dev, "bytes_read (%d) greater than pktlen (%d)\n",
819 			rr3->bytes_read, rr3->pktlen);
820 		ret = -EINVAL;
821 		goto out;
822 	} else if (rr3->bytes_read < rr3->pktlen)
823 		/* we're still accumulating data */
824 		return 0;
825 
826 	/* if we get here, we've got IR data to decode */
827 	if (rr3->pkttype == RR3_MOD_SIGNAL_IN)
828 		redrat3_process_ir_data(rr3);
829 	else
830 		rr3_dbg(dev, "discarding non-signal data packet "
831 			"(type 0x%02x)\n", rr3->pkttype);
832 
833 out:
834 	rr3->bytes_read = 0;
835 	rr3->pktlen = 0;
836 	rr3->pkttype = 0;
837 	return ret;
838 }
839 
840 /* callback function from USB when async USB request has completed */
841 static void redrat3_handle_async(struct urb *urb, struct pt_regs *regs)
842 {
843 	struct redrat3_dev *rr3;
844 
845 	if (!urb)
846 		return;
847 
848 	rr3 = urb->context;
849 	if (!rr3) {
850 		pr_err("%s called with invalid context!\n", __func__);
851 		usb_unlink_urb(urb);
852 		return;
853 	}
854 
855 	rr3_ftr(rr3->dev, "Entering %s\n", __func__);
856 
857 	if (!rr3->det_enabled) {
858 		rr3_dbg(rr3->dev, "received a read callback but detector "
859 			"disabled - ignoring\n");
860 		return;
861 	}
862 
863 	switch (urb->status) {
864 	case 0:
865 		redrat3_get_ir_data(rr3, urb->actual_length);
866 		break;
867 
868 	case -ECONNRESET:
869 	case -ENOENT:
870 	case -ESHUTDOWN:
871 		usb_unlink_urb(urb);
872 		return;
873 
874 	case -EPIPE:
875 	default:
876 		dev_warn(rr3->dev, "Error: urb status = %d\n", urb->status);
877 		rr3->bytes_read = 0;
878 		rr3->pktlen = 0;
879 		rr3->pkttype = 0;
880 		break;
881 	}
882 
883 	if (!rr3->transmitting)
884 		redrat3_issue_async(rr3);
885 	else
886 		rr3_dbg(rr3->dev, "IR transmit in progress\n");
887 }
888 
889 static void redrat3_write_bulk_callback(struct urb *urb, struct pt_regs *regs)
890 {
891 	struct redrat3_dev *rr3;
892 	int len;
893 
894 	if (!urb)
895 		return;
896 
897 	rr3 = urb->context;
898 	if (rr3) {
899 		len = urb->actual_length;
900 		rr3_ftr(rr3->dev, "%s: called (status=%d len=%d)\n",
901 			__func__, urb->status, len);
902 	}
903 }
904 
905 static u16 mod_freq_to_val(unsigned int mod_freq)
906 {
907 	int mult = 6000000;
908 
909 	/* Clk used in mod. freq. generation is CLK24/4. */
910 	return (u16)(65536 - (mult / mod_freq));
911 }
912 
913 static int redrat3_set_tx_carrier(struct rc_dev *dev, u32 carrier)
914 {
915 	struct redrat3_dev *rr3 = dev->priv;
916 
917 	rr3->carrier = carrier;
918 
919 	return carrier;
920 }
921 
922 static int redrat3_transmit_ir(struct rc_dev *rcdev, int *txbuf, u32 n)
923 {
924 	struct redrat3_dev *rr3 = rcdev->priv;
925 	struct device *dev = rr3->dev;
926 	struct redrat3_signal_header header;
927 	int i, j, count, ret, ret_len, offset;
928 	int lencheck, cur_sample_len, pipe;
929 	char *buffer = NULL, *sigdata = NULL;
930 	int *sample_lens = NULL;
931 	u32 tmpi;
932 	u16 tmps;
933 	u8 *datap;
934 	u8 curlencheck = 0;
935 	u16 *lengths_ptr;
936 	int sendbuf_len;
937 
938 	rr3_ftr(dev, "Entering %s\n", __func__);
939 
940 	if (rr3->transmitting) {
941 		dev_warn(dev, "%s: transmitter already in use\n", __func__);
942 		return -EAGAIN;
943 	}
944 
945 	count = n / sizeof(int);
946 	if (count > (RR3_DRIVER_MAXLENS * 2))
947 		return -EINVAL;
948 
949 	rr3->transmitting = true;
950 
951 	redrat3_disable_detector(rr3);
952 
953 	if (rr3->det_enabled) {
954 		dev_err(dev, "%s: cannot tx while rx is enabled\n", __func__);
955 		ret = -EIO;
956 		goto out;
957 	}
958 
959 	sample_lens = kzalloc(sizeof(int) * RR3_DRIVER_MAXLENS, GFP_KERNEL);
960 	if (!sample_lens) {
961 		ret = -ENOMEM;
962 		goto out;
963 	}
964 
965 	for (i = 0; i < count; i++) {
966 		for (lencheck = 0; lencheck < curlencheck; lencheck++) {
967 			cur_sample_len = redrat3_us_to_len(txbuf[i]);
968 			if (sample_lens[lencheck] == cur_sample_len)
969 				break;
970 		}
971 		if (lencheck == curlencheck) {
972 			cur_sample_len = redrat3_us_to_len(txbuf[i]);
973 			rr3_dbg(dev, "txbuf[%d]=%u, pos %d, enc %u\n",
974 				i, txbuf[i], curlencheck, cur_sample_len);
975 			if (curlencheck < 255) {
976 				/* now convert the value to a proper
977 				 * rr3 value.. */
978 				sample_lens[curlencheck] = cur_sample_len;
979 				curlencheck++;
980 			} else {
981 				dev_err(dev, "signal too long\n");
982 				ret = -EINVAL;
983 				goto out;
984 			}
985 		}
986 	}
987 
988 	sigdata = kzalloc((count + RR3_TX_TRAILER_LEN), GFP_KERNEL);
989 	if (!sigdata) {
990 		ret = -ENOMEM;
991 		goto out;
992 	}
993 
994 	sigdata[count] = RR3_END_OF_SIGNAL;
995 	sigdata[count + 1] = RR3_END_OF_SIGNAL;
996 	for (i = 0; i < count; i++) {
997 		for (j = 0; j < curlencheck; j++) {
998 			if (sample_lens[j] == redrat3_us_to_len(txbuf[i]))
999 				sigdata[i] = j;
1000 		}
1001 	}
1002 
1003 	offset = RR3_TX_HEADER_OFFSET;
1004 	sendbuf_len = RR3_HEADER_LENGTH + (sizeof(u16) * RR3_DRIVER_MAXLENS)
1005 			+ count + RR3_TX_TRAILER_LEN + offset;
1006 
1007 	buffer = kzalloc(sendbuf_len, GFP_KERNEL);
1008 	if (!buffer) {
1009 		ret = -ENOMEM;
1010 		goto out;
1011 	}
1012 
1013 	/* fill in our packet header */
1014 	header.length = sendbuf_len - offset;
1015 	header.transfer_type = RR3_MOD_SIGNAL_OUT;
1016 	header.pause = redrat3_len_to_us(100);
1017 	header.mod_freq_count = mod_freq_to_val(rr3->carrier);
1018 	header.no_periods = 0; /* n/a to transmit */
1019 	header.max_lengths = RR3_DRIVER_MAXLENS;
1020 	header.no_lengths = curlencheck;
1021 	header.max_sig_size = RR3_MAX_SIG_SIZE;
1022 	header.sig_size = count + RR3_TX_TRAILER_LEN;
1023 	/* we currently rely on repeat handling in the IR encoding source */
1024 	header.no_repeats = 0;
1025 
1026 	tmps = cpu_to_be16(header.length);
1027 	memcpy(buffer, &tmps, 2);
1028 
1029 	tmps = cpu_to_be16(header.transfer_type);
1030 	memcpy(buffer + 2, &tmps, 2);
1031 
1032 	tmpi = cpu_to_be32(header.pause);
1033 	memcpy(buffer + offset, &tmpi, sizeof(tmpi));
1034 
1035 	tmps = cpu_to_be16(header.mod_freq_count);
1036 	memcpy(buffer + offset + RR3_FREQ_COUNT_OFFSET, &tmps, 2);
1037 
1038 	buffer[offset + RR3_NUM_LENGTHS_OFFSET] = header.no_lengths;
1039 
1040 	tmps = cpu_to_be16(header.sig_size);
1041 	memcpy(buffer + offset + RR3_NUM_SIGS_OFFSET, &tmps, 2);
1042 
1043 	buffer[offset + RR3_REPEATS_OFFSET] = header.no_repeats;
1044 
1045 	lengths_ptr = (u16 *)(buffer + offset + RR3_HEADER_LENGTH);
1046 	for (i = 0; i < curlencheck; ++i)
1047 		lengths_ptr[i] = cpu_to_be16(sample_lens[i]);
1048 
1049 	datap = (u8 *)(buffer + offset + RR3_HEADER_LENGTH +
1050 			    (sizeof(u16) * RR3_DRIVER_MAXLENS));
1051 	memcpy(datap, sigdata, (count + RR3_TX_TRAILER_LEN));
1052 
1053 	if (debug) {
1054 		redrat3_dump_signal_header(&header);
1055 		redrat3_dump_signal_data(buffer, header.sig_size);
1056 	}
1057 
1058 	pipe = usb_sndbulkpipe(rr3->udev, rr3->ep_out->bEndpointAddress);
1059 	tmps = usb_bulk_msg(rr3->udev, pipe, buffer,
1060 			    sendbuf_len, &ret_len, 10 * HZ);
1061 	rr3_dbg(dev, "sent %d bytes, (ret %d)\n", ret_len, tmps);
1062 
1063 	/* now tell the hardware to transmit what we sent it */
1064 	pipe = usb_rcvctrlpipe(rr3->udev, 0);
1065 	ret = usb_control_msg(rr3->udev, pipe, RR3_TX_SEND_SIGNAL,
1066 			      USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
1067 			      0, 0, buffer, 2, HZ * 10);
1068 
1069 	if (ret < 0)
1070 		dev_err(dev, "Error: control msg send failed, rc %d\n", ret);
1071 	else
1072 		ret = n;
1073 
1074 out:
1075 	kfree(sample_lens);
1076 	kfree(buffer);
1077 	kfree(sigdata);
1078 
1079 	rr3->transmitting = false;
1080 
1081 	redrat3_enable_detector(rr3);
1082 
1083 	return ret;
1084 }
1085 
1086 static struct rc_dev *redrat3_init_rc_dev(struct redrat3_dev *rr3)
1087 {
1088 	struct device *dev = rr3->dev;
1089 	struct rc_dev *rc;
1090 	int ret = -ENODEV;
1091 	u16 prod = le16_to_cpu(rr3->udev->descriptor.idProduct);
1092 
1093 	rc = rc_allocate_device();
1094 	if (!rc) {
1095 		dev_err(dev, "remote input dev allocation failed\n");
1096 		goto out;
1097 	}
1098 
1099 	snprintf(rr3->name, sizeof(rr3->name), "RedRat3%s "
1100 		 "Infrared Remote Transceiver (%04x:%04x)",
1101 		 prod == USB_RR3IIUSB_PRODUCT_ID ? "-II" : "",
1102 		 le16_to_cpu(rr3->udev->descriptor.idVendor), prod);
1103 
1104 	usb_make_path(rr3->udev, rr3->phys, sizeof(rr3->phys));
1105 
1106 	rc->input_name = rr3->name;
1107 	rc->input_phys = rr3->phys;
1108 	usb_to_input_id(rr3->udev, &rc->input_id);
1109 	rc->dev.parent = dev;
1110 	rc->priv = rr3;
1111 	rc->driver_type = RC_DRIVER_IR_RAW;
1112 	rc->allowed_protos = RC_TYPE_ALL;
1113 	rc->min_timeout = MS_TO_NS(RR3_RX_MIN_TIMEOUT);
1114 	rc->max_timeout = MS_TO_NS(RR3_RX_MAX_TIMEOUT);
1115 	rc->timeout = redrat3_get_timeout(dev, rc, rr3->udev);
1116 	rc->tx_ir = redrat3_transmit_ir;
1117 	rc->s_tx_carrier = redrat3_set_tx_carrier;
1118 	rc->driver_name = DRIVER_NAME;
1119 	rc->map_name = RC_MAP_HAUPPAUGE;
1120 
1121 	ret = rc_register_device(rc);
1122 	if (ret < 0) {
1123 		dev_err(dev, "remote dev registration failed\n");
1124 		goto out;
1125 	}
1126 
1127 	return rc;
1128 
1129 out:
1130 	rc_free_device(rc);
1131 	return NULL;
1132 }
1133 
1134 static int __devinit redrat3_dev_probe(struct usb_interface *intf,
1135 				       const struct usb_device_id *id)
1136 {
1137 	struct usb_device *udev = interface_to_usbdev(intf);
1138 	struct device *dev = &intf->dev;
1139 	struct usb_host_interface *uhi;
1140 	struct redrat3_dev *rr3;
1141 	struct usb_endpoint_descriptor *ep;
1142 	struct usb_endpoint_descriptor *ep_in = NULL;
1143 	struct usb_endpoint_descriptor *ep_out = NULL;
1144 	u8 addr, attrs;
1145 	int pipe, i;
1146 	int retval = -ENOMEM;
1147 
1148 	rr3_ftr(dev, "%s called\n", __func__);
1149 
1150 	uhi = intf->cur_altsetting;
1151 
1152 	/* find our bulk-in and bulk-out endpoints */
1153 	for (i = 0; i < uhi->desc.bNumEndpoints; ++i) {
1154 		ep = &uhi->endpoint[i].desc;
1155 		addr = ep->bEndpointAddress;
1156 		attrs = ep->bmAttributes;
1157 
1158 		if ((ep_in == NULL) &&
1159 		    ((addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) &&
1160 		    ((attrs & USB_ENDPOINT_XFERTYPE_MASK) ==
1161 		     USB_ENDPOINT_XFER_BULK)) {
1162 			rr3_dbg(dev, "found bulk-in endpoint at 0x%02x\n",
1163 				ep->bEndpointAddress);
1164 			/* data comes in on 0x82, 0x81 is for other data... */
1165 			if (ep->bEndpointAddress == RR3_BULK_IN_EP_ADDR)
1166 				ep_in = ep;
1167 		}
1168 
1169 		if ((ep_out == NULL) &&
1170 		    ((addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) &&
1171 		    ((attrs & USB_ENDPOINT_XFERTYPE_MASK) ==
1172 		     USB_ENDPOINT_XFER_BULK)) {
1173 			rr3_dbg(dev, "found bulk-out endpoint at 0x%02x\n",
1174 				ep->bEndpointAddress);
1175 			ep_out = ep;
1176 		}
1177 	}
1178 
1179 	if (!ep_in || !ep_out) {
1180 		dev_err(dev, "Couldn't find both in and out endpoints\n");
1181 		retval = -ENODEV;
1182 		goto no_endpoints;
1183 	}
1184 
1185 	/* allocate memory for our device state and initialize it */
1186 	rr3 = kzalloc(sizeof(*rr3), GFP_KERNEL);
1187 	if (rr3 == NULL) {
1188 		dev_err(dev, "Memory allocation failure\n");
1189 		goto error;
1190 	}
1191 
1192 	rr3->dev = &intf->dev;
1193 
1194 	/* set up bulk-in endpoint */
1195 	rr3->read_urb = usb_alloc_urb(0, GFP_KERNEL);
1196 	if (!rr3->read_urb) {
1197 		dev_err(dev, "Read urb allocation failure\n");
1198 		goto error;
1199 	}
1200 
1201 	rr3->ep_in = ep_in;
1202 	rr3->bulk_in_buf = usb_alloc_coherent(udev, ep_in->wMaxPacketSize,
1203 					      GFP_ATOMIC, &rr3->dma_in);
1204 	if (!rr3->bulk_in_buf) {
1205 		dev_err(dev, "Read buffer allocation failure\n");
1206 		goto error;
1207 	}
1208 
1209 	pipe = usb_rcvbulkpipe(udev, ep_in->bEndpointAddress);
1210 	usb_fill_bulk_urb(rr3->read_urb, udev, pipe,
1211 			  rr3->bulk_in_buf, ep_in->wMaxPacketSize,
1212 			  (usb_complete_t)redrat3_handle_async, rr3);
1213 
1214 	/* set up bulk-out endpoint*/
1215 	rr3->write_urb = usb_alloc_urb(0, GFP_KERNEL);
1216 	if (!rr3->write_urb) {
1217 		dev_err(dev, "Write urb allocation failure\n");
1218 		goto error;
1219 	}
1220 
1221 	rr3->ep_out = ep_out;
1222 	rr3->bulk_out_buf = usb_alloc_coherent(udev, ep_out->wMaxPacketSize,
1223 					       GFP_ATOMIC, &rr3->dma_out);
1224 	if (!rr3->bulk_out_buf) {
1225 		dev_err(dev, "Write buffer allocation failure\n");
1226 		goto error;
1227 	}
1228 
1229 	pipe = usb_sndbulkpipe(udev, ep_out->bEndpointAddress);
1230 	usb_fill_bulk_urb(rr3->write_urb, udev, pipe,
1231 			  rr3->bulk_out_buf, ep_out->wMaxPacketSize,
1232 			  (usb_complete_t)redrat3_write_bulk_callback, rr3);
1233 
1234 	mutex_init(&rr3->lock);
1235 	rr3->udev = udev;
1236 
1237 	redrat3_reset(rr3);
1238 	redrat3_get_firmware_rev(rr3);
1239 
1240 	/* might be all we need to do? */
1241 	retval = redrat3_enable_detector(rr3);
1242 	if (retval < 0)
1243 		goto error;
1244 
1245 	/* default.. will get overridden by any sends with a freq defined */
1246 	rr3->carrier = 38000;
1247 
1248 	rr3->rc = redrat3_init_rc_dev(rr3);
1249 	if (!rr3->rc)
1250 		goto error;
1251 
1252 	setup_timer(&rr3->rx_timeout, redrat3_rx_timeout, (unsigned long)rr3);
1253 
1254 	/* we can register the device now, as it is ready */
1255 	usb_set_intfdata(intf, rr3);
1256 
1257 	rr3_ftr(dev, "Exiting %s\n", __func__);
1258 	return 0;
1259 
1260 error:
1261 	redrat3_delete(rr3, rr3->udev);
1262 
1263 no_endpoints:
1264 	dev_err(dev, "%s: retval = %x", __func__, retval);
1265 
1266 	return retval;
1267 }
1268 
1269 static void __devexit redrat3_dev_disconnect(struct usb_interface *intf)
1270 {
1271 	struct usb_device *udev = interface_to_usbdev(intf);
1272 	struct redrat3_dev *rr3 = usb_get_intfdata(intf);
1273 
1274 	rr3_ftr(&intf->dev, "Entering %s\n", __func__);
1275 
1276 	if (!rr3)
1277 		return;
1278 
1279 	redrat3_disable_detector(rr3);
1280 
1281 	usb_set_intfdata(intf, NULL);
1282 	rc_unregister_device(rr3->rc);
1283 	redrat3_delete(rr3, udev);
1284 
1285 	rr3_ftr(&intf->dev, "RedRat3 IR Transceiver now disconnected\n");
1286 }
1287 
1288 static int redrat3_dev_suspend(struct usb_interface *intf, pm_message_t message)
1289 {
1290 	struct redrat3_dev *rr3 = usb_get_intfdata(intf);
1291 	rr3_ftr(rr3->dev, "suspend\n");
1292 	usb_kill_urb(rr3->read_urb);
1293 	return 0;
1294 }
1295 
1296 static int redrat3_dev_resume(struct usb_interface *intf)
1297 {
1298 	struct redrat3_dev *rr3 = usb_get_intfdata(intf);
1299 	rr3_ftr(rr3->dev, "resume\n");
1300 	if (usb_submit_urb(rr3->read_urb, GFP_ATOMIC))
1301 		return -EIO;
1302 	return 0;
1303 }
1304 
1305 static struct usb_driver redrat3_dev_driver = {
1306 	.name		= DRIVER_NAME,
1307 	.probe		= redrat3_dev_probe,
1308 	.disconnect	= redrat3_dev_disconnect,
1309 	.suspend	= redrat3_dev_suspend,
1310 	.resume		= redrat3_dev_resume,
1311 	.reset_resume	= redrat3_dev_resume,
1312 	.id_table	= redrat3_dev_table
1313 };
1314 
1315 static int __init redrat3_dev_init(void)
1316 {
1317 	int ret;
1318 
1319 	ret = usb_register(&redrat3_dev_driver);
1320 	if (ret < 0)
1321 		pr_err(DRIVER_NAME
1322 		       ": usb register failed, result = %d\n", ret);
1323 
1324 	return ret;
1325 }
1326 
1327 static void __exit redrat3_dev_exit(void)
1328 {
1329 	usb_deregister(&redrat3_dev_driver);
1330 }
1331 
1332 module_init(redrat3_dev_init);
1333 module_exit(redrat3_dev_exit);
1334 
1335 MODULE_DESCRIPTION(DRIVER_DESC);
1336 MODULE_AUTHOR(DRIVER_AUTHOR);
1337 MODULE_AUTHOR(DRIVER_AUTHOR2);
1338 MODULE_LICENSE("GPL");
1339 MODULE_DEVICE_TABLE(usb, redrat3_dev_table);
1340 
1341 module_param(debug, int, S_IRUGO | S_IWUSR);
1342 MODULE_PARM_DESC(debug, "Enable module debug spew. 0 = no debugging (default) "
1343 		 "0x1 = standard debug messages, 0x2 = function tracing debug. "
1344 		 "Flag bits are addative (i.e., 0x3 for both debug types).");
1345