dibusb-mc.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /* DVB USB compliant linux driver for mobile DVB-T USB devices based on
  3. * reference designs made by DiBcom (http://www.dibcom.fr/) (DiB3000M-C/P)
  4. *
  5. * Copyright (C) 2004-5 Patrick Boettcher ([email protected])
  6. *
  7. * based on GPL code from DiBcom, which has
  8. * Copyright (C) 2004 Amaury Demol for DiBcom
  9. *
  10. * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information
  11. */
  12. #include "dibusb.h"
  13. DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
  14. /* USB Driver stuff */
  15. static struct dvb_usb_device_properties dibusb_mc_properties;
  16. static int dibusb_mc_probe(struct usb_interface *intf,
  17. const struct usb_device_id *id)
  18. {
  19. return dvb_usb_device_init(intf, &dibusb_mc_properties, THIS_MODULE,
  20. NULL, adapter_nr);
  21. }
  22. /* do not change the order of the ID table */
  23. enum {
  24. DIBCOM_MOD3001_COLD,
  25. DIBCOM_MOD3001_WARM,
  26. ULTIMA_TVBOX_USB2_COLD,
  27. ULTIMA_TVBOX_USB2_WARM,
  28. LITEON_DVB_T_COLD,
  29. LITEON_DVB_T_WARM,
  30. EMPIA_DIGIVOX_MINI_SL_COLD,
  31. EMPIA_DIGIVOX_MINI_SL_WARM,
  32. GRANDTEC_DVBT_USB2_COLD,
  33. GRANDTEC_DVBT_USB2_WARM,
  34. ULTIMA_ARTEC_T14_COLD,
  35. ULTIMA_ARTEC_T14_WARM,
  36. LEADTEK_WINFAST_DTV_DONGLE_COLD,
  37. LEADTEK_WINFAST_DTV_DONGLE_WARM,
  38. HUMAX_DVB_T_STICK_HIGH_SPEED_COLD,
  39. HUMAX_DVB_T_STICK_HIGH_SPEED_WARM,
  40. };
  41. static struct usb_device_id dibusb_dib3000mc_table[] = {
  42. DVB_USB_DEV(DIBCOM, DIBCOM_MOD3001_COLD),
  43. DVB_USB_DEV(DIBCOM, DIBCOM_MOD3001_WARM),
  44. DVB_USB_DEV(ULTIMA_ELECTRONIC, ULTIMA_TVBOX_USB2_COLD),
  45. DVB_USB_DEV(ULTIMA_ELECTRONIC, ULTIMA_TVBOX_USB2_WARM),
  46. DVB_USB_DEV(LITEON, LITEON_DVB_T_COLD),
  47. DVB_USB_DEV(LITEON, LITEON_DVB_T_WARM),
  48. DVB_USB_DEV(EMPIA, EMPIA_DIGIVOX_MINI_SL_COLD),
  49. DVB_USB_DEV(EMPIA, EMPIA_DIGIVOX_MINI_SL_WARM),
  50. DVB_USB_DEV(GRANDTEC, GRANDTEC_DVBT_USB2_COLD),
  51. DVB_USB_DEV(GRANDTEC, GRANDTEC_DVBT_USB2_WARM),
  52. DVB_USB_DEV(ULTIMA_ELECTRONIC, ULTIMA_ARTEC_T14_COLD),
  53. DVB_USB_DEV(ULTIMA_ELECTRONIC, ULTIMA_ARTEC_T14_WARM),
  54. DVB_USB_DEV(LEADTEK, LEADTEK_WINFAST_DTV_DONGLE_COLD),
  55. DVB_USB_DEV(LEADTEK, LEADTEK_WINFAST_DTV_DONGLE_WARM),
  56. DVB_USB_DEV(HUMAX_COEX, HUMAX_DVB_T_STICK_HIGH_SPEED_COLD),
  57. DVB_USB_DEV(HUMAX_COEX, HUMAX_DVB_T_STICK_HIGH_SPEED_WARM),
  58. { }
  59. };
  60. MODULE_DEVICE_TABLE (usb, dibusb_dib3000mc_table);
  61. static struct dvb_usb_device_properties dibusb_mc_properties = {
  62. .caps = DVB_USB_IS_AN_I2C_ADAPTER,
  63. .usb_ctrl = CYPRESS_FX2,
  64. .firmware = "dvb-usb-dibusb-6.0.0.8.fw",
  65. .num_adapters = 1,
  66. .adapter = {
  67. {
  68. .num_frontends = 1,
  69. .fe = {{
  70. .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
  71. .pid_filter_count = 32,
  72. .streaming_ctrl = dibusb2_0_streaming_ctrl,
  73. .pid_filter = dibusb_pid_filter,
  74. .pid_filter_ctrl = dibusb_pid_filter_ctrl,
  75. .frontend_attach = dibusb_dib3000mc_frontend_attach,
  76. .tuner_attach = dibusb_dib3000mc_tuner_attach,
  77. /* parameter for the MPEG2-data transfer */
  78. .stream = {
  79. .type = USB_BULK,
  80. .count = 8,
  81. .endpoint = 0x06,
  82. .u = {
  83. .bulk = {
  84. .buffersize = 4096,
  85. }
  86. }
  87. },
  88. }},
  89. .size_of_priv = sizeof(struct dibusb_state),
  90. }
  91. },
  92. .power_ctrl = dibusb2_0_power_ctrl,
  93. .rc.legacy = {
  94. .rc_interval = DEFAULT_RC_INTERVAL,
  95. .rc_map_table = rc_map_dibusb_table,
  96. .rc_map_size = 111, /* FIXME */
  97. .rc_query = dibusb_rc_query,
  98. },
  99. .i2c_algo = &dibusb_i2c_algo,
  100. .generic_bulk_ctrl_endpoint = 0x01,
  101. .num_device_descs = 8,
  102. .devices = {
  103. { "DiBcom USB2.0 DVB-T reference design (MOD3000P)",
  104. { &dibusb_dib3000mc_table[DIBCOM_MOD3001_COLD], NULL },
  105. { &dibusb_dib3000mc_table[DIBCOM_MOD3001_WARM], NULL },
  106. },
  107. { "Artec T1 USB2.0 TVBOX (please check the warm ID)",
  108. { &dibusb_dib3000mc_table[ULTIMA_TVBOX_USB2_COLD], NULL },
  109. { &dibusb_dib3000mc_table[ULTIMA_TVBOX_USB2_WARM], NULL },
  110. },
  111. { "LITE-ON USB2.0 DVB-T Tuner",
  112. /* Also rebranded as Intuix S800, Toshiba */
  113. { &dibusb_dib3000mc_table[LITEON_DVB_T_COLD], NULL },
  114. { &dibusb_dib3000mc_table[LITEON_DVB_T_WARM], NULL },
  115. },
  116. { "MSI Digivox Mini SL",
  117. { &dibusb_dib3000mc_table[EMPIA_DIGIVOX_MINI_SL_COLD], NULL },
  118. { &dibusb_dib3000mc_table[EMPIA_DIGIVOX_MINI_SL_WARM], NULL },
  119. },
  120. { "GRAND - USB2.0 DVB-T adapter",
  121. { &dibusb_dib3000mc_table[GRANDTEC_DVBT_USB2_COLD], NULL },
  122. { &dibusb_dib3000mc_table[GRANDTEC_DVBT_USB2_WARM], NULL },
  123. },
  124. { "Artec T14 - USB2.0 DVB-T",
  125. { &dibusb_dib3000mc_table[ULTIMA_ARTEC_T14_COLD], NULL },
  126. { &dibusb_dib3000mc_table[ULTIMA_ARTEC_T14_WARM], NULL },
  127. },
  128. { "Leadtek - USB2.0 Winfast DTV dongle",
  129. { &dibusb_dib3000mc_table[LEADTEK_WINFAST_DTV_DONGLE_COLD], NULL },
  130. { &dibusb_dib3000mc_table[LEADTEK_WINFAST_DTV_DONGLE_WARM], NULL },
  131. },
  132. { "Humax/Coex DVB-T USB Stick 2.0 High Speed",
  133. { &dibusb_dib3000mc_table[HUMAX_DVB_T_STICK_HIGH_SPEED_COLD], NULL },
  134. { &dibusb_dib3000mc_table[HUMAX_DVB_T_STICK_HIGH_SPEED_WARM], NULL },
  135. },
  136. { NULL },
  137. }
  138. };
  139. static struct usb_driver dibusb_mc_driver = {
  140. .name = "dvb_usb_dibusb_mc",
  141. .probe = dibusb_mc_probe,
  142. .disconnect = dvb_usb_device_exit,
  143. .id_table = dibusb_dib3000mc_table,
  144. };
  145. module_usb_driver(dibusb_mc_driver);
  146. MODULE_AUTHOR("Patrick Boettcher <[email protected]>");
  147. MODULE_DESCRIPTION("Driver for DiBcom USB2.0 DVB-T (DiB3000M-C/P based) devices");
  148. MODULE_VERSION("1.0");
  149. MODULE_LICENSE("GPL");