Lines Matching refs:dec
204 static void ttusb_dec_set_model(struct ttusb_dec *dec,
209 struct ttusb_dec * dec = urb->context; in ttusb_dec_handle_irq() local
210 char *buffer = dec->irq_buffer; in ttusb_dec_handle_irq()
241 input_report_key(dec->rc_input_dev, rc_keys[buffer[4] - 1], 1); in ttusb_dec_handle_irq()
242 input_sync(dec->rc_input_dev); in ttusb_dec_handle_irq()
243 input_report_key(dec->rc_input_dev, rc_keys[buffer[4] - 1], 0); in ttusb_dec_handle_irq()
244 input_sync(dec->rc_input_dev); in ttusb_dec_handle_irq()
266 static int ttusb_dec_send_command(struct ttusb_dec *dec, const u8 command, in ttusb_dec_send_command() argument
279 if ((result = mutex_lock_interruptible(&dec->usb_mutex))) { in ttusb_dec_send_command()
286 b[1] = ++dec->trans_count; in ttusb_dec_send_command()
300 result = usb_bulk_msg(dec->udev, dec->command_pipe, b, in ttusb_dec_send_command()
306 mutex_unlock(&dec->usb_mutex); in ttusb_dec_send_command()
311 result = usb_bulk_msg(dec->udev, dec->result_pipe, b, in ttusb_dec_send_command()
317 mutex_unlock(&dec->usb_mutex); in ttusb_dec_send_command()
333 mutex_unlock(&dec->usb_mutex); in ttusb_dec_send_command()
340 static int ttusb_dec_get_stb_state (struct ttusb_dec *dec, unsigned int *mode, in ttusb_dec_get_stb_state() argument
350 result = ttusb_dec_send_command(dec, 0x08, 0, NULL, &c_length, c); in ttusb_dec_get_stb_state()
375 struct ttusb_dec *dec = priv; in ttusb_dec_audio_pes2ts_cb() local
377 dec->audio_filter->feed->cb.ts(data, 188, NULL, 0, in ttusb_dec_audio_pes2ts_cb()
378 &dec->audio_filter->feed->feed.ts); in ttusb_dec_audio_pes2ts_cb()
385 struct ttusb_dec *dec = priv; in ttusb_dec_video_pes2ts_cb() local
387 dec->video_filter->feed->cb.ts(data, 188, NULL, 0, in ttusb_dec_video_pes2ts_cb()
388 &dec->video_filter->feed->feed.ts); in ttusb_dec_video_pes2ts_cb()
393 static void ttusb_dec_set_pids(struct ttusb_dec *dec) in ttusb_dec_set_pids() argument
399 __be16 pcr = htons(dec->pid[DMX_PES_PCR]); in ttusb_dec_set_pids()
400 __be16 audio = htons(dec->pid[DMX_PES_AUDIO]); in ttusb_dec_set_pids()
401 __be16 video = htons(dec->pid[DMX_PES_VIDEO]); in ttusb_dec_set_pids()
409 ttusb_dec_send_command(dec, 0x50, sizeof(b), b, NULL, NULL); in ttusb_dec_set_pids()
411 dvb_filter_pes2ts_init(&dec->a_pes2ts, dec->pid[DMX_PES_AUDIO], in ttusb_dec_set_pids()
412 ttusb_dec_audio_pes2ts_cb, dec); in ttusb_dec_set_pids()
413 dvb_filter_pes2ts_init(&dec->v_pes2ts, dec->pid[DMX_PES_VIDEO], in ttusb_dec_set_pids()
414 ttusb_dec_video_pes2ts_cb, dec); in ttusb_dec_set_pids()
415 dec->v_pes_length = 0; in ttusb_dec_set_pids()
416 dec->v_pes_postbytes = 0; in ttusb_dec_set_pids()
419 static void ttusb_dec_process_pva(struct ttusb_dec *dec, u8 *pva, int length) in ttusb_dec_process_pva() argument
439 dec->video_filter->feed->cb.ts(pva, length, NULL, 0, in ttusb_dec_process_pva()
440 &dec->video_filter->feed->feed.ts); in ttusb_dec_process_pva()
444 if (dec->v_pes_postbytes > 0 && in ttusb_dec_process_pva()
445 dec->v_pes_postbytes == prebytes) { in ttusb_dec_process_pva()
446 memcpy(&dec->v_pes[dec->v_pes_length], in ttusb_dec_process_pva()
449 dvb_filter_pes2ts(&dec->v_pes2ts, dec->v_pes, in ttusb_dec_process_pva()
450 dec->v_pes_length + prebytes, 1); in ttusb_dec_process_pva()
454 dec->v_pes[7] = 0x80; in ttusb_dec_process_pva()
455 dec->v_pes[8] = 0x05; in ttusb_dec_process_pva()
457 dec->v_pes[9] = 0x21 | ((pva[8] & 0xc0) >> 5); in ttusb_dec_process_pva()
458 dec->v_pes[10] = ((pva[8] & 0x3f) << 2) | in ttusb_dec_process_pva()
460 dec->v_pes[11] = 0x01 | in ttusb_dec_process_pva()
463 dec->v_pes[12] = ((pva[10] & 0x7f) << 1) | in ttusb_dec_process_pva()
465 dec->v_pes[13] = 0x01 | ((pva[11] & 0x7f) << 1); in ttusb_dec_process_pva()
467 memcpy(&dec->v_pes[14], &pva[12 + prebytes], in ttusb_dec_process_pva()
469 dec->v_pes_length = 14 + length - 12 - prebytes; in ttusb_dec_process_pva()
471 dec->v_pes[7] = 0x00; in ttusb_dec_process_pva()
472 dec->v_pes[8] = 0x00; in ttusb_dec_process_pva()
474 memcpy(&dec->v_pes[9], &pva[8], length - 8); in ttusb_dec_process_pva()
475 dec->v_pes_length = 9 + length - 8; in ttusb_dec_process_pva()
478 dec->v_pes_postbytes = postbytes; in ttusb_dec_process_pva()
480 if (dec->v_pes[9 + dec->v_pes[8]] == 0x00 && in ttusb_dec_process_pva()
481 dec->v_pes[10 + dec->v_pes[8]] == 0x00 && in ttusb_dec_process_pva()
482 dec->v_pes[11 + dec->v_pes[8]] == 0x01) in ttusb_dec_process_pva()
483 dec->v_pes[6] = 0x84; in ttusb_dec_process_pva()
485 dec->v_pes[6] = 0x80; in ttusb_dec_process_pva()
487 v_pes_payload_length = htons(dec->v_pes_length - 6 + in ttusb_dec_process_pva()
489 memcpy(&dec->v_pes[4], &v_pes_payload_length, 2); in ttusb_dec_process_pva()
492 dvb_filter_pes2ts(&dec->v_pes2ts, dec->v_pes, in ttusb_dec_process_pva()
493 dec->v_pes_length, 1); in ttusb_dec_process_pva()
500 dec->audio_filter->feed->cb.ts(pva, length, NULL, 0, in ttusb_dec_process_pva()
501 &dec->audio_filter->feed->feed.ts); in ttusb_dec_process_pva()
505 dvb_filter_pes2ts(&dec->a_pes2ts, &pva[8], length - 8, in ttusb_dec_process_pva()
516 static void ttusb_dec_process_filter(struct ttusb_dec *dec, u8 *packet, in ttusb_dec_process_filter() argument
526 spin_lock_irqsave(&dec->filter_info_list_lock, flags); in ttusb_dec_process_filter()
527 for (item = dec->filter_info_list.next; item != &dec->filter_info_list; in ttusb_dec_process_filter()
535 spin_unlock_irqrestore(&dec->filter_info_list_lock, flags); in ttusb_dec_process_filter()
542 static void ttusb_dec_process_packet(struct ttusb_dec *dec) in ttusb_dec_process_packet() argument
548 if (dec->packet_length % 2) { in ttusb_dec_process_packet()
553 for (i = 0; i < dec->packet_length; i += 2) in ttusb_dec_process_packet()
554 csum ^= ((dec->packet[i] << 8) + dec->packet[i + 1]); in ttusb_dec_process_packet()
561 packet_id = dec->packet[dec->packet_length - 4] << 8; in ttusb_dec_process_packet()
562 packet_id += dec->packet[dec->packet_length - 3]; in ttusb_dec_process_packet()
564 if ((packet_id != dec->next_packet_id) && dec->next_packet_id) { in ttusb_dec_process_packet()
566 __func__, dec->next_packet_id - 1, packet_id); in ttusb_dec_process_packet()
570 dec->next_packet_id = 0x8000; in ttusb_dec_process_packet()
572 dec->next_packet_id = packet_id + 1; in ttusb_dec_process_packet()
574 switch (dec->packet_type) { in ttusb_dec_process_packet()
576 if (dec->pva_stream_count) in ttusb_dec_process_packet()
577 ttusb_dec_process_pva(dec, dec->packet, in ttusb_dec_process_packet()
578 dec->packet_payload_length); in ttusb_dec_process_packet()
582 if (dec->filter_stream_count) in ttusb_dec_process_packet()
583 ttusb_dec_process_filter(dec, dec->packet, in ttusb_dec_process_packet()
584 dec->packet_payload_length); in ttusb_dec_process_packet()
599 static void ttusb_dec_process_urb_frame(struct ttusb_dec *dec, u8 *b, in ttusb_dec_process_urb_frame() argument
605 switch (dec->packet_state) { in ttusb_dec_process_urb_frame()
611 dec->packet_state++; in ttusb_dec_process_urb_frame()
613 dec->packet_state = 0; in ttusb_dec_process_urb_frame()
620 dec->packet_state++; in ttusb_dec_process_urb_frame()
621 dec->packet_length = 0; in ttusb_dec_process_urb_frame()
623 dec->packet_state = 0; in ttusb_dec_process_urb_frame()
631 dec->packet[dec->packet_length++] = *b++; in ttusb_dec_process_urb_frame()
633 if (dec->packet_length == 2) { in ttusb_dec_process_urb_frame()
634 if (dec->packet[0] == 'A' && in ttusb_dec_process_urb_frame()
635 dec->packet[1] == 'V') { in ttusb_dec_process_urb_frame()
636 dec->packet_type = in ttusb_dec_process_urb_frame()
638 dec->packet_state++; in ttusb_dec_process_urb_frame()
639 } else if (dec->packet[0] == 'S') { in ttusb_dec_process_urb_frame()
640 dec->packet_type = in ttusb_dec_process_urb_frame()
642 dec->packet_state++; in ttusb_dec_process_urb_frame()
643 } else if (dec->packet[0] == 0x00) { in ttusb_dec_process_urb_frame()
644 dec->packet_type = in ttusb_dec_process_urb_frame()
646 dec->packet_payload_length = 2; in ttusb_dec_process_urb_frame()
647 dec->packet_state = 7; in ttusb_dec_process_urb_frame()
651 dec->packet[0], dec->packet[1]); in ttusb_dec_process_urb_frame()
652 dec->packet_state = 0; in ttusb_dec_process_urb_frame()
660 dec->packet[dec->packet_length++] = *b++; in ttusb_dec_process_urb_frame()
662 if (dec->packet_type == TTUSB_DEC_PACKET_PVA && in ttusb_dec_process_urb_frame()
663 dec->packet_length == 8) { in ttusb_dec_process_urb_frame()
664 dec->packet_state++; in ttusb_dec_process_urb_frame()
665 dec->packet_payload_length = 8 + in ttusb_dec_process_urb_frame()
666 (dec->packet[6] << 8) + in ttusb_dec_process_urb_frame()
667 dec->packet[7]; in ttusb_dec_process_urb_frame()
668 } else if (dec->packet_type == in ttusb_dec_process_urb_frame()
670 dec->packet_length == 5) { in ttusb_dec_process_urb_frame()
671 dec->packet_state++; in ttusb_dec_process_urb_frame()
672 dec->packet_payload_length = 5 + in ttusb_dec_process_urb_frame()
673 ((dec->packet[3] & 0x0f) << 8) + in ttusb_dec_process_urb_frame()
674 dec->packet[4]; in ttusb_dec_process_urb_frame()
681 int remainder = dec->packet_payload_length - in ttusb_dec_process_urb_frame()
682 dec->packet_length; in ttusb_dec_process_urb_frame()
685 memcpy(dec->packet + dec->packet_length, in ttusb_dec_process_urb_frame()
687 dec->packet_length += remainder; in ttusb_dec_process_urb_frame()
690 dec->packet_state++; in ttusb_dec_process_urb_frame()
692 memcpy(&dec->packet[dec->packet_length], in ttusb_dec_process_urb_frame()
694 dec->packet_length += length; in ttusb_dec_process_urb_frame()
704 dec->packet[dec->packet_length++] = *b++; in ttusb_dec_process_urb_frame()
706 if (dec->packet_type == TTUSB_DEC_PACKET_SECTION && in ttusb_dec_process_urb_frame()
707 dec->packet_payload_length % 2) in ttusb_dec_process_urb_frame()
710 if (dec->packet_length == in ttusb_dec_process_urb_frame()
711 dec->packet_payload_length + tail) { in ttusb_dec_process_urb_frame()
712 ttusb_dec_process_packet(dec); in ttusb_dec_process_urb_frame()
713 dec->packet_state = 0; in ttusb_dec_process_urb_frame()
723 dec->packet_state = 0; in ttusb_dec_process_urb_frame()
730 struct ttusb_dec *dec = (struct ttusb_dec *)data; in ttusb_dec_process_urb_frame_list() local
736 spin_lock_irqsave(&dec->urb_frame_list_lock, flags); in ttusb_dec_process_urb_frame_list()
737 if ((item = dec->urb_frame_list.next) != &dec->urb_frame_list) { in ttusb_dec_process_urb_frame_list()
742 spin_unlock_irqrestore(&dec->urb_frame_list_lock, in ttusb_dec_process_urb_frame_list()
746 spin_unlock_irqrestore(&dec->urb_frame_list_lock, flags); in ttusb_dec_process_urb_frame_list()
748 ttusb_dec_process_urb_frame(dec, frame->data, frame->length); in ttusb_dec_process_urb_frame_list()
755 struct ttusb_dec *dec = urb->context; in ttusb_dec_process_urb() local
777 spin_lock_irqsave(&dec->urb_frame_list_lock, in ttusb_dec_process_urb()
780 &dec->urb_frame_list); in ttusb_dec_process_urb()
781 spin_unlock_irqrestore(&dec->urb_frame_list_lock, in ttusb_dec_process_urb()
784 tasklet_schedule(&dec->urb_tasklet); in ttusb_dec_process_urb()
794 if (dec->iso_stream_count) in ttusb_dec_process_urb()
798 static void ttusb_dec_setup_urbs(struct ttusb_dec *dec) in ttusb_dec_setup_urbs() argument
806 struct urb *urb = dec->iso_urb[i]; in ttusb_dec_setup_urbs()
808 urb->dev = dec->udev; in ttusb_dec_setup_urbs()
809 urb->context = dec; in ttusb_dec_setup_urbs()
811 urb->pipe = dec->in_pipe; in ttusb_dec_setup_urbs()
817 urb->transfer_buffer = dec->iso_buffer + buffer_offset; in ttusb_dec_setup_urbs()
828 static void ttusb_dec_stop_iso_xfer(struct ttusb_dec *dec) in ttusb_dec_stop_iso_xfer() argument
834 if (mutex_lock_interruptible(&dec->iso_mutex)) in ttusb_dec_stop_iso_xfer()
837 dec->iso_stream_count--; in ttusb_dec_stop_iso_xfer()
839 if (!dec->iso_stream_count) { in ttusb_dec_stop_iso_xfer()
841 usb_kill_urb(dec->iso_urb[i]); in ttusb_dec_stop_iso_xfer()
844 mutex_unlock(&dec->iso_mutex); in ttusb_dec_stop_iso_xfer()
851 static int ttusb_dec_set_interface(struct ttusb_dec *dec, in ttusb_dec_set_interface() argument
857 if (interface != dec->interface) { in ttusb_dec_set_interface()
860 result = usb_set_interface(dec->udev, 0, 0); in ttusb_dec_set_interface()
863 result = ttusb_dec_send_command(dec, 0x80, sizeof(b), in ttusb_dec_set_interface()
867 result = usb_set_interface(dec->udev, 0, 8); in ttusb_dec_set_interface()
870 result = usb_set_interface(dec->udev, 0, 1); in ttusb_dec_set_interface()
877 dec->interface = interface; in ttusb_dec_set_interface()
883 static int ttusb_dec_start_iso_xfer(struct ttusb_dec *dec) in ttusb_dec_start_iso_xfer() argument
889 if (mutex_lock_interruptible(&dec->iso_mutex)) in ttusb_dec_start_iso_xfer()
892 if (!dec->iso_stream_count) { in ttusb_dec_start_iso_xfer()
893 ttusb_dec_setup_urbs(dec); in ttusb_dec_start_iso_xfer()
895 dec->packet_state = 0; in ttusb_dec_start_iso_xfer()
896 dec->v_pes_postbytes = 0; in ttusb_dec_start_iso_xfer()
897 dec->next_packet_id = 0; in ttusb_dec_start_iso_xfer()
900 if ((result = usb_submit_urb(dec->iso_urb[i], in ttusb_dec_start_iso_xfer()
906 usb_kill_urb(dec->iso_urb[i - 1]); in ttusb_dec_start_iso_xfer()
910 mutex_unlock(&dec->iso_mutex); in ttusb_dec_start_iso_xfer()
916 dec->iso_stream_count++; in ttusb_dec_start_iso_xfer()
918 mutex_unlock(&dec->iso_mutex); in ttusb_dec_start_iso_xfer()
926 struct ttusb_dec *dec = dvbdmx->priv; in ttusb_dec_start_ts_feed() local
949 dec->pid[DMX_PES_PCR] = dvbdmxfeed->pid; in ttusb_dec_start_ts_feed()
950 dec->pid[DMX_PES_VIDEO] = dvbdmxfeed->pid; in ttusb_dec_start_ts_feed()
951 dec->video_filter = dvbdmxfeed->filter; in ttusb_dec_start_ts_feed()
952 ttusb_dec_set_pids(dec); in ttusb_dec_start_ts_feed()
957 dec->pid[DMX_PES_AUDIO] = dvbdmxfeed->pid; in ttusb_dec_start_ts_feed()
958 dec->audio_filter = dvbdmxfeed->filter; in ttusb_dec_start_ts_feed()
959 ttusb_dec_set_pids(dec); in ttusb_dec_start_ts_feed()
963 dec->pid[DMX_PES_TELETEXT] = dvbdmxfeed->pid; in ttusb_dec_start_ts_feed()
969 dec->pid[DMX_PES_PCR] = dvbdmxfeed->pid; in ttusb_dec_start_ts_feed()
970 ttusb_dec_set_pids(dec); in ttusb_dec_start_ts_feed()
983 result = ttusb_dec_send_command(dec, 0x80, sizeof(b0), b0, NULL, NULL); in ttusb_dec_start_ts_feed()
987 dec->pva_stream_count++; in ttusb_dec_start_ts_feed()
988 return ttusb_dec_start_iso_xfer(dec); in ttusb_dec_start_ts_feed()
993 struct ttusb_dec *dec = dvbdmxfeed->demux->priv; in ttusb_dec_start_sec_feed() local
1017 result = ttusb_dec_send_command(dec, 0x60, sizeof(b0), b0, in ttusb_dec_start_sec_feed()
1029 spin_lock_irqsave(&dec->filter_info_list_lock, flags); in ttusb_dec_start_sec_feed()
1031 &dec->filter_info_list); in ttusb_dec_start_sec_feed()
1032 spin_unlock_irqrestore(&dec->filter_info_list_lock, in ttusb_dec_start_sec_feed()
1037 dec->filter_stream_count++; in ttusb_dec_start_sec_feed()
1038 return ttusb_dec_start_iso_xfer(dec); in ttusb_dec_start_sec_feed()
1076 struct ttusb_dec *dec = dvbdmxfeed->demux->priv; in ttusb_dec_stop_ts_feed() local
1079 ttusb_dec_send_command(dec, 0x81, sizeof(b0), b0, NULL, NULL); in ttusb_dec_stop_ts_feed()
1081 dec->pva_stream_count--; in ttusb_dec_stop_ts_feed()
1083 ttusb_dec_stop_iso_xfer(dec); in ttusb_dec_stop_ts_feed()
1090 struct ttusb_dec *dec = dvbdmxfeed->demux->priv; in ttusb_dec_stop_sec_feed() local
1096 spin_lock_irqsave(&dec->filter_info_list_lock, flags); in ttusb_dec_stop_sec_feed()
1098 spin_unlock_irqrestore(&dec->filter_info_list_lock, flags); in ttusb_dec_stop_sec_feed()
1100 ttusb_dec_send_command(dec, 0x62, sizeof(b0), b0, NULL, NULL); in ttusb_dec_stop_sec_feed()
1102 dec->filter_stream_count--; in ttusb_dec_stop_sec_feed()
1104 ttusb_dec_stop_iso_xfer(dec); in ttusb_dec_stop_sec_feed()
1126 static void ttusb_dec_free_iso_urbs(struct ttusb_dec *dec) in ttusb_dec_free_iso_urbs() argument
1133 usb_free_urb(dec->iso_urb[i]); in ttusb_dec_free_iso_urbs()
1138 dec->iso_buffer, dec->iso_dma_handle); in ttusb_dec_free_iso_urbs()
1141 static int ttusb_dec_alloc_iso_urbs(struct ttusb_dec *dec) in ttusb_dec_alloc_iso_urbs() argument
1147 dec->iso_buffer = pci_zalloc_consistent(NULL, in ttusb_dec_alloc_iso_urbs()
1149 &dec->iso_dma_handle); in ttusb_dec_alloc_iso_urbs()
1151 if (!dec->iso_buffer) { in ttusb_dec_alloc_iso_urbs()
1161 ttusb_dec_free_iso_urbs(dec); in ttusb_dec_alloc_iso_urbs()
1165 dec->iso_urb[i] = urb; in ttusb_dec_alloc_iso_urbs()
1168 ttusb_dec_setup_urbs(dec); in ttusb_dec_alloc_iso_urbs()
1173 static void ttusb_dec_init_tasklet(struct ttusb_dec *dec) in ttusb_dec_init_tasklet() argument
1175 spin_lock_init(&dec->urb_frame_list_lock); in ttusb_dec_init_tasklet()
1176 INIT_LIST_HEAD(&dec->urb_frame_list); in ttusb_dec_init_tasklet()
1177 tasklet_init(&dec->urb_tasklet, ttusb_dec_process_urb_frame_list, in ttusb_dec_init_tasklet()
1178 (unsigned long)dec); in ttusb_dec_init_tasklet()
1181 static int ttusb_init_rc( struct ttusb_dec *dec) in ttusb_init_rc() argument
1188 usb_make_path(dec->udev, dec->rc_phys, sizeof(dec->rc_phys)); in ttusb_init_rc()
1189 strlcat(dec->rc_phys, "/input0", sizeof(dec->rc_phys)); in ttusb_init_rc()
1196 input_dev->phys = dec->rc_phys; in ttusb_init_rc()
1211 dec->rc_input_dev = input_dev; in ttusb_init_rc()
1212 if (usb_submit_urb(dec->irq_urb, GFP_KERNEL)) in ttusb_init_rc()
1215 ttusb_dec_send_command(dec,0xb0,sizeof(b),b,NULL,NULL); in ttusb_init_rc()
1220 static void ttusb_dec_init_v_pes(struct ttusb_dec *dec) in ttusb_dec_init_v_pes() argument
1224 dec->v_pes[0] = 0x00; in ttusb_dec_init_v_pes()
1225 dec->v_pes[1] = 0x00; in ttusb_dec_init_v_pes()
1226 dec->v_pes[2] = 0x01; in ttusb_dec_init_v_pes()
1227 dec->v_pes[3] = 0xe0; in ttusb_dec_init_v_pes()
1230 static int ttusb_dec_init_usb(struct ttusb_dec *dec) in ttusb_dec_init_usb() argument
1236 mutex_init(&dec->usb_mutex); in ttusb_dec_init_usb()
1237 mutex_init(&dec->iso_mutex); in ttusb_dec_init_usb()
1239 dec->command_pipe = usb_sndbulkpipe(dec->udev, COMMAND_PIPE); in ttusb_dec_init_usb()
1240 dec->result_pipe = usb_rcvbulkpipe(dec->udev, RESULT_PIPE); in ttusb_dec_init_usb()
1241 dec->in_pipe = usb_rcvisocpipe(dec->udev, IN_PIPE); in ttusb_dec_init_usb()
1242 dec->out_pipe = usb_sndisocpipe(dec->udev, OUT_PIPE); in ttusb_dec_init_usb()
1243 dec->irq_pipe = usb_rcvintpipe(dec->udev, IRQ_PIPE); in ttusb_dec_init_usb()
1246 dec->irq_urb = usb_alloc_urb(0, GFP_KERNEL); in ttusb_dec_init_usb()
1247 if(!dec->irq_urb) { in ttusb_dec_init_usb()
1250 dec->irq_buffer = usb_alloc_coherent(dec->udev,IRQ_PACKET_SIZE, in ttusb_dec_init_usb()
1251 GFP_KERNEL, &dec->irq_dma_handle); in ttusb_dec_init_usb()
1252 if(!dec->irq_buffer) { in ttusb_dec_init_usb()
1253 usb_free_urb(dec->irq_urb); in ttusb_dec_init_usb()
1256 usb_fill_int_urb(dec->irq_urb, dec->udev,dec->irq_pipe, in ttusb_dec_init_usb()
1257 dec->irq_buffer, IRQ_PACKET_SIZE, in ttusb_dec_init_usb()
1258 ttusb_dec_handle_irq, dec, 1); in ttusb_dec_init_usb()
1259 dec->irq_urb->transfer_dma = dec->irq_dma_handle; in ttusb_dec_init_usb()
1260 dec->irq_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in ttusb_dec_init_usb()
1263 result = ttusb_dec_alloc_iso_urbs(dec); in ttusb_dec_init_usb()
1265 usb_free_urb(dec->irq_urb); in ttusb_dec_init_usb()
1266 usb_free_coherent(dec->udev, IRQ_PACKET_SIZE, in ttusb_dec_init_usb()
1267 dec->irq_buffer, dec->irq_dma_handle); in ttusb_dec_init_usb()
1272 static int ttusb_dec_boot_dsp(struct ttusb_dec *dec) in ttusb_dec_boot_dsp() argument
1292 result = request_firmware(&fw_entry, dec->firmware_name, &dec->udev->dev); in ttusb_dec_boot_dsp()
1295 __func__, dec->firmware_name); in ttusb_dec_boot_dsp()
1332 result = ttusb_dec_send_command(dec, 0x41, sizeof(b0), b0, NULL, NULL); in ttusb_dec_boot_dsp()
1362 result = usb_bulk_msg(dec->udev, dec->command_pipe, b, in ttusb_dec_boot_dsp()
1367 result = usb_bulk_msg(dec->udev, dec->command_pipe, b, in ttusb_dec_boot_dsp()
1373 result = ttusb_dec_send_command(dec, 0x43, sizeof(b1), b1, NULL, NULL); in ttusb_dec_boot_dsp()
1381 static int ttusb_dec_init_stb(struct ttusb_dec *dec) in ttusb_dec_init_stb() argument
1388 result = ttusb_dec_get_stb_state(dec, &mode, &model, &version); in ttusb_dec_init_stb()
1402 result = ttusb_dec_boot_dsp(dec); in ttusb_dec_init_stb()
1412 ttusb_dec_set_model(dec, TTUSB_DEC3000S); in ttusb_dec_init_stb()
1416 ttusb_dec_set_model(dec, TTUSB_DEC2000T); in ttusb_dec_init_stb()
1419 ttusb_dec_set_model(dec, TTUSB_DEC2540T); in ttusb_dec_init_stb()
1428 dec->can_playback = 1; in ttusb_dec_init_stb()
1433 static int ttusb_dec_init_dvb(struct ttusb_dec *dec) in ttusb_dec_init_dvb() argument
1439 if ((result = dvb_register_adapter(&dec->adapter, in ttusb_dec_init_dvb()
1440 dec->model_name, THIS_MODULE, in ttusb_dec_init_dvb()
1441 &dec->udev->dev, in ttusb_dec_init_dvb()
1449 dec->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING; in ttusb_dec_init_dvb()
1451 dec->demux.priv = (void *)dec; in ttusb_dec_init_dvb()
1452 dec->demux.filternum = 31; in ttusb_dec_init_dvb()
1453 dec->demux.feednum = 31; in ttusb_dec_init_dvb()
1454 dec->demux.start_feed = ttusb_dec_start_feed; in ttusb_dec_init_dvb()
1455 dec->demux.stop_feed = ttusb_dec_stop_feed; in ttusb_dec_init_dvb()
1456 dec->demux.write_to_decoder = NULL; in ttusb_dec_init_dvb()
1458 if ((result = dvb_dmx_init(&dec->demux)) < 0) { in ttusb_dec_init_dvb()
1462 dvb_unregister_adapter(&dec->adapter); in ttusb_dec_init_dvb()
1467 dec->dmxdev.filternum = 32; in ttusb_dec_init_dvb()
1468 dec->dmxdev.demux = &dec->demux.dmx; in ttusb_dec_init_dvb()
1469 dec->dmxdev.capabilities = 0; in ttusb_dec_init_dvb()
1471 if ((result = dvb_dmxdev_init(&dec->dmxdev, &dec->adapter)) < 0) { in ttusb_dec_init_dvb()
1475 dvb_dmx_release(&dec->demux); in ttusb_dec_init_dvb()
1476 dvb_unregister_adapter(&dec->adapter); in ttusb_dec_init_dvb()
1481 dec->frontend.source = DMX_FRONTEND_0; in ttusb_dec_init_dvb()
1483 if ((result = dec->demux.dmx.add_frontend(&dec->demux.dmx, in ttusb_dec_init_dvb()
1484 &dec->frontend)) < 0) { in ttusb_dec_init_dvb()
1488 dvb_dmxdev_release(&dec->dmxdev); in ttusb_dec_init_dvb()
1489 dvb_dmx_release(&dec->demux); in ttusb_dec_init_dvb()
1490 dvb_unregister_adapter(&dec->adapter); in ttusb_dec_init_dvb()
1495 if ((result = dec->demux.dmx.connect_frontend(&dec->demux.dmx, in ttusb_dec_init_dvb()
1496 &dec->frontend)) < 0) { in ttusb_dec_init_dvb()
1500 dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend); in ttusb_dec_init_dvb()
1501 dvb_dmxdev_release(&dec->dmxdev); in ttusb_dec_init_dvb()
1502 dvb_dmx_release(&dec->demux); in ttusb_dec_init_dvb()
1503 dvb_unregister_adapter(&dec->adapter); in ttusb_dec_init_dvb()
1508 dvb_net_init(&dec->adapter, &dec->dvb_net, &dec->demux.dmx); in ttusb_dec_init_dvb()
1513 static void ttusb_dec_exit_dvb(struct ttusb_dec *dec) in ttusb_dec_exit_dvb() argument
1517 dvb_net_release(&dec->dvb_net); in ttusb_dec_exit_dvb()
1518 dec->demux.dmx.close(&dec->demux.dmx); in ttusb_dec_exit_dvb()
1519 dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend); in ttusb_dec_exit_dvb()
1520 dvb_dmxdev_release(&dec->dmxdev); in ttusb_dec_exit_dvb()
1521 dvb_dmx_release(&dec->demux); in ttusb_dec_exit_dvb()
1522 if (dec->fe) { in ttusb_dec_exit_dvb()
1523 dvb_unregister_frontend(dec->fe); in ttusb_dec_exit_dvb()
1524 if (dec->fe->ops.release) in ttusb_dec_exit_dvb()
1525 dec->fe->ops.release(dec->fe); in ttusb_dec_exit_dvb()
1527 dvb_unregister_adapter(&dec->adapter); in ttusb_dec_exit_dvb()
1530 static void ttusb_dec_exit_rc(struct ttusb_dec *dec) in ttusb_dec_exit_rc() argument
1534 if (dec->rc_input_dev) { in ttusb_dec_exit_rc()
1535 input_unregister_device(dec->rc_input_dev); in ttusb_dec_exit_rc()
1536 dec->rc_input_dev = NULL; in ttusb_dec_exit_rc()
1541 static void ttusb_dec_exit_usb(struct ttusb_dec *dec) in ttusb_dec_exit_usb() argument
1552 if (dec->interface == TTUSB_DEC_INTERFACE_IN) in ttusb_dec_exit_usb()
1553 usb_kill_urb(dec->irq_urb); in ttusb_dec_exit_usb()
1555 usb_free_urb(dec->irq_urb); in ttusb_dec_exit_usb()
1557 usb_free_coherent(dec->udev, IRQ_PACKET_SIZE, in ttusb_dec_exit_usb()
1558 dec->irq_buffer, dec->irq_dma_handle); in ttusb_dec_exit_usb()
1561 dec->iso_stream_count = 0; in ttusb_dec_exit_usb()
1564 usb_kill_urb(dec->iso_urb[i]); in ttusb_dec_exit_usb()
1566 ttusb_dec_free_iso_urbs(dec); in ttusb_dec_exit_usb()
1569 static void ttusb_dec_exit_tasklet(struct ttusb_dec *dec) in ttusb_dec_exit_tasklet() argument
1574 tasklet_kill(&dec->urb_tasklet); in ttusb_dec_exit_tasklet()
1576 while ((item = dec->urb_frame_list.next) != &dec->urb_frame_list) { in ttusb_dec_exit_tasklet()
1583 static void ttusb_dec_init_filters(struct ttusb_dec *dec) in ttusb_dec_init_filters() argument
1585 INIT_LIST_HEAD(&dec->filter_info_list); in ttusb_dec_init_filters()
1586 spin_lock_init(&dec->filter_info_list_lock); in ttusb_dec_init_filters()
1589 static void ttusb_dec_exit_filters(struct ttusb_dec *dec) in ttusb_dec_exit_filters() argument
1594 while ((item = dec->filter_info_list.next) != &dec->filter_info_list) { in ttusb_dec_exit_filters()
1605 struct ttusb_dec* dec = fe->dvb->priv; in fe_send_command() local
1606 return ttusb_dec_send_command(dec, command, param_length, params, result_length, cmd_result); in fe_send_command()
1617 struct ttusb_dec *dec; in ttusb_dec_probe() local
1624 if (!(dec = kzalloc(sizeof(struct ttusb_dec), GFP_KERNEL))) { in ttusb_dec_probe()
1629 usb_set_intfdata(intf, (void *)dec); in ttusb_dec_probe()
1633 ttusb_dec_set_model(dec, TTUSB_DEC3000S); in ttusb_dec_probe()
1637 ttusb_dec_set_model(dec, TTUSB_DEC2000T); in ttusb_dec_probe()
1641 ttusb_dec_set_model(dec, TTUSB_DEC2540T); in ttusb_dec_probe()
1645 dec->udev = udev; in ttusb_dec_probe()
1647 result = ttusb_dec_init_usb(dec); in ttusb_dec_probe()
1650 result = ttusb_dec_init_stb(dec); in ttusb_dec_probe()
1653 result = ttusb_dec_init_dvb(dec); in ttusb_dec_probe()
1657 dec->adapter.priv = dec; in ttusb_dec_probe()
1660 dec->fe = ttusbdecfe_dvbs_attach(&fe_config); in ttusb_dec_probe()
1665 dec->fe = ttusbdecfe_dvbt_attach(&fe_config); in ttusb_dec_probe()
1669 if (dec->fe == NULL) { in ttusb_dec_probe()
1671 le16_to_cpu(dec->udev->descriptor.idVendor), in ttusb_dec_probe()
1672 le16_to_cpu(dec->udev->descriptor.idProduct)); in ttusb_dec_probe()
1674 if (dvb_register_frontend(&dec->adapter, dec->fe)) { in ttusb_dec_probe()
1676 if (dec->fe->ops.release) in ttusb_dec_probe()
1677 dec->fe->ops.release(dec->fe); in ttusb_dec_probe()
1678 dec->fe = NULL; in ttusb_dec_probe()
1682 ttusb_dec_init_v_pes(dec); in ttusb_dec_probe()
1683 ttusb_dec_init_filters(dec); in ttusb_dec_probe()
1684 ttusb_dec_init_tasklet(dec); in ttusb_dec_probe()
1686 dec->active = 1; in ttusb_dec_probe()
1688 ttusb_dec_set_interface(dec, TTUSB_DEC_INTERFACE_IN); in ttusb_dec_probe()
1691 ttusb_init_rc(dec); in ttusb_dec_probe()
1695 ttusb_dec_exit_usb(dec); in ttusb_dec_probe()
1697 kfree(dec); in ttusb_dec_probe()
1703 struct ttusb_dec *dec = usb_get_intfdata(intf); in ttusb_dec_disconnect() local
1709 if (dec->active) { in ttusb_dec_disconnect()
1710 ttusb_dec_exit_tasklet(dec); in ttusb_dec_disconnect()
1711 ttusb_dec_exit_filters(dec); in ttusb_dec_disconnect()
1713 ttusb_dec_exit_rc(dec); in ttusb_dec_disconnect()
1714 ttusb_dec_exit_usb(dec); in ttusb_dec_disconnect()
1715 ttusb_dec_exit_dvb(dec); in ttusb_dec_disconnect()
1718 kfree(dec); in ttusb_dec_disconnect()
1721 static void ttusb_dec_set_model(struct ttusb_dec *dec, in ttusb_dec_set_model() argument
1724 dec->model = model; in ttusb_dec_set_model()
1728 dec->model_name = "DEC2000-t"; in ttusb_dec_set_model()
1729 dec->firmware_name = "dvb-ttusb-dec-2000t.fw"; in ttusb_dec_set_model()
1733 dec->model_name = "DEC2540-t"; in ttusb_dec_set_model()
1734 dec->firmware_name = "dvb-ttusb-dec-2540t.fw"; in ttusb_dec_set_model()
1738 dec->model_name = "DEC3000-s"; in ttusb_dec_set_model()
1739 dec->firmware_name = "dvb-ttusb-dec-3000s.fw"; in ttusb_dec_set_model()