• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/media/dvb/ttusb-dec/

Lines Matching refs:dec

203 static void ttusb_dec_set_model(struct ttusb_dec *dec,
208 struct ttusb_dec * dec = urb->context;
209 char *buffer = dec->irq_buffer;
240 input_report_key(dec->rc_input_dev, rc_keys[buffer[4] - 1], 1);
241 input_sync(dec->rc_input_dev);
242 input_report_key(dec->rc_input_dev, rc_keys[buffer[4] - 1], 0);
243 input_sync(dec->rc_input_dev);
265 static int ttusb_dec_send_command(struct ttusb_dec *dec, const u8 command,
278 if ((result = mutex_lock_interruptible(&dec->usb_mutex))) {
285 b[1] = ++dec->trans_count;
299 result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
305 mutex_unlock(&dec->usb_mutex);
310 result = usb_bulk_msg(dec->udev, dec->result_pipe, b,
316 mutex_unlock(&dec->usb_mutex);
332 mutex_unlock(&dec->usb_mutex);
339 static int ttusb_dec_get_stb_state (struct ttusb_dec *dec, unsigned int *mode,
349 result = ttusb_dec_send_command(dec, 0x08, 0, NULL, &c_length, c);
374 struct ttusb_dec *dec = priv;
376 dec->audio_filter->feed->cb.ts(data, 188, NULL, 0,
377 &dec->audio_filter->feed->feed.ts,
385 struct ttusb_dec *dec = priv;
387 dec->video_filter->feed->cb.ts(data, 188, NULL, 0,
388 &dec->video_filter->feed->feed.ts,
394 static void ttusb_dec_set_pids(struct ttusb_dec *dec)
400 u16 pcr = htons(dec->pid[DMX_PES_PCR]);
401 u16 audio = htons(dec->pid[DMX_PES_AUDIO]);
402 u16 video = htons(dec->pid[DMX_PES_VIDEO]);
410 ttusb_dec_send_command(dec, 0x50, sizeof(b), b, NULL, NULL);
412 dvb_filter_pes2ts_init(&dec->a_pes2ts, dec->pid[DMX_PES_AUDIO],
413 ttusb_dec_audio_pes2ts_cb, dec);
414 dvb_filter_pes2ts_init(&dec->v_pes2ts, dec->pid[DMX_PES_VIDEO],
415 ttusb_dec_video_pes2ts_cb, dec);
416 dec->v_pes_length = 0;
417 dec->v_pes_postbytes = 0;
420 static void ttusb_dec_process_pva(struct ttusb_dec *dec, u8 *pva, int length)
440 dec->video_filter->feed->cb.ts(pva, length, NULL, 0,
441 &dec->video_filter->feed->feed.ts, DMX_OK);
445 if (dec->v_pes_postbytes > 0 &&
446 dec->v_pes_postbytes == prebytes) {
447 memcpy(&dec->v_pes[dec->v_pes_length],
450 dvb_filter_pes2ts(&dec->v_pes2ts, dec->v_pes,
451 dec->v_pes_length + prebytes, 1);
455 dec->v_pes[7] = 0x80;
456 dec->v_pes[8] = 0x05;
458 dec->v_pes[9] = 0x21 | ((pva[8] & 0xc0) >> 5);
459 dec->v_pes[10] = ((pva[8] & 0x3f) << 2) |
461 dec->v_pes[11] = 0x01 |
464 dec->v_pes[12] = ((pva[10] & 0x7f) << 1) |
466 dec->v_pes[13] = 0x01 | ((pva[11] & 0x7f) << 1);
468 memcpy(&dec->v_pes[14], &pva[12 + prebytes],
470 dec->v_pes_length = 14 + length - 12 - prebytes;
472 dec->v_pes[7] = 0x00;
473 dec->v_pes[8] = 0x00;
475 memcpy(&dec->v_pes[9], &pva[8], length - 8);
476 dec->v_pes_length = 9 + length - 8;
479 dec->v_pes_postbytes = postbytes;
481 if (dec->v_pes[9 + dec->v_pes[8]] == 0x00 &&
482 dec->v_pes[10 + dec->v_pes[8]] == 0x00 &&
483 dec->v_pes[11 + dec->v_pes[8]] == 0x01)
484 dec->v_pes[6] = 0x84;
486 dec->v_pes[6] = 0x80;
488 v_pes_payload_length = htons(dec->v_pes_length - 6 +
490 memcpy(&dec->v_pes[4], &v_pes_payload_length, 2);
493 dvb_filter_pes2ts(&dec->v_pes2ts, dec->v_pes,
494 dec->v_pes_length, 1);
501 dec->audio_filter->feed->cb.ts(pva, length, NULL, 0,
502 &dec->audio_filter->feed->feed.ts, DMX_OK);
506 dvb_filter_pes2ts(&dec->a_pes2ts, &pva[8], length - 8,
517 static void ttusb_dec_process_filter(struct ttusb_dec *dec, u8 *packet,
527 spin_lock_irqsave(&dec->filter_info_list_lock, flags);
528 for (item = dec->filter_info_list.next; item != &dec->filter_info_list;
536 spin_unlock_irqrestore(&dec->filter_info_list_lock, flags);
543 static void ttusb_dec_process_packet(struct ttusb_dec *dec)
549 if (dec->packet_length % 2) {
554 for (i = 0; i < dec->packet_length; i += 2)
555 csum ^= ((dec->packet[i] << 8) + dec->packet[i + 1]);
562 packet_id = dec->packet[dec->packet_length - 4] << 8;
563 packet_id += dec->packet[dec->packet_length - 3];
565 if ((packet_id != dec->next_packet_id) && dec->next_packet_id) {
567 __FUNCTION__, dec->next_packet_id - 1, packet_id);
571 dec->next_packet_id = 0x8000;
573 dec->next_packet_id = packet_id + 1;
575 switch (dec->packet_type) {
577 if (dec->pva_stream_count)
578 ttusb_dec_process_pva(dec, dec->packet,
579 dec->packet_payload_length);
583 if (dec->filter_stream_count)
584 ttusb_dec_process_filter(dec, dec->packet,
585 dec->packet_payload_length);
605 static void ttusb_dec_process_urb_frame(struct ttusb_dec *dec, u8 *b,
611 switch (dec->packet_state) {
617 dec->packet_state++;
619 dec->packet_state = 0;
626 dec->packet_state++;
627 dec->packet_length = 0;
629 dec->packet_state = 0;
637 dec->packet[dec->packet_length++] = *b++;
639 if (dec->packet_length == 2) {
640 if (dec->packet[0] == 'A' &&
641 dec->packet[1] == 'V') {
642 dec->packet_type =
644 dec->packet_state++;
645 } else if (dec->packet[0] == 'S') {
646 dec->packet_type =
648 dec->packet_state++;
649 } else if (dec->packet[0] == 0x00) {
650 dec->packet_type =
652 dec->packet_payload_length = 2;
653 dec->packet_state = 7;
657 dec->packet[0], dec->packet[1]);
658 dec->packet_state = 0;
666 dec->packet[dec->packet_length++] = *b++;
668 if (dec->packet_type == TTUSB_DEC_PACKET_PVA &&
669 dec->packet_length == 8) {
670 dec->packet_state++;
671 dec->packet_payload_length = 8 +
672 (dec->packet[6] << 8) +
673 dec->packet[7];
674 } else if (dec->packet_type ==
676 dec->packet_length == 5) {
677 dec->packet_state++;
678 dec->packet_payload_length = 5 +
679 ((dec->packet[3] & 0x0f) << 8) +
680 dec->packet[4];
687 int remainder = dec->packet_payload_length -
688 dec->packet_length;
691 memcpy(dec->packet + dec->packet_length,
693 dec->packet_length += remainder;
696 dec->packet_state++;
698 memcpy(&dec->packet[dec->packet_length],
700 dec->packet_length += length;
710 dec->packet[dec->packet_length++] = *b++;
712 if (dec->packet_type == TTUSB_DEC_PACKET_SECTION &&
713 dec->packet_payload_length % 2)
716 if (dec->packet_length ==
717 dec->packet_payload_length + tail) {
718 ttusb_dec_process_packet(dec);
719 dec->packet_state = 0;
729 dec->packet_state = 0;
736 struct ttusb_dec *dec = (struct ttusb_dec *)data;
742 spin_lock_irqsave(&dec->urb_frame_list_lock, flags);
743 if ((item = dec->urb_frame_list.next) != &dec->urb_frame_list) {
748 spin_unlock_irqrestore(&dec->urb_frame_list_lock,
752 spin_unlock_irqrestore(&dec->urb_frame_list_lock, flags);
754 ttusb_dec_process_urb_frame(dec, frame->data, frame->length);
761 struct ttusb_dec *dec = urb->context;
783 spin_lock_irqsave(&dec->urb_frame_list_lock,
786 &dec->urb_frame_list);
787 spin_unlock_irqrestore(&dec->urb_frame_list_lock,
790 tasklet_schedule(&dec->urb_tasklet);
800 if (dec->iso_stream_count)
804 static void ttusb_dec_setup_urbs(struct ttusb_dec *dec)
812 struct urb *urb = dec->iso_urb[i];
814 urb->dev = dec->udev;
815 urb->context = dec;
817 urb->pipe = dec->in_pipe;
823 urb->transfer_buffer = dec->iso_buffer + buffer_offset;
834 static void ttusb_dec_stop_iso_xfer(struct ttusb_dec *dec)
840 if (mutex_lock_interruptible(&dec->iso_mutex))
843 dec->iso_stream_count--;
845 if (!dec->iso_stream_count) {
847 usb_kill_urb(dec->iso_urb[i]);
850 mutex_unlock(&dec->iso_mutex);
857 static int ttusb_dec_set_interface(struct ttusb_dec *dec,
863 if (interface != dec->interface) {
866 result = usb_set_interface(dec->udev, 0, 0);
869 result = ttusb_dec_send_command(dec, 0x80, sizeof(b),
873 result = usb_set_interface(dec->udev, 0, 8);
876 result = usb_set_interface(dec->udev, 0, 1);
883 dec->interface = interface;
889 static int ttusb_dec_start_iso_xfer(struct ttusb_dec *dec)
895 if (mutex_lock_interruptible(&dec->iso_mutex))
898 if (!dec->iso_stream_count) {
899 ttusb_dec_setup_urbs(dec);
901 dec->packet_state = 0;
902 dec->v_pes_postbytes = 0;
903 dec->next_packet_id = 0;
906 if ((result = usb_submit_urb(dec->iso_urb[i],
912 usb_kill_urb(dec->iso_urb[i - 1]);
916 mutex_unlock(&dec->iso_mutex);
922 dec->iso_stream_count++;
924 mutex_unlock(&dec->iso_mutex);
932 struct ttusb_dec *dec = dvbdmx->priv;
955 dec->pid[DMX_PES_PCR] = dvbdmxfeed->pid;
956 dec->pid[DMX_PES_VIDEO] = dvbdmxfeed->pid;
957 dec->video_filter = dvbdmxfeed->filter;
958 ttusb_dec_set_pids(dec);
963 dec->pid[DMX_PES_AUDIO] = dvbdmxfeed->pid;
964 dec->audio_filter = dvbdmxfeed->filter;
965 ttusb_dec_set_pids(dec);
969 dec->pid[DMX_PES_TELETEXT] = dvbdmxfeed->pid;
975 dec->pid[DMX_PES_PCR] = dvbdmxfeed->pid;
976 ttusb_dec_set_pids(dec);
989 result = ttusb_dec_send_command(dec, 0x80, sizeof(b0), b0, NULL, NULL);
993 dec->pva_stream_count++;
994 return ttusb_dec_start_iso_xfer(dec);
999 struct ttusb_dec *dec = dvbdmxfeed->demux->priv;
1023 result = ttusb_dec_send_command(dec, 0x60, sizeof(b0), b0,
1035 spin_lock_irqsave(&dec->filter_info_list_lock, flags);
1037 &dec->filter_info_list);
1038 spin_unlock_irqrestore(&dec->filter_info_list_lock,
1043 dec->filter_stream_count++;
1044 return ttusb_dec_start_iso_xfer(dec);
1082 struct ttusb_dec *dec = dvbdmxfeed->demux->priv;
1085 ttusb_dec_send_command(dec, 0x81, sizeof(b0), b0, NULL, NULL);
1087 dec->pva_stream_count--;
1089 ttusb_dec_stop_iso_xfer(dec);
1096 struct ttusb_dec *dec = dvbdmxfeed->demux->priv;
1102 spin_lock_irqsave(&dec->filter_info_list_lock, flags);
1104 spin_unlock_irqrestore(&dec->filter_info_list_lock, flags);
1106 ttusb_dec_send_command(dec, 0x62, sizeof(b0), b0, NULL, NULL);
1108 dec->filter_stream_count--;
1110 ttusb_dec_stop_iso_xfer(dec);
1132 static void ttusb_dec_free_iso_urbs(struct ttusb_dec *dec)
1139 usb_free_urb(dec->iso_urb[i]);
1144 dec->iso_buffer, dec->iso_dma_handle);
1147 static int ttusb_dec_alloc_iso_urbs(struct ttusb_dec *dec)
1153 dec->iso_buffer = pci_alloc_consistent(NULL,
1157 &dec->iso_dma_handle);
1159 memset(dec->iso_buffer, 0,
1166 ttusb_dec_free_iso_urbs(dec);
1170 dec->iso_urb[i] = urb;
1173 ttusb_dec_setup_urbs(dec);
1178 static void ttusb_dec_init_tasklet(struct ttusb_dec *dec)
1180 spin_lock_init(&dec->urb_frame_list_lock);
1181 INIT_LIST_HEAD(&dec->urb_frame_list);
1182 tasklet_init(&dec->urb_tasklet, ttusb_dec_process_urb_frame_list,
1183 (unsigned long)dec);
1186 static int ttusb_init_rc( struct ttusb_dec *dec)
1193 usb_make_path(dec->udev, dec->rc_phys, sizeof(dec->rc_phys));
1194 strlcpy(dec->rc_phys, "/input0", sizeof(dec->rc_phys));
1201 input_dev->phys = dec->rc_phys;
1216 dec->rc_input_dev = input_dev;
1217 if (usb_submit_urb(dec->irq_urb, GFP_KERNEL))
1220 ttusb_dec_send_command(dec,0xb0,sizeof(b),b,NULL,NULL);
1225 static void ttusb_dec_init_v_pes(struct ttusb_dec *dec)
1229 dec->v_pes[0] = 0x00;
1230 dec->v_pes[1] = 0x00;
1231 dec->v_pes[2] = 0x01;
1232 dec->v_pes[3] = 0xe0;
1235 static int ttusb_dec_init_usb(struct ttusb_dec *dec)
1239 mutex_init(&dec->usb_mutex);
1240 mutex_init(&dec->iso_mutex);
1242 dec->command_pipe = usb_sndbulkpipe(dec->udev, COMMAND_PIPE);
1243 dec->result_pipe = usb_rcvbulkpipe(dec->udev, RESULT_PIPE);
1244 dec->in_pipe = usb_rcvisocpipe(dec->udev, IN_PIPE);
1245 dec->out_pipe = usb_sndisocpipe(dec->udev, OUT_PIPE);
1246 dec->irq_pipe = usb_rcvintpipe(dec->udev, IRQ_PIPE);
1249 dec->irq_urb = usb_alloc_urb(0, GFP_KERNEL);
1250 if(!dec->irq_urb) {
1253 dec->irq_buffer = usb_buffer_alloc(dec->udev,IRQ_PACKET_SIZE,
1254 GFP_ATOMIC, &dec->irq_dma_handle);
1255 if(!dec->irq_buffer) {
1258 usb_fill_int_urb(dec->irq_urb, dec->udev,dec->irq_pipe,
1259 dec->irq_buffer, IRQ_PACKET_SIZE,
1260 ttusb_dec_handle_irq, dec, 1);
1261 dec->irq_urb->transfer_dma = dec->irq_dma_handle;
1262 dec->irq_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1265 return ttusb_dec_alloc_iso_urbs(dec);
1268 static int ttusb_dec_boot_dsp(struct ttusb_dec *dec)
1287 if (request_firmware(&fw_entry, dec->firmware_name, &dec->udev->dev)) {
1289 __FUNCTION__, dec->firmware_name);
1326 result = ttusb_dec_send_command(dec, 0x41, sizeof(b0), b0, NULL, NULL);
1356 result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
1361 result = usb_bulk_msg(dec->udev, dec->command_pipe, b,
1367 result = ttusb_dec_send_command(dec, 0x43, sizeof(b1), b1, NULL, NULL);
1375 static int ttusb_dec_init_stb(struct ttusb_dec *dec)
1382 result = ttusb_dec_get_stb_state(dec, &mode, &model, &version);
1395 result = ttusb_dec_boot_dsp(dec);
1407 ttusb_dec_set_model(dec, TTUSB_DEC3000S);
1411 ttusb_dec_set_model(dec, TTUSB_DEC2000T);
1414 ttusb_dec_set_model(dec, TTUSB_DEC2540T);
1425 dec->can_playback = 1;
1434 static int ttusb_dec_init_dvb(struct ttusb_dec *dec)
1440 if ((result = dvb_register_adapter(&dec->adapter,
1441 dec->model_name, THIS_MODULE, &dec->udev->dev)) < 0) {
1448 dec->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING;
1450 dec->demux.priv = (void *)dec;
1451 dec->demux.filternum = 31;
1452 dec->demux.feednum = 31;
1453 dec->demux.start_feed = ttusb_dec_start_feed;
1454 dec->demux.stop_feed = ttusb_dec_stop_feed;
1455 dec->demux.write_to_decoder = NULL;
1457 if ((result = dvb_dmx_init(&dec->demux)) < 0) {
1461 dvb_unregister_adapter(&dec->adapter);
1466 dec->dmxdev.filternum = 32;
1467 dec->dmxdev.demux = &dec->demux.dmx;
1468 dec->dmxdev.capabilities = 0;
1470 if ((result = dvb_dmxdev_init(&dec->dmxdev, &dec->adapter)) < 0) {
1474 dvb_dmx_release(&dec->demux);
1475 dvb_unregister_adapter(&dec->adapter);
1480 dec->frontend.source = DMX_FRONTEND_0;
1482 if ((result = dec->demux.dmx.add_frontend(&dec->demux.dmx,
1483 &dec->frontend)) < 0) {
1487 dvb_dmxdev_release(&dec->dmxdev);
1488 dvb_dmx_release(&dec->demux);
1489 dvb_unregister_adapter(&dec->adapter);
1494 if ((result = dec->demux.dmx.connect_frontend(&dec->demux.dmx,
1495 &dec->frontend)) < 0) {
1499 dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend);
1500 dvb_dmxdev_release(&dec->dmxdev);
1501 dvb_dmx_release(&dec->demux);
1502 dvb_unregister_adapter(&dec->adapter);
1507 dvb_net_init(&dec->adapter, &dec->dvb_net, &dec->demux.dmx);
1512 static void ttusb_dec_exit_dvb(struct ttusb_dec *dec)
1516 dvb_net_release(&dec->dvb_net);
1517 dec->demux.dmx.close(&dec->demux.dmx);
1518 dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend);
1519 dvb_dmxdev_release(&dec->dmxdev);
1520 dvb_dmx_release(&dec->demux);
1521 if (dec->fe) {
1522 dvb_unregister_frontend(dec->fe);
1523 if (dec->fe->ops.release)
1524 dec->fe->ops.release(dec->fe);
1526 dvb_unregister_adapter(&dec->adapter);
1529 static void ttusb_dec_exit_rc(struct ttusb_dec *dec)
1537 if (dec->interface == TTUSB_DEC_INTERFACE_IN)
1538 usb_kill_urb(dec->irq_urb);
1540 usb_free_urb(dec->irq_urb);
1542 usb_buffer_free(dec->udev,IRQ_PACKET_SIZE,
1543 dec->irq_buffer, dec->irq_dma_handle);
1545 if (dec->rc_input_dev) {
1546 input_unregister_device(dec->rc_input_dev);
1547 dec->rc_input_dev = NULL;
1552 static void ttusb_dec_exit_usb(struct ttusb_dec *dec)
1558 dec->iso_stream_count = 0;
1561 usb_kill_urb(dec->iso_urb[i]);
1563 ttusb_dec_free_iso_urbs(dec);
1566 static void ttusb_dec_exit_tasklet(struct ttusb_dec *dec)
1571 tasklet_kill(&dec->urb_tasklet);
1573 while ((item = dec->urb_frame_list.next) != &dec->urb_frame_list) {
1580 static void ttusb_dec_init_filters(struct ttusb_dec *dec)
1582 INIT_LIST_HEAD(&dec->filter_info_list);
1583 spin_lock_init(&dec->filter_info_list_lock);
1586 static void ttusb_dec_exit_filters(struct ttusb_dec *dec)
1591 while ((item = dec->filter_info_list.next) != &dec->filter_info_list) {
1602 struct ttusb_dec* dec = fe->dvb->priv;
1603 return ttusb_dec_send_command(dec, command, param_length, params, result_length, cmd_result);
1614 struct ttusb_dec *dec;
1620 if (!(dec = kzalloc(sizeof(struct ttusb_dec), GFP_KERNEL))) {
1625 usb_set_intfdata(intf, (void *)dec);
1629 ttusb_dec_set_model(dec, TTUSB_DEC3000S);
1633 ttusb_dec_set_model(dec, TTUSB_DEC2000T);
1637 ttusb_dec_set_model(dec, TTUSB_DEC2540T);
1641 dec->udev = udev;
1643 if (ttusb_dec_init_usb(dec))
1645 if (ttusb_dec_init_stb(dec)) {
1646 ttusb_dec_exit_usb(dec);
1649 ttusb_dec_init_dvb(dec);
1651 dec->adapter.priv = dec;
1654 dec->fe = ttusbdecfe_dvbs_attach(&fe_config);
1659 dec->fe = ttusbdecfe_dvbt_attach(&fe_config);
1663 if (dec->fe == NULL) {
1664 printk("dvb-ttusb-dec: A frontend driver was not found for device %04x/%04x\n",
1665 le16_to_cpu(dec->udev->descriptor.idVendor),
1666 le16_to_cpu(dec->udev->descriptor.idProduct));
1668 if (dvb_register_frontend(&dec->adapter, dec->fe)) {
1670 if (dec->fe->ops.release)
1671 dec->fe->ops.release(dec->fe);
1672 dec->fe = NULL;
1676 ttusb_dec_init_v_pes(dec);
1677 ttusb_dec_init_filters(dec);
1678 ttusb_dec_init_tasklet(dec);
1680 dec->active = 1;
1682 ttusb_dec_set_interface(dec, TTUSB_DEC_INTERFACE_IN);
1685 ttusb_init_rc(dec);
1692 struct ttusb_dec *dec = usb_get_intfdata(intf);
1698 if (dec->active) {
1699 ttusb_dec_exit_tasklet(dec);
1700 ttusb_dec_exit_filters(dec);
1702 ttusb_dec_exit_rc(dec);
1703 ttusb_dec_exit_usb(dec);
1704 ttusb_dec_exit_dvb(dec);
1707 kfree(dec);
1710 static void ttusb_dec_set_model(struct ttusb_dec *dec,
1713 dec->model = model;
1717 dec->model_name = "DEC2000-t";
1718 dec->firmware_name = "dvb-ttusb-dec-2000t.fw";
1722 dec->model_name = "DEC2540-t";
1723 dec->firmware_name = "dvb-ttusb-dec-2540t.fw";
1727 dec->model_name = "DEC3000-s";
1728 dec->firmware_name = "dvb-ttusb-dec-3000s.fw";
1742 .name = "ttusb-dec",