/drivers/media/video/bt8xx/bttv-cards.c

https://bitbucket.org/wisechild/galaxy-nexus · C · 4919 lines · 3616 code · 335 blank · 968 comment · 268 complexity · 2cf82df568d82f3fc00a6bea644c353e MD5 · raw file

Large files are truncated click here to view the full file

  1. /*
  2. bttv-cards.c
  3. this file has configuration informations - card-specific stuff
  4. like the big tvcards array for the most part
  5. Copyright (C) 1996,97,98 Ralph Metzler (rjkm@thp.uni-koeln.de)
  6. & Marcus Metzler (mocm@thp.uni-koeln.de)
  7. (c) 1999-2001 Gerd Knorr <kraxel@goldbach.in-berlin.de>
  8. This program is free software; you can redistribute it and/or modify
  9. it under the terms of the GNU General Public License as published by
  10. the Free Software Foundation; either version 2 of the License, or
  11. (at your option) any later version.
  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. You should have received a copy of the GNU General Public License
  17. along with this program; if not, write to the Free Software
  18. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19. */
  20. #include <linux/delay.h>
  21. #include <linux/module.h>
  22. #include <linux/kmod.h>
  23. #include <linux/init.h>
  24. #include <linux/pci.h>
  25. #include <linux/vmalloc.h>
  26. #include <linux/firmware.h>
  27. #include <net/checksum.h>
  28. #include <asm/unaligned.h>
  29. #include <asm/io.h>
  30. #include "bttvp.h"
  31. #include <media/v4l2-common.h>
  32. #include <media/tvaudio.h>
  33. #include "bttv-audio-hook.h"
  34. /* fwd decl */
  35. static void boot_msp34xx(struct bttv *btv, int pin);
  36. static void hauppauge_eeprom(struct bttv *btv);
  37. static void avermedia_eeprom(struct bttv *btv);
  38. static void osprey_eeprom(struct bttv *btv, const u8 ee[256]);
  39. static void modtec_eeprom(struct bttv *btv);
  40. static void init_PXC200(struct bttv *btv);
  41. static void init_RTV24(struct bttv *btv);
  42. static void rv605_muxsel(struct bttv *btv, unsigned int input);
  43. static void eagle_muxsel(struct bttv *btv, unsigned int input);
  44. static void xguard_muxsel(struct bttv *btv, unsigned int input);
  45. static void ivc120_muxsel(struct bttv *btv, unsigned int input);
  46. static void gvc1100_muxsel(struct bttv *btv, unsigned int input);
  47. static void PXC200_muxsel(struct bttv *btv, unsigned int input);
  48. static void picolo_tetra_muxsel(struct bttv *btv, unsigned int input);
  49. static void picolo_tetra_init(struct bttv *btv);
  50. static void tibetCS16_muxsel(struct bttv *btv, unsigned int input);
  51. static void tibetCS16_init(struct bttv *btv);
  52. static void kodicom4400r_muxsel(struct bttv *btv, unsigned int input);
  53. static void kodicom4400r_init(struct bttv *btv);
  54. static void sigmaSLC_muxsel(struct bttv *btv, unsigned int input);
  55. static void sigmaSQ_muxsel(struct bttv *btv, unsigned int input);
  56. static void geovision_muxsel(struct bttv *btv, unsigned int input);
  57. static void phytec_muxsel(struct bttv *btv, unsigned int input);
  58. static void gv800s_muxsel(struct bttv *btv, unsigned int input);
  59. static void gv800s_init(struct bttv *btv);
  60. static int terratec_active_radio_upgrade(struct bttv *btv);
  61. static int tea5757_read(struct bttv *btv);
  62. static int tea5757_write(struct bttv *btv, int value);
  63. static void identify_by_eeprom(struct bttv *btv,
  64. unsigned char eeprom_data[256]);
  65. static int __devinit pvr_boot(struct bttv *btv);
  66. /* config variables */
  67. static unsigned int triton1;
  68. static unsigned int vsfx;
  69. static unsigned int latency = UNSET;
  70. int no_overlay=-1;
  71. static unsigned int card[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
  72. static unsigned int pll[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
  73. static unsigned int tuner[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
  74. static unsigned int svhs[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
  75. static unsigned int remote[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
  76. static unsigned int audiodev[BTTV_MAX];
  77. static unsigned int saa6588[BTTV_MAX];
  78. static struct bttv *master[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = NULL };
  79. static unsigned int autoload = UNSET;
  80. static unsigned int gpiomask = UNSET;
  81. static unsigned int audioall = UNSET;
  82. static unsigned int audiomux[5] = { [ 0 ... 4 ] = UNSET };
  83. /* insmod options */
  84. module_param(triton1, int, 0444);
  85. module_param(vsfx, int, 0444);
  86. module_param(no_overlay, int, 0444);
  87. module_param(latency, int, 0444);
  88. module_param(gpiomask, int, 0444);
  89. module_param(audioall, int, 0444);
  90. module_param(autoload, int, 0444);
  91. module_param_array(card, int, NULL, 0444);
  92. module_param_array(pll, int, NULL, 0444);
  93. module_param_array(tuner, int, NULL, 0444);
  94. module_param_array(svhs, int, NULL, 0444);
  95. module_param_array(remote, int, NULL, 0444);
  96. module_param_array(audiodev, int, NULL, 0444);
  97. module_param_array(audiomux, int, NULL, 0444);
  98. MODULE_PARM_DESC(triton1,"set ETBF pci config bit "
  99. "[enable bug compatibility for triton1 + others]");
  100. MODULE_PARM_DESC(vsfx,"set VSFX pci config bit "
  101. "[yet another chipset flaw workaround]");
  102. MODULE_PARM_DESC(latency,"pci latency timer");
  103. MODULE_PARM_DESC(card,"specify TV/grabber card model, see CARDLIST file for a list");
  104. MODULE_PARM_DESC(pll,"specify installed crystal (0=none, 28=28 MHz, 35=35 MHz)");
  105. MODULE_PARM_DESC(tuner,"specify installed tuner type");
  106. MODULE_PARM_DESC(autoload, "obsolete option, please do not use anymore");
  107. MODULE_PARM_DESC(audiodev, "specify audio device:\n"
  108. "\t\t-1 = no audio\n"
  109. "\t\t 0 = autodetect (default)\n"
  110. "\t\t 1 = msp3400\n"
  111. "\t\t 2 = tda7432\n"
  112. "\t\t 3 = tvaudio");
  113. MODULE_PARM_DESC(saa6588, "if 1, then load the saa6588 RDS module, default (0) is to use the card definition.");
  114. MODULE_PARM_DESC(no_overlay,"allow override overlay default (0 disables, 1 enables)"
  115. " [some VIA/SIS chipsets are known to have problem with overlay]");
  116. /* ----------------------------------------------------------------------- */
  117. /* list of card IDs for bt878+ cards */
  118. static struct CARD {
  119. unsigned id;
  120. int cardnr;
  121. char *name;
  122. } cards[] __devinitdata = {
  123. { 0x13eb0070, BTTV_BOARD_HAUPPAUGE878, "Hauppauge WinTV" },
  124. { 0x39000070, BTTV_BOARD_HAUPPAUGE878, "Hauppauge WinTV-D" },
  125. { 0x45000070, BTTV_BOARD_HAUPPAUGEPVR, "Hauppauge WinTV/PVR" },
  126. { 0xff000070, BTTV_BOARD_OSPREY1x0, "Osprey-100" },
  127. { 0xff010070, BTTV_BOARD_OSPREY2x0_SVID,"Osprey-200" },
  128. { 0xff020070, BTTV_BOARD_OSPREY500, "Osprey-500" },
  129. { 0xff030070, BTTV_BOARD_OSPREY2000, "Osprey-2000" },
  130. { 0xff040070, BTTV_BOARD_OSPREY540, "Osprey-540" },
  131. { 0xff070070, BTTV_BOARD_OSPREY440, "Osprey-440" },
  132. { 0x00011002, BTTV_BOARD_ATI_TVWONDER, "ATI TV Wonder" },
  133. { 0x00031002, BTTV_BOARD_ATI_TVWONDERVE,"ATI TV Wonder/VE" },
  134. { 0x6606107d, BTTV_BOARD_WINFAST2000, "Leadtek WinFast TV 2000" },
  135. { 0x6607107d, BTTV_BOARD_WINFASTVC100, "Leadtek WinFast VC 100" },
  136. { 0x6609107d, BTTV_BOARD_WINFAST2000, "Leadtek TV 2000 XP" },
  137. { 0x263610b4, BTTV_BOARD_STB2, "STB TV PCI FM, Gateway P/N 6000704" },
  138. { 0x264510b4, BTTV_BOARD_STB2, "STB TV PCI FM, Gateway P/N 6000704" },
  139. { 0x402010fc, BTTV_BOARD_GVBCTV3PCI, "I-O Data Co. GV-BCTV3/PCI" },
  140. { 0x405010fc, BTTV_BOARD_GVBCTV4PCI, "I-O Data Co. GV-BCTV4/PCI" },
  141. { 0x407010fc, BTTV_BOARD_GVBCTV5PCI, "I-O Data Co. GV-BCTV5/PCI" },
  142. { 0xd01810fc, BTTV_BOARD_GVBCTV5PCI, "I-O Data Co. GV-BCTV5/PCI" },
  143. { 0x001211bd, BTTV_BOARD_PINNACLE, "Pinnacle PCTV" },
  144. /* some cards ship with byteswapped IDs ... */
  145. { 0x1200bd11, BTTV_BOARD_PINNACLE, "Pinnacle PCTV [bswap]" },
  146. { 0xff00bd11, BTTV_BOARD_PINNACLE, "Pinnacle PCTV [bswap]" },
  147. /* this seems to happen as well ... */
  148. { 0xff1211bd, BTTV_BOARD_PINNACLE, "Pinnacle PCTV" },
  149. { 0x3000121a, BTTV_BOARD_VOODOOTV_200, "3Dfx VoodooTV 200" },
  150. { 0x263710b4, BTTV_BOARD_VOODOOTV_FM, "3Dfx VoodooTV FM" },
  151. { 0x3060121a, BTTV_BOARD_STB2, "3Dfx VoodooTV 100/ STB OEM" },
  152. { 0x3000144f, BTTV_BOARD_MAGICTVIEW063, "(Askey Magic/others) TView99 CPH06x" },
  153. { 0xa005144f, BTTV_BOARD_MAGICTVIEW063, "CPH06X TView99-Card" },
  154. { 0x3002144f, BTTV_BOARD_MAGICTVIEW061, "(Askey Magic/others) TView99 CPH05x" },
  155. { 0x3005144f, BTTV_BOARD_MAGICTVIEW061, "(Askey Magic/others) TView99 CPH061/06L (T1/LC)" },
  156. { 0x5000144f, BTTV_BOARD_MAGICTVIEW061, "Askey CPH050" },
  157. { 0x300014ff, BTTV_BOARD_MAGICTVIEW061, "TView 99 (CPH061)" },
  158. { 0x300214ff, BTTV_BOARD_PHOEBE_TVMAS, "Phoebe TV Master (CPH060)" },
  159. { 0x00011461, BTTV_BOARD_AVPHONE98, "AVerMedia TVPhone98" },
  160. { 0x00021461, BTTV_BOARD_AVERMEDIA98, "AVermedia TVCapture 98" },
  161. { 0x00031461, BTTV_BOARD_AVPHONE98, "AVerMedia TVPhone98" },
  162. { 0x00041461, BTTV_BOARD_AVERMEDIA98, "AVerMedia TVCapture 98" },
  163. { 0x03001461, BTTV_BOARD_AVERMEDIA98, "VDOMATE TV TUNER CARD" },
  164. { 0x1117153b, BTTV_BOARD_TERRATVALUE, "Terratec TValue (Philips PAL B/G)" },
  165. { 0x1118153b, BTTV_BOARD_TERRATVALUE, "Terratec TValue (Temic PAL B/G)" },
  166. { 0x1119153b, BTTV_BOARD_TERRATVALUE, "Terratec TValue (Philips PAL I)" },
  167. { 0x111a153b, BTTV_BOARD_TERRATVALUE, "Terratec TValue (Temic PAL I)" },
  168. { 0x1123153b, BTTV_BOARD_TERRATVRADIO, "Terratec TV Radio+" },
  169. { 0x1127153b, BTTV_BOARD_TERRATV, "Terratec TV+ (V1.05)" },
  170. /* clashes with FlyVideo
  171. *{ 0x18521852, BTTV_BOARD_TERRATV, "Terratec TV+ (V1.10)" }, */
  172. { 0x1134153b, BTTV_BOARD_TERRATVALUE, "Terratec TValue (LR102)" },
  173. { 0x1135153b, BTTV_BOARD_TERRATVALUER, "Terratec TValue Radio" }, /* LR102 */
  174. { 0x5018153b, BTTV_BOARD_TERRATVALUE, "Terratec TValue" }, /* ?? */
  175. { 0xff3b153b, BTTV_BOARD_TERRATVALUER, "Terratec TValue Radio" }, /* ?? */
  176. { 0x400015b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV" },
  177. { 0x400a15b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV" },
  178. { 0x400d15b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV / Radio" },
  179. { 0x401015b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV / Radio" },
  180. { 0x401615b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV / Radio" },
  181. { 0x1430aa00, BTTV_BOARD_PV143, "Provideo PV143A" },
  182. { 0x1431aa00, BTTV_BOARD_PV143, "Provideo PV143B" },
  183. { 0x1432aa00, BTTV_BOARD_PV143, "Provideo PV143C" },
  184. { 0x1433aa00, BTTV_BOARD_PV143, "Provideo PV143D" },
  185. { 0x1433aa03, BTTV_BOARD_PV143, "Security Eyes" },
  186. { 0x1460aa00, BTTV_BOARD_PV150, "Provideo PV150A-1" },
  187. { 0x1461aa01, BTTV_BOARD_PV150, "Provideo PV150A-2" },
  188. { 0x1462aa02, BTTV_BOARD_PV150, "Provideo PV150A-3" },
  189. { 0x1463aa03, BTTV_BOARD_PV150, "Provideo PV150A-4" },
  190. { 0x1464aa04, BTTV_BOARD_PV150, "Provideo PV150B-1" },
  191. { 0x1465aa05, BTTV_BOARD_PV150, "Provideo PV150B-2" },
  192. { 0x1466aa06, BTTV_BOARD_PV150, "Provideo PV150B-3" },
  193. { 0x1467aa07, BTTV_BOARD_PV150, "Provideo PV150B-4" },
  194. { 0xa132ff00, BTTV_BOARD_IVC100, "IVC-100" },
  195. { 0xa1550000, BTTV_BOARD_IVC200, "IVC-200" },
  196. { 0xa1550001, BTTV_BOARD_IVC200, "IVC-200" },
  197. { 0xa1550002, BTTV_BOARD_IVC200, "IVC-200" },
  198. { 0xa1550003, BTTV_BOARD_IVC200, "IVC-200" },
  199. { 0xa1550100, BTTV_BOARD_IVC200, "IVC-200G" },
  200. { 0xa1550101, BTTV_BOARD_IVC200, "IVC-200G" },
  201. { 0xa1550102, BTTV_BOARD_IVC200, "IVC-200G" },
  202. { 0xa1550103, BTTV_BOARD_IVC200, "IVC-200G" },
  203. { 0xa1550800, BTTV_BOARD_IVC200, "IVC-200" },
  204. { 0xa1550801, BTTV_BOARD_IVC200, "IVC-200" },
  205. { 0xa1550802, BTTV_BOARD_IVC200, "IVC-200" },
  206. { 0xa1550803, BTTV_BOARD_IVC200, "IVC-200" },
  207. { 0xa182ff00, BTTV_BOARD_IVC120, "IVC-120G" },
  208. { 0xa182ff01, BTTV_BOARD_IVC120, "IVC-120G" },
  209. { 0xa182ff02, BTTV_BOARD_IVC120, "IVC-120G" },
  210. { 0xa182ff03, BTTV_BOARD_IVC120, "IVC-120G" },
  211. { 0xa182ff04, BTTV_BOARD_IVC120, "IVC-120G" },
  212. { 0xa182ff05, BTTV_BOARD_IVC120, "IVC-120G" },
  213. { 0xa182ff06, BTTV_BOARD_IVC120, "IVC-120G" },
  214. { 0xa182ff07, BTTV_BOARD_IVC120, "IVC-120G" },
  215. { 0xa182ff08, BTTV_BOARD_IVC120, "IVC-120G" },
  216. { 0xa182ff09, BTTV_BOARD_IVC120, "IVC-120G" },
  217. { 0xa182ff0a, BTTV_BOARD_IVC120, "IVC-120G" },
  218. { 0xa182ff0b, BTTV_BOARD_IVC120, "IVC-120G" },
  219. { 0xa182ff0c, BTTV_BOARD_IVC120, "IVC-120G" },
  220. { 0xa182ff0d, BTTV_BOARD_IVC120, "IVC-120G" },
  221. { 0xa182ff0e, BTTV_BOARD_IVC120, "IVC-120G" },
  222. { 0xa182ff0f, BTTV_BOARD_IVC120, "IVC-120G" },
  223. { 0xf0500000, BTTV_BOARD_IVCE8784, "IVCE-8784" },
  224. { 0xf0500001, BTTV_BOARD_IVCE8784, "IVCE-8784" },
  225. { 0xf0500002, BTTV_BOARD_IVCE8784, "IVCE-8784" },
  226. { 0xf0500003, BTTV_BOARD_IVCE8784, "IVCE-8784" },
  227. { 0x41424344, BTTV_BOARD_GRANDTEC, "GrandTec Multi Capture" },
  228. { 0x01020304, BTTV_BOARD_XGUARD, "Grandtec Grand X-Guard" },
  229. { 0x18501851, BTTV_BOARD_CHRONOS_VS2, "FlyVideo 98 (LR50)/ Chronos Video Shuttle II" },
  230. { 0xa0501851, BTTV_BOARD_CHRONOS_VS2, "FlyVideo 98 (LR50)/ Chronos Video Shuttle II" },
  231. { 0x18511851, BTTV_BOARD_FLYVIDEO98EZ, "FlyVideo 98EZ (LR51)/ CyberMail AV" },
  232. { 0x18521852, BTTV_BOARD_TYPHOON_TVIEW, "FlyVideo 98FM (LR50)/ Typhoon TView TV/FM Tuner" },
  233. { 0x41a0a051, BTTV_BOARD_FLYVIDEO_98FM, "Lifeview FlyVideo 98 LR50 Rev Q" },
  234. { 0x18501f7f, BTTV_BOARD_FLYVIDEO_98, "Lifeview Flyvideo 98" },
  235. { 0x010115cb, BTTV_BOARD_GMV1, "AG GMV1" },
  236. { 0x010114c7, BTTV_BOARD_MODTEC_205, "Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV" },
  237. { 0x10b42636, BTTV_BOARD_HAUPPAUGE878, "STB ???" },
  238. { 0x217d6606, BTTV_BOARD_WINFAST2000, "Leadtek WinFast TV 2000" },
  239. { 0xfff6f6ff, BTTV_BOARD_WINFAST2000, "Leadtek WinFast TV 2000" },
  240. { 0x03116000, BTTV_BOARD_SENSORAY311, "Sensoray 311" },
  241. { 0x00790e11, BTTV_BOARD_WINDVR, "Canopus WinDVR PCI" },
  242. { 0xa0fca1a0, BTTV_BOARD_ZOLTRIX, "Face to Face Tvmax" },
  243. { 0x82b2aa6a, BTTV_BOARD_SIMUS_GVC1100, "SIMUS GVC1100" },
  244. { 0x146caa0c, BTTV_BOARD_PV951, "ituner spectra8" },
  245. { 0x200a1295, BTTV_BOARD_PXC200, "ImageNation PXC200A" },
  246. { 0x40111554, BTTV_BOARD_PV_BT878P_9B, "Prolink Pixelview PV-BT" },
  247. { 0x17de0a01, BTTV_BOARD_KWORLD, "Mecer TV/FM/Video Tuner" },
  248. { 0x01051805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #1" },
  249. { 0x01061805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #2" },
  250. { 0x01071805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #3" },
  251. { 0x01081805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #4" },
  252. { 0x15409511, BTTV_BOARD_ACORP_Y878F, "Acorp Y878F" },
  253. { 0x53534149, BTTV_BOARD_SSAI_SECURITY, "SSAI Security Video Interface" },
  254. { 0x5353414a, BTTV_BOARD_SSAI_ULTRASOUND, "SSAI Ultrasound Video Interface" },
  255. /* likely broken, vendor id doesn't match the other magic views ...
  256. * { 0xa0fca04f, BTTV_BOARD_MAGICTVIEW063, "Guillemot Maxi TV Video 3" }, */
  257. /* Duplicate PCI ID, reconfigure for this board during the eeprom read.
  258. * { 0x13eb0070, BTTV_BOARD_HAUPPAUGE_IMPACTVCB, "Hauppauge ImpactVCB" }, */
  259. { 0x109e036e, BTTV_BOARD_CONCEPTRONIC_CTVFMI2, "Conceptronic CTVFMi v2"},
  260. /* DVB cards (using pci function .1 for mpeg data xfer) */
  261. { 0x001c11bd, BTTV_BOARD_PINNACLESAT, "Pinnacle PCTV Sat" },
  262. { 0x01010071, BTTV_BOARD_NEBULA_DIGITV, "Nebula Electronics DigiTV" },
  263. { 0x20007063, BTTV_BOARD_PC_HDTV, "pcHDTV HD-2000 TV"},
  264. { 0x002611bd, BTTV_BOARD_TWINHAN_DST, "Pinnacle PCTV SAT CI" },
  265. { 0x00011822, BTTV_BOARD_TWINHAN_DST, "Twinhan VisionPlus DVB" },
  266. { 0xfc00270f, BTTV_BOARD_TWINHAN_DST, "ChainTech digitop DST-1000 DVB-S" },
  267. { 0x07711461, BTTV_BOARD_AVDVBT_771, "AVermedia AverTV DVB-T 771" },
  268. { 0x07611461, BTTV_BOARD_AVDVBT_761, "AverMedia AverTV DVB-T 761" },
  269. { 0xdb1018ac, BTTV_BOARD_DVICO_DVBT_LITE, "DViCO FusionHDTV DVB-T Lite" },
  270. { 0xdb1118ac, BTTV_BOARD_DVICO_DVBT_LITE, "Ultraview DVB-T Lite" },
  271. { 0xd50018ac, BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE, "DViCO FusionHDTV 5 Lite" },
  272. { 0x00261822, BTTV_BOARD_TWINHAN_DST, "DNTV Live! Mini "},
  273. { 0xd200dbc0, BTTV_BOARD_DVICO_FUSIONHDTV_2, "DViCO FusionHDTV 2" },
  274. { 0x763c008a, BTTV_BOARD_GEOVISION_GV600, "GeoVision GV-600" },
  275. { 0x18011000, BTTV_BOARD_ENLTV_FM_2, "Encore ENL TV-FM-2" },
  276. { 0x763d800a, BTTV_BOARD_GEOVISION_GV800S, "GeoVision GV-800(S) (master)" },
  277. { 0x763d800b, BTTV_BOARD_GEOVISION_GV800S_SL, "GeoVision GV-800(S) (slave)" },
  278. { 0x763d800c, BTTV_BOARD_GEOVISION_GV800S_SL, "GeoVision GV-800(S) (slave)" },
  279. { 0x763d800d, BTTV_BOARD_GEOVISION_GV800S_SL, "GeoVision GV-800(S) (slave)" },
  280. { 0x15401830, BTTV_BOARD_PV183, "Provideo PV183-1" },
  281. { 0x15401831, BTTV_BOARD_PV183, "Provideo PV183-2" },
  282. { 0x15401832, BTTV_BOARD_PV183, "Provideo PV183-3" },
  283. { 0x15401833, BTTV_BOARD_PV183, "Provideo PV183-4" },
  284. { 0x15401834, BTTV_BOARD_PV183, "Provideo PV183-5" },
  285. { 0x15401835, BTTV_BOARD_PV183, "Provideo PV183-6" },
  286. { 0x15401836, BTTV_BOARD_PV183, "Provideo PV183-7" },
  287. { 0x15401837, BTTV_BOARD_PV183, "Provideo PV183-8" },
  288. { 0, -1, NULL }
  289. };
  290. /* ----------------------------------------------------------------------- */
  291. /* array with description for bt848 / bt878 tv/grabber cards */
  292. struct tvcard bttv_tvcards[] = {
  293. /* ---- card 0x00 ---------------------------------- */
  294. [BTTV_BOARD_UNKNOWN] = {
  295. .name = " *** UNKNOWN/GENERIC *** ",
  296. .video_inputs = 4,
  297. .svhs = 2,
  298. .muxsel = MUXSEL(2, 3, 1, 0),
  299. .tuner_type = UNSET,
  300. .tuner_addr = ADDR_UNSET,
  301. },
  302. [BTTV_BOARD_MIRO] = {
  303. .name = "MIRO PCTV",
  304. .video_inputs = 4,
  305. /* .audio_inputs= 1, */
  306. .svhs = 2,
  307. .gpiomask = 15,
  308. .muxsel = MUXSEL(2, 3, 1, 1),
  309. .gpiomux = { 2, 0, 0, 0 },
  310. .gpiomute = 10,
  311. .needs_tvaudio = 1,
  312. .tuner_type = UNSET,
  313. .tuner_addr = ADDR_UNSET,
  314. },
  315. [BTTV_BOARD_HAUPPAUGE] = {
  316. .name = "Hauppauge (bt848)",
  317. .video_inputs = 4,
  318. /* .audio_inputs= 1, */
  319. .svhs = 2,
  320. .gpiomask = 7,
  321. .muxsel = MUXSEL(2, 3, 1, 1),
  322. .gpiomux = { 0, 1, 2, 3 },
  323. .gpiomute = 4,
  324. .needs_tvaudio = 1,
  325. .tuner_type = UNSET,
  326. .tuner_addr = ADDR_UNSET,
  327. },
  328. [BTTV_BOARD_STB] = {
  329. .name = "STB, Gateway P/N 6000699 (bt848)",
  330. .video_inputs = 3,
  331. /* .audio_inputs= 1, */
  332. .svhs = 2,
  333. .gpiomask = 7,
  334. .muxsel = MUXSEL(2, 3, 1, 1),
  335. .gpiomux = { 4, 0, 2, 3 },
  336. .gpiomute = 1,
  337. .no_msp34xx = 1,
  338. .needs_tvaudio = 1,
  339. .tuner_type = TUNER_PHILIPS_NTSC,
  340. .tuner_addr = ADDR_UNSET,
  341. .pll = PLL_28,
  342. .has_radio = 1,
  343. },
  344. /* ---- card 0x04 ---------------------------------- */
  345. [BTTV_BOARD_INTEL] = {
  346. .name = "Intel Create and Share PCI/ Smart Video Recorder III",
  347. .video_inputs = 4,
  348. /* .audio_inputs= 0, */
  349. .svhs = 2,
  350. .gpiomask = 0,
  351. .muxsel = MUXSEL(2, 3, 1, 1),
  352. .gpiomux = { 0 },
  353. .needs_tvaudio = 0,
  354. .tuner_type = TUNER_ABSENT,
  355. .tuner_addr = ADDR_UNSET,
  356. },
  357. [BTTV_BOARD_DIAMOND] = {
  358. .name = "Diamond DTV2000",
  359. .video_inputs = 4,
  360. /* .audio_inputs= 1, */
  361. .svhs = 2,
  362. .gpiomask = 3,
  363. .muxsel = MUXSEL(2, 3, 1, 0),
  364. .gpiomux = { 0, 1, 0, 1 },
  365. .gpiomute = 3,
  366. .needs_tvaudio = 1,
  367. .tuner_type = UNSET,
  368. .tuner_addr = ADDR_UNSET,
  369. },
  370. [BTTV_BOARD_AVERMEDIA] = {
  371. .name = "AVerMedia TVPhone",
  372. .video_inputs = 3,
  373. /* .audio_inputs= 1, */
  374. .svhs = 3,
  375. .muxsel = MUXSEL(2, 3, 1, 1),
  376. .gpiomask = 0x0f,
  377. .gpiomux = { 0x0c, 0x04, 0x08, 0x04 },
  378. /* 0x04 for some cards ?? */
  379. .needs_tvaudio = 1,
  380. .tuner_type = UNSET,
  381. .tuner_addr = ADDR_UNSET,
  382. .audio_mode_gpio= avermedia_tvphone_audio,
  383. .has_remote = 1,
  384. },
  385. [BTTV_BOARD_MATRIX_VISION] = {
  386. .name = "MATRIX-Vision MV-Delta",
  387. .video_inputs = 5,
  388. /* .audio_inputs= 1, */
  389. .svhs = 3,
  390. .gpiomask = 0,
  391. .muxsel = MUXSEL(2, 3, 1, 0, 0),
  392. .gpiomux = { 0 },
  393. .needs_tvaudio = 1,
  394. .tuner_type = TUNER_ABSENT,
  395. .tuner_addr = ADDR_UNSET,
  396. },
  397. /* ---- card 0x08 ---------------------------------- */
  398. [BTTV_BOARD_FLYVIDEO] = {
  399. .name = "Lifeview FlyVideo II (Bt848) LR26 / MAXI TV Video PCI2 LR26",
  400. .video_inputs = 4,
  401. /* .audio_inputs= 1, */
  402. .svhs = 2,
  403. .gpiomask = 0xc00,
  404. .muxsel = MUXSEL(2, 3, 1, 1),
  405. .gpiomux = { 0, 0xc00, 0x800, 0x400 },
  406. .gpiomute = 0xc00,
  407. .needs_tvaudio = 1,
  408. .pll = PLL_28,
  409. .tuner_type = UNSET,
  410. .tuner_addr = ADDR_UNSET,
  411. },
  412. [BTTV_BOARD_TURBOTV] = {
  413. .name = "IMS/IXmicro TurboTV",
  414. .video_inputs = 3,
  415. /* .audio_inputs= 1, */
  416. .svhs = 2,
  417. .gpiomask = 3,
  418. .muxsel = MUXSEL(2, 3, 1, 1),
  419. .gpiomux = { 1, 1, 2, 3 },
  420. .needs_tvaudio = 0,
  421. .pll = PLL_28,
  422. .tuner_type = TUNER_TEMIC_PAL,
  423. .tuner_addr = ADDR_UNSET,
  424. },
  425. [BTTV_BOARD_HAUPPAUGE878] = {
  426. .name = "Hauppauge (bt878)",
  427. .video_inputs = 4,
  428. /* .audio_inputs= 1, */
  429. .svhs = 2,
  430. .gpiomask = 0x0f, /* old: 7 */
  431. .muxsel = MUXSEL(2, 0, 1, 1),
  432. .gpiomux = { 0, 1, 2, 3 },
  433. .gpiomute = 4,
  434. .needs_tvaudio = 1,
  435. .pll = PLL_28,
  436. .tuner_type = UNSET,
  437. .tuner_addr = ADDR_UNSET,
  438. },
  439. [BTTV_BOARD_MIROPRO] = {
  440. .name = "MIRO PCTV pro",
  441. .video_inputs = 3,
  442. /* .audio_inputs= 1, */
  443. .svhs = 2,
  444. .gpiomask = 0x3014f,
  445. .muxsel = MUXSEL(2, 3, 1, 1),
  446. .gpiomux = { 0x20001,0x10001, 0, 0 },
  447. .gpiomute = 10,
  448. .needs_tvaudio = 1,
  449. .tuner_type = UNSET,
  450. .tuner_addr = ADDR_UNSET,
  451. },
  452. /* ---- card 0x0c ---------------------------------- */
  453. [BTTV_BOARD_ADSTECH_TV] = {
  454. .name = "ADS Technologies Channel Surfer TV (bt848)",
  455. .video_inputs = 3,
  456. /* .audio_inputs= 1, */
  457. .svhs = 2,
  458. .gpiomask = 15,
  459. .muxsel = MUXSEL(2, 3, 1, 1),
  460. .gpiomux = { 13, 14, 11, 7 },
  461. .needs_tvaudio = 1,
  462. .tuner_type = UNSET,
  463. .tuner_addr = ADDR_UNSET,
  464. },
  465. [BTTV_BOARD_AVERMEDIA98] = {
  466. .name = "AVerMedia TVCapture 98",
  467. .video_inputs = 3,
  468. /* .audio_inputs= 4, */
  469. .svhs = 2,
  470. .gpiomask = 15,
  471. .muxsel = MUXSEL(2, 3, 1, 1),
  472. .gpiomux = { 13, 14, 11, 7 },
  473. .needs_tvaudio = 1,
  474. .msp34xx_alt = 1,
  475. .pll = PLL_28,
  476. .tuner_type = TUNER_PHILIPS_PAL,
  477. .tuner_addr = ADDR_UNSET,
  478. .audio_mode_gpio= avermedia_tv_stereo_audio,
  479. .no_gpioirq = 1,
  480. },
  481. [BTTV_BOARD_VHX] = {
  482. .name = "Aimslab Video Highway Xtreme (VHX)",
  483. .video_inputs = 3,
  484. /* .audio_inputs= 1, */
  485. .svhs = 2,
  486. .gpiomask = 7,
  487. .muxsel = MUXSEL(2, 3, 1, 1),
  488. .gpiomux = { 0, 2, 1, 3 }, /* old: {0, 1, 2, 3, 4} */
  489. .gpiomute = 4,
  490. .needs_tvaudio = 1,
  491. .pll = PLL_28,
  492. .tuner_type = UNSET,
  493. .tuner_addr = ADDR_UNSET,
  494. },
  495. [BTTV_BOARD_ZOLTRIX] = {
  496. .name = "Zoltrix TV-Max",
  497. .video_inputs = 3,
  498. /* .audio_inputs= 1, */
  499. .svhs = 2,
  500. .gpiomask = 15,
  501. .muxsel = MUXSEL(2, 3, 1, 1),
  502. .gpiomux = { 0, 0, 1, 0 },
  503. .gpiomute = 10,
  504. .needs_tvaudio = 1,
  505. .tuner_type = UNSET,
  506. .tuner_addr = ADDR_UNSET,
  507. },
  508. /* ---- card 0x10 ---------------------------------- */
  509. [BTTV_BOARD_PIXVIEWPLAYTV] = {
  510. .name = "Prolink Pixelview PlayTV (bt878)",
  511. .video_inputs = 3,
  512. /* .audio_inputs= 1, */
  513. .svhs = 2,
  514. .gpiomask = 0x01fe00,
  515. .muxsel = MUXSEL(2, 3, 1, 1),
  516. /* 2003-10-20 by "Anton A. Arapov" <arapov@mail.ru> */
  517. .gpiomux = { 0x001e00, 0, 0x018000, 0x014000 },
  518. .gpiomute = 0x002000,
  519. .needs_tvaudio = 1,
  520. .pll = PLL_28,
  521. .tuner_type = UNSET,
  522. .tuner_addr = ADDR_UNSET,
  523. },
  524. [BTTV_BOARD_WINVIEW_601] = {
  525. .name = "Leadtek WinView 601",
  526. .video_inputs = 3,
  527. /* .audio_inputs= 1, */
  528. .svhs = 2,
  529. .gpiomask = 0x8300f8,
  530. .muxsel = MUXSEL(2, 3, 1, 1, 0),
  531. .gpiomux = { 0x4fa007,0xcfa007,0xcfa007,0xcfa007 },
  532. .gpiomute = 0xcfa007,
  533. .needs_tvaudio = 1,
  534. .tuner_type = UNSET,
  535. .tuner_addr = ADDR_UNSET,
  536. .volume_gpio = winview_volume,
  537. .has_radio = 1,
  538. },
  539. [BTTV_BOARD_AVEC_INTERCAP] = {
  540. .name = "AVEC Intercapture",
  541. .video_inputs = 3,
  542. /* .audio_inputs= 2, */
  543. .svhs = 2,
  544. .gpiomask = 0,
  545. .muxsel = MUXSEL(2, 3, 1, 1),
  546. .gpiomux = { 1, 0, 0, 0 },
  547. .needs_tvaudio = 1,
  548. .tuner_type = UNSET,
  549. .tuner_addr = ADDR_UNSET,
  550. },
  551. [BTTV_BOARD_LIFE_FLYKIT] = {
  552. .name = "Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only)",
  553. .video_inputs = 4,
  554. /* .audio_inputs= 1, */
  555. .svhs = NO_SVHS,
  556. .gpiomask = 0x8dff00,
  557. .muxsel = MUXSEL(2, 3, 1, 1),
  558. .gpiomux = { 0 },
  559. .no_msp34xx = 1,
  560. .tuner_type = TUNER_ABSENT,
  561. .tuner_addr = ADDR_UNSET,
  562. },
  563. /* ---- card 0x14 ---------------------------------- */
  564. [BTTV_BOARD_CEI_RAFFLES] = {
  565. .name = "CEI Raffles Card",
  566. .video_inputs = 3,
  567. /* .audio_inputs= 3, */
  568. .svhs = 2,
  569. .muxsel = MUXSEL(2, 3, 1, 1),
  570. .tuner_type = UNSET,
  571. .tuner_addr = ADDR_UNSET,
  572. },
  573. [BTTV_BOARD_CONFERENCETV] = {
  574. .name = "Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50",
  575. .video_inputs = 4,
  576. /* .audio_inputs= 2, tuner, line in */
  577. .svhs = 2,
  578. .gpiomask = 0x1800,
  579. .muxsel = MUXSEL(2, 3, 1, 1),
  580. .gpiomux = { 0, 0x800, 0x1000, 0x1000 },
  581. .gpiomute = 0x1800,
  582. .pll = PLL_28,
  583. .tuner_type = TUNER_PHILIPS_PAL_I,
  584. .tuner_addr = ADDR_UNSET,
  585. },
  586. [BTTV_BOARD_PHOEBE_TVMAS] = {
  587. .name = "Askey CPH050/ Phoebe Tv Master + FM",
  588. .video_inputs = 3,
  589. /* .audio_inputs= 1, */
  590. .svhs = 2,
  591. .gpiomask = 0xc00,
  592. .muxsel = MUXSEL(2, 3, 1, 1),
  593. .gpiomux = { 0, 1, 0x800, 0x400 },
  594. .gpiomute = 0xc00,
  595. .needs_tvaudio = 1,
  596. .pll = PLL_28,
  597. .tuner_type = UNSET,
  598. .tuner_addr = ADDR_UNSET,
  599. },
  600. [BTTV_BOARD_MODTEC_205] = {
  601. .name = "Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878",
  602. .video_inputs = 3,
  603. /* .audio_inputs= 1, */
  604. .svhs = NO_SVHS,
  605. .has_dig_in = 1,
  606. .gpiomask = 7,
  607. .muxsel = MUXSEL(2, 3, 0), /* input 2 is digital */
  608. /* .digital_mode= DIGITAL_MODE_CAMERA, */
  609. .gpiomux = { 0, 0, 0, 0 },
  610. .no_msp34xx = 1,
  611. .pll = PLL_28,
  612. .tuner_type = TUNER_ALPS_TSBB5_PAL_I,
  613. .tuner_addr = ADDR_UNSET,
  614. },
  615. /* ---- card 0x18 ---------------------------------- */
  616. [BTTV_BOARD_MAGICTVIEW061] = {
  617. .name = "Askey CPH05X/06X (bt878) [many vendors]",
  618. .video_inputs = 3,
  619. /* .audio_inputs= 1, */
  620. .svhs = 2,
  621. .gpiomask = 0xe00,
  622. .muxsel = MUXSEL(2, 3, 1, 1),
  623. .gpiomux = {0x400, 0x400, 0x400, 0x400 },
  624. .gpiomute = 0xc00,
  625. .needs_tvaudio = 1,
  626. .pll = PLL_28,
  627. .tuner_type = UNSET,
  628. .tuner_addr = ADDR_UNSET,
  629. .has_remote = 1,
  630. },
  631. [BTTV_BOARD_VOBIS_BOOSTAR] = {
  632. .name = "Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar",
  633. .video_inputs = 3,
  634. /* .audio_inputs= 1, */
  635. .svhs = 2,
  636. .gpiomask = 0x1f0fff,
  637. .muxsel = MUXSEL(2, 3, 1, 1),
  638. .gpiomux = { 0x20000, 0x30000, 0x10000, 0 },
  639. .gpiomute = 0x40000,
  640. .needs_tvaudio = 0,
  641. .tuner_type = TUNER_PHILIPS_PAL,
  642. .tuner_addr = ADDR_UNSET,
  643. .audio_mode_gpio= terratv_audio,
  644. },
  645. [BTTV_BOARD_HAUPPAUG_WCAM] = {
  646. .name = "Hauppauge WinCam newer (bt878)",
  647. .video_inputs = 4,
  648. /* .audio_inputs= 1, */
  649. .svhs = 3,
  650. .gpiomask = 7,
  651. .muxsel = MUXSEL(2, 0, 1, 1),
  652. .gpiomux = { 0, 1, 2, 3 },
  653. .gpiomute = 4,
  654. .needs_tvaudio = 1,
  655. .tuner_type = UNSET,
  656. .tuner_addr = ADDR_UNSET,
  657. },
  658. [BTTV_BOARD_MAXI] = {
  659. .name = "Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50",
  660. .video_inputs = 4,
  661. /* .audio_inputs= 2, */
  662. .svhs = 2,
  663. .gpiomask = 0x1800,
  664. .muxsel = MUXSEL(2, 3, 1, 1),
  665. .gpiomux = { 0, 0x800, 0x1000, 0x1000 },
  666. .gpiomute = 0x1800,
  667. .pll = PLL_28,
  668. .tuner_type = TUNER_PHILIPS_SECAM,
  669. .tuner_addr = ADDR_UNSET,
  670. },
  671. /* ---- card 0x1c ---------------------------------- */
  672. [BTTV_BOARD_TERRATV] = {
  673. .name = "Terratec TerraTV+ Version 1.1 (bt878)",
  674. .video_inputs = 3,
  675. /* .audio_inputs= 1, */
  676. .svhs = 2,
  677. .gpiomask = 0x1f0fff,
  678. .muxsel = MUXSEL(2, 3, 1, 1),
  679. .gpiomux = { 0x20000, 0x30000, 0x10000, 0x00000 },
  680. .gpiomute = 0x40000,
  681. .needs_tvaudio = 0,
  682. .tuner_type = TUNER_PHILIPS_PAL,
  683. .tuner_addr = ADDR_UNSET,
  684. .audio_mode_gpio= terratv_audio,
  685. /* GPIO wiring:
  686. External 20 pin connector (for Active Radio Upgrade board)
  687. gpio00: i2c-sda
  688. gpio01: i2c-scl
  689. gpio02: om5610-data
  690. gpio03: om5610-clk
  691. gpio04: om5610-wre
  692. gpio05: om5610-stereo
  693. gpio06: rds6588-davn
  694. gpio07: Pin 7 n.c.
  695. gpio08: nIOW
  696. gpio09+10: nIOR, nSEL ?? (bt878)
  697. gpio09: nIOR (bt848)
  698. gpio10: nSEL (bt848)
  699. Sound Routing:
  700. gpio16: u2-A0 (1st 4052bt)
  701. gpio17: u2-A1
  702. gpio18: u2-nEN
  703. gpio19: u4-A0 (2nd 4052)
  704. gpio20: u4-A1
  705. u4-nEN - GND
  706. Btspy:
  707. 00000 : Cdrom (internal audio input)
  708. 10000 : ext. Video audio input
  709. 20000 : TV Mono
  710. a0000 : TV Mono/2
  711. 1a0000 : TV Stereo
  712. 30000 : Radio
  713. 40000 : Mute
  714. */
  715. },
  716. [BTTV_BOARD_PXC200] = {
  717. /* Jannik Fritsch <jannik@techfak.uni-bielefeld.de> */
  718. .name = "Imagenation PXC200",
  719. .video_inputs = 5,
  720. /* .audio_inputs= 1, */
  721. .svhs = 1, /* was: 4 */
  722. .gpiomask = 0,
  723. .muxsel = MUXSEL(2, 3, 1, 0, 0),
  724. .gpiomux = { 0 },
  725. .needs_tvaudio = 1,
  726. .tuner_type = TUNER_ABSENT,
  727. .tuner_addr = ADDR_UNSET,
  728. .muxsel_hook = PXC200_muxsel,
  729. },
  730. [BTTV_BOARD_FLYVIDEO_98] = {
  731. .name = "Lifeview FlyVideo 98 LR50",
  732. .video_inputs = 4,
  733. /* .audio_inputs= 1, */
  734. .svhs = 2,
  735. .gpiomask = 0x1800, /* 0x8dfe00 */
  736. .muxsel = MUXSEL(2, 3, 1, 1),
  737. .gpiomux = { 0, 0x0800, 0x1000, 0x1000 },
  738. .gpiomute = 0x1800,
  739. .pll = PLL_28,
  740. .tuner_type = UNSET,
  741. .tuner_addr = ADDR_UNSET,
  742. },
  743. [BTTV_BOARD_IPROTV] = {
  744. .name = "Formac iProTV, Formac ProTV I (bt848)",
  745. .video_inputs = 4,
  746. /* .audio_inputs= 1, */
  747. .svhs = 3,
  748. .gpiomask = 1,
  749. .muxsel = MUXSEL(2, 3, 1, 1),
  750. .gpiomux = { 1, 0, 0, 0 },
  751. .pll = PLL_28,
  752. .tuner_type = TUNER_PHILIPS_PAL,
  753. .tuner_addr = ADDR_UNSET,
  754. },
  755. /* ---- card 0x20 ---------------------------------- */
  756. [BTTV_BOARD_INTEL_C_S_PCI] = {
  757. .name = "Intel Create and Share PCI/ Smart Video Recorder III",
  758. .video_inputs = 4,
  759. /* .audio_inputs= 0, */
  760. .svhs = 2,
  761. .gpiomask = 0,
  762. .muxsel = MUXSEL(2, 3, 1, 1),
  763. .gpiomux = { 0 },
  764. .needs_tvaudio = 0,
  765. .tuner_type = TUNER_ABSENT,
  766. .tuner_addr = ADDR_UNSET,
  767. },
  768. [BTTV_BOARD_TERRATVALUE] = {
  769. .name = "Terratec TerraTValue Version Bt878",
  770. .video_inputs = 3,
  771. /* .audio_inputs= 1, */
  772. .svhs = 2,
  773. .gpiomask = 0xffff00,
  774. .muxsel = MUXSEL(2, 3, 1, 1),
  775. .gpiomux = { 0x500, 0, 0x300, 0x900 },
  776. .gpiomute = 0x900,
  777. .needs_tvaudio = 1,
  778. .pll = PLL_28,
  779. .tuner_type = TUNER_PHILIPS_PAL,
  780. .tuner_addr = ADDR_UNSET,
  781. },
  782. [BTTV_BOARD_WINFAST2000] = {
  783. .name = "Leadtek WinFast 2000/ WinFast 2000 XP",
  784. .video_inputs = 4,
  785. /* .audio_inputs= 1, */
  786. .svhs = 2,
  787. /* TV, CVid, SVid, CVid over SVid connector */
  788. .muxsel = MUXSEL(2, 3, 1, 1, 0),
  789. /* Alexander Varakin <avarakin@hotmail.com> [stereo version] */
  790. .gpiomask = 0xb33000,
  791. .gpiomux = { 0x122000,0x1000,0x0000,0x620000 },
  792. .gpiomute = 0x800000,
  793. /* Audio Routing for "WinFast 2000 XP" (no tv stereo !)
  794. gpio23 -- hef4052:nEnable (0x800000)
  795. gpio12 -- hef4052:A1
  796. gpio13 -- hef4052:A0
  797. 0x0000: external audio
  798. 0x1000: FM
  799. 0x2000: TV
  800. 0x3000: n.c.
  801. Note: There exists another variant "Winfast 2000" with tv stereo !?
  802. Note: eeprom only contains FF and pci subsystem id 107d:6606
  803. */
  804. .needs_tvaudio = 0,
  805. .pll = PLL_28,
  806. .has_radio = 1,
  807. .tuner_type = TUNER_PHILIPS_PAL, /* default for now, gpio reads BFFF06 for Pal bg+dk */
  808. .tuner_addr = ADDR_UNSET,
  809. .audio_mode_gpio= winfast2000_audio,
  810. .has_remote = 1,
  811. },
  812. [BTTV_BOARD_CHRONOS_VS2] = {
  813. .name = "Lifeview FlyVideo 98 LR50 / Chronos Video Shuttle II",
  814. .video_inputs = 4,
  815. /* .audio_inputs= 3, */
  816. .svhs = 2,
  817. .gpiomask = 0x1800,
  818. .muxsel = MUXSEL(2, 3, 1, 1),
  819. .gpiomux = { 0, 0x800, 0x1000, 0x1000 },
  820. .gpiomute = 0x1800,
  821. .pll = PLL_28,
  822. .tuner_type = UNSET,
  823. .tuner_addr = ADDR_UNSET,
  824. },
  825. /* ---- card 0x24 ---------------------------------- */
  826. [BTTV_BOARD_TYPHOON_TVIEW] = {
  827. .name = "Lifeview FlyVideo 98FM LR50 / Typhoon TView TV/FM Tuner",
  828. .video_inputs = 4,
  829. /* .audio_inputs= 3, */
  830. .svhs = 2,
  831. .gpiomask = 0x1800,
  832. .muxsel = MUXSEL(2, 3, 1, 1),
  833. .gpiomux = { 0, 0x800, 0x1000, 0x1000 },
  834. .gpiomute = 0x1800,
  835. .pll = PLL_28,
  836. .tuner_type = UNSET,
  837. .tuner_addr = ADDR_UNSET,
  838. .has_radio = 1,
  839. },
  840. [BTTV_BOARD_PXELVWPLTVPRO] = {
  841. .name = "Prolink PixelView PlayTV pro",
  842. .video_inputs = 3,
  843. /* .audio_inputs= 1, */
  844. .svhs = 2,
  845. .gpiomask = 0xff,
  846. .muxsel = MUXSEL(2, 3, 1, 1),
  847. .gpiomux = { 0x21, 0x20, 0x24, 0x2c },
  848. .gpiomute = 0x29,
  849. .no_msp34xx = 1,
  850. .pll = PLL_28,
  851. .tuner_type = UNSET,
  852. .tuner_addr = ADDR_UNSET,
  853. },
  854. [BTTV_BOARD_MAGICTVIEW063] = {
  855. .name = "Askey CPH06X TView99",
  856. .video_inputs = 4,
  857. /* .audio_inputs= 1, */
  858. .svhs = 2,
  859. .gpiomask = 0x551e00,
  860. .muxsel = MUXSEL(2, 3, 1, 0),
  861. .gpiomux = { 0x551400, 0x551200, 0, 0 },
  862. .gpiomute = 0x551c00,
  863. .needs_tvaudio = 1,
  864. .pll = PLL_28,
  865. .tuner_type = TUNER_PHILIPS_PAL_I,
  866. .tuner_addr = ADDR_UNSET,
  867. .has_remote = 1,
  868. },
  869. [BTTV_BOARD_PINNACLE] = {
  870. .name = "Pinnacle PCTV Studio/Rave",
  871. .video_inputs = 3,
  872. /* .audio_inputs= 1, */
  873. .svhs = 2,
  874. .gpiomask = 0x03000F,
  875. .muxsel = MUXSEL(2, 3, 1, 1),
  876. .gpiomux = { 2, 0xd0001, 0, 0 },
  877. .gpiomute = 1,
  878. .needs_tvaudio = 0,
  879. .pll = PLL_28,
  880. .tuner_type = UNSET,
  881. .tuner_addr = ADDR_UNSET,
  882. },
  883. /* ---- card 0x28 ---------------------------------- */
  884. [BTTV_BOARD_STB2] = {
  885. .name = "STB TV PCI FM, Gateway P/N 6000704 (bt878), 3Dfx VoodooTV 100",
  886. .video_inputs = 3,
  887. /* .audio_inputs= 1, */
  888. .svhs = 2,
  889. .gpiomask = 7,
  890. .muxsel = MUXSEL(2, 3, 1, 1),
  891. .gpiomux = { 4, 0, 2, 3 },
  892. .gpiomute = 1,
  893. .no_msp34xx = 1,
  894. .needs_tvaudio = 1,
  895. .tuner_type = TUNER_PHILIPS_NTSC,
  896. .tuner_addr = ADDR_UNSET,
  897. .pll = PLL_28,
  898. .has_radio = 1,
  899. },
  900. [BTTV_BOARD_AVPHONE98] = {
  901. .name = "AVerMedia TVPhone 98",
  902. .video_inputs = 3,
  903. /* .audio_inputs= 4, */
  904. .svhs = 2,
  905. .gpiomask = 15,
  906. .muxsel = MUXSEL(2, 3, 1, 1),
  907. .gpiomux = { 13, 4, 11, 7 },
  908. .needs_tvaudio = 1,
  909. .pll = PLL_28,
  910. .tuner_type = UNSET,
  911. .tuner_addr = ADDR_UNSET,
  912. .has_radio = 1,
  913. .audio_mode_gpio= avermedia_tvphone_audio,
  914. },
  915. [BTTV_BOARD_PV951] = {
  916. .name = "ProVideo PV951", /* pic16c54 */
  917. .video_inputs = 3,
  918. /* .audio_inputs= 1, */
  919. .svhs = 2,
  920. .gpiomask = 0,
  921. .muxsel = MUXSEL(2, 3, 1, 1),
  922. .gpiomux = { 0, 0, 0, 0},
  923. .needs_tvaudio = 1,
  924. .no_msp34xx = 1,
  925. .pll = PLL_28,
  926. .tuner_type = TUNER_PHILIPS_PAL_I,
  927. .tuner_addr = ADDR_UNSET,
  928. },
  929. [BTTV_BOARD_ONAIR_TV] = {
  930. .name = "Little OnAir TV",
  931. .video_inputs = 3,
  932. /* .audio_inputs= 1, */
  933. .svhs = 2,
  934. .gpiomask = 0xe00b,
  935. .muxsel = MUXSEL(2, 3, 1, 1),
  936. .gpiomux = { 0xff9ff6, 0xff9ff6, 0xff1ff7, 0 },
  937. .gpiomute = 0xff3ffc,
  938. .no_msp34xx = 1,
  939. .tuner_type = UNSET,
  940. .tuner_addr = ADDR_UNSET,
  941. },
  942. /* ---- card 0x2c ---------------------------------- */
  943. [BTTV_BOARD_SIGMA_TVII_FM] = {
  944. .name = "Sigma TVII-FM",
  945. .video_inputs = 2,
  946. /* .audio_inputs= 1, */
  947. .svhs = NO_SVHS,
  948. .gpiomask = 3,
  949. .muxsel = MUXSEL(2, 3, 1, 1),
  950. .gpiomux = { 1, 1, 0, 2 },
  951. .gpiomute = 3,
  952. .no_msp34xx = 1,
  953. .pll = PLL_NONE,
  954. .tuner_type = UNSET,
  955. .tuner_addr = ADDR_UNSET,
  956. },
  957. [BTTV_BOARD_MATRIX_VISION2] = {
  958. .name = "MATRIX-Vision MV-Delta 2",
  959. .video_inputs = 5,
  960. /* .audio_inputs= 1, */
  961. .svhs = 3,
  962. .gpiomask = 0,
  963. .muxsel = MUXSEL(2, 3, 1, 0, 0),
  964. .gpiomux = { 0 },
  965. .no_msp34xx = 1,
  966. .pll = PLL_28,
  967. .tuner_type = TUNER_ABSENT,
  968. .tuner_addr = ADDR_UNSET,
  969. },
  970. [BTTV_BOARD_ZOLTRIX_GENIE] = {
  971. .name = "Zoltrix Genie TV/FM",
  972. .video_inputs = 3,
  973. /* .audio_inputs= 1, */
  974. .svhs = 2,
  975. .gpiomask = 0xbcf03f,
  976. .muxsel = MUXSEL(2, 3, 1, 1),
  977. .gpiomux = { 0xbc803f, 0xbc903f, 0xbcb03f, 0 },
  978. .gpiomute = 0xbcb03f,
  979. .no_msp34xx = 1,
  980. .pll = PLL_28,
  981. .tuner_type = TUNER_TEMIC_4039FR5_NTSC,
  982. .tuner_addr = ADDR_UNSET,
  983. },
  984. [BTTV_BOARD_TERRATVRADIO] = {
  985. .name = "Terratec TV/Radio+",
  986. .video_inputs = 3,
  987. /* .audio_inputs= 1, */
  988. .svhs = 2,
  989. .gpiomask = 0x70000,
  990. .muxsel = MUXSEL(2, 3, 1, 1),
  991. .gpiomux = { 0x20000, 0x30000, 0x10000, 0 },
  992. .gpiomute = 0x40000,
  993. .needs_tvaudio = 1,
  994. .no_msp34xx = 1,
  995. .pll = PLL_35,
  996. .tuner_type = TUNER_PHILIPS_PAL_I,
  997. .tuner_addr = ADDR_UNSET,
  998. .has_radio = 1,
  999. },
  1000. /* ---- card 0x30 ---------------------------------- */
  1001. [BTTV_BOARD_DYNALINK] = {
  1002. .name = "Askey CPH03x/ Dynalink Magic TView",
  1003. .video_inputs = 3,
  1004. /* .audio_inputs= 1, */
  1005. .svhs = 2,
  1006. .gpiomask = 15,
  1007. .muxsel = MUXSEL(2, 3, 1, 1),
  1008. .gpiomux = {2,0,0,0 },
  1009. .gpiomute = 1,
  1010. .needs_tvaudio = 1,
  1011. .pll = PLL_28,
  1012. .tuner_type = UNSET,
  1013. .tuner_addr = ADDR_UNSET,
  1014. },
  1015. [BTTV_BOARD_GVBCTV3PCI] = {
  1016. .name = "IODATA GV-BCTV3/PCI",
  1017. .video_inputs = 3,
  1018. /* .audio_inputs= 1, */
  1019. .svhs = 2,
  1020. .gpiomask = 0x010f00,
  1021. .muxsel = MUXSEL(2, 3, 0, 0),
  1022. .gpiomux = {0x10000, 0, 0x10000, 0 },
  1023. .no_msp34xx = 1,
  1024. .pll = PLL_28,
  1025. .tuner_type = TUNER_ALPS_TSHC6_NTSC,
  1026. .tuner_addr = ADDR_UNSET,
  1027. .audio_mode_gpio= gvbctv3pci_audio,
  1028. },
  1029. [BTTV_BOARD_PXELVWPLTVPAK] = {
  1030. .name = "Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP",
  1031. .video_inputs = 5,
  1032. /* .audio_inputs= 1, */
  1033. .svhs = 3,
  1034. .has_dig_in = 1,
  1035. .gpiomask = 0xAA0000,
  1036. .muxsel = MUXSEL(2, 3, 1, 1, 0), /* in 4 is digital */
  1037. /* .digital_mode= DIGITAL_MODE_CAMERA, */
  1038. .gpiomux = { 0x20000, 0, 0x80000, 0x80000 },
  1039. .gpiomute = 0xa8000,
  1040. .no_msp34xx = 1,
  1041. .pll = PLL_28,
  1042. .tuner_type = TUNER_PHILIPS_PAL_I,
  1043. .tuner_addr = ADDR_UNSET,
  1044. .has_remote = 1,
  1045. /* GPIO wiring: (different from Rev.4C !)
  1046. GPIO17: U4.A0 (first hef4052bt)
  1047. GPIO19: U4.A1
  1048. GPIO20: U5.A1 (second hef4052bt)
  1049. GPIO21: U4.nEN
  1050. GPIO22: BT832 Reset Line
  1051. GPIO23: A5,A0, U5,nEN
  1052. Note: At i2c=0x8a is a Bt832 chip, which changes to 0x88 after being reset via GPIO22
  1053. */
  1054. },
  1055. [BTTV_BOARD_EAGLE] = {
  1056. .name = "Eagle Wireless Capricorn2 (bt878A)",
  1057. .video_inputs = 4,
  1058. /* .audio_inputs= 1, */
  1059. .svhs = 2,
  1060. .gpiomask = 7,
  1061. .muxsel = MUXSEL(2, 0, 1, 1),
  1062. .gpiomux = { 0, 1, 2, 3 },
  1063. .gpiomute = 4,
  1064. .pll = PLL_28,
  1065. .tuner_type = UNSET /* TUNER_ALPS_TMDH2_NTSC */,
  1066. .tuner_addr = ADDR_UNSET,
  1067. },
  1068. /* ---- card 0x34 ---------------------------------- */
  1069. [BTTV_BOARD_PINNACLEPRO] = {
  1070. /* David Härdeman <david@2gen.com> */
  1071. .name = "Pinnacle PCTV Studio Pro",
  1072. .video_inputs = 4,
  1073. /* .audio_inputs= 1, */
  1074. .svhs = 3,
  1075. .gpiomask = 0x03000F,
  1076. .muxsel = MUXSEL(2, 3, 1, 1),
  1077. .gpiomux = { 1, 0xd0001, 0, 0 },
  1078. .gpiomute = 10,
  1079. /* sound path (5 sources):
  1080. MUX1 (mask 0x03), Enable Pin 0x08 (0=enable, 1=disable)
  1081. 0= ext. Audio IN
  1082. 1= from MUX2
  1083. 2= Mono TV sound from Tuner
  1084. 3= not connected
  1085. MUX2 (mask 0x30000):
  1086. 0,2,3= from MSP34xx
  1087. 1= FM stereo Radio from Tuner */
  1088. .needs_tvaudio = 0,
  1089. .pll = PLL_28,
  1090. .tuner_type = UNSET,
  1091. .tuner_addr = ADDR_UNSET,
  1092. },
  1093. [BTTV_BOARD_TVIEW_RDS_FM] = {
  1094. /* Claas Langbehn <claas@bigfoot.com>,
  1095. Sven Grothklags <sven@upb.de> */
  1096. .name = "Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS",
  1097. .video_inputs = 4,
  1098. /* .audio_inputs= 3, */
  1099. .svhs = 2,
  1100. .gpiomask = 0x1c,
  1101. .muxsel = MUXSEL(2, 3, 1, 1),
  1102. .gpiomux = { 0, 0, 0x10, 8 },
  1103. .gpiomute = 4,
  1104. .needs_tvaudio = 1,
  1105. .pll = PLL_28,
  1106. .tuner_type = TUNER_PHILIPS_PAL,
  1107. .tuner_addr = ADDR_UNSET,
  1108. .has_radio = 1,
  1109. },
  1110. [BTTV_BOARD_LIFETEC_9415] = {
  1111. /* Tim Röstermundt <rosterm@uni-muenster.de>
  1112. in de.comp.os.unix.linux.hardware:
  1113. options bttv card=0 pll=1 radio=1 gpiomask=0x18e0
  1114. gpiomux =0x44c71f,0x44d71f,0,0x44d71f,0x44dfff
  1115. options tuner type=5 */
  1116. .name = "Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90]",
  1117. .video_inputs = 4,
  1118. /* .audio_inputs= 1, */
  1119. .svhs = 2,
  1120. .gpiomask = 0x18e0,
  1121. .muxsel = MUXSEL(2, 3, 1, 1),
  1122. .gpiomux = { 0x0000,0x0800,0x1000,0x1000 },
  1123. .gpiomute = 0x18e0,
  1124. /* For cards with tda9820/tda9821:
  1125. 0x0000: Tuner normal stereo
  1126. 0x0080: Tuner A2 SAP (second audio program = Zweikanalton)
  1127. 0x0880: Tuner A2 stereo */
  1128. .pll = PLL_28,
  1129. .tuner_type = UNSET,
  1130. .tuner_addr = ADDR_UNSET,
  1131. },
  1132. [BTTV_BOARD_BESTBUY_EASYTV] = {
  1133. /* Miguel Angel Alvarez <maacruz@navegalia.com>
  1134. old Easy TV BT848 version (model CPH031) */
  1135. .name = "Askey CPH031/ BESTBUY Easy TV",
  1136. .video_inputs = 4,
  1137. /* .audio_inputs= 1, */
  1138. .svhs = 2,
  1139. .gpiomask = 0xF,
  1140. .muxsel = MUXSEL(2, 3, 1, 0),
  1141. .gpiomux = { 2, 0, 0, 0 },
  1142. .gpiomute = 10,
  1143. .needs_tvaudio = 0,
  1144. .pll = PLL_28,
  1145. .tuner_type = TUNER_TEMIC_PAL,
  1146. .tuner_addr = ADDR_UNSET,
  1147. },
  1148. /* ---- card 0x38 ---------------------------------- */
  1149. [BTTV_BOARD_FLYVIDEO_98FM] = {
  1150. /* Gordon Heydon <gjheydon@bigfoot.com ('98) */
  1151. .name = "Lifeview FlyVideo 98FM LR50",
  1152. .video_inputs = 4,
  1153. /* .audio_inputs= 3, */
  1154. .svhs = 2,
  1155. .gpiomask = 0x1800,
  1156. .muxsel = MUXSEL(2, 3, 1, 1),
  1157. .gpiomux = { 0, 0x800, 0x1000, 0x1000 },
  1158. .gpiomute = 0x1800,
  1159. .pll = PLL_28,
  1160. .tuner_type = TUNER_PHILIPS_PAL,
  1161. .tuner_addr = ADDR_UNSET,
  1162. },
  1163. /* This is the ultimate cheapo capture card
  1164. * just a BT848A on a small PCB!
  1165. * Steve Hosgood <steve@equiinet.com> */
  1166. [BTTV_BOARD_GRANDTEC] = {
  1167. .name = "GrandTec 'Grand Video Capture' (Bt848)",
  1168. .video_inputs = 2,
  1169. /* .audio_inputs= 0, */
  1170. .svhs = 1,
  1171. .gpiomask = 0,
  1172. .muxsel = MUXSEL(3, 1),
  1173. .gpiomux = { 0 },
  1174. .needs_tvaudio = 0,
  1175. .no_msp34xx = 1,
  1176. .pll = PLL_35,
  1177. .tuner_type = TUNER_ABSENT,
  1178. .tuner_addr = ADDR_UNSET,
  1179. },
  1180. [BTTV_BOARD_ASKEY_CPH060] = {
  1181. /* Daniel Herrington <daniel.herrington@home.com> */
  1182. .name = "Askey CPH060/ Phoebe TV Master Only (No FM)",
  1183. .video_inputs = 3,
  1184. /* .audio_inputs= 1, */
  1185. .svhs = 2,
  1186. .gpiomask = 0xe00,
  1187. .muxsel = MUXSEL(2, 3, 1, 1),
  1188. .gpiomux = { 0x400, 0x400, 0x400, 0x400 },
  1189. .gpiomute = 0x800,
  1190. .needs_tvaudio = 1,
  1191. .pll = PLL_28,
  1192. .tuner_type = TUNER_TEMIC_4036FY5_NTSC,
  1193. .tuner_addr = ADDR_UNSET,
  1194. },
  1195. [BTTV_BOARD_ASKEY_CPH03X] = {
  1196. /* Matti Mottus <mottus@physic.ut.ee> */
  1197. .name = "Askey CPH03x TV Capturer",
  1198. .video_inputs = 4,
  1199. /* .audio_inputs= 1, */
  1200. .svhs = 2,
  1201. .gpiomask = 0x03000F,
  1202. .muxsel = MUXSEL(2, 3, 1, 0),
  1203. .gpiomux = { 2, 0, 0, 0 },
  1204. .gpiomute = 1,
  1205. .pll = PLL_28,
  1206. .tuner_type = TUNER_TEMIC_PAL,
  1207. .tuner_addr = ADDR_UNSET,
  1208. .has_remote = 1,
  1209. },
  1210. /* ---- card 0x3c ---------------------------------- */
  1211. [BTTV_BOARD_MM100PCTV] = {
  1212. /* Philip Blundell <philb@gnu.org> */
  1213. .name = "Modular Technology MM100PCTV",
  1214. .video_inputs = 2,
  1215. /* .audio_inputs= 2, */
  1216. .svhs = NO_SVHS,
  1217. .gpiomask = 11,
  1218. .muxsel = MUXSEL(2, 3, 1, 1),
  1219. .gpiomux = { 2, 0, 0, 1 },
  1220. .gpiomute = 8,
  1221. .pll = PLL_35,
  1222. .tuner_type = TUNER_TEMIC_PAL,
  1223. .tuner_addr = ADDR_UNSET,
  1224. },
  1225. [BTTV_BOARD_GMV1] = {
  1226. /* Adrian Cox <adrian@humboldt.co.uk */
  1227. .name = "AG Electronics GMV1",
  1228. .video_inputs = 2,
  1229. /* .audio_inputs= 0, */
  1230. .svhs = 1,
  1231. .gpiomask = 0xF,
  1232. .muxsel = MUXSEL(2, 2),
  1233. .gpiomux = { },
  1234. .no_msp34xx = 1,
  1235. .needs_tvaudio = 0,
  1236. .pll = PLL_28,
  1237. .tuner_type = TUNER_ABSENT,
  1238. .tuner_addr = ADDR_UNSET,
  1239. },
  1240. [BTTV_BOARD_BESTBUY_EASYTV2] = {
  1241. /* Miguel Angel Alvarez <maacruz@navegalia.com>
  1242. new Easy TV BT878 version (model CPH061)
  1243. special thanks to Informatica Mieres for providing the card */
  1244. .name = "Askey CPH061/ BESTBUY Easy TV (bt878)",
  1245. .video_inputs = 3,
  1246. /* .audio_inputs= 2, */
  1247. .svhs = 2,
  1248. .gpiomask = 0xFF,
  1249. .muxsel = MUXSEL(2, 3, 1, 0),
  1250. .gpiomux = { 1, 0, 4, 4 },
  1251. .gpiomute = 9,
  1252. .needs_tvaudio = 0,
  1253. .pll = PLL_28,
  1254. .tuner_type = TUNER_PHILIPS_PAL,
  1255. .tuner_addr = ADDR_UNSET,
  1256. },
  1257. [BTTV_BOARD_ATI_TVWONDER] = {
  1258. /* Lukas Gebauer <geby@volny.cz> */
  1259. .name = "ATI TV-Wonder",
  1260. .video_inputs = 3,
  1261. /* .audio_inputs= 1, */
  1262. .svhs = 2,
  1263. .gpiomask = 0xf03f,
  1264. .muxsel = MUXSEL(2, 3, 1, 0),
  1265. .gpiomux = { 0xbffe, 0, 0xbfff, 0 },
  1266. .gpiomute = 0xbffe,
  1267. .pll = PLL_28,
  1268. .tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL,
  1269. .tuner_addr = ADDR_UNSET,
  1270. },
  1271. /* ---- card 0x40 ---------------------------------- */
  1272. [BTTV_BOARD_ATI_TVWONDERVE] = {
  1273. /* Lukas Gebauer <geby@volny.cz> */
  1274. .name = "ATI TV-Wonder VE",
  1275. .video_inputs = 2,
  1276. /* .audio_inputs= 1, */
  1277. .svhs = NO_SVHS,
  1278. .gpiomask = 1,
  1279. .muxsel = MUXSEL(2, 3, 0, 1),
  1280. .gpiomux = { 0, 0, 1, 0 },
  1281. .no_msp34xx = 1,
  1282. .pll = PLL_28,
  1283. .tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL,
  1284. .tuner_addr = ADDR_UNSET,
  1285. },
  1286. [BTTV_BOARD_FLYVIDEO2000] = {
  1287. /* DeeJay <deejay@westel900.net (2000S) */
  1288. .name = "Lifeview FlyVideo 2000S LR90",
  1289. .video_inputs = 3,
  1290. /* .audio_inputs= 3, */
  1291. .svhs = 2,
  1292. .gpiomask = 0x18e0,
  1293. .muxsel = MUXSEL(2, 3, 0, 1),
  1294. /* Radio changed from 1e80 to 0x800 to make
  1295. FlyVideo2000S in .hu happy (gm)*/
  1296. /* -dk-???: set mute=0x1800 for tda9874h daughterboard */
  1297. .gpiomux = { 0x0000,0x0800,0x1000,0x1000 },
  1298. .gpiomute = 0x1800,
  1299. .audio_mode_gpio= fv2000s_audio,
  1300. .no_msp34xx = 1,
  1301. .needs_tvaudio = 1,
  1302. .pll = PLL_28,
  1303. .tuner_type = TUNER_PHILIPS_PAL,
  1304. .tuner_addr = ADDR_UNSET,
  1305. },
  1306. [BTTV_BOARD_TERRATVALUER] = {
  1307. .name = "Terratec TValueRadio",
  1308. .video_inputs = 3,
  1309. /* .audio_inputs= 1, */
  1310. .svhs = 2,
  1311. .gpiomask = 0xffff00,
  1312. .muxsel = MUXSEL(2, 3, 1, 1),
  1313. .gpiomux = { 0x500, 0x500, 0x300, 0x900 },
  1314. .gpiomute = 0x900,
  1315. .needs_tvaudio = 1,
  1316. .pll = PLL_28,
  1317. .tuner_type = TUNER_PHILIPS_PAL,
  1318. .tuner_addr = ADDR_UNSET,
  1319. .has_radio = 1,
  1320. },
  1321. [BTTV_BOARD_GVBCTV4PCI] = {
  1322. /* TANAKA Kei <peg00625@nifty.com> */
  1323. .name = "IODATA GV-BCTV4/PCI",
  1324. .video_inputs = 3,
  1325. /* .audio_inputs= 1, */
  1326. .svhs = 2,
  1327. .gpiomask = 0x010f00,
  1328. .muxsel = MUXSEL(2, 3, 0, 0),
  1329. .gpiomux = {0x10000, 0, 0x10000, 0 },
  1330. .no_msp34xx = 1,
  1331. .pll = PLL_28,
  1332. .tuner_type = TUNER_SHARP_2U5JF5540_NTSC,
  1333. .tuner_addr = ADDR_UNSET,
  1334. .audio_mode_gpio= gvbctv3pci_audio,
  1335. },
  1336. /* ---- card 0x44 ---------------------------------- */
  1337. [BTTV_BOARD_VOODOOTV_FM] = {
  1338. .name = "3Dfx VoodooTV FM (Euro)",
  1339. /* try "insmod msp3400 simple=0" if you have
  1340. * sound problems with this card. */
  1341. .video_inputs = 4,
  1342. /* .audio_inputs= 1, */
  1343. .svhs = NO_SVHS,
  1344. .gpiomask = 0x4f8a00,
  1345. /* 0x100000: 1=MSP enabled (0=disable again)
  1346. * 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) */
  1347. .gpiomux = {0x947fff, 0x987fff,0x947fff,0x947fff },
  1348. .gpiomute = 0x947fff,
  1349. /* tvtuner, radio, external,internal, mute, stereo
  1350. * tuner, Composit, SVid, Composit-on-Svid-adapter */
  1351. .muxsel = MUXSEL(2, 3, 0, 1),
  1352. .tuner_type = TUNER_MT2032,
  1353. .tuner_addr = ADDR_UNSET,
  1354. .pll = PLL_28,
  1355. .has_radio = 1,
  1356. },
  1357. [BTTV_BOARD_VOODOOTV_200] = {
  1358. .name = "VoodooTV 200 (USA)",
  1359. /* try "insmod msp3400 simple=0" if you have
  1360. * sound problems with this card. */
  1361. .video_inputs = 4,
  1362. /* .audio_inputs= 1, */
  1363. .svhs = NO_SVHS,
  1364. .gpiomask = 0x4f8a00,
  1365. /* 0x100000: 1=MSP enabled (0=disable again)
  1366. * 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) */
  1367. .gpiomux = {0x947fff, 0x987fff,0x947fff,0x947fff },
  1368. .gpiomute = 0x947fff,
  1369. /* tvtuner, radio, external,internal, mute, stereo
  1370. * tuner, Composit, SVid, Composit-on-Svid-adapter */
  1371. .muxsel = MUXSEL(2, 3, 0, 1),
  1372. .tuner_type = TUNER_MT2032,
  1373. .tuner_addr = ADDR_UNSET,
  1374. .pll = PLL_28,
  1375. .has_radio = 1,
  1376. },
  1377. [BTTV_BOARD_AIMMS] = {
  1378. /* Philip Blundell <pb@nexus.co.uk> */
  1379. .name = "Active Imaging AIMMS",
  1380. .video_inputs = 1,
  1381. /* .audio_inputs= 0, */
  1382. .tuner_type = TUNER_ABSENT,
  1383. .tuner_addr = ADDR_UNSET,
  1384. .pll = PLL_28,
  1385. .muxsel = MUXSEL(2),
  1386. .gpiomask = 0
  1387. },
  1388. [BTTV_BOARD_PV_BT878P_PLUS] = {
  1389. /* Tomasz Pyra <hellfire@sedez.iq.pl> */
  1390. .name = "Prolink Pixelview PV-BT878P+ (Rev.4C,8E)",
  1391. .video_inputs = 3,
  1392. /* .audio_inputs= 4, */
  1393. .svhs = 2,
  1394. .gpiomask = 15,
  1395. .muxsel = MUXSEL(2, 3, 1, 1),
  1396. .gpiomux = { 0, 0, 11, 7 }, /* TV and Radio with same GPIO ! */
  1397. .gpiomute = 13,
  1398. .needs_tvaudio = 1,
  1399. .pll = PLL_28,
  1400. .tuner_type = TUNER_LG_PAL_I_FM,
  1401. .tuner_addr = ADDR_UNSET,
  1402. .has_remote = 1,
  1403. /* GPIO wiring:
  1404. GPIO0: U4.A0 (hef4052bt)
  1405. GPIO1: U4.A1
  1406. GPIO2: U4.A1 (second hef4052bt)
  1407. GPIO3: U4.nEN, U5.A0, A5.nEN
  1408. GPIO8-15: vrd866b ?
  1409. */
  1410. },
  1411. [BTTV_BOARD_FLYVIDEO98EZ] = {
  1412. .name = "Lifeview FlyVideo 98EZ (capture only) LR51",
  1413. .video_inputs = 4,
  1414. /* .audio_inputs= 0, */
  1415. .svhs = 2,
  1416. /* AV1, AV2, SVHS, CVid adapter on SVHS */
  1417. .muxsel = MUXSEL(2, 3, 1, 1),
  1418. .pll = PLL_28,
  1419. .no_msp34xx = 1,
  1420. .tuner_type = TUNER_ABSENT,
  1421. .tuner_addr = ADDR_UNSET,
  1422. },
  1423. /* ---- card 0x48 ---------------------------------- */
  1424. [BTTV_BOARD_PV_BT878P_9B] = {
  1425. /* Dariusz Kowalewski <darekk@automex.pl> */
  1426. .name = "Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM)",
  1427. .video_inputs = 4,
  1428. /* .audio_inputs= 1, */
  1429. .svhs = 2,
  1430. .gpiomask = 0x3f,
  1431. .muxsel = MUXSEL(2, 3, 1, 1),
  1432. .gpiomux = { 0x01, 0x00, 0x03, 0x03 },
  1433. .gpiomute = 0x09,
  1434. .needs_tvaudio = 1,
  1435. .no_msp34xx = 1,
  1436. .pll = PLL_28,
  1437. .tuner_type = TUNER_PHILIPS_PAL,
  1438. .tuner_addr = ADDR_UNSET,
  1439. .audio_mode_gpio= pvbt878p9b_audio, /* Note: not all cards have stereo */
  1440. .has_radio = 1, /* Note: not all cards have radio */
  1441. .has_remote = 1,
  1442. /* GPIO wiring:
  1443. GPIO0: A0 hef4052
  1444. GPIO1: A1 hef4052
  1445. GPIO3: nEN hef4052
  1446. GPIO8-15: vrd866b
  1447. GPIO20,22,23: R30,R29,R28
  1448. */
  1449. },
  1450. [BTTV_BOARD_SENSORAY311] = {
  1451. /* Clay Kunz <ckunz@mail.arc.nasa.gov> */
  1452. /* you must jumper JP5 for the card to work */
  1453. .name = "Sensoray 311",
  1454. .video_inputs = 5,
  1455. /* .audio_inputs= 0, */
  1456. .svhs = 4,
  1457. .gpiomask = 0,
  1458. .muxsel = MUXSEL(2, 3, 1, 0, 0),
  1459. .gpiomux = { 0 },
  1460. .needs_tvaudio = 0,
  1461. .tuner_type = TUNER_ABSENT,
  1462. .tuner_addr = ADDR_UNSET,
  1463. },
  1464. [BTTV_BOARD_RV605] = {
  1465. /* Miguel Freitas <miguel@cetuc.puc-rio.br> */
  1466. .name = "RemoteVision MX (RV605)",
  1467. .video_inputs = 16,
  1468. /* .audio_inputs= 0, */
  1469. .svhs = NO_SVHS,
  1470. .gpiomask = 0x00,
  1471. .gpiomask2 = 0x07ff,
  1472. .muxsel = MUXSEL(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
  1473. .no_msp34xx = 1,
  1474. .tuner_type = TUNER_ABSENT,
  1475. .tuner_addr = ADDR_UNSET,
  1476. .muxsel_hook