1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * Copyright (C) 2003-2004 Alex Woods <linux-dvb@giblets.org>
6 * IR support by Peter Beutner <p.beutner@gmx.net>
9 #include <linux/list.h>
10 #include <linux/module.h>
11 #include <linux/pci.h>
12 #include <linux/slab.h>
13 #include <linux/spinlock.h>
14 #include <linux/usb.h>
15 #include <linux/interrupt.h>
16 #include <linux/firmware.h>
17 #include <linux/crc32.h>
18 #include <linux/init.h>
19 #include <linux/input.h>
21 #include <linux/mutex.h>
23 #include <media/dmxdev.h>
24 #include <media/dvb_demux.h>
25 #include <media/dvb_frontend.h>
26 #include <media/dvb_net.h>
27 #include "ttusbdecfe.h"
30 static int output_pva
;
33 module_param(debug
, int, 0644);
34 MODULE_PARM_DESC(debug
, "Turn on/off debugging (default:off).");
35 module_param(output_pva
, int, 0444);
36 MODULE_PARM_DESC(output_pva
, "Output PVA from dvr device (default:off)");
37 module_param(enable_rc
, int, 0644);
38 MODULE_PARM_DESC(enable_rc
, "Turn on/off IR remote control(default: off)");
40 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr
);
42 #define dprintk if (debug) printk
44 #define DRIVER_NAME "TechnoTrend/Hauppauge DEC USB"
46 #define COMMAND_PIPE 0x03
47 #define RESULT_PIPE 0x04
52 #define COMMAND_PACKET_SIZE 0x3c
53 #define ARM_PACKET_SIZE 0x1000
54 #define IRQ_PACKET_SIZE 0x8
56 #define ISO_BUF_COUNT 0x04
57 #define FRAMES_PER_ISO_BUF 0x04
58 #define ISO_FRAME_SIZE 0x0380
60 #define MAX_PVA_LENGTH 6144
62 enum ttusb_dec_model
{
68 enum ttusb_dec_packet_type
{
70 TTUSB_DEC_PACKET_SECTION
,
71 TTUSB_DEC_PACKET_EMPTY
74 enum ttusb_dec_interface
{
75 TTUSB_DEC_INTERFACE_INITIAL
,
76 TTUSB_DEC_INTERFACE_IN
,
77 TTUSB_DEC_INTERFACE_OUT
80 typedef int (dvb_filter_pes2ts_cb_t
) (void *, unsigned char *);
82 struct dvb_filter_pes2ts
{
83 unsigned char buf
[188];
85 dvb_filter_pes2ts_cb_t
*cb
;
90 enum ttusb_dec_model model
;
96 struct dvb_adapter adapter
;
98 struct dvb_demux demux
;
99 struct dmx_frontend frontend
;
100 struct dvb_net dvb_net
;
101 struct dvb_frontend
* fe
;
103 u16 pid
[DMX_PES_OTHER
];
106 struct usb_device
*udev
;
108 unsigned int command_pipe
;
109 unsigned int result_pipe
;
110 unsigned int in_pipe
;
111 unsigned int out_pipe
;
112 unsigned int irq_pipe
;
113 enum ttusb_dec_interface interface
;
114 struct mutex usb_mutex
;
118 dma_addr_t irq_dma_handle
;
120 struct urb
*iso_urb
[ISO_BUF_COUNT
];
121 int iso_stream_count
;
122 struct mutex iso_mutex
;
124 u8 packet
[MAX_PVA_LENGTH
+ 4];
125 enum ttusb_dec_packet_type packet_type
;
128 int packet_payload_length
;
131 int pva_stream_count
;
132 int filter_stream_count
;
134 struct dvb_filter_pes2ts a_pes2ts
;
135 struct dvb_filter_pes2ts v_pes2ts
;
137 u8 v_pes
[16 + MAX_PVA_LENGTH
];
141 struct list_head urb_frame_list
;
142 struct tasklet_struct urb_tasklet
;
143 spinlock_t urb_frame_list_lock
;
145 struct dvb_demux_filter
*audio_filter
;
146 struct dvb_demux_filter
*video_filter
;
147 struct list_head filter_info_list
;
148 spinlock_t filter_info_list_lock
;
150 struct input_dev
*rc_input_dev
;
153 int active
; /* Loaded successfully */
157 u8 data
[ISO_FRAME_SIZE
];
159 struct list_head urb_frame_list
;
164 struct dvb_demux_filter
*filter
;
165 struct list_head filter_info_list
;
168 static u16 rc_keys
[] = {
197 static void dvb_filter_pes2ts_init(struct dvb_filter_pes2ts
*p2ts
,
199 dvb_filter_pes2ts_cb_t
*cb
, void *priv
)
201 unsigned char *buf
=p2ts
->buf
;
211 static int dvb_filter_pes2ts(struct dvb_filter_pes2ts
*p2ts
,
212 unsigned char *pes
, int len
, int payload_start
)
214 unsigned char *buf
=p2ts
->buf
;
217 //len=6+((pes[4]<<8)|pes[5]);
224 buf
[3]=0x10|((p2ts
->cc
++)&0x0f);
225 memcpy(buf
+4, pes
, 184);
226 if ((ret
=p2ts
->cb(p2ts
->priv
, buf
)))
233 buf
[3]=0x30|((p2ts
->cc
++)&0x0f);
238 memset(buf
+6, 0xff, rest
-1);
241 memcpy(buf
+5+rest
, pes
, len
);
242 return p2ts
->cb(p2ts
->priv
, buf
);
245 static void ttusb_dec_set_model(struct ttusb_dec
*dec
,
246 enum ttusb_dec_model model
);
248 static void ttusb_dec_handle_irq( struct urb
*urb
)
250 struct ttusb_dec
*dec
= urb
->context
;
251 char *buffer
= dec
->irq_buffer
;
254 switch(urb
->status
) {
261 /* this urb is dead, cleanup */
262 dprintk("%s:urb shutting down with status: %d\n",
263 __func__
, urb
->status
);
266 dprintk("%s:nonzero status received: %d\n",
267 __func__
,urb
->status
);
271 if ((buffer
[0] == 0x1) && (buffer
[2] == 0x15)) {
275 * this is an fact a bit too simple implementation;
276 * the box also reports a keyrepeat signal
277 * (with buffer[3] == 0x40) in an interval of ~100ms.
278 * But to handle this correctly we had to imlemenent some
279 * kind of timer which signals a 'key up' event if no
280 * keyrepeat signal is received for lets say 200ms.
281 * this should/could be added later ...
282 * for now lets report each signal as a key down and up
284 if (buffer
[4] - 1 < ARRAY_SIZE(rc_keys
)) {
285 dprintk("%s:rc signal:%d\n", __func__
, buffer
[4]);
286 input_report_key(dec
->rc_input_dev
, rc_keys
[buffer
[4] - 1], 1);
287 input_sync(dec
->rc_input_dev
);
288 input_report_key(dec
->rc_input_dev
, rc_keys
[buffer
[4] - 1], 0);
289 input_sync(dec
->rc_input_dev
);
294 retval
= usb_submit_urb(urb
, GFP_ATOMIC
);
296 printk("%s - usb_commit_urb failed with result: %d\n",
300 static u16
crc16(u16 crc
, const u8
*buf
, size_t len
)
308 crc
^= (tmp
^ (tmp
<< 1)) << 4;
313 static int ttusb_dec_send_command(struct ttusb_dec
*dec
, const u8 command
,
314 int param_length
, const u8 params
[],
315 int *result_length
, u8 cmd_result
[])
317 int result
, actual_len
;
320 dprintk("%s\n", __func__
);
322 b
= kzalloc(COMMAND_PACKET_SIZE
+ 4, GFP_KERNEL
);
326 if ((result
= mutex_lock_interruptible(&dec
->usb_mutex
))) {
328 printk("%s: Failed to lock usb mutex.\n", __func__
);
333 b
[1] = ++dec
->trans_count
;
338 memcpy(&b
[4], params
, param_length
);
341 printk(KERN_DEBUG
"%s: command: %*ph\n",
342 __func__
, param_length
, b
);
345 result
= usb_bulk_msg(dec
->udev
, dec
->command_pipe
, b
,
346 COMMAND_PACKET_SIZE
+ 4, &actual_len
, 1000);
349 printk("%s: command bulk message failed: error %d\n",
351 mutex_unlock(&dec
->usb_mutex
);
356 result
= usb_bulk_msg(dec
->udev
, dec
->result_pipe
, b
,
357 COMMAND_PACKET_SIZE
+ 4, &actual_len
, 1000);
360 printk("%s: result bulk message failed: error %d\n",
362 mutex_unlock(&dec
->usb_mutex
);
367 printk(KERN_DEBUG
"%s: result: %*ph\n",
368 __func__
, actual_len
, b
);
372 *result_length
= b
[3];
373 if (cmd_result
&& b
[3] > 0)
374 memcpy(cmd_result
, &b
[4], b
[3]);
376 mutex_unlock(&dec
->usb_mutex
);
383 static int ttusb_dec_get_stb_state (struct ttusb_dec
*dec
, unsigned int *mode
,
384 unsigned int *model
, unsigned int *version
)
386 u8 c
[COMMAND_PACKET_SIZE
];
391 dprintk("%s\n", __func__
);
393 result
= ttusb_dec_send_command(dec
, 0x08, 0, NULL
, &c_length
, c
);
397 if (c_length
>= 0x0c) {
403 memcpy(&tmp
, &c
[4], 4);
406 if (version
!= NULL
) {
407 memcpy(&tmp
, &c
[8], 4);
408 *version
= ntohl(tmp
);
416 static int ttusb_dec_audio_pes2ts_cb(void *priv
, unsigned char *data
)
418 struct ttusb_dec
*dec
= priv
;
420 dec
->audio_filter
->feed
->cb
.ts(data
, 188, NULL
, 0,
421 &dec
->audio_filter
->feed
->feed
.ts
, NULL
);
426 static int ttusb_dec_video_pes2ts_cb(void *priv
, unsigned char *data
)
428 struct ttusb_dec
*dec
= priv
;
430 dec
->video_filter
->feed
->cb
.ts(data
, 188, NULL
, 0,
431 &dec
->video_filter
->feed
->feed
.ts
, NULL
);
436 static void ttusb_dec_set_pids(struct ttusb_dec
*dec
)
438 u8 b
[] = { 0x00, 0x00, 0x00, 0x00,
439 0x00, 0x00, 0xff, 0xff,
440 0xff, 0xff, 0xff, 0xff };
442 __be16 pcr
= htons(dec
->pid
[DMX_PES_PCR
]);
443 __be16 audio
= htons(dec
->pid
[DMX_PES_AUDIO
]);
444 __be16 video
= htons(dec
->pid
[DMX_PES_VIDEO
]);
446 dprintk("%s\n", __func__
);
448 memcpy(&b
[0], &pcr
, 2);
449 memcpy(&b
[2], &audio
, 2);
450 memcpy(&b
[4], &video
, 2);
452 ttusb_dec_send_command(dec
, 0x50, sizeof(b
), b
, NULL
, NULL
);
454 dvb_filter_pes2ts_init(&dec
->a_pes2ts
, dec
->pid
[DMX_PES_AUDIO
],
455 ttusb_dec_audio_pes2ts_cb
, dec
);
456 dvb_filter_pes2ts_init(&dec
->v_pes2ts
, dec
->pid
[DMX_PES_VIDEO
],
457 ttusb_dec_video_pes2ts_cb
, dec
);
458 dec
->v_pes_length
= 0;
459 dec
->v_pes_postbytes
= 0;
462 static void ttusb_dec_process_pva(struct ttusb_dec
*dec
, u8
*pva
, int length
)
465 printk("%s: packet too short - discarding\n", __func__
);
469 if (length
> 8 + MAX_PVA_LENGTH
) {
470 printk("%s: packet too long - discarding\n", __func__
);
476 case 0x01: { /* VideoStream */
477 int prebytes
= pva
[5] & 0x03;
478 int postbytes
= (pva
[5] & 0x0c) >> 2;
479 __be16 v_pes_payload_length
;
482 dec
->video_filter
->feed
->cb
.ts(pva
, length
, NULL
, 0,
483 &dec
->video_filter
->feed
->feed
.ts
, NULL
);
487 if (dec
->v_pes_postbytes
> 0 &&
488 dec
->v_pes_postbytes
== prebytes
) {
489 memcpy(&dec
->v_pes
[dec
->v_pes_length
],
492 dvb_filter_pes2ts(&dec
->v_pes2ts
, dec
->v_pes
,
493 dec
->v_pes_length
+ prebytes
, 1);
497 dec
->v_pes
[7] = 0x80;
498 dec
->v_pes
[8] = 0x05;
500 dec
->v_pes
[9] = 0x21 | ((pva
[8] & 0xc0) >> 5);
501 dec
->v_pes
[10] = ((pva
[8] & 0x3f) << 2) |
502 ((pva
[9] & 0xc0) >> 6);
503 dec
->v_pes
[11] = 0x01 |
504 ((pva
[9] & 0x3f) << 2) |
505 ((pva
[10] & 0x80) >> 6);
506 dec
->v_pes
[12] = ((pva
[10] & 0x7f) << 1) |
507 ((pva
[11] & 0xc0) >> 7);
508 dec
->v_pes
[13] = 0x01 | ((pva
[11] & 0x7f) << 1);
510 memcpy(&dec
->v_pes
[14], &pva
[12 + prebytes
],
511 length
- 12 - prebytes
);
512 dec
->v_pes_length
= 14 + length
- 12 - prebytes
;
514 dec
->v_pes
[7] = 0x00;
515 dec
->v_pes
[8] = 0x00;
517 memcpy(&dec
->v_pes
[9], &pva
[8], length
- 8);
518 dec
->v_pes_length
= 9 + length
- 8;
521 dec
->v_pes_postbytes
= postbytes
;
523 if (dec
->v_pes
[9 + dec
->v_pes
[8]] == 0x00 &&
524 dec
->v_pes
[10 + dec
->v_pes
[8]] == 0x00 &&
525 dec
->v_pes
[11 + dec
->v_pes
[8]] == 0x01)
526 dec
->v_pes
[6] = 0x84;
528 dec
->v_pes
[6] = 0x80;
530 v_pes_payload_length
= htons(dec
->v_pes_length
- 6 +
532 memcpy(&dec
->v_pes
[4], &v_pes_payload_length
, 2);
535 dvb_filter_pes2ts(&dec
->v_pes2ts
, dec
->v_pes
,
536 dec
->v_pes_length
, 1);
541 case 0x02: /* MainAudioStream */
543 dec
->audio_filter
->feed
->cb
.ts(pva
, length
, NULL
, 0,
544 &dec
->audio_filter
->feed
->feed
.ts
, NULL
);
548 dvb_filter_pes2ts(&dec
->a_pes2ts
, &pva
[8], length
- 8,
553 printk("%s: unknown PVA type: %02x.\n", __func__
,
559 static void ttusb_dec_process_filter(struct ttusb_dec
*dec
, u8
*packet
,
562 struct list_head
*item
;
563 struct filter_info
*finfo
;
564 struct dvb_demux_filter
*filter
= NULL
;
569 spin_lock_irqsave(&dec
->filter_info_list_lock
, flags
);
570 for (item
= dec
->filter_info_list
.next
; item
!= &dec
->filter_info_list
;
572 finfo
= list_entry(item
, struct filter_info
, filter_info_list
);
573 if (finfo
->stream_id
== sid
) {
574 filter
= finfo
->filter
;
578 spin_unlock_irqrestore(&dec
->filter_info_list_lock
, flags
);
581 filter
->feed
->cb
.sec(&packet
[2], length
- 2, NULL
, 0,
582 &filter
->filter
, NULL
);
585 static void ttusb_dec_process_packet(struct ttusb_dec
*dec
)
591 if (dec
->packet_length
% 2) {
592 printk("%s: odd sized packet - discarding\n", __func__
);
596 for (i
= 0; i
< dec
->packet_length
; i
+= 2)
597 csum
^= ((dec
->packet
[i
] << 8) + dec
->packet
[i
+ 1]);
600 printk("%s: checksum failed - discarding\n", __func__
);
604 packet_id
= dec
->packet
[dec
->packet_length
- 4] << 8;
605 packet_id
+= dec
->packet
[dec
->packet_length
- 3];
607 if ((packet_id
!= dec
->next_packet_id
) && dec
->next_packet_id
) {
608 printk("%s: warning: lost packets between %u and %u\n",
609 __func__
, dec
->next_packet_id
- 1, packet_id
);
612 if (packet_id
== 0xffff)
613 dec
->next_packet_id
= 0x8000;
615 dec
->next_packet_id
= packet_id
+ 1;
617 switch (dec
->packet_type
) {
618 case TTUSB_DEC_PACKET_PVA
:
619 if (dec
->pva_stream_count
)
620 ttusb_dec_process_pva(dec
, dec
->packet
,
621 dec
->packet_payload_length
);
624 case TTUSB_DEC_PACKET_SECTION
:
625 if (dec
->filter_stream_count
)
626 ttusb_dec_process_filter(dec
, dec
->packet
,
627 dec
->packet_payload_length
);
630 case TTUSB_DEC_PACKET_EMPTY
:
635 static void swap_bytes(u8
*b
, int length
)
637 length
-= length
% 2;
638 for (; length
; b
+= 2, length
-= 2)
642 static void ttusb_dec_process_urb_frame(struct ttusb_dec
*dec
, u8
*b
,
645 swap_bytes(b
, length
);
648 switch (dec
->packet_state
) {
656 dec
->packet_state
= 0;
664 dec
->packet_length
= 0;
665 } else if (*b
!= 0xaa) {
666 dec
->packet_state
= 0;
674 dec
->packet
[dec
->packet_length
++] = *b
++;
676 if (dec
->packet_length
== 2) {
677 if (dec
->packet
[0] == 'A' &&
678 dec
->packet
[1] == 'V') {
680 TTUSB_DEC_PACKET_PVA
;
682 } else if (dec
->packet
[0] == 'S') {
684 TTUSB_DEC_PACKET_SECTION
;
686 } else if (dec
->packet
[0] == 0x00) {
688 TTUSB_DEC_PACKET_EMPTY
;
689 dec
->packet_payload_length
= 2;
690 dec
->packet_state
= 7;
692 printk("%s: unknown packet type: %02x%02x\n",
694 dec
->packet
[0], dec
->packet
[1]);
695 dec
->packet_state
= 0;
703 dec
->packet
[dec
->packet_length
++] = *b
++;
705 if (dec
->packet_type
== TTUSB_DEC_PACKET_PVA
&&
706 dec
->packet_length
== 8) {
708 dec
->packet_payload_length
= 8 +
709 (dec
->packet
[6] << 8) +
711 } else if (dec
->packet_type
==
712 TTUSB_DEC_PACKET_SECTION
&&
713 dec
->packet_length
== 5) {
715 dec
->packet_payload_length
= 5 +
716 ((dec
->packet
[3] & 0x0f) << 8) +
724 int remainder
= dec
->packet_payload_length
-
727 if (length
>= remainder
) {
728 memcpy(dec
->packet
+ dec
->packet_length
,
730 dec
->packet_length
+= remainder
;
735 memcpy(&dec
->packet
[dec
->packet_length
],
737 dec
->packet_length
+= length
;
747 dec
->packet
[dec
->packet_length
++] = *b
++;
749 if (dec
->packet_type
== TTUSB_DEC_PACKET_SECTION
&&
750 dec
->packet_payload_length
% 2)
753 if (dec
->packet_length
==
754 dec
->packet_payload_length
+ tail
) {
755 ttusb_dec_process_packet(dec
);
756 dec
->packet_state
= 0;
764 printk("%s: illegal packet state encountered.\n",
766 dec
->packet_state
= 0;
771 static void ttusb_dec_process_urb_frame_list(unsigned long data
)
773 struct ttusb_dec
*dec
= (struct ttusb_dec
*)data
;
774 struct list_head
*item
;
775 struct urb_frame
*frame
;
779 spin_lock_irqsave(&dec
->urb_frame_list_lock
, flags
);
780 if ((item
= dec
->urb_frame_list
.next
) != &dec
->urb_frame_list
) {
781 frame
= list_entry(item
, struct urb_frame
,
783 list_del(&frame
->urb_frame_list
);
785 spin_unlock_irqrestore(&dec
->urb_frame_list_lock
,
789 spin_unlock_irqrestore(&dec
->urb_frame_list_lock
, flags
);
791 ttusb_dec_process_urb_frame(dec
, frame
->data
, frame
->length
);
796 static void ttusb_dec_process_urb(struct urb
*urb
)
798 struct ttusb_dec
*dec
= urb
->context
;
803 for (i
= 0; i
< FRAMES_PER_ISO_BUF
; i
++) {
804 struct usb_iso_packet_descriptor
*d
;
807 struct urb_frame
*frame
;
809 d
= &urb
->iso_frame_desc
[i
];
810 b
= urb
->transfer_buffer
+ d
->offset
;
811 length
= d
->actual_length
;
813 if ((frame
= kmalloc(sizeof(struct urb_frame
),
817 memcpy(frame
->data
, b
, length
);
818 frame
->length
= length
;
820 spin_lock_irqsave(&dec
->urb_frame_list_lock
,
822 list_add_tail(&frame
->urb_frame_list
,
823 &dec
->urb_frame_list
);
824 spin_unlock_irqrestore(&dec
->urb_frame_list_lock
,
827 tasklet_schedule(&dec
->urb_tasklet
);
831 /* -ENOENT is expected when unlinking urbs */
832 if (urb
->status
!= -ENOENT
)
833 dprintk("%s: urb error: %d\n", __func__
,
837 if (dec
->iso_stream_count
)
838 usb_submit_urb(urb
, GFP_ATOMIC
);
841 static void ttusb_dec_setup_urbs(struct ttusb_dec
*dec
)
843 int i
, j
, buffer_offset
= 0;
845 dprintk("%s\n", __func__
);
847 for (i
= 0; i
< ISO_BUF_COUNT
; i
++) {
848 int frame_offset
= 0;
849 struct urb
*urb
= dec
->iso_urb
[i
];
851 urb
->dev
= dec
->udev
;
853 urb
->complete
= ttusb_dec_process_urb
;
854 urb
->pipe
= dec
->in_pipe
;
855 urb
->transfer_flags
= URB_ISO_ASAP
;
857 urb
->number_of_packets
= FRAMES_PER_ISO_BUF
;
858 urb
->transfer_buffer_length
= ISO_FRAME_SIZE
*
860 urb
->transfer_buffer
= dec
->iso_buffer
+ buffer_offset
;
861 buffer_offset
+= ISO_FRAME_SIZE
* FRAMES_PER_ISO_BUF
;
863 for (j
= 0; j
< FRAMES_PER_ISO_BUF
; j
++) {
864 urb
->iso_frame_desc
[j
].offset
= frame_offset
;
865 urb
->iso_frame_desc
[j
].length
= ISO_FRAME_SIZE
;
866 frame_offset
+= ISO_FRAME_SIZE
;
871 static void ttusb_dec_stop_iso_xfer(struct ttusb_dec
*dec
)
875 dprintk("%s\n", __func__
);
877 if (mutex_lock_interruptible(&dec
->iso_mutex
))
880 dec
->iso_stream_count
--;
882 if (!dec
->iso_stream_count
) {
883 for (i
= 0; i
< ISO_BUF_COUNT
; i
++)
884 usb_kill_urb(dec
->iso_urb
[i
]);
887 mutex_unlock(&dec
->iso_mutex
);
890 /* Setting the interface of the DEC tends to take down the USB communications
891 * for a short period, so it's important not to call this function just before
892 * trying to talk to it.
894 static int ttusb_dec_set_interface(struct ttusb_dec
*dec
,
895 enum ttusb_dec_interface interface
)
900 if (interface
!= dec
->interface
) {
902 case TTUSB_DEC_INTERFACE_INITIAL
:
903 result
= usb_set_interface(dec
->udev
, 0, 0);
905 case TTUSB_DEC_INTERFACE_IN
:
906 result
= ttusb_dec_send_command(dec
, 0x80, sizeof(b
),
910 result
= usb_set_interface(dec
->udev
, 0, 8);
912 case TTUSB_DEC_INTERFACE_OUT
:
913 result
= usb_set_interface(dec
->udev
, 0, 1);
920 dec
->interface
= interface
;
926 static int ttusb_dec_start_iso_xfer(struct ttusb_dec
*dec
)
930 dprintk("%s\n", __func__
);
932 if (mutex_lock_interruptible(&dec
->iso_mutex
))
935 if (!dec
->iso_stream_count
) {
936 ttusb_dec_setup_urbs(dec
);
938 dec
->packet_state
= 0;
939 dec
->v_pes_postbytes
= 0;
940 dec
->next_packet_id
= 0;
942 for (i
= 0; i
< ISO_BUF_COUNT
; i
++) {
943 if ((result
= usb_submit_urb(dec
->iso_urb
[i
],
945 printk("%s: failed urb submission %d: error %d\n",
946 __func__
, i
, result
);
949 usb_kill_urb(dec
->iso_urb
[i
- 1]);
953 mutex_unlock(&dec
->iso_mutex
);
959 dec
->iso_stream_count
++;
961 mutex_unlock(&dec
->iso_mutex
);
966 static int ttusb_dec_start_ts_feed(struct dvb_demux_feed
*dvbdmxfeed
)
968 struct dvb_demux
*dvbdmx
= dvbdmxfeed
->demux
;
969 struct ttusb_dec
*dec
= dvbdmx
->priv
;
973 dprintk("%s\n", __func__
);
975 dprintk(" ts_type:");
977 if (dvbdmxfeed
->ts_type
& TS_DECODER
)
978 dprintk(" TS_DECODER");
980 if (dvbdmxfeed
->ts_type
& TS_PACKET
)
981 dprintk(" TS_PACKET");
983 if (dvbdmxfeed
->ts_type
& TS_PAYLOAD_ONLY
)
984 dprintk(" TS_PAYLOAD_ONLY");
988 switch (dvbdmxfeed
->pes_type
) {
991 dprintk(" pes_type: DMX_PES_VIDEO\n");
992 dec
->pid
[DMX_PES_PCR
] = dvbdmxfeed
->pid
;
993 dec
->pid
[DMX_PES_VIDEO
] = dvbdmxfeed
->pid
;
994 dec
->video_filter
= dvbdmxfeed
->filter
;
995 ttusb_dec_set_pids(dec
);
999 dprintk(" pes_type: DMX_PES_AUDIO\n");
1000 dec
->pid
[DMX_PES_AUDIO
] = dvbdmxfeed
->pid
;
1001 dec
->audio_filter
= dvbdmxfeed
->filter
;
1002 ttusb_dec_set_pids(dec
);
1005 case DMX_PES_TELETEXT
:
1006 dec
->pid
[DMX_PES_TELETEXT
] = dvbdmxfeed
->pid
;
1007 dprintk(" pes_type: DMX_PES_TELETEXT(not supported)\n");
1011 dprintk(" pes_type: DMX_PES_PCR\n");
1012 dec
->pid
[DMX_PES_PCR
] = dvbdmxfeed
->pid
;
1013 ttusb_dec_set_pids(dec
);
1017 dprintk(" pes_type: DMX_PES_OTHER(not supported)\n");
1021 dprintk(" pes_type: unknown (%d)\n", dvbdmxfeed
->pes_type
);
1026 result
= ttusb_dec_send_command(dec
, 0x80, sizeof(b0
), b0
, NULL
, NULL
);
1030 dec
->pva_stream_count
++;
1031 return ttusb_dec_start_iso_xfer(dec
);
1034 static int ttusb_dec_start_sec_feed(struct dvb_demux_feed
*dvbdmxfeed
)
1036 struct ttusb_dec
*dec
= dvbdmxfeed
->demux
->priv
;
1037 u8 b0
[] = { 0x00, 0x00, 0x00, 0x01,
1038 0x00, 0x00, 0x00, 0x00,
1039 0x00, 0x00, 0x00, 0x00,
1040 0x00, 0x00, 0x00, 0x00,
1041 0x00, 0xff, 0x00, 0x00,
1042 0x00, 0x00, 0x00, 0x00,
1043 0x00, 0x00, 0x00, 0x00,
1046 u8 c
[COMMAND_PACKET_SIZE
];
1049 struct filter_info
*finfo
;
1050 unsigned long flags
;
1053 dprintk("%s\n", __func__
);
1055 pid
= htons(dvbdmxfeed
->pid
);
1056 memcpy(&b0
[0], &pid
, 2);
1057 memcpy(&b0
[4], &x
, 1);
1058 memcpy(&b0
[5], &dvbdmxfeed
->filter
->filter
.filter_value
[0], 1);
1060 result
= ttusb_dec_send_command(dec
, 0x60, sizeof(b0
), b0
,
1064 if (c_length
== 2) {
1065 if (!(finfo
= kmalloc(sizeof(struct filter_info
),
1069 finfo
->stream_id
= c
[1];
1070 finfo
->filter
= dvbdmxfeed
->filter
;
1072 spin_lock_irqsave(&dec
->filter_info_list_lock
, flags
);
1073 list_add_tail(&finfo
->filter_info_list
,
1074 &dec
->filter_info_list
);
1075 spin_unlock_irqrestore(&dec
->filter_info_list_lock
,
1078 dvbdmxfeed
->priv
= finfo
;
1080 dec
->filter_stream_count
++;
1081 return ttusb_dec_start_iso_xfer(dec
);
1089 static int ttusb_dec_start_feed(struct dvb_demux_feed
*dvbdmxfeed
)
1091 struct dvb_demux
*dvbdmx
= dvbdmxfeed
->demux
;
1093 dprintk("%s\n", __func__
);
1095 if (!dvbdmx
->dmx
.frontend
)
1098 dprintk(" pid: 0x%04X\n", dvbdmxfeed
->pid
);
1100 switch (dvbdmxfeed
->type
) {
1103 return ttusb_dec_start_ts_feed(dvbdmxfeed
);
1107 return ttusb_dec_start_sec_feed(dvbdmxfeed
);
1111 dprintk(" type: unknown (%d)\n", dvbdmxfeed
->type
);
1117 static int ttusb_dec_stop_ts_feed(struct dvb_demux_feed
*dvbdmxfeed
)
1119 struct ttusb_dec
*dec
= dvbdmxfeed
->demux
->priv
;
1122 ttusb_dec_send_command(dec
, 0x81, sizeof(b0
), b0
, NULL
, NULL
);
1124 dec
->pva_stream_count
--;
1126 ttusb_dec_stop_iso_xfer(dec
);
1131 static int ttusb_dec_stop_sec_feed(struct dvb_demux_feed
*dvbdmxfeed
)
1133 struct ttusb_dec
*dec
= dvbdmxfeed
->demux
->priv
;
1134 u8 b0
[] = { 0x00, 0x00 };
1135 struct filter_info
*finfo
= (struct filter_info
*)dvbdmxfeed
->priv
;
1136 unsigned long flags
;
1138 b0
[1] = finfo
->stream_id
;
1139 spin_lock_irqsave(&dec
->filter_info_list_lock
, flags
);
1140 list_del(&finfo
->filter_info_list
);
1141 spin_unlock_irqrestore(&dec
->filter_info_list_lock
, flags
);
1143 ttusb_dec_send_command(dec
, 0x62, sizeof(b0
), b0
, NULL
, NULL
);
1145 dec
->filter_stream_count
--;
1147 ttusb_dec_stop_iso_xfer(dec
);
1152 static int ttusb_dec_stop_feed(struct dvb_demux_feed
*dvbdmxfeed
)
1154 dprintk("%s\n", __func__
);
1156 switch (dvbdmxfeed
->type
) {
1158 return ttusb_dec_stop_ts_feed(dvbdmxfeed
);
1162 return ttusb_dec_stop_sec_feed(dvbdmxfeed
);
1169 static void ttusb_dec_free_iso_urbs(struct ttusb_dec
*dec
)
1173 dprintk("%s\n", __func__
);
1175 for (i
= 0; i
< ISO_BUF_COUNT
; i
++)
1176 usb_free_urb(dec
->iso_urb
[i
]);
1177 kfree(dec
->iso_buffer
);
1180 static int ttusb_dec_alloc_iso_urbs(struct ttusb_dec
*dec
)
1184 dprintk("%s\n", __func__
);
1186 dec
->iso_buffer
= kcalloc(FRAMES_PER_ISO_BUF
* ISO_BUF_COUNT
,
1187 ISO_FRAME_SIZE
, GFP_KERNEL
);
1188 if (!dec
->iso_buffer
)
1191 for (i
= 0; i
< ISO_BUF_COUNT
; i
++) {
1194 if (!(urb
= usb_alloc_urb(FRAMES_PER_ISO_BUF
, GFP_ATOMIC
))) {
1195 ttusb_dec_free_iso_urbs(dec
);
1199 dec
->iso_urb
[i
] = urb
;
1202 ttusb_dec_setup_urbs(dec
);
1207 static void ttusb_dec_init_tasklet(struct ttusb_dec
*dec
)
1209 spin_lock_init(&dec
->urb_frame_list_lock
);
1210 INIT_LIST_HEAD(&dec
->urb_frame_list
);
1211 tasklet_init(&dec
->urb_tasklet
, ttusb_dec_process_urb_frame_list
,
1212 (unsigned long)dec
);
1215 static int ttusb_init_rc( struct ttusb_dec
*dec
)
1217 struct input_dev
*input_dev
;
1218 u8 b
[] = { 0x00, 0x01 };
1222 usb_make_path(dec
->udev
, dec
->rc_phys
, sizeof(dec
->rc_phys
));
1223 strlcat(dec
->rc_phys
, "/input0", sizeof(dec
->rc_phys
));
1225 input_dev
= input_allocate_device();
1229 input_dev
->name
= "ttusb_dec remote control";
1230 input_dev
->phys
= dec
->rc_phys
;
1231 input_dev
->evbit
[0] = BIT_MASK(EV_KEY
);
1232 input_dev
->keycodesize
= sizeof(u16
);
1233 input_dev
->keycodemax
= 0x1a;
1234 input_dev
->keycode
= rc_keys
;
1236 for (i
= 0; i
< ARRAY_SIZE(rc_keys
); i
++)
1237 set_bit(rc_keys
[i
], input_dev
->keybit
);
1239 err
= input_register_device(input_dev
);
1241 input_free_device(input_dev
);
1245 dec
->rc_input_dev
= input_dev
;
1246 if (usb_submit_urb(dec
->irq_urb
, GFP_KERNEL
))
1247 printk("%s: usb_submit_urb failed\n",__func__
);
1248 /* enable irq pipe */
1249 ttusb_dec_send_command(dec
,0xb0,sizeof(b
),b
,NULL
,NULL
);
1254 static void ttusb_dec_init_v_pes(struct ttusb_dec
*dec
)
1256 dprintk("%s\n", __func__
);
1258 dec
->v_pes
[0] = 0x00;
1259 dec
->v_pes
[1] = 0x00;
1260 dec
->v_pes
[2] = 0x01;
1261 dec
->v_pes
[3] = 0xe0;
1264 static int ttusb_dec_init_usb(struct ttusb_dec
*dec
)
1268 dprintk("%s\n", __func__
);
1270 mutex_init(&dec
->usb_mutex
);
1271 mutex_init(&dec
->iso_mutex
);
1273 dec
->command_pipe
= usb_sndbulkpipe(dec
->udev
, COMMAND_PIPE
);
1274 dec
->result_pipe
= usb_rcvbulkpipe(dec
->udev
, RESULT_PIPE
);
1275 dec
->in_pipe
= usb_rcvisocpipe(dec
->udev
, IN_PIPE
);
1276 dec
->out_pipe
= usb_sndisocpipe(dec
->udev
, OUT_PIPE
);
1277 dec
->irq_pipe
= usb_rcvintpipe(dec
->udev
, IRQ_PIPE
);
1280 dec
->irq_urb
= usb_alloc_urb(0, GFP_KERNEL
);
1284 dec
->irq_buffer
= usb_alloc_coherent(dec
->udev
,IRQ_PACKET_SIZE
,
1285 GFP_KERNEL
, &dec
->irq_dma_handle
);
1286 if(!dec
->irq_buffer
) {
1287 usb_free_urb(dec
->irq_urb
);
1290 usb_fill_int_urb(dec
->irq_urb
, dec
->udev
,dec
->irq_pipe
,
1291 dec
->irq_buffer
, IRQ_PACKET_SIZE
,
1292 ttusb_dec_handle_irq
, dec
, 1);
1293 dec
->irq_urb
->transfer_dma
= dec
->irq_dma_handle
;
1294 dec
->irq_urb
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
1297 result
= ttusb_dec_alloc_iso_urbs(dec
);
1299 usb_free_urb(dec
->irq_urb
);
1300 usb_free_coherent(dec
->udev
, IRQ_PACKET_SIZE
,
1301 dec
->irq_buffer
, dec
->irq_dma_handle
);
1306 static int ttusb_dec_boot_dsp(struct ttusb_dec
*dec
)
1308 int i
, j
, actual_len
, result
, size
, trans_count
;
1309 u8 b0
[] = { 0x00, 0x00, 0x00, 0x00,
1310 0x00, 0x00, 0x00, 0x00,
1315 const u8
*firmware
= NULL
;
1316 size_t firmware_size
= 0;
1317 u16 firmware_csum
= 0;
1318 __be16 firmware_csum_ns
;
1319 __be32 firmware_size_nl
;
1320 u32 crc32_csum
, crc32_check
;
1322 const struct firmware
*fw_entry
= NULL
;
1324 dprintk("%s\n", __func__
);
1326 result
= request_firmware(&fw_entry
, dec
->firmware_name
, &dec
->udev
->dev
);
1328 printk(KERN_ERR
"%s: Firmware (%s) unavailable.\n",
1329 __func__
, dec
->firmware_name
);
1333 firmware
= fw_entry
->data
;
1334 firmware_size
= fw_entry
->size
;
1336 if (firmware_size
< 60) {
1337 printk("%s: firmware size too small for DSP code (%zu < 60).\n",
1338 __func__
, firmware_size
);
1339 release_firmware(fw_entry
);
1343 /* a 32 bit checksum over the first 56 bytes of the DSP Code is stored
1344 at offset 56 of file, so use it to check if the firmware file is
1346 crc32_csum
= crc32(~0L, firmware
, 56) ^ ~0L;
1347 memcpy(&tmp
, &firmware
[56], 4);
1348 crc32_check
= ntohl(tmp
);
1349 if (crc32_csum
!= crc32_check
) {
1350 printk("%s: crc32 check of DSP code failed (calculated 0x%08x != 0x%08x in file), file invalid.\n",
1351 __func__
, crc32_csum
, crc32_check
);
1352 release_firmware(fw_entry
);
1355 memcpy(idstring
, &firmware
[36], 20);
1356 idstring
[20] = '\0';
1357 printk(KERN_INFO
"ttusb_dec: found DSP code \"%s\".\n", idstring
);
1359 firmware_size_nl
= htonl(firmware_size
);
1360 memcpy(b0
, &firmware_size_nl
, 4);
1361 firmware_csum
= crc16(~0, firmware
, firmware_size
) ^ ~0;
1362 firmware_csum_ns
= htons(firmware_csum
);
1363 memcpy(&b0
[6], &firmware_csum_ns
, 2);
1365 result
= ttusb_dec_send_command(dec
, 0x41, sizeof(b0
), b0
, NULL
, NULL
);
1368 release_firmware(fw_entry
);
1375 b
= kmalloc(ARM_PACKET_SIZE
, GFP_KERNEL
);
1377 release_firmware(fw_entry
);
1381 for (i
= 0; i
< firmware_size
; i
+= COMMAND_PACKET_SIZE
) {
1382 size
= firmware_size
- i
;
1383 if (size
> COMMAND_PACKET_SIZE
)
1384 size
= COMMAND_PACKET_SIZE
;
1387 b
[j
+ 1] = trans_count
++;
1390 memcpy(&b
[j
+ 4], &firmware
[i
], size
);
1392 j
+= COMMAND_PACKET_SIZE
+ 4;
1394 if (j
>= ARM_PACKET_SIZE
) {
1395 result
= usb_bulk_msg(dec
->udev
, dec
->command_pipe
, b
,
1396 ARM_PACKET_SIZE
, &actual_len
,
1399 } else if (size
< COMMAND_PACKET_SIZE
) {
1400 result
= usb_bulk_msg(dec
->udev
, dec
->command_pipe
, b
,
1401 j
- COMMAND_PACKET_SIZE
+ size
,
1406 result
= ttusb_dec_send_command(dec
, 0x43, sizeof(b1
), b1
, NULL
, NULL
);
1408 release_firmware(fw_entry
);
1414 static int ttusb_dec_init_stb(struct ttusb_dec
*dec
)
1417 unsigned int mode
= 0, model
= 0, version
= 0;
1419 dprintk("%s\n", __func__
);
1421 result
= ttusb_dec_get_stb_state(dec
, &mode
, &model
, &version
);
1426 if (version
== 0xABCDEFAB)
1427 printk(KERN_INFO
"ttusb_dec: no version info in Firmware\n");
1429 printk(KERN_INFO
"ttusb_dec: Firmware %x.%02x%c%c\n",
1430 version
>> 24, (version
>> 16) & 0xff,
1431 (version
>> 8) & 0xff, version
& 0xff);
1433 result
= ttusb_dec_boot_dsp(dec
);
1437 /* We can't trust the USB IDs that some firmwares
1443 ttusb_dec_set_model(dec
, TTUSB_DEC3000S
);
1447 ttusb_dec_set_model(dec
, TTUSB_DEC2000T
);
1450 ttusb_dec_set_model(dec
, TTUSB_DEC2540T
);
1453 printk(KERN_ERR
"%s: unknown model returned by firmware (%08x) - please report\n",
1457 if (version
>= 0x01770000)
1458 dec
->can_playback
= 1;
1463 static int ttusb_dec_init_dvb(struct ttusb_dec
*dec
)
1467 dprintk("%s\n", __func__
);
1469 if ((result
= dvb_register_adapter(&dec
->adapter
,
1470 dec
->model_name
, THIS_MODULE
,
1473 printk("%s: dvb_register_adapter failed: error %d\n",
1479 dec
->demux
.dmx
.capabilities
= DMX_TS_FILTERING
| DMX_SECTION_FILTERING
;
1481 dec
->demux
.priv
= (void *)dec
;
1482 dec
->demux
.filternum
= 31;
1483 dec
->demux
.feednum
= 31;
1484 dec
->demux
.start_feed
= ttusb_dec_start_feed
;
1485 dec
->demux
.stop_feed
= ttusb_dec_stop_feed
;
1486 dec
->demux
.write_to_decoder
= NULL
;
1488 if ((result
= dvb_dmx_init(&dec
->demux
)) < 0) {
1489 printk("%s: dvb_dmx_init failed: error %d\n", __func__
,
1492 dvb_unregister_adapter(&dec
->adapter
);
1497 dec
->dmxdev
.filternum
= 32;
1498 dec
->dmxdev
.demux
= &dec
->demux
.dmx
;
1499 dec
->dmxdev
.capabilities
= 0;
1501 if ((result
= dvb_dmxdev_init(&dec
->dmxdev
, &dec
->adapter
)) < 0) {
1502 printk("%s: dvb_dmxdev_init failed: error %d\n",
1505 dvb_dmx_release(&dec
->demux
);
1506 dvb_unregister_adapter(&dec
->adapter
);
1511 dec
->frontend
.source
= DMX_FRONTEND_0
;
1513 if ((result
= dec
->demux
.dmx
.add_frontend(&dec
->demux
.dmx
,
1514 &dec
->frontend
)) < 0) {
1515 printk("%s: dvb_dmx_init failed: error %d\n", __func__
,
1518 dvb_dmxdev_release(&dec
->dmxdev
);
1519 dvb_dmx_release(&dec
->demux
);
1520 dvb_unregister_adapter(&dec
->adapter
);
1525 if ((result
= dec
->demux
.dmx
.connect_frontend(&dec
->demux
.dmx
,
1526 &dec
->frontend
)) < 0) {
1527 printk("%s: dvb_dmx_init failed: error %d\n", __func__
,
1530 dec
->demux
.dmx
.remove_frontend(&dec
->demux
.dmx
, &dec
->frontend
);
1531 dvb_dmxdev_release(&dec
->dmxdev
);
1532 dvb_dmx_release(&dec
->demux
);
1533 dvb_unregister_adapter(&dec
->adapter
);
1538 dvb_net_init(&dec
->adapter
, &dec
->dvb_net
, &dec
->demux
.dmx
);
1543 static void ttusb_dec_exit_dvb(struct ttusb_dec
*dec
)
1545 dprintk("%s\n", __func__
);
1547 dvb_net_release(&dec
->dvb_net
);
1548 dec
->demux
.dmx
.close(&dec
->demux
.dmx
);
1549 dec
->demux
.dmx
.remove_frontend(&dec
->demux
.dmx
, &dec
->frontend
);
1550 dvb_dmxdev_release(&dec
->dmxdev
);
1551 dvb_dmx_release(&dec
->demux
);
1553 dvb_unregister_frontend(dec
->fe
);
1554 if (dec
->fe
->ops
.release
)
1555 dec
->fe
->ops
.release(dec
->fe
);
1557 dvb_unregister_adapter(&dec
->adapter
);
1560 static void ttusb_dec_exit_rc(struct ttusb_dec
*dec
)
1562 dprintk("%s\n", __func__
);
1564 if (dec
->rc_input_dev
) {
1565 input_unregister_device(dec
->rc_input_dev
);
1566 dec
->rc_input_dev
= NULL
;
1571 static void ttusb_dec_exit_usb(struct ttusb_dec
*dec
)
1575 dprintk("%s\n", __func__
);
1578 /* we have to check whether the irq URB is already submitted.
1579 * As the irq is submitted after the interface is changed,
1580 * this is the best method i figured out.
1582 if (dec
->interface
== TTUSB_DEC_INTERFACE_IN
)
1583 usb_kill_urb(dec
->irq_urb
);
1585 usb_free_urb(dec
->irq_urb
);
1587 usb_free_coherent(dec
->udev
, IRQ_PACKET_SIZE
,
1588 dec
->irq_buffer
, dec
->irq_dma_handle
);
1591 dec
->iso_stream_count
= 0;
1593 for (i
= 0; i
< ISO_BUF_COUNT
; i
++)
1594 usb_kill_urb(dec
->iso_urb
[i
]);
1596 ttusb_dec_free_iso_urbs(dec
);
1599 static void ttusb_dec_exit_tasklet(struct ttusb_dec
*dec
)
1601 struct list_head
*item
;
1602 struct urb_frame
*frame
;
1604 tasklet_kill(&dec
->urb_tasklet
);
1606 while ((item
= dec
->urb_frame_list
.next
) != &dec
->urb_frame_list
) {
1607 frame
= list_entry(item
, struct urb_frame
, urb_frame_list
);
1608 list_del(&frame
->urb_frame_list
);
1613 static void ttusb_dec_init_filters(struct ttusb_dec
*dec
)
1615 INIT_LIST_HEAD(&dec
->filter_info_list
);
1616 spin_lock_init(&dec
->filter_info_list_lock
);
1619 static void ttusb_dec_exit_filters(struct ttusb_dec
*dec
)
1621 struct list_head
*item
;
1622 struct filter_info
*finfo
;
1624 while ((item
= dec
->filter_info_list
.next
) != &dec
->filter_info_list
) {
1625 finfo
= list_entry(item
, struct filter_info
, filter_info_list
);
1626 list_del(&finfo
->filter_info_list
);
1631 static int fe_send_command(struct dvb_frontend
* fe
, const u8 command
,
1632 int param_length
, const u8 params
[],
1633 int *result_length
, u8 cmd_result
[])
1635 struct ttusb_dec
* dec
= fe
->dvb
->priv
;
1636 return ttusb_dec_send_command(dec
, command
, param_length
, params
, result_length
, cmd_result
);
1639 static const struct ttusbdecfe_config fe_config
= {
1640 .send_command
= fe_send_command
1643 static int ttusb_dec_probe(struct usb_interface
*intf
,
1644 const struct usb_device_id
*id
)
1646 struct usb_device
*udev
;
1647 struct ttusb_dec
*dec
;
1650 dprintk("%s\n", __func__
);
1652 udev
= interface_to_usbdev(intf
);
1654 if (!(dec
= kzalloc(sizeof(struct ttusb_dec
), GFP_KERNEL
))) {
1655 printk("%s: couldn't allocate memory.\n", __func__
);
1659 usb_set_intfdata(intf
, (void *)dec
);
1661 switch (id
->idProduct
) {
1663 ttusb_dec_set_model(dec
, TTUSB_DEC3000S
);
1667 ttusb_dec_set_model(dec
, TTUSB_DEC2000T
);
1671 ttusb_dec_set_model(dec
, TTUSB_DEC2540T
);
1677 result
= ttusb_dec_init_usb(dec
);
1680 result
= ttusb_dec_init_stb(dec
);
1683 result
= ttusb_dec_init_dvb(dec
);
1687 dec
->adapter
.priv
= dec
;
1688 switch (id
->idProduct
) {
1690 dec
->fe
= ttusbdecfe_dvbs_attach(&fe_config
);
1695 dec
->fe
= ttusbdecfe_dvbt_attach(&fe_config
);
1699 if (dec
->fe
== NULL
) {
1700 printk("dvb-ttusb-dec: A frontend driver was not found for device [%04x:%04x]\n",
1701 le16_to_cpu(dec
->udev
->descriptor
.idVendor
),
1702 le16_to_cpu(dec
->udev
->descriptor
.idProduct
));
1704 if (dvb_register_frontend(&dec
->adapter
, dec
->fe
)) {
1705 printk("budget-ci: Frontend registration failed!\n");
1706 if (dec
->fe
->ops
.release
)
1707 dec
->fe
->ops
.release(dec
->fe
);
1712 ttusb_dec_init_v_pes(dec
);
1713 ttusb_dec_init_filters(dec
);
1714 ttusb_dec_init_tasklet(dec
);
1718 ttusb_dec_set_interface(dec
, TTUSB_DEC_INTERFACE_IN
);
1725 ttusb_dec_exit_usb(dec
);
1731 static void ttusb_dec_disconnect(struct usb_interface
*intf
)
1733 struct ttusb_dec
*dec
= usb_get_intfdata(intf
);
1735 usb_set_intfdata(intf
, NULL
);
1737 dprintk("%s\n", __func__
);
1740 ttusb_dec_exit_tasklet(dec
);
1741 ttusb_dec_exit_filters(dec
);
1743 ttusb_dec_exit_rc(dec
);
1744 ttusb_dec_exit_usb(dec
);
1745 ttusb_dec_exit_dvb(dec
);
1751 static void ttusb_dec_set_model(struct ttusb_dec
*dec
,
1752 enum ttusb_dec_model model
)
1757 case TTUSB_DEC2000T
:
1758 dec
->model_name
= "DEC2000-t";
1759 dec
->firmware_name
= "dvb-ttusb-dec-2000t.fw";
1762 case TTUSB_DEC2540T
:
1763 dec
->model_name
= "DEC2540-t";
1764 dec
->firmware_name
= "dvb-ttusb-dec-2540t.fw";
1767 case TTUSB_DEC3000S
:
1768 dec
->model_name
= "DEC3000-s";
1769 dec
->firmware_name
= "dvb-ttusb-dec-3000s.fw";
1774 static const struct usb_device_id ttusb_dec_table
[] = {
1775 {USB_DEVICE(0x0b48, 0x1006)}, /* DEC3000-s */
1776 /*{USB_DEVICE(0x0b48, 0x1007)}, Unconfirmed */
1777 {USB_DEVICE(0x0b48, 0x1008)}, /* DEC2000-t */
1778 {USB_DEVICE(0x0b48, 0x1009)}, /* DEC2540-t */
1782 static struct usb_driver ttusb_dec_driver
= {
1783 .name
= "ttusb-dec",
1784 .probe
= ttusb_dec_probe
,
1785 .disconnect
= ttusb_dec_disconnect
,
1786 .id_table
= ttusb_dec_table
,
1789 module_usb_driver(ttusb_dec_driver
);
1791 MODULE_AUTHOR("Alex Woods <linux-dvb@giblets.org>");
1792 MODULE_DESCRIPTION(DRIVER_NAME
);
1793 MODULE_LICENSE("GPL");
1794 MODULE_DEVICE_TABLE(usb
, ttusb_dec_table
);