4 * Copyright (C) 2003-2004 Alex Woods <linux-dvb@giblets.org>
5 * IR support by Peter Beutner <p.beutner@gmx.net>
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.
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.
19 #include <linux/list.h>
20 #include <linux/module.h>
21 #include <linux/pci.h>
22 #include <linux/slab.h>
23 #include <linux/spinlock.h>
24 #include <linux/usb.h>
25 #include <linux/interrupt.h>
26 #include <linux/firmware.h>
27 #include <linux/crc32.h>
28 #include <linux/init.h>
29 #include <linux/input.h>
31 #include <linux/mutex.h>
34 #include "dvb_demux.h"
35 #include "dvb_frontend.h"
37 #include "ttusbdecfe.h"
40 static int output_pva
;
43 module_param(debug
, int, 0644);
44 MODULE_PARM_DESC(debug
, "Turn on/off debugging (default:off).");
45 module_param(output_pva
, int, 0444);
46 MODULE_PARM_DESC(output_pva
, "Output PVA from dvr device (default:off)");
47 module_param(enable_rc
, int, 0644);
48 MODULE_PARM_DESC(enable_rc
, "Turn on/off IR remote control(default: off)");
50 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr
);
52 #define dprintk if (debug) printk
54 #define DRIVER_NAME "TechnoTrend/Hauppauge DEC USB"
56 #define COMMAND_PIPE 0x03
57 #define RESULT_PIPE 0x04
62 #define COMMAND_PACKET_SIZE 0x3c
63 #define ARM_PACKET_SIZE 0x1000
64 #define IRQ_PACKET_SIZE 0x8
66 #define ISO_BUF_COUNT 0x04
67 #define FRAMES_PER_ISO_BUF 0x04
68 #define ISO_FRAME_SIZE 0x0380
70 #define MAX_PVA_LENGTH 6144
72 enum ttusb_dec_model
{
78 enum ttusb_dec_packet_type
{
80 TTUSB_DEC_PACKET_SECTION
,
81 TTUSB_DEC_PACKET_EMPTY
84 enum ttusb_dec_interface
{
85 TTUSB_DEC_INTERFACE_INITIAL
,
86 TTUSB_DEC_INTERFACE_IN
,
87 TTUSB_DEC_INTERFACE_OUT
90 typedef int (dvb_filter_pes2ts_cb_t
) (void *, unsigned char *);
92 struct dvb_filter_pes2ts
{
93 unsigned char buf
[188];
95 dvb_filter_pes2ts_cb_t
*cb
;
100 enum ttusb_dec_model model
;
106 struct dvb_adapter adapter
;
107 struct dmxdev dmxdev
;
108 struct dvb_demux demux
;
109 struct dmx_frontend frontend
;
110 struct dvb_net dvb_net
;
111 struct dvb_frontend
* fe
;
113 u16 pid
[DMX_PES_OTHER
];
116 struct usb_device
*udev
;
118 unsigned int command_pipe
;
119 unsigned int result_pipe
;
120 unsigned int in_pipe
;
121 unsigned int out_pipe
;
122 unsigned int irq_pipe
;
123 enum ttusb_dec_interface interface
;
124 struct mutex usb_mutex
;
128 dma_addr_t irq_dma_handle
;
130 dma_addr_t iso_dma_handle
;
131 struct urb
*iso_urb
[ISO_BUF_COUNT
];
132 int iso_stream_count
;
133 struct mutex iso_mutex
;
135 u8 packet
[MAX_PVA_LENGTH
+ 4];
136 enum ttusb_dec_packet_type packet_type
;
139 int packet_payload_length
;
142 int pva_stream_count
;
143 int filter_stream_count
;
145 struct dvb_filter_pes2ts a_pes2ts
;
146 struct dvb_filter_pes2ts v_pes2ts
;
148 u8 v_pes
[16 + MAX_PVA_LENGTH
];
152 struct list_head urb_frame_list
;
153 struct tasklet_struct urb_tasklet
;
154 spinlock_t urb_frame_list_lock
;
156 struct dvb_demux_filter
*audio_filter
;
157 struct dvb_demux_filter
*video_filter
;
158 struct list_head filter_info_list
;
159 spinlock_t filter_info_list_lock
;
161 struct input_dev
*rc_input_dev
;
164 int active
; /* Loaded successfully */
168 u8 data
[ISO_FRAME_SIZE
];
170 struct list_head urb_frame_list
;
175 struct dvb_demux_filter
*filter
;
176 struct list_head filter_info_list
;
179 static u16 rc_keys
[] = {
208 static void dvb_filter_pes2ts_init(struct dvb_filter_pes2ts
*p2ts
,
210 dvb_filter_pes2ts_cb_t
*cb
, void *priv
)
212 unsigned char *buf
=p2ts
->buf
;
222 static int dvb_filter_pes2ts(struct dvb_filter_pes2ts
*p2ts
,
223 unsigned char *pes
, int len
, int payload_start
)
225 unsigned char *buf
=p2ts
->buf
;
228 //len=6+((pes[4]<<8)|pes[5]);
235 buf
[3]=0x10|((p2ts
->cc
++)&0x0f);
236 memcpy(buf
+4, pes
, 184);
237 if ((ret
=p2ts
->cb(p2ts
->priv
, buf
)))
244 buf
[3]=0x30|((p2ts
->cc
++)&0x0f);
249 memset(buf
+6, 0xff, rest
-1);
252 memcpy(buf
+5+rest
, pes
, len
);
253 return p2ts
->cb(p2ts
->priv
, buf
);
256 static void ttusb_dec_set_model(struct ttusb_dec
*dec
,
257 enum ttusb_dec_model model
);
259 static void ttusb_dec_handle_irq( struct urb
*urb
)
261 struct ttusb_dec
*dec
= urb
->context
;
262 char *buffer
= dec
->irq_buffer
;
265 switch(urb
->status
) {
272 /* this urb is dead, cleanup */
273 dprintk("%s:urb shutting down with status: %d\n",
274 __func__
, urb
->status
);
277 dprintk("%s:nonzero status received: %d\n",
278 __func__
,urb
->status
);
282 if ((buffer
[0] == 0x1) && (buffer
[2] == 0x15)) {
286 * this is an fact a bit too simple implementation;
287 * the box also reports a keyrepeat signal
288 * (with buffer[3] == 0x40) in an intervall of ~100ms.
289 * But to handle this correctly we had to imlemenent some
290 * kind of timer which signals a 'key up' event if no
291 * keyrepeat signal is received for lets say 200ms.
292 * this should/could be added later ...
293 * for now lets report each signal as a key down and up
295 if (buffer
[4] - 1 < ARRAY_SIZE(rc_keys
)) {
296 dprintk("%s:rc signal:%d\n", __func__
, buffer
[4]);
297 input_report_key(dec
->rc_input_dev
, rc_keys
[buffer
[4] - 1], 1);
298 input_sync(dec
->rc_input_dev
);
299 input_report_key(dec
->rc_input_dev
, rc_keys
[buffer
[4] - 1], 0);
300 input_sync(dec
->rc_input_dev
);
305 retval
= usb_submit_urb(urb
, GFP_ATOMIC
);
307 printk("%s - usb_commit_urb failed with result: %d\n",
311 static u16
crc16(u16 crc
, const u8
*buf
, size_t len
)
319 crc
^= (tmp
^ (tmp
<< 1)) << 4;
324 static int ttusb_dec_send_command(struct ttusb_dec
*dec
, const u8 command
,
325 int param_length
, const u8 params
[],
326 int *result_length
, u8 cmd_result
[])
328 int result
, actual_len
;
331 dprintk("%s\n", __func__
);
333 b
= kmalloc(COMMAND_PACKET_SIZE
+ 4, GFP_KERNEL
);
337 if ((result
= mutex_lock_interruptible(&dec
->usb_mutex
))) {
339 printk("%s: Failed to lock usb mutex.\n", __func__
);
344 b
[1] = ++dec
->trans_count
;
349 memcpy(&b
[4], params
, param_length
);
352 printk(KERN_DEBUG
"%s: command: %*ph\n",
353 __func__
, param_length
, b
);
356 result
= usb_bulk_msg(dec
->udev
, dec
->command_pipe
, b
,
357 COMMAND_PACKET_SIZE
+ 4, &actual_len
, 1000);
360 printk("%s: command bulk message failed: error %d\n",
362 mutex_unlock(&dec
->usb_mutex
);
367 result
= usb_bulk_msg(dec
->udev
, dec
->result_pipe
, b
,
368 COMMAND_PACKET_SIZE
+ 4, &actual_len
, 1000);
371 printk("%s: result bulk message failed: error %d\n",
373 mutex_unlock(&dec
->usb_mutex
);
378 printk(KERN_DEBUG
"%s: result: %*ph\n",
379 __func__
, actual_len
, b
);
383 *result_length
= b
[3];
384 if (cmd_result
&& b
[3] > 0)
385 memcpy(cmd_result
, &b
[4], b
[3]);
387 mutex_unlock(&dec
->usb_mutex
);
394 static int ttusb_dec_get_stb_state (struct ttusb_dec
*dec
, unsigned int *mode
,
395 unsigned int *model
, unsigned int *version
)
397 u8 c
[COMMAND_PACKET_SIZE
];
402 dprintk("%s\n", __func__
);
404 result
= ttusb_dec_send_command(dec
, 0x08, 0, NULL
, &c_length
, c
);
408 if (c_length
>= 0x0c) {
414 memcpy(&tmp
, &c
[4], 4);
417 if (version
!= NULL
) {
418 memcpy(&tmp
, &c
[8], 4);
419 *version
= ntohl(tmp
);
427 static int ttusb_dec_audio_pes2ts_cb(void *priv
, unsigned char *data
)
429 struct ttusb_dec
*dec
= priv
;
431 dec
->audio_filter
->feed
->cb
.ts(data
, 188, NULL
, 0,
432 &dec
->audio_filter
->feed
->feed
.ts
);
437 static int ttusb_dec_video_pes2ts_cb(void *priv
, unsigned char *data
)
439 struct ttusb_dec
*dec
= priv
;
441 dec
->video_filter
->feed
->cb
.ts(data
, 188, NULL
, 0,
442 &dec
->video_filter
->feed
->feed
.ts
);
447 static void ttusb_dec_set_pids(struct ttusb_dec
*dec
)
449 u8 b
[] = { 0x00, 0x00, 0x00, 0x00,
450 0x00, 0x00, 0xff, 0xff,
451 0xff, 0xff, 0xff, 0xff };
453 __be16 pcr
= htons(dec
->pid
[DMX_PES_PCR
]);
454 __be16 audio
= htons(dec
->pid
[DMX_PES_AUDIO
]);
455 __be16 video
= htons(dec
->pid
[DMX_PES_VIDEO
]);
457 dprintk("%s\n", __func__
);
459 memcpy(&b
[0], &pcr
, 2);
460 memcpy(&b
[2], &audio
, 2);
461 memcpy(&b
[4], &video
, 2);
463 ttusb_dec_send_command(dec
, 0x50, sizeof(b
), b
, NULL
, NULL
);
465 dvb_filter_pes2ts_init(&dec
->a_pes2ts
, dec
->pid
[DMX_PES_AUDIO
],
466 ttusb_dec_audio_pes2ts_cb
, dec
);
467 dvb_filter_pes2ts_init(&dec
->v_pes2ts
, dec
->pid
[DMX_PES_VIDEO
],
468 ttusb_dec_video_pes2ts_cb
, dec
);
469 dec
->v_pes_length
= 0;
470 dec
->v_pes_postbytes
= 0;
473 static void ttusb_dec_process_pva(struct ttusb_dec
*dec
, u8
*pva
, int length
)
476 printk("%s: packet too short - discarding\n", __func__
);
480 if (length
> 8 + MAX_PVA_LENGTH
) {
481 printk("%s: packet too long - discarding\n", __func__
);
487 case 0x01: { /* VideoStream */
488 int prebytes
= pva
[5] & 0x03;
489 int postbytes
= (pva
[5] & 0x0c) >> 2;
490 __be16 v_pes_payload_length
;
493 dec
->video_filter
->feed
->cb
.ts(pva
, length
, NULL
, 0,
494 &dec
->video_filter
->feed
->feed
.ts
);
498 if (dec
->v_pes_postbytes
> 0 &&
499 dec
->v_pes_postbytes
== prebytes
) {
500 memcpy(&dec
->v_pes
[dec
->v_pes_length
],
503 dvb_filter_pes2ts(&dec
->v_pes2ts
, dec
->v_pes
,
504 dec
->v_pes_length
+ prebytes
, 1);
508 dec
->v_pes
[7] = 0x80;
509 dec
->v_pes
[8] = 0x05;
511 dec
->v_pes
[9] = 0x21 | ((pva
[8] & 0xc0) >> 5);
512 dec
->v_pes
[10] = ((pva
[8] & 0x3f) << 2) |
513 ((pva
[9] & 0xc0) >> 6);
514 dec
->v_pes
[11] = 0x01 |
515 ((pva
[9] & 0x3f) << 2) |
516 ((pva
[10] & 0x80) >> 6);
517 dec
->v_pes
[12] = ((pva
[10] & 0x7f) << 1) |
518 ((pva
[11] & 0xc0) >> 7);
519 dec
->v_pes
[13] = 0x01 | ((pva
[11] & 0x7f) << 1);
521 memcpy(&dec
->v_pes
[14], &pva
[12 + prebytes
],
522 length
- 12 - prebytes
);
523 dec
->v_pes_length
= 14 + length
- 12 - prebytes
;
525 dec
->v_pes
[7] = 0x00;
526 dec
->v_pes
[8] = 0x00;
528 memcpy(&dec
->v_pes
[9], &pva
[8], length
- 8);
529 dec
->v_pes_length
= 9 + length
- 8;
532 dec
->v_pes_postbytes
= postbytes
;
534 if (dec
->v_pes
[9 + dec
->v_pes
[8]] == 0x00 &&
535 dec
->v_pes
[10 + dec
->v_pes
[8]] == 0x00 &&
536 dec
->v_pes
[11 + dec
->v_pes
[8]] == 0x01)
537 dec
->v_pes
[6] = 0x84;
539 dec
->v_pes
[6] = 0x80;
541 v_pes_payload_length
= htons(dec
->v_pes_length
- 6 +
543 memcpy(&dec
->v_pes
[4], &v_pes_payload_length
, 2);
546 dvb_filter_pes2ts(&dec
->v_pes2ts
, dec
->v_pes
,
547 dec
->v_pes_length
, 1);
552 case 0x02: /* MainAudioStream */
554 dec
->audio_filter
->feed
->cb
.ts(pva
, length
, NULL
, 0,
555 &dec
->audio_filter
->feed
->feed
.ts
);
559 dvb_filter_pes2ts(&dec
->a_pes2ts
, &pva
[8], length
- 8,
564 printk("%s: unknown PVA type: %02x.\n", __func__
,
570 static void ttusb_dec_process_filter(struct ttusb_dec
*dec
, u8
*packet
,
573 struct list_head
*item
;
574 struct filter_info
*finfo
;
575 struct dvb_demux_filter
*filter
= NULL
;
580 spin_lock_irqsave(&dec
->filter_info_list_lock
, flags
);
581 for (item
= dec
->filter_info_list
.next
; item
!= &dec
->filter_info_list
;
583 finfo
= list_entry(item
, struct filter_info
, filter_info_list
);
584 if (finfo
->stream_id
== sid
) {
585 filter
= finfo
->filter
;
589 spin_unlock_irqrestore(&dec
->filter_info_list_lock
, flags
);
592 filter
->feed
->cb
.sec(&packet
[2], length
- 2, NULL
, 0,
596 static void ttusb_dec_process_packet(struct ttusb_dec
*dec
)
602 if (dec
->packet_length
% 2) {
603 printk("%s: odd sized packet - discarding\n", __func__
);
607 for (i
= 0; i
< dec
->packet_length
; i
+= 2)
608 csum
^= ((dec
->packet
[i
] << 8) + dec
->packet
[i
+ 1]);
611 printk("%s: checksum failed - discarding\n", __func__
);
615 packet_id
= dec
->packet
[dec
->packet_length
- 4] << 8;
616 packet_id
+= dec
->packet
[dec
->packet_length
- 3];
618 if ((packet_id
!= dec
->next_packet_id
) && dec
->next_packet_id
) {
619 printk("%s: warning: lost packets between %u and %u\n",
620 __func__
, dec
->next_packet_id
- 1, packet_id
);
623 if (packet_id
== 0xffff)
624 dec
->next_packet_id
= 0x8000;
626 dec
->next_packet_id
= packet_id
+ 1;
628 switch (dec
->packet_type
) {
629 case TTUSB_DEC_PACKET_PVA
:
630 if (dec
->pva_stream_count
)
631 ttusb_dec_process_pva(dec
, dec
->packet
,
632 dec
->packet_payload_length
);
635 case TTUSB_DEC_PACKET_SECTION
:
636 if (dec
->filter_stream_count
)
637 ttusb_dec_process_filter(dec
, dec
->packet
,
638 dec
->packet_payload_length
);
641 case TTUSB_DEC_PACKET_EMPTY
:
646 static void swap_bytes(u8
*b
, int length
)
648 length
-= length
% 2;
649 for (; length
; b
+= 2, length
-= 2)
653 static void ttusb_dec_process_urb_frame(struct ttusb_dec
*dec
, u8
*b
,
656 swap_bytes(b
, length
);
659 switch (dec
->packet_state
) {
667 dec
->packet_state
= 0;
675 dec
->packet_length
= 0;
676 } else if (*b
!= 0xaa) {
677 dec
->packet_state
= 0;
685 dec
->packet
[dec
->packet_length
++] = *b
++;
687 if (dec
->packet_length
== 2) {
688 if (dec
->packet
[0] == 'A' &&
689 dec
->packet
[1] == 'V') {
691 TTUSB_DEC_PACKET_PVA
;
693 } else if (dec
->packet
[0] == 'S') {
695 TTUSB_DEC_PACKET_SECTION
;
697 } else if (dec
->packet
[0] == 0x00) {
699 TTUSB_DEC_PACKET_EMPTY
;
700 dec
->packet_payload_length
= 2;
701 dec
->packet_state
= 7;
703 printk("%s: unknown packet type: %02x%02x\n",
705 dec
->packet
[0], dec
->packet
[1]);
706 dec
->packet_state
= 0;
714 dec
->packet
[dec
->packet_length
++] = *b
++;
716 if (dec
->packet_type
== TTUSB_DEC_PACKET_PVA
&&
717 dec
->packet_length
== 8) {
719 dec
->packet_payload_length
= 8 +
720 (dec
->packet
[6] << 8) +
722 } else if (dec
->packet_type
==
723 TTUSB_DEC_PACKET_SECTION
&&
724 dec
->packet_length
== 5) {
726 dec
->packet_payload_length
= 5 +
727 ((dec
->packet
[3] & 0x0f) << 8) +
735 int remainder
= dec
->packet_payload_length
-
738 if (length
>= remainder
) {
739 memcpy(dec
->packet
+ dec
->packet_length
,
741 dec
->packet_length
+= remainder
;
746 memcpy(&dec
->packet
[dec
->packet_length
],
748 dec
->packet_length
+= length
;
758 dec
->packet
[dec
->packet_length
++] = *b
++;
760 if (dec
->packet_type
== TTUSB_DEC_PACKET_SECTION
&&
761 dec
->packet_payload_length
% 2)
764 if (dec
->packet_length
==
765 dec
->packet_payload_length
+ tail
) {
766 ttusb_dec_process_packet(dec
);
767 dec
->packet_state
= 0;
775 printk("%s: illegal packet state encountered.\n",
777 dec
->packet_state
= 0;
782 static void ttusb_dec_process_urb_frame_list(unsigned long data
)
784 struct ttusb_dec
*dec
= (struct ttusb_dec
*)data
;
785 struct list_head
*item
;
786 struct urb_frame
*frame
;
790 spin_lock_irqsave(&dec
->urb_frame_list_lock
, flags
);
791 if ((item
= dec
->urb_frame_list
.next
) != &dec
->urb_frame_list
) {
792 frame
= list_entry(item
, struct urb_frame
,
794 list_del(&frame
->urb_frame_list
);
796 spin_unlock_irqrestore(&dec
->urb_frame_list_lock
,
800 spin_unlock_irqrestore(&dec
->urb_frame_list_lock
, flags
);
802 ttusb_dec_process_urb_frame(dec
, frame
->data
, frame
->length
);
807 static void ttusb_dec_process_urb(struct urb
*urb
)
809 struct ttusb_dec
*dec
= urb
->context
;
814 for (i
= 0; i
< FRAMES_PER_ISO_BUF
; i
++) {
815 struct usb_iso_packet_descriptor
*d
;
818 struct urb_frame
*frame
;
820 d
= &urb
->iso_frame_desc
[i
];
821 b
= urb
->transfer_buffer
+ d
->offset
;
822 length
= d
->actual_length
;
824 if ((frame
= kmalloc(sizeof(struct urb_frame
),
828 memcpy(frame
->data
, b
, length
);
829 frame
->length
= length
;
831 spin_lock_irqsave(&dec
->urb_frame_list_lock
,
833 list_add_tail(&frame
->urb_frame_list
,
834 &dec
->urb_frame_list
);
835 spin_unlock_irqrestore(&dec
->urb_frame_list_lock
,
838 tasklet_schedule(&dec
->urb_tasklet
);
842 /* -ENOENT is expected when unlinking urbs */
843 if (urb
->status
!= -ENOENT
)
844 dprintk("%s: urb error: %d\n", __func__
,
848 if (dec
->iso_stream_count
)
849 usb_submit_urb(urb
, GFP_ATOMIC
);
852 static void ttusb_dec_setup_urbs(struct ttusb_dec
*dec
)
854 int i
, j
, buffer_offset
= 0;
856 dprintk("%s\n", __func__
);
858 for (i
= 0; i
< ISO_BUF_COUNT
; i
++) {
859 int frame_offset
= 0;
860 struct urb
*urb
= dec
->iso_urb
[i
];
862 urb
->dev
= dec
->udev
;
864 urb
->complete
= ttusb_dec_process_urb
;
865 urb
->pipe
= dec
->in_pipe
;
866 urb
->transfer_flags
= URB_ISO_ASAP
;
868 urb
->number_of_packets
= FRAMES_PER_ISO_BUF
;
869 urb
->transfer_buffer_length
= ISO_FRAME_SIZE
*
871 urb
->transfer_buffer
= dec
->iso_buffer
+ buffer_offset
;
872 buffer_offset
+= ISO_FRAME_SIZE
* FRAMES_PER_ISO_BUF
;
874 for (j
= 0; j
< FRAMES_PER_ISO_BUF
; j
++) {
875 urb
->iso_frame_desc
[j
].offset
= frame_offset
;
876 urb
->iso_frame_desc
[j
].length
= ISO_FRAME_SIZE
;
877 frame_offset
+= ISO_FRAME_SIZE
;
882 static void ttusb_dec_stop_iso_xfer(struct ttusb_dec
*dec
)
886 dprintk("%s\n", __func__
);
888 if (mutex_lock_interruptible(&dec
->iso_mutex
))
891 dec
->iso_stream_count
--;
893 if (!dec
->iso_stream_count
) {
894 for (i
= 0; i
< ISO_BUF_COUNT
; i
++)
895 usb_kill_urb(dec
->iso_urb
[i
]);
898 mutex_unlock(&dec
->iso_mutex
);
901 /* Setting the interface of the DEC tends to take down the USB communications
902 * for a short period, so it's important not to call this function just before
903 * trying to talk to it.
905 static int ttusb_dec_set_interface(struct ttusb_dec
*dec
,
906 enum ttusb_dec_interface interface
)
911 if (interface
!= dec
->interface
) {
913 case TTUSB_DEC_INTERFACE_INITIAL
:
914 result
= usb_set_interface(dec
->udev
, 0, 0);
916 case TTUSB_DEC_INTERFACE_IN
:
917 result
= ttusb_dec_send_command(dec
, 0x80, sizeof(b
),
921 result
= usb_set_interface(dec
->udev
, 0, 8);
923 case TTUSB_DEC_INTERFACE_OUT
:
924 result
= usb_set_interface(dec
->udev
, 0, 1);
931 dec
->interface
= interface
;
937 static int ttusb_dec_start_iso_xfer(struct ttusb_dec
*dec
)
941 dprintk("%s\n", __func__
);
943 if (mutex_lock_interruptible(&dec
->iso_mutex
))
946 if (!dec
->iso_stream_count
) {
947 ttusb_dec_setup_urbs(dec
);
949 dec
->packet_state
= 0;
950 dec
->v_pes_postbytes
= 0;
951 dec
->next_packet_id
= 0;
953 for (i
= 0; i
< ISO_BUF_COUNT
; i
++) {
954 if ((result
= usb_submit_urb(dec
->iso_urb
[i
],
956 printk("%s: failed urb submission %d: error %d\n",
957 __func__
, i
, result
);
960 usb_kill_urb(dec
->iso_urb
[i
- 1]);
964 mutex_unlock(&dec
->iso_mutex
);
970 dec
->iso_stream_count
++;
972 mutex_unlock(&dec
->iso_mutex
);
977 static int ttusb_dec_start_ts_feed(struct dvb_demux_feed
*dvbdmxfeed
)
979 struct dvb_demux
*dvbdmx
= dvbdmxfeed
->demux
;
980 struct ttusb_dec
*dec
= dvbdmx
->priv
;
984 dprintk("%s\n", __func__
);
986 dprintk(" ts_type:");
988 if (dvbdmxfeed
->ts_type
& TS_DECODER
)
989 dprintk(" TS_DECODER");
991 if (dvbdmxfeed
->ts_type
& TS_PACKET
)
992 dprintk(" TS_PACKET");
994 if (dvbdmxfeed
->ts_type
& TS_PAYLOAD_ONLY
)
995 dprintk(" TS_PAYLOAD_ONLY");
999 switch (dvbdmxfeed
->pes_type
) {
1002 dprintk(" pes_type: DMX_PES_VIDEO\n");
1003 dec
->pid
[DMX_PES_PCR
] = dvbdmxfeed
->pid
;
1004 dec
->pid
[DMX_PES_VIDEO
] = dvbdmxfeed
->pid
;
1005 dec
->video_filter
= dvbdmxfeed
->filter
;
1006 ttusb_dec_set_pids(dec
);
1010 dprintk(" pes_type: DMX_PES_AUDIO\n");
1011 dec
->pid
[DMX_PES_AUDIO
] = dvbdmxfeed
->pid
;
1012 dec
->audio_filter
= dvbdmxfeed
->filter
;
1013 ttusb_dec_set_pids(dec
);
1016 case DMX_PES_TELETEXT
:
1017 dec
->pid
[DMX_PES_TELETEXT
] = dvbdmxfeed
->pid
;
1018 dprintk(" pes_type: DMX_PES_TELETEXT(not supported)\n");
1022 dprintk(" pes_type: DMX_PES_PCR\n");
1023 dec
->pid
[DMX_PES_PCR
] = dvbdmxfeed
->pid
;
1024 ttusb_dec_set_pids(dec
);
1028 dprintk(" pes_type: DMX_PES_OTHER(not supported)\n");
1032 dprintk(" pes_type: unknown (%d)\n", dvbdmxfeed
->pes_type
);
1037 result
= ttusb_dec_send_command(dec
, 0x80, sizeof(b0
), b0
, NULL
, NULL
);
1041 dec
->pva_stream_count
++;
1042 return ttusb_dec_start_iso_xfer(dec
);
1045 static int ttusb_dec_start_sec_feed(struct dvb_demux_feed
*dvbdmxfeed
)
1047 struct ttusb_dec
*dec
= dvbdmxfeed
->demux
->priv
;
1048 u8 b0
[] = { 0x00, 0x00, 0x00, 0x01,
1049 0x00, 0x00, 0x00, 0x00,
1050 0x00, 0x00, 0x00, 0x00,
1051 0x00, 0x00, 0x00, 0x00,
1052 0x00, 0xff, 0x00, 0x00,
1053 0x00, 0x00, 0x00, 0x00,
1054 0x00, 0x00, 0x00, 0x00,
1057 u8 c
[COMMAND_PACKET_SIZE
];
1060 struct filter_info
*finfo
;
1061 unsigned long flags
;
1064 dprintk("%s\n", __func__
);
1066 pid
= htons(dvbdmxfeed
->pid
);
1067 memcpy(&b0
[0], &pid
, 2);
1068 memcpy(&b0
[4], &x
, 1);
1069 memcpy(&b0
[5], &dvbdmxfeed
->filter
->filter
.filter_value
[0], 1);
1071 result
= ttusb_dec_send_command(dec
, 0x60, sizeof(b0
), b0
,
1075 if (c_length
== 2) {
1076 if (!(finfo
= kmalloc(sizeof(struct filter_info
),
1080 finfo
->stream_id
= c
[1];
1081 finfo
->filter
= dvbdmxfeed
->filter
;
1083 spin_lock_irqsave(&dec
->filter_info_list_lock
, flags
);
1084 list_add_tail(&finfo
->filter_info_list
,
1085 &dec
->filter_info_list
);
1086 spin_unlock_irqrestore(&dec
->filter_info_list_lock
,
1089 dvbdmxfeed
->priv
= finfo
;
1091 dec
->filter_stream_count
++;
1092 return ttusb_dec_start_iso_xfer(dec
);
1100 static int ttusb_dec_start_feed(struct dvb_demux_feed
*dvbdmxfeed
)
1102 struct dvb_demux
*dvbdmx
= dvbdmxfeed
->demux
;
1104 dprintk("%s\n", __func__
);
1106 if (!dvbdmx
->dmx
.frontend
)
1109 dprintk(" pid: 0x%04X\n", dvbdmxfeed
->pid
);
1111 switch (dvbdmxfeed
->type
) {
1114 return ttusb_dec_start_ts_feed(dvbdmxfeed
);
1118 return ttusb_dec_start_sec_feed(dvbdmxfeed
);
1122 dprintk(" type: unknown (%d)\n", dvbdmxfeed
->type
);
1128 static int ttusb_dec_stop_ts_feed(struct dvb_demux_feed
*dvbdmxfeed
)
1130 struct ttusb_dec
*dec
= dvbdmxfeed
->demux
->priv
;
1133 ttusb_dec_send_command(dec
, 0x81, sizeof(b0
), b0
, NULL
, NULL
);
1135 dec
->pva_stream_count
--;
1137 ttusb_dec_stop_iso_xfer(dec
);
1142 static int ttusb_dec_stop_sec_feed(struct dvb_demux_feed
*dvbdmxfeed
)
1144 struct ttusb_dec
*dec
= dvbdmxfeed
->demux
->priv
;
1145 u8 b0
[] = { 0x00, 0x00 };
1146 struct filter_info
*finfo
= (struct filter_info
*)dvbdmxfeed
->priv
;
1147 unsigned long flags
;
1149 b0
[1] = finfo
->stream_id
;
1150 spin_lock_irqsave(&dec
->filter_info_list_lock
, flags
);
1151 list_del(&finfo
->filter_info_list
);
1152 spin_unlock_irqrestore(&dec
->filter_info_list_lock
, flags
);
1154 ttusb_dec_send_command(dec
, 0x62, sizeof(b0
), b0
, NULL
, NULL
);
1156 dec
->filter_stream_count
--;
1158 ttusb_dec_stop_iso_xfer(dec
);
1163 static int ttusb_dec_stop_feed(struct dvb_demux_feed
*dvbdmxfeed
)
1165 dprintk("%s\n", __func__
);
1167 switch (dvbdmxfeed
->type
) {
1169 return ttusb_dec_stop_ts_feed(dvbdmxfeed
);
1173 return ttusb_dec_stop_sec_feed(dvbdmxfeed
);
1180 static void ttusb_dec_free_iso_urbs(struct ttusb_dec
*dec
)
1184 dprintk("%s\n", __func__
);
1186 for (i
= 0; i
< ISO_BUF_COUNT
; i
++)
1187 usb_free_urb(dec
->iso_urb
[i
]);
1189 pci_free_consistent(NULL
,
1190 ISO_FRAME_SIZE
* (FRAMES_PER_ISO_BUF
*
1192 dec
->iso_buffer
, dec
->iso_dma_handle
);
1195 static int ttusb_dec_alloc_iso_urbs(struct ttusb_dec
*dec
)
1199 dprintk("%s\n", __func__
);
1201 dec
->iso_buffer
= pci_zalloc_consistent(NULL
,
1202 ISO_FRAME_SIZE
* (FRAMES_PER_ISO_BUF
* ISO_BUF_COUNT
),
1203 &dec
->iso_dma_handle
);
1205 if (!dec
->iso_buffer
) {
1206 dprintk("%s: pci_alloc_consistent - not enough memory\n",
1211 for (i
= 0; i
< ISO_BUF_COUNT
; i
++) {
1214 if (!(urb
= usb_alloc_urb(FRAMES_PER_ISO_BUF
, GFP_ATOMIC
))) {
1215 ttusb_dec_free_iso_urbs(dec
);
1219 dec
->iso_urb
[i
] = urb
;
1222 ttusb_dec_setup_urbs(dec
);
1227 static void ttusb_dec_init_tasklet(struct ttusb_dec
*dec
)
1229 spin_lock_init(&dec
->urb_frame_list_lock
);
1230 INIT_LIST_HEAD(&dec
->urb_frame_list
);
1231 tasklet_init(&dec
->urb_tasklet
, ttusb_dec_process_urb_frame_list
,
1232 (unsigned long)dec
);
1235 static int ttusb_init_rc( struct ttusb_dec
*dec
)
1237 struct input_dev
*input_dev
;
1238 u8 b
[] = { 0x00, 0x01 };
1242 usb_make_path(dec
->udev
, dec
->rc_phys
, sizeof(dec
->rc_phys
));
1243 strlcat(dec
->rc_phys
, "/input0", sizeof(dec
->rc_phys
));
1245 input_dev
= input_allocate_device();
1249 input_dev
->name
= "ttusb_dec remote control";
1250 input_dev
->phys
= dec
->rc_phys
;
1251 input_dev
->evbit
[0] = BIT_MASK(EV_KEY
);
1252 input_dev
->keycodesize
= sizeof(u16
);
1253 input_dev
->keycodemax
= 0x1a;
1254 input_dev
->keycode
= rc_keys
;
1256 for (i
= 0; i
< ARRAY_SIZE(rc_keys
); i
++)
1257 set_bit(rc_keys
[i
], input_dev
->keybit
);
1259 err
= input_register_device(input_dev
);
1261 input_free_device(input_dev
);
1265 dec
->rc_input_dev
= input_dev
;
1266 if (usb_submit_urb(dec
->irq_urb
, GFP_KERNEL
))
1267 printk("%s: usb_submit_urb failed\n",__func__
);
1268 /* enable irq pipe */
1269 ttusb_dec_send_command(dec
,0xb0,sizeof(b
),b
,NULL
,NULL
);
1274 static void ttusb_dec_init_v_pes(struct ttusb_dec
*dec
)
1276 dprintk("%s\n", __func__
);
1278 dec
->v_pes
[0] = 0x00;
1279 dec
->v_pes
[1] = 0x00;
1280 dec
->v_pes
[2] = 0x01;
1281 dec
->v_pes
[3] = 0xe0;
1284 static int ttusb_dec_init_usb(struct ttusb_dec
*dec
)
1288 dprintk("%s\n", __func__
);
1290 mutex_init(&dec
->usb_mutex
);
1291 mutex_init(&dec
->iso_mutex
);
1293 dec
->command_pipe
= usb_sndbulkpipe(dec
->udev
, COMMAND_PIPE
);
1294 dec
->result_pipe
= usb_rcvbulkpipe(dec
->udev
, RESULT_PIPE
);
1295 dec
->in_pipe
= usb_rcvisocpipe(dec
->udev
, IN_PIPE
);
1296 dec
->out_pipe
= usb_sndisocpipe(dec
->udev
, OUT_PIPE
);
1297 dec
->irq_pipe
= usb_rcvintpipe(dec
->udev
, IRQ_PIPE
);
1300 dec
->irq_urb
= usb_alloc_urb(0, GFP_KERNEL
);
1304 dec
->irq_buffer
= usb_alloc_coherent(dec
->udev
,IRQ_PACKET_SIZE
,
1305 GFP_KERNEL
, &dec
->irq_dma_handle
);
1306 if(!dec
->irq_buffer
) {
1307 usb_free_urb(dec
->irq_urb
);
1310 usb_fill_int_urb(dec
->irq_urb
, dec
->udev
,dec
->irq_pipe
,
1311 dec
->irq_buffer
, IRQ_PACKET_SIZE
,
1312 ttusb_dec_handle_irq
, dec
, 1);
1313 dec
->irq_urb
->transfer_dma
= dec
->irq_dma_handle
;
1314 dec
->irq_urb
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
1317 result
= ttusb_dec_alloc_iso_urbs(dec
);
1319 usb_free_urb(dec
->irq_urb
);
1320 usb_free_coherent(dec
->udev
, IRQ_PACKET_SIZE
,
1321 dec
->irq_buffer
, dec
->irq_dma_handle
);
1326 static int ttusb_dec_boot_dsp(struct ttusb_dec
*dec
)
1328 int i
, j
, actual_len
, result
, size
, trans_count
;
1329 u8 b0
[] = { 0x00, 0x00, 0x00, 0x00,
1330 0x00, 0x00, 0x00, 0x00,
1335 const u8
*firmware
= NULL
;
1336 size_t firmware_size
= 0;
1337 u16 firmware_csum
= 0;
1338 __be16 firmware_csum_ns
;
1339 __be32 firmware_size_nl
;
1340 u32 crc32_csum
, crc32_check
;
1342 const struct firmware
*fw_entry
= NULL
;
1344 dprintk("%s\n", __func__
);
1346 result
= request_firmware(&fw_entry
, dec
->firmware_name
, &dec
->udev
->dev
);
1348 printk(KERN_ERR
"%s: Firmware (%s) unavailable.\n",
1349 __func__
, dec
->firmware_name
);
1353 firmware
= fw_entry
->data
;
1354 firmware_size
= fw_entry
->size
;
1356 if (firmware_size
< 60) {
1357 printk("%s: firmware size too small for DSP code (%zu < 60).\n",
1358 __func__
, firmware_size
);
1359 release_firmware(fw_entry
);
1363 /* a 32 bit checksum over the first 56 bytes of the DSP Code is stored
1364 at offset 56 of file, so use it to check if the firmware file is
1366 crc32_csum
= crc32(~0L, firmware
, 56) ^ ~0L;
1367 memcpy(&tmp
, &firmware
[56], 4);
1368 crc32_check
= ntohl(tmp
);
1369 if (crc32_csum
!= crc32_check
) {
1370 printk("%s: crc32 check of DSP code failed (calculated 0x%08x != 0x%08x in file), file invalid.\n",
1371 __func__
, crc32_csum
, crc32_check
);
1372 release_firmware(fw_entry
);
1375 memcpy(idstring
, &firmware
[36], 20);
1376 idstring
[20] = '\0';
1377 printk(KERN_INFO
"ttusb_dec: found DSP code \"%s\".\n", idstring
);
1379 firmware_size_nl
= htonl(firmware_size
);
1380 memcpy(b0
, &firmware_size_nl
, 4);
1381 firmware_csum
= crc16(~0, firmware
, firmware_size
) ^ ~0;
1382 firmware_csum_ns
= htons(firmware_csum
);
1383 memcpy(&b0
[6], &firmware_csum_ns
, 2);
1385 result
= ttusb_dec_send_command(dec
, 0x41, sizeof(b0
), b0
, NULL
, NULL
);
1388 release_firmware(fw_entry
);
1395 b
= kmalloc(ARM_PACKET_SIZE
, GFP_KERNEL
);
1397 release_firmware(fw_entry
);
1401 for (i
= 0; i
< firmware_size
; i
+= COMMAND_PACKET_SIZE
) {
1402 size
= firmware_size
- i
;
1403 if (size
> COMMAND_PACKET_SIZE
)
1404 size
= COMMAND_PACKET_SIZE
;
1407 b
[j
+ 1] = trans_count
++;
1410 memcpy(&b
[j
+ 4], &firmware
[i
], size
);
1412 j
+= COMMAND_PACKET_SIZE
+ 4;
1414 if (j
>= ARM_PACKET_SIZE
) {
1415 result
= usb_bulk_msg(dec
->udev
, dec
->command_pipe
, b
,
1416 ARM_PACKET_SIZE
, &actual_len
,
1419 } else if (size
< COMMAND_PACKET_SIZE
) {
1420 result
= usb_bulk_msg(dec
->udev
, dec
->command_pipe
, b
,
1421 j
- COMMAND_PACKET_SIZE
+ size
,
1426 result
= ttusb_dec_send_command(dec
, 0x43, sizeof(b1
), b1
, NULL
, NULL
);
1428 release_firmware(fw_entry
);
1434 static int ttusb_dec_init_stb(struct ttusb_dec
*dec
)
1437 unsigned int mode
= 0, model
= 0, version
= 0;
1439 dprintk("%s\n", __func__
);
1441 result
= ttusb_dec_get_stb_state(dec
, &mode
, &model
, &version
);
1446 if (version
== 0xABCDEFAB)
1447 printk(KERN_INFO
"ttusb_dec: no version info in Firmware\n");
1449 printk(KERN_INFO
"ttusb_dec: Firmware %x.%02x%c%c\n",
1450 version
>> 24, (version
>> 16) & 0xff,
1451 (version
>> 8) & 0xff, version
& 0xff);
1453 result
= ttusb_dec_boot_dsp(dec
);
1457 /* We can't trust the USB IDs that some firmwares
1463 ttusb_dec_set_model(dec
, TTUSB_DEC3000S
);
1467 ttusb_dec_set_model(dec
, TTUSB_DEC2000T
);
1470 ttusb_dec_set_model(dec
, TTUSB_DEC2540T
);
1473 printk(KERN_ERR
"%s: unknown model returned by firmware (%08x) - please report\n",
1477 if (version
>= 0x01770000)
1478 dec
->can_playback
= 1;
1483 static int ttusb_dec_init_dvb(struct ttusb_dec
*dec
)
1487 dprintk("%s\n", __func__
);
1489 if ((result
= dvb_register_adapter(&dec
->adapter
,
1490 dec
->model_name
, THIS_MODULE
,
1493 printk("%s: dvb_register_adapter failed: error %d\n",
1499 dec
->demux
.dmx
.capabilities
= DMX_TS_FILTERING
| DMX_SECTION_FILTERING
;
1501 dec
->demux
.priv
= (void *)dec
;
1502 dec
->demux
.filternum
= 31;
1503 dec
->demux
.feednum
= 31;
1504 dec
->demux
.start_feed
= ttusb_dec_start_feed
;
1505 dec
->demux
.stop_feed
= ttusb_dec_stop_feed
;
1506 dec
->demux
.write_to_decoder
= NULL
;
1508 if ((result
= dvb_dmx_init(&dec
->demux
)) < 0) {
1509 printk("%s: dvb_dmx_init failed: error %d\n", __func__
,
1512 dvb_unregister_adapter(&dec
->adapter
);
1517 dec
->dmxdev
.filternum
= 32;
1518 dec
->dmxdev
.demux
= &dec
->demux
.dmx
;
1519 dec
->dmxdev
.capabilities
= 0;
1521 if ((result
= dvb_dmxdev_init(&dec
->dmxdev
, &dec
->adapter
)) < 0) {
1522 printk("%s: dvb_dmxdev_init failed: error %d\n",
1525 dvb_dmx_release(&dec
->demux
);
1526 dvb_unregister_adapter(&dec
->adapter
);
1531 dec
->frontend
.source
= DMX_FRONTEND_0
;
1533 if ((result
= dec
->demux
.dmx
.add_frontend(&dec
->demux
.dmx
,
1534 &dec
->frontend
)) < 0) {
1535 printk("%s: dvb_dmx_init failed: error %d\n", __func__
,
1538 dvb_dmxdev_release(&dec
->dmxdev
);
1539 dvb_dmx_release(&dec
->demux
);
1540 dvb_unregister_adapter(&dec
->adapter
);
1545 if ((result
= dec
->demux
.dmx
.connect_frontend(&dec
->demux
.dmx
,
1546 &dec
->frontend
)) < 0) {
1547 printk("%s: dvb_dmx_init failed: error %d\n", __func__
,
1550 dec
->demux
.dmx
.remove_frontend(&dec
->demux
.dmx
, &dec
->frontend
);
1551 dvb_dmxdev_release(&dec
->dmxdev
);
1552 dvb_dmx_release(&dec
->demux
);
1553 dvb_unregister_adapter(&dec
->adapter
);
1558 dvb_net_init(&dec
->adapter
, &dec
->dvb_net
, &dec
->demux
.dmx
);
1563 static void ttusb_dec_exit_dvb(struct ttusb_dec
*dec
)
1565 dprintk("%s\n", __func__
);
1567 dvb_net_release(&dec
->dvb_net
);
1568 dec
->demux
.dmx
.close(&dec
->demux
.dmx
);
1569 dec
->demux
.dmx
.remove_frontend(&dec
->demux
.dmx
, &dec
->frontend
);
1570 dvb_dmxdev_release(&dec
->dmxdev
);
1571 dvb_dmx_release(&dec
->demux
);
1573 dvb_unregister_frontend(dec
->fe
);
1574 if (dec
->fe
->ops
.release
)
1575 dec
->fe
->ops
.release(dec
->fe
);
1577 dvb_unregister_adapter(&dec
->adapter
);
1580 static void ttusb_dec_exit_rc(struct ttusb_dec
*dec
)
1582 dprintk("%s\n", __func__
);
1584 if (dec
->rc_input_dev
) {
1585 input_unregister_device(dec
->rc_input_dev
);
1586 dec
->rc_input_dev
= NULL
;
1591 static void ttusb_dec_exit_usb(struct ttusb_dec
*dec
)
1595 dprintk("%s\n", __func__
);
1598 /* we have to check whether the irq URB is already submitted.
1599 * As the irq is submitted after the interface is changed,
1600 * this is the best method i figured out.
1602 if (dec
->interface
== TTUSB_DEC_INTERFACE_IN
)
1603 usb_kill_urb(dec
->irq_urb
);
1605 usb_free_urb(dec
->irq_urb
);
1607 usb_free_coherent(dec
->udev
, IRQ_PACKET_SIZE
,
1608 dec
->irq_buffer
, dec
->irq_dma_handle
);
1611 dec
->iso_stream_count
= 0;
1613 for (i
= 0; i
< ISO_BUF_COUNT
; i
++)
1614 usb_kill_urb(dec
->iso_urb
[i
]);
1616 ttusb_dec_free_iso_urbs(dec
);
1619 static void ttusb_dec_exit_tasklet(struct ttusb_dec
*dec
)
1621 struct list_head
*item
;
1622 struct urb_frame
*frame
;
1624 tasklet_kill(&dec
->urb_tasklet
);
1626 while ((item
= dec
->urb_frame_list
.next
) != &dec
->urb_frame_list
) {
1627 frame
= list_entry(item
, struct urb_frame
, urb_frame_list
);
1628 list_del(&frame
->urb_frame_list
);
1633 static void ttusb_dec_init_filters(struct ttusb_dec
*dec
)
1635 INIT_LIST_HEAD(&dec
->filter_info_list
);
1636 spin_lock_init(&dec
->filter_info_list_lock
);
1639 static void ttusb_dec_exit_filters(struct ttusb_dec
*dec
)
1641 struct list_head
*item
;
1642 struct filter_info
*finfo
;
1644 while ((item
= dec
->filter_info_list
.next
) != &dec
->filter_info_list
) {
1645 finfo
= list_entry(item
, struct filter_info
, filter_info_list
);
1646 list_del(&finfo
->filter_info_list
);
1651 static int fe_send_command(struct dvb_frontend
* fe
, const u8 command
,
1652 int param_length
, const u8 params
[],
1653 int *result_length
, u8 cmd_result
[])
1655 struct ttusb_dec
* dec
= fe
->dvb
->priv
;
1656 return ttusb_dec_send_command(dec
, command
, param_length
, params
, result_length
, cmd_result
);
1659 static const struct ttusbdecfe_config fe_config
= {
1660 .send_command
= fe_send_command
1663 static int ttusb_dec_probe(struct usb_interface
*intf
,
1664 const struct usb_device_id
*id
)
1666 struct usb_device
*udev
;
1667 struct ttusb_dec
*dec
;
1670 dprintk("%s\n", __func__
);
1672 udev
= interface_to_usbdev(intf
);
1674 if (!(dec
= kzalloc(sizeof(struct ttusb_dec
), GFP_KERNEL
))) {
1675 printk("%s: couldn't allocate memory.\n", __func__
);
1679 usb_set_intfdata(intf
, (void *)dec
);
1681 switch (id
->idProduct
) {
1683 ttusb_dec_set_model(dec
, TTUSB_DEC3000S
);
1687 ttusb_dec_set_model(dec
, TTUSB_DEC2000T
);
1691 ttusb_dec_set_model(dec
, TTUSB_DEC2540T
);
1697 result
= ttusb_dec_init_usb(dec
);
1700 result
= ttusb_dec_init_stb(dec
);
1703 result
= ttusb_dec_init_dvb(dec
);
1707 dec
->adapter
.priv
= dec
;
1708 switch (id
->idProduct
) {
1710 dec
->fe
= ttusbdecfe_dvbs_attach(&fe_config
);
1715 dec
->fe
= ttusbdecfe_dvbt_attach(&fe_config
);
1719 if (dec
->fe
== NULL
) {
1720 printk("dvb-ttusb-dec: A frontend driver was not found for device [%04x:%04x]\n",
1721 le16_to_cpu(dec
->udev
->descriptor
.idVendor
),
1722 le16_to_cpu(dec
->udev
->descriptor
.idProduct
));
1724 if (dvb_register_frontend(&dec
->adapter
, dec
->fe
)) {
1725 printk("budget-ci: Frontend registration failed!\n");
1726 if (dec
->fe
->ops
.release
)
1727 dec
->fe
->ops
.release(dec
->fe
);
1732 ttusb_dec_init_v_pes(dec
);
1733 ttusb_dec_init_filters(dec
);
1734 ttusb_dec_init_tasklet(dec
);
1738 ttusb_dec_set_interface(dec
, TTUSB_DEC_INTERFACE_IN
);
1745 ttusb_dec_exit_usb(dec
);
1751 static void ttusb_dec_disconnect(struct usb_interface
*intf
)
1753 struct ttusb_dec
*dec
= usb_get_intfdata(intf
);
1755 usb_set_intfdata(intf
, NULL
);
1757 dprintk("%s\n", __func__
);
1760 ttusb_dec_exit_tasklet(dec
);
1761 ttusb_dec_exit_filters(dec
);
1763 ttusb_dec_exit_rc(dec
);
1764 ttusb_dec_exit_usb(dec
);
1765 ttusb_dec_exit_dvb(dec
);
1771 static void ttusb_dec_set_model(struct ttusb_dec
*dec
,
1772 enum ttusb_dec_model model
)
1777 case TTUSB_DEC2000T
:
1778 dec
->model_name
= "DEC2000-t";
1779 dec
->firmware_name
= "dvb-ttusb-dec-2000t.fw";
1782 case TTUSB_DEC2540T
:
1783 dec
->model_name
= "DEC2540-t";
1784 dec
->firmware_name
= "dvb-ttusb-dec-2540t.fw";
1787 case TTUSB_DEC3000S
:
1788 dec
->model_name
= "DEC3000-s";
1789 dec
->firmware_name
= "dvb-ttusb-dec-3000s.fw";
1794 static struct usb_device_id ttusb_dec_table
[] = {
1795 {USB_DEVICE(0x0b48, 0x1006)}, /* DEC3000-s */
1796 /*{USB_DEVICE(0x0b48, 0x1007)}, Unconfirmed */
1797 {USB_DEVICE(0x0b48, 0x1008)}, /* DEC2000-t */
1798 {USB_DEVICE(0x0b48, 0x1009)}, /* DEC2540-t */
1802 static struct usb_driver ttusb_dec_driver
= {
1803 .name
= "ttusb-dec",
1804 .probe
= ttusb_dec_probe
,
1805 .disconnect
= ttusb_dec_disconnect
,
1806 .id_table
= ttusb_dec_table
,
1809 module_usb_driver(ttusb_dec_driver
);
1811 MODULE_AUTHOR("Alex Woods <linux-dvb@giblets.org>");
1812 MODULE_DESCRIPTION(DRIVER_NAME
);
1813 MODULE_LICENSE("GPL");
1814 MODULE_DEVICE_TABLE(usb
, ttusb_dec_table
);