1 /*
2  * TTUSB DEC Driver
3  *
4  * Copyright (C) 2003-2004 Alex Woods <linux-dvb@giblets.org>
5  * IR support by Peter Beutner <p.beutner@gmx.net>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  *
21  */
22 
23 #include <linux/list.h>
24 #include <linux/module.h>
25 #include <linux/pci.h>
26 #include <linux/slab.h>
27 #include <linux/spinlock.h>
28 #include <linux/usb.h>
29 #include <linux/interrupt.h>
30 #include <linux/firmware.h>
31 #include <linux/crc32.h>
32 #include <linux/init.h>
33 #include <linux/input.h>
34 
35 #include <linux/mutex.h>
36 
37 #include "dmxdev.h"
38 #include "dvb_demux.h"
39 #include "dvb_filter.h"
40 #include "dvb_frontend.h"
41 #include "dvb_net.h"
42 #include "ttusbdecfe.h"
43 
44 static int debug;
45 static int output_pva;
46 static int enable_rc;
47 
48 module_param(debug, int, 0644);
49 MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
50 module_param(output_pva, int, 0444);
51 MODULE_PARM_DESC(output_pva, "Output PVA from dvr device (default:off)");
52 module_param(enable_rc, int, 0644);
53 MODULE_PARM_DESC(enable_rc, "Turn on/off IR remote control(default: off)");
54 
55 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
56 
57 #define dprintk	if (debug) printk
58 
59 #define DRIVER_NAME		"TechnoTrend/Hauppauge DEC USB"
60 
61 #define COMMAND_PIPE		0x03
62 #define RESULT_PIPE		0x04
63 #define IN_PIPE			0x08
64 #define OUT_PIPE		0x07
65 #define IRQ_PIPE		0x0A
66 
67 #define COMMAND_PACKET_SIZE	0x3c
68 #define ARM_PACKET_SIZE		0x1000
69 #define IRQ_PACKET_SIZE		0x8
70 
71 #define ISO_BUF_COUNT		0x04
72 #define FRAMES_PER_ISO_BUF	0x04
73 #define ISO_FRAME_SIZE		0x0380
74 
75 #define	MAX_PVA_LENGTH		6144
76 
77 enum ttusb_dec_model {
78 	TTUSB_DEC2000T,
79 	TTUSB_DEC2540T,
80 	TTUSB_DEC3000S
81 };
82 
83 enum ttusb_dec_packet_type {
84 	TTUSB_DEC_PACKET_PVA,
85 	TTUSB_DEC_PACKET_SECTION,
86 	TTUSB_DEC_PACKET_EMPTY
87 };
88 
89 enum ttusb_dec_interface {
90 	TTUSB_DEC_INTERFACE_INITIAL,
91 	TTUSB_DEC_INTERFACE_IN,
92 	TTUSB_DEC_INTERFACE_OUT
93 };
94 
95 struct ttusb_dec {
96 	enum ttusb_dec_model		model;
97 	char				*model_name;
98 	char				*firmware_name;
99 	int				can_playback;
100 
101 	/* DVB bits */
102 	struct dvb_adapter		adapter;
103 	struct dmxdev			dmxdev;
104 	struct dvb_demux		demux;
105 	struct dmx_frontend		frontend;
106 	struct dvb_net			dvb_net;
107 	struct dvb_frontend*		fe;
108 
109 	u16			pid[DMX_PES_OTHER];
110 
111 	/* USB bits */
112 	struct usb_device		*udev;
113 	u8				trans_count;
114 	unsigned int			command_pipe;
115 	unsigned int			result_pipe;
116 	unsigned int			in_pipe;
117 	unsigned int			out_pipe;
118 	unsigned int			irq_pipe;
119 	enum ttusb_dec_interface	interface;
120 	struct mutex			usb_mutex;
121 
122 	void			*irq_buffer;
123 	struct urb		*irq_urb;
124 	dma_addr_t		irq_dma_handle;
125 	void			*iso_buffer;
126 	dma_addr_t		iso_dma_handle;
127 	struct urb		*iso_urb[ISO_BUF_COUNT];
128 	int			iso_stream_count;
129 	struct mutex		iso_mutex;
130 
131 	u8				packet[MAX_PVA_LENGTH + 4];
132 	enum ttusb_dec_packet_type	packet_type;
133 	int				packet_state;
134 	int				packet_length;
135 	int				packet_payload_length;
136 	u16				next_packet_id;
137 
138 	int				pva_stream_count;
139 	int				filter_stream_count;
140 
141 	struct dvb_filter_pes2ts	a_pes2ts;
142 	struct dvb_filter_pes2ts	v_pes2ts;
143 
144 	u8			v_pes[16 + MAX_PVA_LENGTH];
145 	int			v_pes_length;
146 	int			v_pes_postbytes;
147 
148 	struct list_head	urb_frame_list;
149 	struct tasklet_struct	urb_tasklet;
150 	spinlock_t		urb_frame_list_lock;
151 
152 	struct dvb_demux_filter	*audio_filter;
153 	struct dvb_demux_filter	*video_filter;
154 	struct list_head	filter_info_list;
155 	spinlock_t		filter_info_list_lock;
156 
157 	struct input_dev	*rc_input_dev;
158 	char			rc_phys[64];
159 
160 	int			active; /* Loaded successfully */
161 };
162 
163 struct urb_frame {
164 	u8			data[ISO_FRAME_SIZE];
165 	int			length;
166 	struct list_head	urb_frame_list;
167 };
168 
169 struct filter_info {
170 	u8			stream_id;
171 	struct dvb_demux_filter	*filter;
172 	struct list_head	filter_info_list;
173 };
174 
175 static u16 rc_keys[] = {
176 	KEY_POWER,
177 	KEY_MUTE,
178 	KEY_1,
179 	KEY_2,
180 	KEY_3,
181 	KEY_4,
182 	KEY_5,
183 	KEY_6,
184 	KEY_7,
185 	KEY_8,
186 	KEY_9,
187 	KEY_0,
188 	KEY_CHANNELUP,
189 	KEY_VOLUMEDOWN,
190 	KEY_OK,
191 	KEY_VOLUMEUP,
192 	KEY_CHANNELDOWN,
193 	KEY_PREVIOUS,
194 	KEY_ESC,
195 	KEY_RED,
196 	KEY_GREEN,
197 	KEY_YELLOW,
198 	KEY_BLUE,
199 	KEY_OPTION,
200 	KEY_M,
201 	KEY_RADIO
202 };
203 
204 static void ttusb_dec_set_model(struct ttusb_dec *dec,
205 				enum ttusb_dec_model model);
206 
207 static void ttusb_dec_handle_irq( struct urb *urb)
208 {
209 	struct ttusb_dec *dec = urb->context;
210 	char *buffer = dec->irq_buffer;
211 	int retval;
212 
213 	switch(urb->status) {
214 		case 0: /*success*/
215 			break;
216 		case -ECONNRESET:
217 		case -ENOENT:
218 		case -ESHUTDOWN:
219 		case -ETIME:
220 			/* this urb is dead, cleanup */
221 			dprintk("%s:urb shutting down with status: %d\n",
222 					__func__, urb->status);
223 			return;
224 		default:
225 			dprintk("%s:nonzero status received: %d\n",
226 					__func__,urb->status);
227 			goto exit;
228 	}
229 
230 	if ((buffer[0] == 0x1) && (buffer[2] == 0x15))  {
231 		/*
232 		 * IR - Event
233 		 *
234 		 * this is an fact a bit too simple implementation;
235 		 * the box also reports a keyrepeat signal
236 		 * (with buffer[3] == 0x40) in an intervall of ~100ms.
237 		 * But to handle this correctly we had to imlemenent some
238 		 * kind of timer which signals a 'key up' event if no
239 		 * keyrepeat signal is received for lets say 200ms.
240 		 * this should/could be added later ...
241 		 * for now lets report each signal as a key down and up
242 		 */
243 		if (buffer[4] - 1 < ARRAY_SIZE(rc_keys)) {
244 			dprintk("%s:rc signal:%d\n", __func__, buffer[4]);
245 			input_report_key(dec->rc_input_dev, rc_keys[buffer[4] - 1], 1);
246 			input_sync(dec->rc_input_dev);
247 			input_report_key(dec->rc_input_dev, rc_keys[buffer[4] - 1], 0);
248 			input_sync(dec->rc_input_dev);
249 		}
250 	}
251 
252 exit:
253 	retval = usb_submit_urb(urb, GFP_ATOMIC);
254 	if (retval)
255 		printk("%s - usb_commit_urb failed with result: %d\n",
256 			__func__, retval);
257 }
258 
259 static u16 crc16(u16 crc, const u8 *buf, size_t len)
260 {
261 	u16 tmp;
262 
263 	while (len--) {
264 		crc ^= *buf++;
265 		crc ^= (u8)crc >> 4;
266 		tmp = (u8)crc;
267 		crc ^= (tmp ^ (tmp << 1)) << 4;
268 	}
269 	return crc;
270 }
271 
272 static int ttusb_dec_send_command(struct ttusb_dec *dec, const u8 command,
273 				  int param_length, const u8 params[],
274 				  int *result_length, u8 cmd_result[])
275 {
276 	int result, actual_len, i;
277 	u8 *b;
278 
279 	dprintk("%s\n", __func__);
280 
281 	b = kmalloc(COMMAND_PACKET_SIZE + 4, GFP_KERNEL);
282 	if (!b)
283 		return -ENOMEM;
284 
285 	if ((result = mutex_lock_interruptible(&dec->usb_mutex))) {
286 		kfree(b);
287 		printk("%s: Failed to lock usb mutex.\n", __func__);
288 		return result;
289 	}
290 
291 	b[0] = 0xaa;
292 	b[1] = ++dec->trans_count;
293 	b[2] = command;
294 	b[3] = param_length;
295 
296 	if (params)
297 		memcpy(&b[4], params, param_length);
298 
299 	if (debug) {
300 		printk("%s: command: ", __func__);
301 		for (i = 0; i < param_length + 4; i++)
302 			printk("0x%02X ", b[i]);
303 		printk("\n");
304 	}
305 
306 	result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
307 			      COMMAND_PACKET_SIZE + 4, &actual_len, 1000);
308 
309 	if (result) {
310 		printk("%s: command bulk message failed: error %d\n",
311 		       __func__, result);
312 		mutex_unlock(&dec->usb_mutex);
313 		kfree(b);
314 		return result;
315 	}
316 
317 	result = usb_bulk_msg(dec->udev, dec->result_pipe, b,
318 			      COMMAND_PACKET_SIZE + 4, &actual_len, 1000);
319 
320 	if (result) {
321 		printk("%s: result bulk message failed: error %d\n",
322 		       __func__, result);
323 		mutex_unlock(&dec->usb_mutex);
324 		kfree(b);
325 		return result;
326 	} else {
327 		if (debug) {
328 			printk("%s: result: ", __func__);
329 			for (i = 0; i < actual_len; i++)
330 				printk("0x%02X ", b[i]);
331 			printk("\n");
332 		}
333 
334 		if (result_length)
335 			*result_length = b[3];
336 		if (cmd_result && b[3] > 0)
337 			memcpy(cmd_result, &b[4], b[3]);
338 
339 		mutex_unlock(&dec->usb_mutex);
340 
341 		kfree(b);
342 		return 0;
343 	}
344 }
345 
346 static int ttusb_dec_get_stb_state (struct ttusb_dec *dec, unsigned int *mode,
347 				    unsigned int *model, unsigned int *version)
348 {
349 	u8 c[COMMAND_PACKET_SIZE];
350 	int c_length;
351 	int result;
352 	__be32 tmp;
353 
354 	dprintk("%s\n", __func__);
355 
356 	result = ttusb_dec_send_command(dec, 0x08, 0, NULL, &c_length, c);
357 	if (result)
358 		return result;
359 
360 	if (c_length >= 0x0c) {
361 		if (mode != NULL) {
362 			memcpy(&tmp, c, 4);
363 			*mode = ntohl(tmp);
364 		}
365 		if (model != NULL) {
366 			memcpy(&tmp, &c[4], 4);
367 			*model = ntohl(tmp);
368 		}
369 		if (version != NULL) {
370 			memcpy(&tmp, &c[8], 4);
371 			*version = ntohl(tmp);
372 		}
373 		return 0;
374 	} else {
375 		return -ENOENT;
376 	}
377 }
378 
379 static int ttusb_dec_audio_pes2ts_cb(void *priv, unsigned char *data)
380 {
381 	struct ttusb_dec *dec = priv;
382 
383 	dec->audio_filter->feed->cb.ts(data, 188, NULL, 0,
384 				       &dec->audio_filter->feed->feed.ts);
385 
386 	return 0;
387 }
388 
389 static int ttusb_dec_video_pes2ts_cb(void *priv, unsigned char *data)
390 {
391 	struct ttusb_dec *dec = priv;
392 
393 	dec->video_filter->feed->cb.ts(data, 188, NULL, 0,
394 				       &dec->video_filter->feed->feed.ts);
395 
396 	return 0;
397 }
398 
399 static void ttusb_dec_set_pids(struct ttusb_dec *dec)
400 {
401 	u8 b[] = { 0x00, 0x00, 0x00, 0x00,
402 		   0x00, 0x00, 0xff, 0xff,
403 		   0xff, 0xff, 0xff, 0xff };
404 
405 	__be16 pcr = htons(dec->pid[DMX_PES_PCR]);
406 	__be16 audio = htons(dec->pid[DMX_PES_AUDIO]);
407 	__be16 video = htons(dec->pid[DMX_PES_VIDEO]);
408 
409 	dprintk("%s\n", __func__);
410 
411 	memcpy(&b[0], &pcr, 2);
412 	memcpy(&b[2], &audio, 2);
413 	memcpy(&b[4], &video, 2);
414 
415 	ttusb_dec_send_command(dec, 0x50, sizeof(b), b, NULL, NULL);
416 
417 	dvb_filter_pes2ts_init(&dec->a_pes2ts, dec->pid[DMX_PES_AUDIO],
418 			       ttusb_dec_audio_pes2ts_cb, dec);
419 	dvb_filter_pes2ts_init(&dec->v_pes2ts, dec->pid[DMX_PES_VIDEO],
420 			       ttusb_dec_video_pes2ts_cb, dec);
421 	dec->v_pes_length = 0;
422 	dec->v_pes_postbytes = 0;
423 }
424 
425 static void ttusb_dec_process_pva(struct ttusb_dec *dec, u8 *pva, int length)
426 {
427 	if (length < 8) {
428 		printk("%s: packet too short - discarding\n", __func__);
429 		return;
430 	}
431 
432 	if (length > 8 + MAX_PVA_LENGTH) {
433 		printk("%s: packet too long - discarding\n", __func__);
434 		return;
435 	}
436 
437 	switch (pva[2]) {
438 
439 	case 0x01: {		/* VideoStream */
440 		int prebytes = pva[5] & 0x03;
441 		int postbytes = (pva[5] & 0x0c) >> 2;
442 		__be16 v_pes_payload_length;
443 
444 		if (output_pva) {
445 			dec->video_filter->feed->cb.ts(pva, length, NULL, 0,
446 				&dec->video_filter->feed->feed.ts);
447 			return;
448 		}
449 
450 		if (dec->v_pes_postbytes > 0 &&
451 		    dec->v_pes_postbytes == prebytes) {
452 			memcpy(&dec->v_pes[dec->v_pes_length],
453 			       &pva[12], prebytes);
454 
455 			dvb_filter_pes2ts(&dec->v_pes2ts, dec->v_pes,
456 					  dec->v_pes_length + prebytes, 1);
457 		}
458 
459 		if (pva[5] & 0x10) {
460 			dec->v_pes[7] = 0x80;
461 			dec->v_pes[8] = 0x05;
462 
463 			dec->v_pes[9] = 0x21 | ((pva[8] & 0xc0) >> 5);
464 			dec->v_pes[10] = ((pva[8] & 0x3f) << 2) |
465 					 ((pva[9] & 0xc0) >> 6);
466 			dec->v_pes[11] = 0x01 |
467 					 ((pva[9] & 0x3f) << 2) |
468 					 ((pva[10] & 0x80) >> 6);
469 			dec->v_pes[12] = ((pva[10] & 0x7f) << 1) |
470 					 ((pva[11] & 0xc0) >> 7);
471 			dec->v_pes[13] = 0x01 | ((pva[11] & 0x7f) << 1);
472 
473 			memcpy(&dec->v_pes[14], &pva[12 + prebytes],
474 			       length - 12 - prebytes);
475 			dec->v_pes_length = 14 + length - 12 - prebytes;
476 		} else {
477 			dec->v_pes[7] = 0x00;
478 			dec->v_pes[8] = 0x00;
479 
480 			memcpy(&dec->v_pes[9], &pva[8], length - 8);
481 			dec->v_pes_length = 9 + length - 8;
482 		}
483 
484 		dec->v_pes_postbytes = postbytes;
485 
486 		if (dec->v_pes[9 + dec->v_pes[8]] == 0x00 &&
487 		    dec->v_pes[10 + dec->v_pes[8]] == 0x00 &&
488 		    dec->v_pes[11 + dec->v_pes[8]] == 0x01)
489 			dec->v_pes[6] = 0x84;
490 		else
491 			dec->v_pes[6] = 0x80;
492 
493 		v_pes_payload_length = htons(dec->v_pes_length - 6 +
494 					     postbytes);
495 		memcpy(&dec->v_pes[4], &v_pes_payload_length, 2);
496 
497 		if (postbytes == 0)
498 			dvb_filter_pes2ts(&dec->v_pes2ts, dec->v_pes,
499 					  dec->v_pes_length, 1);
500 
501 		break;
502 	}
503 
504 	case 0x02:		/* MainAudioStream */
505 		if (output_pva) {
506 			dec->audio_filter->feed->cb.ts(pva, length, NULL, 0,
507 				&dec->audio_filter->feed->feed.ts);
508 			return;
509 		}
510 
511 		dvb_filter_pes2ts(&dec->a_pes2ts, &pva[8], length - 8,
512 				  pva[5] & 0x10);
513 		break;
514 
515 	default:
516 		printk("%s: unknown PVA type: %02x.\n", __func__,
517 		       pva[2]);
518 		break;
519 	}
520 }
521 
522 static void ttusb_dec_process_filter(struct ttusb_dec *dec, u8 *packet,
523 				     int length)
524 {
525 	struct list_head *item;
526 	struct filter_info *finfo;
527 	struct dvb_demux_filter *filter = NULL;
528 	unsigned long flags;
529 	u8 sid;
530 
531 	sid = packet[1];
532 	spin_lock_irqsave(&dec->filter_info_list_lock, flags);
533 	for (item = dec->filter_info_list.next; item != &dec->filter_info_list;
534 	     item = item->next) {
535 		finfo = list_entry(item, struct filter_info, filter_info_list);
536 		if (finfo->stream_id == sid) {
537 			filter = finfo->filter;
538 			break;
539 		}
540 	}
541 	spin_unlock_irqrestore(&dec->filter_info_list_lock, flags);
542 
543 	if (filter)
544 		filter->feed->cb.sec(&packet[2], length - 2, NULL, 0,
545 				     &filter->filter);
546 }
547 
548 static void ttusb_dec_process_packet(struct ttusb_dec *dec)
549 {
550 	int i;
551 	u16 csum = 0;
552 	u16 packet_id;
553 
554 	if (dec->packet_length % 2) {
555 		printk("%s: odd sized packet - discarding\n", __func__);
556 		return;
557 	}
558 
559 	for (i = 0; i < dec->packet_length; i += 2)
560 		csum ^= ((dec->packet[i] << 8) + dec->packet[i + 1]);
561 
562 	if (csum) {
563 		printk("%s: checksum failed - discarding\n", __func__);
564 		return;
565 	}
566 
567 	packet_id = dec->packet[dec->packet_length - 4] << 8;
568 	packet_id += dec->packet[dec->packet_length - 3];
569 
570 	if ((packet_id != dec->next_packet_id) && dec->next_packet_id) {
571 		printk("%s: warning: lost packets between %u and %u\n",
572 		       __func__, dec->next_packet_id - 1, packet_id);
573 	}
574 
575 	if (packet_id == 0xffff)
576 		dec->next_packet_id = 0x8000;
577 	else
578 		dec->next_packet_id = packet_id + 1;
579 
580 	switch (dec->packet_type) {
581 	case TTUSB_DEC_PACKET_PVA:
582 		if (dec->pva_stream_count)
583 			ttusb_dec_process_pva(dec, dec->packet,
584 					      dec->packet_payload_length);
585 		break;
586 
587 	case TTUSB_DEC_PACKET_SECTION:
588 		if (dec->filter_stream_count)
589 			ttusb_dec_process_filter(dec, dec->packet,
590 						 dec->packet_payload_length);
591 		break;
592 
593 	case TTUSB_DEC_PACKET_EMPTY:
594 		break;
595 	}
596 }
597 
598 static void swap_bytes(u8 *b, int length)
599 {
600 	length -= length % 2;
601 	for (; length; b += 2, length -= 2)
602 		swap(*b, *(b + 1));
603 }
604 
605 static void ttusb_dec_process_urb_frame(struct ttusb_dec *dec, u8 *b,
606 					int length)
607 {
608 	swap_bytes(b, length);
609 
610 	while (length) {
611 		switch (dec->packet_state) {
612 
613 		case 0:
614 		case 1:
615 		case 2:
616 			if (*b++ == 0xaa)
617 				dec->packet_state++;
618 			else
619 				dec->packet_state = 0;
620 
621 			length--;
622 			break;
623 
624 		case 3:
625 			if (*b == 0x00) {
626 				dec->packet_state++;
627 				dec->packet_length = 0;
628 			} else if (*b != 0xaa) {
629 				dec->packet_state = 0;
630 			}
631 
632 			b++;
633 			length--;
634 			break;
635 
636 		case 4:
637 			dec->packet[dec->packet_length++] = *b++;
638 
639 			if (dec->packet_length == 2) {
640 				if (dec->packet[0] == 'A' &&
641 				    dec->packet[1] == 'V') {
642 					dec->packet_type =
643 						TTUSB_DEC_PACKET_PVA;
644 					dec->packet_state++;
645 				} else if (dec->packet[0] == 'S') {
646 					dec->packet_type =
647 						TTUSB_DEC_PACKET_SECTION;
648 					dec->packet_state++;
649 				} else if (dec->packet[0] == 0x00) {
650 					dec->packet_type =
651 						TTUSB_DEC_PACKET_EMPTY;
652 					dec->packet_payload_length = 2;
653 					dec->packet_state = 7;
654 				} else {
655 					printk("%s: unknown packet type: "
656 					       "%02x%02x\n", __func__,
657 					       dec->packet[0], dec->packet[1]);
658 					dec->packet_state = 0;
659 				}
660 			}
661 
662 			length--;
663 			break;
664 
665 		case 5:
666 			dec->packet[dec->packet_length++] = *b++;
667 
668 			if (dec->packet_type == TTUSB_DEC_PACKET_PVA &&
669 			    dec->packet_length == 8) {
670 				dec->packet_state++;
671 				dec->packet_payload_length = 8 +
672 					(dec->packet[6] << 8) +
673 					dec->packet[7];
674 			} else if (dec->packet_type ==
675 					TTUSB_DEC_PACKET_SECTION &&
676 				   dec->packet_length == 5) {
677 				dec->packet_state++;
678 				dec->packet_payload_length = 5 +
679 					((dec->packet[3] & 0x0f) << 8) +
680 					dec->packet[4];
681 			}
682 
683 			length--;
684 			break;
685 
686 		case 6: {
687 			int remainder = dec->packet_payload_length -
688 					dec->packet_length;
689 
690 			if (length >= remainder) {
691 				memcpy(dec->packet + dec->packet_length,
692 				       b, remainder);
693 				dec->packet_length += remainder;
694 				b += remainder;
695 				length -= remainder;
696 				dec->packet_state++;
697 			} else {
698 				memcpy(&dec->packet[dec->packet_length],
699 				       b, length);
700 				dec->packet_length += length;
701 				length = 0;
702 			}
703 
704 			break;
705 		}
706 
707 		case 7: {
708 			int tail = 4;
709 
710 			dec->packet[dec->packet_length++] = *b++;
711 
712 			if (dec->packet_type == TTUSB_DEC_PACKET_SECTION &&
713 			    dec->packet_payload_length % 2)
714 				tail++;
715 
716 			if (dec->packet_length ==
717 			    dec->packet_payload_length + tail) {
718 				ttusb_dec_process_packet(dec);
719 				dec->packet_state = 0;
720 			}
721 
722 			length--;
723 			break;
724 		}
725 
726 		default:
727 			printk("%s: illegal packet state encountered.\n",
728 			       __func__);
729 			dec->packet_state = 0;
730 		}
731 	}
732 }
733 
734 static void ttusb_dec_process_urb_frame_list(unsigned long data)
735 {
736 	struct ttusb_dec *dec = (struct ttusb_dec *)data;
737 	struct list_head *item;
738 	struct urb_frame *frame;
739 	unsigned long flags;
740 
741 	while (1) {
742 		spin_lock_irqsave(&dec->urb_frame_list_lock, flags);
743 		if ((item = dec->urb_frame_list.next) != &dec->urb_frame_list) {
744 			frame = list_entry(item, struct urb_frame,
745 					   urb_frame_list);
746 			list_del(&frame->urb_frame_list);
747 		} else {
748 			spin_unlock_irqrestore(&dec->urb_frame_list_lock,
749 					       flags);
750 			return;
751 		}
752 		spin_unlock_irqrestore(&dec->urb_frame_list_lock, flags);
753 
754 		ttusb_dec_process_urb_frame(dec, frame->data, frame->length);
755 		kfree(frame);
756 	}
757 }
758 
759 static void ttusb_dec_process_urb(struct urb *urb)
760 {
761 	struct ttusb_dec *dec = urb->context;
762 
763 	if (!urb->status) {
764 		int i;
765 
766 		for (i = 0; i < FRAMES_PER_ISO_BUF; i++) {
767 			struct usb_iso_packet_descriptor *d;
768 			u8 *b;
769 			int length;
770 			struct urb_frame *frame;
771 
772 			d = &urb->iso_frame_desc[i];
773 			b = urb->transfer_buffer + d->offset;
774 			length = d->actual_length;
775 
776 			if ((frame = kmalloc(sizeof(struct urb_frame),
777 					     GFP_ATOMIC))) {
778 				unsigned long flags;
779 
780 				memcpy(frame->data, b, length);
781 				frame->length = length;
782 
783 				spin_lock_irqsave(&dec->urb_frame_list_lock,
784 						     flags);
785 				list_add_tail(&frame->urb_frame_list,
786 					      &dec->urb_frame_list);
787 				spin_unlock_irqrestore(&dec->urb_frame_list_lock,
788 						       flags);
789 
790 				tasklet_schedule(&dec->urb_tasklet);
791 			}
792 		}
793 	} else {
794 		 /* -ENOENT is expected when unlinking urbs */
795 		if (urb->status != -ENOENT)
796 			dprintk("%s: urb error: %d\n", __func__,
797 				urb->status);
798 	}
799 
800 	if (dec->iso_stream_count)
801 		usb_submit_urb(urb, GFP_ATOMIC);
802 }
803 
804 static void ttusb_dec_setup_urbs(struct ttusb_dec *dec)
805 {
806 	int i, j, buffer_offset = 0;
807 
808 	dprintk("%s\n", __func__);
809 
810 	for (i = 0; i < ISO_BUF_COUNT; i++) {
811 		int frame_offset = 0;
812 		struct urb *urb = dec->iso_urb[i];
813 
814 		urb->dev = dec->udev;
815 		urb->context = dec;
816 		urb->complete = ttusb_dec_process_urb;
817 		urb->pipe = dec->in_pipe;
818 		urb->transfer_flags = URB_ISO_ASAP;
819 		urb->interval = 1;
820 		urb->number_of_packets = FRAMES_PER_ISO_BUF;
821 		urb->transfer_buffer_length = ISO_FRAME_SIZE *
822 					      FRAMES_PER_ISO_BUF;
823 		urb->transfer_buffer = dec->iso_buffer + buffer_offset;
824 		buffer_offset += ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
825 
826 		for (j = 0; j < FRAMES_PER_ISO_BUF; j++) {
827 			urb->iso_frame_desc[j].offset = frame_offset;
828 			urb->iso_frame_desc[j].length = ISO_FRAME_SIZE;
829 			frame_offset += ISO_FRAME_SIZE;
830 		}
831 	}
832 }
833 
834 static void ttusb_dec_stop_iso_xfer(struct ttusb_dec *dec)
835 {
836 	int i;
837 
838 	dprintk("%s\n", __func__);
839 
840 	if (mutex_lock_interruptible(&dec->iso_mutex))
841 		return;
842 
843 	dec->iso_stream_count--;
844 
845 	if (!dec->iso_stream_count) {
846 		for (i = 0; i < ISO_BUF_COUNT; i++)
847 			usb_kill_urb(dec->iso_urb[i]);
848 	}
849 
850 	mutex_unlock(&dec->iso_mutex);
851 }
852 
853 /* Setting the interface of the DEC tends to take down the USB communications
854  * for a short period, so it's important not to call this function just before
855  * trying to talk to it.
856  */
857 static int ttusb_dec_set_interface(struct ttusb_dec *dec,
858 				   enum ttusb_dec_interface interface)
859 {
860 	int result = 0;
861 	u8 b[] = { 0x05 };
862 
863 	if (interface != dec->interface) {
864 		switch (interface) {
865 		case TTUSB_DEC_INTERFACE_INITIAL:
866 			result = usb_set_interface(dec->udev, 0, 0);
867 			break;
868 		case TTUSB_DEC_INTERFACE_IN:
869 			result = ttusb_dec_send_command(dec, 0x80, sizeof(b),
870 							b, NULL, NULL);
871 			if (result)
872 				return result;
873 			result = usb_set_interface(dec->udev, 0, 8);
874 			break;
875 		case TTUSB_DEC_INTERFACE_OUT:
876 			result = usb_set_interface(dec->udev, 0, 1);
877 			break;
878 		}
879 
880 		if (result)
881 			return result;
882 
883 		dec->interface = interface;
884 	}
885 
886 	return 0;
887 }
888 
889 static int ttusb_dec_start_iso_xfer(struct ttusb_dec *dec)
890 {
891 	int i, result;
892 
893 	dprintk("%s\n", __func__);
894 
895 	if (mutex_lock_interruptible(&dec->iso_mutex))
896 		return -EAGAIN;
897 
898 	if (!dec->iso_stream_count) {
899 		ttusb_dec_setup_urbs(dec);
900 
901 		dec->packet_state = 0;
902 		dec->v_pes_postbytes = 0;
903 		dec->next_packet_id = 0;
904 
905 		for (i = 0; i < ISO_BUF_COUNT; i++) {
906 			if ((result = usb_submit_urb(dec->iso_urb[i],
907 						     GFP_ATOMIC))) {
908 				printk("%s: failed urb submission %d: "
909 				       "error %d\n", __func__, i, result);
910 
911 				while (i) {
912 					usb_kill_urb(dec->iso_urb[i - 1]);
913 					i--;
914 				}
915 
916 				mutex_unlock(&dec->iso_mutex);
917 				return result;
918 			}
919 		}
920 	}
921 
922 	dec->iso_stream_count++;
923 
924 	mutex_unlock(&dec->iso_mutex);
925 
926 	return 0;
927 }
928 
929 static int ttusb_dec_start_ts_feed(struct dvb_demux_feed *dvbdmxfeed)
930 {
931 	struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
932 	struct ttusb_dec *dec = dvbdmx->priv;
933 	u8 b0[] = { 0x05 };
934 	int result = 0;
935 
936 	dprintk("%s\n", __func__);
937 
938 	dprintk("  ts_type:");
939 
940 	if (dvbdmxfeed->ts_type & TS_DECODER)
941 		dprintk(" TS_DECODER");
942 
943 	if (dvbdmxfeed->ts_type & TS_PACKET)
944 		dprintk(" TS_PACKET");
945 
946 	if (dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY)
947 		dprintk(" TS_PAYLOAD_ONLY");
948 
949 	dprintk("\n");
950 
951 	switch (dvbdmxfeed->pes_type) {
952 
953 	case DMX_PES_VIDEO:
954 		dprintk("  pes_type: DMX_PES_VIDEO\n");
955 		dec->pid[DMX_PES_PCR] = dvbdmxfeed->pid;
956 		dec->pid[DMX_PES_VIDEO] = dvbdmxfeed->pid;
957 		dec->video_filter = dvbdmxfeed->filter;
958 		ttusb_dec_set_pids(dec);
959 		break;
960 
961 	case DMX_PES_AUDIO:
962 		dprintk("  pes_type: DMX_PES_AUDIO\n");
963 		dec->pid[DMX_PES_AUDIO] = dvbdmxfeed->pid;
964 		dec->audio_filter = dvbdmxfeed->filter;
965 		ttusb_dec_set_pids(dec);
966 		break;
967 
968 	case DMX_PES_TELETEXT:
969 		dec->pid[DMX_PES_TELETEXT] = dvbdmxfeed->pid;
970 		dprintk("  pes_type: DMX_PES_TELETEXT(not supported)\n");
971 		return -ENOSYS;
972 
973 	case DMX_PES_PCR:
974 		dprintk("  pes_type: DMX_PES_PCR\n");
975 		dec->pid[DMX_PES_PCR] = dvbdmxfeed->pid;
976 		ttusb_dec_set_pids(dec);
977 		break;
978 
979 	case DMX_PES_OTHER:
980 		dprintk("  pes_type: DMX_PES_OTHER(not supported)\n");
981 		return -ENOSYS;
982 
983 	default:
984 		dprintk("  pes_type: unknown (%d)\n", dvbdmxfeed->pes_type);
985 		return -EINVAL;
986 
987 	}
988 
989 	result = ttusb_dec_send_command(dec, 0x80, sizeof(b0), b0, NULL, NULL);
990 	if (result)
991 		return result;
992 
993 	dec->pva_stream_count++;
994 	return ttusb_dec_start_iso_xfer(dec);
995 }
996 
997 static int ttusb_dec_start_sec_feed(struct dvb_demux_feed *dvbdmxfeed)
998 {
999 	struct ttusb_dec *dec = dvbdmxfeed->demux->priv;
1000 	u8 b0[] = { 0x00, 0x00, 0x00, 0x01,
1001 		    0x00, 0x00, 0x00, 0x00,
1002 		    0x00, 0x00, 0x00, 0x00,
1003 		    0x00, 0x00, 0x00, 0x00,
1004 		    0x00, 0xff, 0x00, 0x00,
1005 		    0x00, 0x00, 0x00, 0x00,
1006 		    0x00, 0x00, 0x00, 0x00,
1007 		    0x00 };
1008 	__be16 pid;
1009 	u8 c[COMMAND_PACKET_SIZE];
1010 	int c_length;
1011 	int result;
1012 	struct filter_info *finfo;
1013 	unsigned long flags;
1014 	u8 x = 1;
1015 
1016 	dprintk("%s\n", __func__);
1017 
1018 	pid = htons(dvbdmxfeed->pid);
1019 	memcpy(&b0[0], &pid, 2);
1020 	memcpy(&b0[4], &x, 1);
1021 	memcpy(&b0[5], &dvbdmxfeed->filter->filter.filter_value[0], 1);
1022 
1023 	result = ttusb_dec_send_command(dec, 0x60, sizeof(b0), b0,
1024 					&c_length, c);
1025 
1026 	if (!result) {
1027 		if (c_length == 2) {
1028 			if (!(finfo = kmalloc(sizeof(struct filter_info),
1029 					      GFP_ATOMIC)))
1030 				return -ENOMEM;
1031 
1032 			finfo->stream_id = c[1];
1033 			finfo->filter = dvbdmxfeed->filter;
1034 
1035 			spin_lock_irqsave(&dec->filter_info_list_lock, flags);
1036 			list_add_tail(&finfo->filter_info_list,
1037 				      &dec->filter_info_list);
1038 			spin_unlock_irqrestore(&dec->filter_info_list_lock,
1039 					       flags);
1040 
1041 			dvbdmxfeed->priv = finfo;
1042 
1043 			dec->filter_stream_count++;
1044 			return ttusb_dec_start_iso_xfer(dec);
1045 		}
1046 
1047 		return -EAGAIN;
1048 	} else
1049 		return result;
1050 }
1051 
1052 static int ttusb_dec_start_feed(struct dvb_demux_feed *dvbdmxfeed)
1053 {
1054 	struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
1055 
1056 	dprintk("%s\n", __func__);
1057 
1058 	if (!dvbdmx->dmx.frontend)
1059 		return -EINVAL;
1060 
1061 	dprintk("  pid: 0x%04X\n", dvbdmxfeed->pid);
1062 
1063 	switch (dvbdmxfeed->type) {
1064 
1065 	case DMX_TYPE_TS:
1066 		return ttusb_dec_start_ts_feed(dvbdmxfeed);
1067 		break;
1068 
1069 	case DMX_TYPE_SEC:
1070 		return ttusb_dec_start_sec_feed(dvbdmxfeed);
1071 		break;
1072 
1073 	default:
1074 		dprintk("  type: unknown (%d)\n", dvbdmxfeed->type);
1075 		return -EINVAL;
1076 
1077 	}
1078 }
1079 
1080 static int ttusb_dec_stop_ts_feed(struct dvb_demux_feed *dvbdmxfeed)
1081 {
1082 	struct ttusb_dec *dec = dvbdmxfeed->demux->priv;
1083 	u8 b0[] = { 0x00 };
1084 
1085 	ttusb_dec_send_command(dec, 0x81, sizeof(b0), b0, NULL, NULL);
1086 
1087 	dec->pva_stream_count--;
1088 
1089 	ttusb_dec_stop_iso_xfer(dec);
1090 
1091 	return 0;
1092 }
1093 
1094 static int ttusb_dec_stop_sec_feed(struct dvb_demux_feed *dvbdmxfeed)
1095 {
1096 	struct ttusb_dec *dec = dvbdmxfeed->demux->priv;
1097 	u8 b0[] = { 0x00, 0x00 };
1098 	struct filter_info *finfo = (struct filter_info *)dvbdmxfeed->priv;
1099 	unsigned long flags;
1100 
1101 	b0[1] = finfo->stream_id;
1102 	spin_lock_irqsave(&dec->filter_info_list_lock, flags);
1103 	list_del(&finfo->filter_info_list);
1104 	spin_unlock_irqrestore(&dec->filter_info_list_lock, flags);
1105 	kfree(finfo);
1106 	ttusb_dec_send_command(dec, 0x62, sizeof(b0), b0, NULL, NULL);
1107 
1108 	dec->filter_stream_count--;
1109 
1110 	ttusb_dec_stop_iso_xfer(dec);
1111 
1112 	return 0;
1113 }
1114 
1115 static int ttusb_dec_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
1116 {
1117 	dprintk("%s\n", __func__);
1118 
1119 	switch (dvbdmxfeed->type) {
1120 	case DMX_TYPE_TS:
1121 		return ttusb_dec_stop_ts_feed(dvbdmxfeed);
1122 		break;
1123 
1124 	case DMX_TYPE_SEC:
1125 		return ttusb_dec_stop_sec_feed(dvbdmxfeed);
1126 		break;
1127 	}
1128 
1129 	return 0;
1130 }
1131 
1132 static void ttusb_dec_free_iso_urbs(struct ttusb_dec *dec)
1133 {
1134 	int i;
1135 
1136 	dprintk("%s\n", __func__);
1137 
1138 	for (i = 0; i < ISO_BUF_COUNT; i++)
1139 		usb_free_urb(dec->iso_urb[i]);
1140 
1141 	pci_free_consistent(NULL,
1142 			    ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF *
1143 					      ISO_BUF_COUNT),
1144 			    dec->iso_buffer, dec->iso_dma_handle);
1145 }
1146 
1147 static int ttusb_dec_alloc_iso_urbs(struct ttusb_dec *dec)
1148 {
1149 	int i;
1150 
1151 	dprintk("%s\n", __func__);
1152 
1153 	dec->iso_buffer = pci_zalloc_consistent(NULL,
1154 						ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF * ISO_BUF_COUNT),
1155 						&dec->iso_dma_handle);
1156 
1157 	if (!dec->iso_buffer) {
1158 		dprintk("%s: pci_alloc_consistent - not enough memory\n",
1159 			__func__);
1160 		return -ENOMEM;
1161 	}
1162 
1163 	for (i = 0; i < ISO_BUF_COUNT; i++) {
1164 		struct urb *urb;
1165 
1166 		if (!(urb = usb_alloc_urb(FRAMES_PER_ISO_BUF, GFP_ATOMIC))) {
1167 			ttusb_dec_free_iso_urbs(dec);
1168 			return -ENOMEM;
1169 		}
1170 
1171 		dec->iso_urb[i] = urb;
1172 	}
1173 
1174 	ttusb_dec_setup_urbs(dec);
1175 
1176 	return 0;
1177 }
1178 
1179 static void ttusb_dec_init_tasklet(struct ttusb_dec *dec)
1180 {
1181 	spin_lock_init(&dec->urb_frame_list_lock);
1182 	INIT_LIST_HEAD(&dec->urb_frame_list);
1183 	tasklet_init(&dec->urb_tasklet, ttusb_dec_process_urb_frame_list,
1184 		     (unsigned long)dec);
1185 }
1186 
1187 static int ttusb_init_rc( struct ttusb_dec *dec)
1188 {
1189 	struct input_dev *input_dev;
1190 	u8 b[] = { 0x00, 0x01 };
1191 	int i;
1192 	int err;
1193 
1194 	usb_make_path(dec->udev, dec->rc_phys, sizeof(dec->rc_phys));
1195 	strlcat(dec->rc_phys, "/input0", sizeof(dec->rc_phys));
1196 
1197 	input_dev = input_allocate_device();
1198 	if (!input_dev)
1199 		return -ENOMEM;
1200 
1201 	input_dev->name = "ttusb_dec remote control";
1202 	input_dev->phys = dec->rc_phys;
1203 	input_dev->evbit[0] = BIT_MASK(EV_KEY);
1204 	input_dev->keycodesize = sizeof(u16);
1205 	input_dev->keycodemax = 0x1a;
1206 	input_dev->keycode = rc_keys;
1207 
1208 	for (i = 0; i < ARRAY_SIZE(rc_keys); i++)
1209 		  set_bit(rc_keys[i], input_dev->keybit);
1210 
1211 	err = input_register_device(input_dev);
1212 	if (err) {
1213 		input_free_device(input_dev);
1214 		return err;
1215 	}
1216 
1217 	dec->rc_input_dev = input_dev;
1218 	if (usb_submit_urb(dec->irq_urb, GFP_KERNEL))
1219 		printk("%s: usb_submit_urb failed\n",__func__);
1220 	/* enable irq pipe */
1221 	ttusb_dec_send_command(dec,0xb0,sizeof(b),b,NULL,NULL);
1222 
1223 	return 0;
1224 }
1225 
1226 static void ttusb_dec_init_v_pes(struct ttusb_dec *dec)
1227 {
1228 	dprintk("%s\n", __func__);
1229 
1230 	dec->v_pes[0] = 0x00;
1231 	dec->v_pes[1] = 0x00;
1232 	dec->v_pes[2] = 0x01;
1233 	dec->v_pes[3] = 0xe0;
1234 }
1235 
1236 static int ttusb_dec_init_usb(struct ttusb_dec *dec)
1237 {
1238 	int result;
1239 
1240 	dprintk("%s\n", __func__);
1241 
1242 	mutex_init(&dec->usb_mutex);
1243 	mutex_init(&dec->iso_mutex);
1244 
1245 	dec->command_pipe = usb_sndbulkpipe(dec->udev, COMMAND_PIPE);
1246 	dec->result_pipe = usb_rcvbulkpipe(dec->udev, RESULT_PIPE);
1247 	dec->in_pipe = usb_rcvisocpipe(dec->udev, IN_PIPE);
1248 	dec->out_pipe = usb_sndisocpipe(dec->udev, OUT_PIPE);
1249 	dec->irq_pipe = usb_rcvintpipe(dec->udev, IRQ_PIPE);
1250 
1251 	if(enable_rc) {
1252 		dec->irq_urb = usb_alloc_urb(0, GFP_KERNEL);
1253 		if(!dec->irq_urb) {
1254 			return -ENOMEM;
1255 		}
1256 		dec->irq_buffer = usb_alloc_coherent(dec->udev,IRQ_PACKET_SIZE,
1257 					GFP_KERNEL, &dec->irq_dma_handle);
1258 		if(!dec->irq_buffer) {
1259 			usb_free_urb(dec->irq_urb);
1260 			return -ENOMEM;
1261 		}
1262 		usb_fill_int_urb(dec->irq_urb, dec->udev,dec->irq_pipe,
1263 				 dec->irq_buffer, IRQ_PACKET_SIZE,
1264 				 ttusb_dec_handle_irq, dec, 1);
1265 		dec->irq_urb->transfer_dma = dec->irq_dma_handle;
1266 		dec->irq_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1267 	}
1268 
1269 	result = ttusb_dec_alloc_iso_urbs(dec);
1270 	if (result) {
1271 		usb_free_urb(dec->irq_urb);
1272 		usb_free_coherent(dec->udev, IRQ_PACKET_SIZE,
1273 				  dec->irq_buffer, dec->irq_dma_handle);
1274 	}
1275 	return result;
1276 }
1277 
1278 static int ttusb_dec_boot_dsp(struct ttusb_dec *dec)
1279 {
1280 	int i, j, actual_len, result, size, trans_count;
1281 	u8 b0[] = { 0x00, 0x00, 0x00, 0x00,
1282 		    0x00, 0x00, 0x00, 0x00,
1283 		    0x61, 0x00 };
1284 	u8 b1[] = { 0x61 };
1285 	u8 *b;
1286 	char idstring[21];
1287 	const u8 *firmware = NULL;
1288 	size_t firmware_size = 0;
1289 	u16 firmware_csum = 0;
1290 	__be16 firmware_csum_ns;
1291 	__be32 firmware_size_nl;
1292 	u32 crc32_csum, crc32_check;
1293 	__be32 tmp;
1294 	const struct firmware *fw_entry = NULL;
1295 
1296 	dprintk("%s\n", __func__);
1297 
1298 	result = request_firmware(&fw_entry, dec->firmware_name, &dec->udev->dev);
1299 	if (result) {
1300 		printk(KERN_ERR "%s: Firmware (%s) unavailable.\n",
1301 		       __func__, dec->firmware_name);
1302 		return result;
1303 	}
1304 
1305 	firmware = fw_entry->data;
1306 	firmware_size = fw_entry->size;
1307 
1308 	if (firmware_size < 60) {
1309 		printk("%s: firmware size too small for DSP code (%zu < 60).\n",
1310 			__func__, firmware_size);
1311 		release_firmware(fw_entry);
1312 		return -ENOENT;
1313 	}
1314 
1315 	/* a 32 bit checksum over the first 56 bytes of the DSP Code is stored
1316 	   at offset 56 of file, so use it to check if the firmware file is
1317 	   valid. */
1318 	crc32_csum = crc32(~0L, firmware, 56) ^ ~0L;
1319 	memcpy(&tmp, &firmware[56], 4);
1320 	crc32_check = ntohl(tmp);
1321 	if (crc32_csum != crc32_check) {
1322 		printk("%s: crc32 check of DSP code failed (calculated "
1323 		       "0x%08x != 0x%08x in file), file invalid.\n",
1324 			__func__, crc32_csum, crc32_check);
1325 		release_firmware(fw_entry);
1326 		return -ENOENT;
1327 	}
1328 	memcpy(idstring, &firmware[36], 20);
1329 	idstring[20] = '\0';
1330 	printk(KERN_INFO "ttusb_dec: found DSP code \"%s\".\n", idstring);
1331 
1332 	firmware_size_nl = htonl(firmware_size);
1333 	memcpy(b0, &firmware_size_nl, 4);
1334 	firmware_csum = crc16(~0, firmware, firmware_size) ^ ~0;
1335 	firmware_csum_ns = htons(firmware_csum);
1336 	memcpy(&b0[6], &firmware_csum_ns, 2);
1337 
1338 	result = ttusb_dec_send_command(dec, 0x41, sizeof(b0), b0, NULL, NULL);
1339 
1340 	if (result) {
1341 		release_firmware(fw_entry);
1342 		return result;
1343 	}
1344 
1345 	trans_count = 0;
1346 	j = 0;
1347 
1348 	b = kmalloc(ARM_PACKET_SIZE, GFP_KERNEL);
1349 	if (b == NULL) {
1350 		release_firmware(fw_entry);
1351 		return -ENOMEM;
1352 	}
1353 
1354 	for (i = 0; i < firmware_size; i += COMMAND_PACKET_SIZE) {
1355 		size = firmware_size - i;
1356 		if (size > COMMAND_PACKET_SIZE)
1357 			size = COMMAND_PACKET_SIZE;
1358 
1359 		b[j + 0] = 0xaa;
1360 		b[j + 1] = trans_count++;
1361 		b[j + 2] = 0xf0;
1362 		b[j + 3] = size;
1363 		memcpy(&b[j + 4], &firmware[i], size);
1364 
1365 		j += COMMAND_PACKET_SIZE + 4;
1366 
1367 		if (j >= ARM_PACKET_SIZE) {
1368 			result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
1369 					      ARM_PACKET_SIZE, &actual_len,
1370 					      100);
1371 			j = 0;
1372 		} else if (size < COMMAND_PACKET_SIZE) {
1373 			result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
1374 					      j - COMMAND_PACKET_SIZE + size,
1375 					      &actual_len, 100);
1376 		}
1377 	}
1378 
1379 	result = ttusb_dec_send_command(dec, 0x43, sizeof(b1), b1, NULL, NULL);
1380 
1381 	release_firmware(fw_entry);
1382 	kfree(b);
1383 
1384 	return result;
1385 }
1386 
1387 static int ttusb_dec_init_stb(struct ttusb_dec *dec)
1388 {
1389 	int result;
1390 	unsigned int mode = 0, model = 0, version = 0;
1391 
1392 	dprintk("%s\n", __func__);
1393 
1394 	result = ttusb_dec_get_stb_state(dec, &mode, &model, &version);
1395 	if (result)
1396 		return result;
1397 
1398 	if (!mode) {
1399 		if (version == 0xABCDEFAB)
1400 			printk(KERN_INFO "ttusb_dec: no version "
1401 			       "info in Firmware\n");
1402 		else
1403 			printk(KERN_INFO "ttusb_dec: Firmware "
1404 			       "%x.%02x%c%c\n",
1405 			       version >> 24, (version >> 16) & 0xff,
1406 			       (version >> 8) & 0xff, version & 0xff);
1407 
1408 		result = ttusb_dec_boot_dsp(dec);
1409 		if (result)
1410 			return result;
1411 	} else {
1412 		/* We can't trust the USB IDs that some firmwares
1413 		   give the box */
1414 		switch (model) {
1415 		case 0x00070001:
1416 		case 0x00070008:
1417 		case 0x0007000c:
1418 			ttusb_dec_set_model(dec, TTUSB_DEC3000S);
1419 			break;
1420 		case 0x00070009:
1421 		case 0x00070013:
1422 			ttusb_dec_set_model(dec, TTUSB_DEC2000T);
1423 			break;
1424 		case 0x00070011:
1425 			ttusb_dec_set_model(dec, TTUSB_DEC2540T);
1426 			break;
1427 		default:
1428 			printk(KERN_ERR "%s: unknown model returned "
1429 			       "by firmware (%08x) - please report\n",
1430 			       __func__, model);
1431 			return -ENOENT;
1432 		}
1433 		if (version >= 0x01770000)
1434 			dec->can_playback = 1;
1435 	}
1436 	return 0;
1437 }
1438 
1439 static int ttusb_dec_init_dvb(struct ttusb_dec *dec)
1440 {
1441 	int result;
1442 
1443 	dprintk("%s\n", __func__);
1444 
1445 	if ((result = dvb_register_adapter(&dec->adapter,
1446 					   dec->model_name, THIS_MODULE,
1447 					   &dec->udev->dev,
1448 					   adapter_nr)) < 0) {
1449 		printk("%s: dvb_register_adapter failed: error %d\n",
1450 		       __func__, result);
1451 
1452 		return result;
1453 	}
1454 
1455 	dec->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING;
1456 
1457 	dec->demux.priv = (void *)dec;
1458 	dec->demux.filternum = 31;
1459 	dec->demux.feednum = 31;
1460 	dec->demux.start_feed = ttusb_dec_start_feed;
1461 	dec->demux.stop_feed = ttusb_dec_stop_feed;
1462 	dec->demux.write_to_decoder = NULL;
1463 
1464 	if ((result = dvb_dmx_init(&dec->demux)) < 0) {
1465 		printk("%s: dvb_dmx_init failed: error %d\n", __func__,
1466 		       result);
1467 
1468 		dvb_unregister_adapter(&dec->adapter);
1469 
1470 		return result;
1471 	}
1472 
1473 	dec->dmxdev.filternum = 32;
1474 	dec->dmxdev.demux = &dec->demux.dmx;
1475 	dec->dmxdev.capabilities = 0;
1476 
1477 	if ((result = dvb_dmxdev_init(&dec->dmxdev, &dec->adapter)) < 0) {
1478 		printk("%s: dvb_dmxdev_init failed: error %d\n",
1479 		       __func__, result);
1480 
1481 		dvb_dmx_release(&dec->demux);
1482 		dvb_unregister_adapter(&dec->adapter);
1483 
1484 		return result;
1485 	}
1486 
1487 	dec->frontend.source = DMX_FRONTEND_0;
1488 
1489 	if ((result = dec->demux.dmx.add_frontend(&dec->demux.dmx,
1490 						  &dec->frontend)) < 0) {
1491 		printk("%s: dvb_dmx_init failed: error %d\n", __func__,
1492 		       result);
1493 
1494 		dvb_dmxdev_release(&dec->dmxdev);
1495 		dvb_dmx_release(&dec->demux);
1496 		dvb_unregister_adapter(&dec->adapter);
1497 
1498 		return result;
1499 	}
1500 
1501 	if ((result = dec->demux.dmx.connect_frontend(&dec->demux.dmx,
1502 						      &dec->frontend)) < 0) {
1503 		printk("%s: dvb_dmx_init failed: error %d\n", __func__,
1504 		       result);
1505 
1506 		dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend);
1507 		dvb_dmxdev_release(&dec->dmxdev);
1508 		dvb_dmx_release(&dec->demux);
1509 		dvb_unregister_adapter(&dec->adapter);
1510 
1511 		return result;
1512 	}
1513 
1514 	dvb_net_init(&dec->adapter, &dec->dvb_net, &dec->demux.dmx);
1515 
1516 	return 0;
1517 }
1518 
1519 static void ttusb_dec_exit_dvb(struct ttusb_dec *dec)
1520 {
1521 	dprintk("%s\n", __func__);
1522 
1523 	dvb_net_release(&dec->dvb_net);
1524 	dec->demux.dmx.close(&dec->demux.dmx);
1525 	dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend);
1526 	dvb_dmxdev_release(&dec->dmxdev);
1527 	dvb_dmx_release(&dec->demux);
1528 	if (dec->fe) {
1529 		dvb_unregister_frontend(dec->fe);
1530 		if (dec->fe->ops.release)
1531 			dec->fe->ops.release(dec->fe);
1532 	}
1533 	dvb_unregister_adapter(&dec->adapter);
1534 }
1535 
1536 static void ttusb_dec_exit_rc(struct ttusb_dec *dec)
1537 {
1538 	dprintk("%s\n", __func__);
1539 
1540 	if (dec->rc_input_dev) {
1541 		input_unregister_device(dec->rc_input_dev);
1542 		dec->rc_input_dev = NULL;
1543 	}
1544 }
1545 
1546 
1547 static void ttusb_dec_exit_usb(struct ttusb_dec *dec)
1548 {
1549 	int i;
1550 
1551 	dprintk("%s\n", __func__);
1552 
1553 	if (enable_rc) {
1554 		/* we have to check whether the irq URB is already submitted.
1555 		 * As the irq is submitted after the interface is changed,
1556 		 * this is the best method i figured out.
1557 		 * Any others?*/
1558 		if (dec->interface == TTUSB_DEC_INTERFACE_IN)
1559 			usb_kill_urb(dec->irq_urb);
1560 
1561 		usb_free_urb(dec->irq_urb);
1562 
1563 		usb_free_coherent(dec->udev, IRQ_PACKET_SIZE,
1564 				  dec->irq_buffer, dec->irq_dma_handle);
1565 	}
1566 
1567 	dec->iso_stream_count = 0;
1568 
1569 	for (i = 0; i < ISO_BUF_COUNT; i++)
1570 		usb_kill_urb(dec->iso_urb[i]);
1571 
1572 	ttusb_dec_free_iso_urbs(dec);
1573 }
1574 
1575 static void ttusb_dec_exit_tasklet(struct ttusb_dec *dec)
1576 {
1577 	struct list_head *item;
1578 	struct urb_frame *frame;
1579 
1580 	tasklet_kill(&dec->urb_tasklet);
1581 
1582 	while ((item = dec->urb_frame_list.next) != &dec->urb_frame_list) {
1583 		frame = list_entry(item, struct urb_frame, urb_frame_list);
1584 		list_del(&frame->urb_frame_list);
1585 		kfree(frame);
1586 	}
1587 }
1588 
1589 static void ttusb_dec_init_filters(struct ttusb_dec *dec)
1590 {
1591 	INIT_LIST_HEAD(&dec->filter_info_list);
1592 	spin_lock_init(&dec->filter_info_list_lock);
1593 }
1594 
1595 static void ttusb_dec_exit_filters(struct ttusb_dec *dec)
1596 {
1597 	struct list_head *item;
1598 	struct filter_info *finfo;
1599 
1600 	while ((item = dec->filter_info_list.next) != &dec->filter_info_list) {
1601 		finfo = list_entry(item, struct filter_info, filter_info_list);
1602 		list_del(&finfo->filter_info_list);
1603 		kfree(finfo);
1604 	}
1605 }
1606 
1607 static int fe_send_command(struct dvb_frontend* fe, const u8 command,
1608 			   int param_length, const u8 params[],
1609 			   int *result_length, u8 cmd_result[])
1610 {
1611 	struct ttusb_dec* dec = fe->dvb->priv;
1612 	return ttusb_dec_send_command(dec, command, param_length, params, result_length, cmd_result);
1613 }
1614 
1615 static const struct ttusbdecfe_config fe_config = {
1616 	.send_command = fe_send_command
1617 };
1618 
1619 static int ttusb_dec_probe(struct usb_interface *intf,
1620 			   const struct usb_device_id *id)
1621 {
1622 	struct usb_device *udev;
1623 	struct ttusb_dec *dec;
1624 	int result;
1625 
1626 	dprintk("%s\n", __func__);
1627 
1628 	udev = interface_to_usbdev(intf);
1629 
1630 	if (!(dec = kzalloc(sizeof(struct ttusb_dec), GFP_KERNEL))) {
1631 		printk("%s: couldn't allocate memory.\n", __func__);
1632 		return -ENOMEM;
1633 	}
1634 
1635 	usb_set_intfdata(intf, (void *)dec);
1636 
1637 	switch (id->idProduct) {
1638 	case 0x1006:
1639 		ttusb_dec_set_model(dec, TTUSB_DEC3000S);
1640 		break;
1641 
1642 	case 0x1008:
1643 		ttusb_dec_set_model(dec, TTUSB_DEC2000T);
1644 		break;
1645 
1646 	case 0x1009:
1647 		ttusb_dec_set_model(dec, TTUSB_DEC2540T);
1648 		break;
1649 	}
1650 
1651 	dec->udev = udev;
1652 
1653 	result = ttusb_dec_init_usb(dec);
1654 	if (result)
1655 		goto err_usb;
1656 	result = ttusb_dec_init_stb(dec);
1657 	if (result)
1658 		goto err_stb;
1659 	result = ttusb_dec_init_dvb(dec);
1660 	if (result)
1661 		goto err_stb;
1662 
1663 	dec->adapter.priv = dec;
1664 	switch (id->idProduct) {
1665 	case 0x1006:
1666 		dec->fe = ttusbdecfe_dvbs_attach(&fe_config);
1667 		break;
1668 
1669 	case 0x1008:
1670 	case 0x1009:
1671 		dec->fe = ttusbdecfe_dvbt_attach(&fe_config);
1672 		break;
1673 	}
1674 
1675 	if (dec->fe == NULL) {
1676 		printk("dvb-ttusb-dec: A frontend driver was not found for device [%04x:%04x]\n",
1677 		       le16_to_cpu(dec->udev->descriptor.idVendor),
1678 		       le16_to_cpu(dec->udev->descriptor.idProduct));
1679 	} else {
1680 		if (dvb_register_frontend(&dec->adapter, dec->fe)) {
1681 			printk("budget-ci: Frontend registration failed!\n");
1682 			if (dec->fe->ops.release)
1683 				dec->fe->ops.release(dec->fe);
1684 			dec->fe = NULL;
1685 		}
1686 	}
1687 
1688 	ttusb_dec_init_v_pes(dec);
1689 	ttusb_dec_init_filters(dec);
1690 	ttusb_dec_init_tasklet(dec);
1691 
1692 	dec->active = 1;
1693 
1694 	ttusb_dec_set_interface(dec, TTUSB_DEC_INTERFACE_IN);
1695 
1696 	if (enable_rc)
1697 		ttusb_init_rc(dec);
1698 
1699 	return 0;
1700 err_stb:
1701 	ttusb_dec_exit_usb(dec);
1702 err_usb:
1703 	kfree(dec);
1704 	return result;
1705 }
1706 
1707 static void ttusb_dec_disconnect(struct usb_interface *intf)
1708 {
1709 	struct ttusb_dec *dec = usb_get_intfdata(intf);
1710 
1711 	usb_set_intfdata(intf, NULL);
1712 
1713 	dprintk("%s\n", __func__);
1714 
1715 	if (dec->active) {
1716 		ttusb_dec_exit_tasklet(dec);
1717 		ttusb_dec_exit_filters(dec);
1718 		if(enable_rc)
1719 			ttusb_dec_exit_rc(dec);
1720 		ttusb_dec_exit_usb(dec);
1721 		ttusb_dec_exit_dvb(dec);
1722 	}
1723 
1724 	kfree(dec);
1725 }
1726 
1727 static void ttusb_dec_set_model(struct ttusb_dec *dec,
1728 				enum ttusb_dec_model model)
1729 {
1730 	dec->model = model;
1731 
1732 	switch (model) {
1733 	case TTUSB_DEC2000T:
1734 		dec->model_name = "DEC2000-t";
1735 		dec->firmware_name = "dvb-ttusb-dec-2000t.fw";
1736 		break;
1737 
1738 	case TTUSB_DEC2540T:
1739 		dec->model_name = "DEC2540-t";
1740 		dec->firmware_name = "dvb-ttusb-dec-2540t.fw";
1741 		break;
1742 
1743 	case TTUSB_DEC3000S:
1744 		dec->model_name = "DEC3000-s";
1745 		dec->firmware_name = "dvb-ttusb-dec-3000s.fw";
1746 		break;
1747 	}
1748 }
1749 
1750 static struct usb_device_id ttusb_dec_table[] = {
1751 	{USB_DEVICE(0x0b48, 0x1006)},	/* DEC3000-s */
1752 	/*{USB_DEVICE(0x0b48, 0x1007)},	   Unconfirmed */
1753 	{USB_DEVICE(0x0b48, 0x1008)},	/* DEC2000-t */
1754 	{USB_DEVICE(0x0b48, 0x1009)},	/* DEC2540-t */
1755 	{}
1756 };
1757 
1758 static struct usb_driver ttusb_dec_driver = {
1759 	.name		= "ttusb-dec",
1760 	.probe		= ttusb_dec_probe,
1761 	.disconnect	= ttusb_dec_disconnect,
1762 	.id_table	= ttusb_dec_table,
1763 };
1764 
1765 module_usb_driver(ttusb_dec_driver);
1766 
1767 MODULE_AUTHOR("Alex Woods <linux-dvb@giblets.org>");
1768 MODULE_DESCRIPTION(DRIVER_NAME);
1769 MODULE_LICENSE("GPL");
1770 MODULE_DEVICE_TABLE(usb, ttusb_dec_table);
1771