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