/drivers/media/video/cx88/cx88-cards.c

https://bitbucket.org/slukk/jb-tsm-kernel-4.2 · C · 3563 lines · 3203 code · 110 blank · 250 comment · 108 complexity · a3966c00081f41d60f2128e627aec482 MD5 · raw file

Large files are truncated click here to view the full file

  1. /*
  2. *
  3. * device driver for Conexant 2388x based TV cards
  4. * card-specific stuff.
  5. *
  6. * (c) 2003 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
  7. *
  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. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21. */
  22. #include <linux/init.h>
  23. #include <linux/module.h>
  24. #include <linux/pci.h>
  25. #include <linux/delay.h>
  26. #include <linux/slab.h>
  27. #include "cx88.h"
  28. #include "tea5767.h"
  29. static unsigned int tuner[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
  30. static unsigned int radio[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
  31. static unsigned int card[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
  32. module_param_array(tuner, int, NULL, 0444);
  33. module_param_array(radio, int, NULL, 0444);
  34. module_param_array(card, int, NULL, 0444);
  35. MODULE_PARM_DESC(tuner,"tuner type");
  36. MODULE_PARM_DESC(radio,"radio tuner type");
  37. MODULE_PARM_DESC(card,"card type");
  38. static unsigned int latency = UNSET;
  39. module_param(latency,int,0444);
  40. MODULE_PARM_DESC(latency,"pci latency timer");
  41. static int disable_ir;
  42. module_param(disable_ir, int, 0444);
  43. MODULE_PARM_DESC(disable_ir, "Disable IR support");
  44. #define info_printk(core, fmt, arg...) \
  45. printk(KERN_INFO "%s: " fmt, core->name , ## arg)
  46. #define warn_printk(core, fmt, arg...) \
  47. printk(KERN_WARNING "%s: " fmt, core->name , ## arg)
  48. #define err_printk(core, fmt, arg...) \
  49. printk(KERN_ERR "%s: " fmt, core->name , ## arg)
  50. /* ------------------------------------------------------------------ */
  51. /* board config info */
  52. /* If radio_type !=UNSET, radio_addr should be specified
  53. */
  54. static const struct cx88_board cx88_boards[] = {
  55. [CX88_BOARD_UNKNOWN] = {
  56. .name = "UNKNOWN/GENERIC",
  57. .tuner_type = UNSET,
  58. .radio_type = UNSET,
  59. .tuner_addr = ADDR_UNSET,
  60. .radio_addr = ADDR_UNSET,
  61. .input = {{
  62. .type = CX88_VMUX_COMPOSITE1,
  63. .vmux = 0,
  64. },{
  65. .type = CX88_VMUX_COMPOSITE2,
  66. .vmux = 1,
  67. },{
  68. .type = CX88_VMUX_COMPOSITE3,
  69. .vmux = 2,
  70. },{
  71. .type = CX88_VMUX_COMPOSITE4,
  72. .vmux = 3,
  73. }},
  74. },
  75. [CX88_BOARD_HAUPPAUGE] = {
  76. .name = "Hauppauge WinTV 34xxx models",
  77. .tuner_type = UNSET,
  78. .radio_type = UNSET,
  79. .tuner_addr = ADDR_UNSET,
  80. .radio_addr = ADDR_UNSET,
  81. .tda9887_conf = TDA9887_PRESENT,
  82. .input = {{
  83. .type = CX88_VMUX_TELEVISION,
  84. .vmux = 0,
  85. .gpio0 = 0xff00, // internal decoder
  86. },{
  87. .type = CX88_VMUX_DEBUG,
  88. .vmux = 0,
  89. .gpio0 = 0xff01, // mono from tuner chip
  90. },{
  91. .type = CX88_VMUX_COMPOSITE1,
  92. .vmux = 1,
  93. .gpio0 = 0xff02,
  94. },{
  95. .type = CX88_VMUX_SVIDEO,
  96. .vmux = 2,
  97. .gpio0 = 0xff02,
  98. }},
  99. .radio = {
  100. .type = CX88_RADIO,
  101. .gpio0 = 0xff01,
  102. },
  103. },
  104. [CX88_BOARD_GDI] = {
  105. .name = "GDI Black Gold",
  106. .tuner_type = UNSET,
  107. .radio_type = UNSET,
  108. .tuner_addr = ADDR_UNSET,
  109. .radio_addr = ADDR_UNSET,
  110. .input = {{
  111. .type = CX88_VMUX_TELEVISION,
  112. .vmux = 0,
  113. },{
  114. .type = CX88_VMUX_SVIDEO,
  115. .vmux = 2,
  116. }},
  117. },
  118. [CX88_BOARD_PIXELVIEW] = {
  119. .name = "PixelView",
  120. .tuner_type = TUNER_PHILIPS_PAL,
  121. .radio_type = UNSET,
  122. .tuner_addr = ADDR_UNSET,
  123. .radio_addr = ADDR_UNSET,
  124. .input = {{
  125. .type = CX88_VMUX_TELEVISION,
  126. .vmux = 0,
  127. .gpio0 = 0xff00, // internal decoder
  128. },{
  129. .type = CX88_VMUX_COMPOSITE1,
  130. .vmux = 1,
  131. },{
  132. .type = CX88_VMUX_SVIDEO,
  133. .vmux = 2,
  134. }},
  135. .radio = {
  136. .type = CX88_RADIO,
  137. .gpio0 = 0xff10,
  138. },
  139. },
  140. [CX88_BOARD_ATI_WONDER_PRO] = {
  141. .name = "ATI TV Wonder Pro",
  142. .tuner_type = TUNER_PHILIPS_4IN1,
  143. .radio_type = UNSET,
  144. .tuner_addr = ADDR_UNSET,
  145. .radio_addr = ADDR_UNSET,
  146. .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER,
  147. .input = {{
  148. .type = CX88_VMUX_TELEVISION,
  149. .vmux = 0,
  150. .gpio0 = 0x03ff,
  151. },{
  152. .type = CX88_VMUX_COMPOSITE1,
  153. .vmux = 1,
  154. .gpio0 = 0x03fe,
  155. },{
  156. .type = CX88_VMUX_SVIDEO,
  157. .vmux = 2,
  158. .gpio0 = 0x03fe,
  159. }},
  160. },
  161. [CX88_BOARD_WINFAST2000XP_EXPERT] = {
  162. .name = "Leadtek Winfast 2000XP Expert",
  163. .tuner_type = TUNER_PHILIPS_4IN1,
  164. .radio_type = UNSET,
  165. .tuner_addr = ADDR_UNSET,
  166. .radio_addr = ADDR_UNSET,
  167. .tda9887_conf = TDA9887_PRESENT,
  168. .input = {{
  169. .type = CX88_VMUX_TELEVISION,
  170. .vmux = 0,
  171. .gpio0 = 0x00F5e700,
  172. .gpio1 = 0x00003004,
  173. .gpio2 = 0x00F5e700,
  174. .gpio3 = 0x02000000,
  175. },{
  176. .type = CX88_VMUX_COMPOSITE1,
  177. .vmux = 1,
  178. .gpio0 = 0x00F5c700,
  179. .gpio1 = 0x00003004,
  180. .gpio2 = 0x00F5c700,
  181. .gpio3 = 0x02000000,
  182. },{
  183. .type = CX88_VMUX_SVIDEO,
  184. .vmux = 2,
  185. .gpio0 = 0x00F5c700,
  186. .gpio1 = 0x00003004,
  187. .gpio2 = 0x00F5c700,
  188. .gpio3 = 0x02000000,
  189. }},
  190. .radio = {
  191. .type = CX88_RADIO,
  192. .gpio0 = 0x00F5d700,
  193. .gpio1 = 0x00003004,
  194. .gpio2 = 0x00F5d700,
  195. .gpio3 = 0x02000000,
  196. },
  197. },
  198. [CX88_BOARD_AVERTV_STUDIO_303] = {
  199. .name = "AverTV Studio 303 (M126)",
  200. .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
  201. .radio_type = UNSET,
  202. .tuner_addr = ADDR_UNSET,
  203. .radio_addr = ADDR_UNSET,
  204. .tda9887_conf = TDA9887_PRESENT,
  205. .input = {{
  206. .type = CX88_VMUX_TELEVISION,
  207. .vmux = 0,
  208. .gpio1 = 0xe09f,
  209. },{
  210. .type = CX88_VMUX_COMPOSITE1,
  211. .vmux = 1,
  212. .gpio1 = 0xe05f,
  213. },{
  214. .type = CX88_VMUX_SVIDEO,
  215. .vmux = 2,
  216. .gpio1 = 0xe05f,
  217. }},
  218. .radio = {
  219. .gpio1 = 0xe0df,
  220. .type = CX88_RADIO,
  221. },
  222. },
  223. [CX88_BOARD_MSI_TVANYWHERE_MASTER] = {
  224. // added gpio values thanks to Michal
  225. // values for PAL from DScaler
  226. .name = "MSI TV-@nywhere Master",
  227. .tuner_type = TUNER_MT2032,
  228. .radio_type = UNSET,
  229. .tuner_addr = ADDR_UNSET,
  230. .radio_addr = ADDR_UNSET,
  231. .tda9887_conf = TDA9887_PRESENT | TDA9887_INTERCARRIER_NTSC,
  232. .input = {{
  233. .type = CX88_VMUX_TELEVISION,
  234. .vmux = 0,
  235. .gpio0 = 0x000040bf,
  236. .gpio1 = 0x000080c0,
  237. .gpio2 = 0x0000ff40,
  238. },{
  239. .type = CX88_VMUX_COMPOSITE1,
  240. .vmux = 1,
  241. .gpio0 = 0x000040bf,
  242. .gpio1 = 0x000080c0,
  243. .gpio2 = 0x0000ff40,
  244. },{
  245. .type = CX88_VMUX_SVIDEO,
  246. .vmux = 2,
  247. .gpio0 = 0x000040bf,
  248. .gpio1 = 0x000080c0,
  249. .gpio2 = 0x0000ff40,
  250. }},
  251. .radio = {
  252. .type = CX88_RADIO,
  253. .vmux = 3,
  254. .gpio0 = 0x000040bf,
  255. .gpio1 = 0x000080c0,
  256. .gpio2 = 0x0000ff20,
  257. },
  258. },
  259. [CX88_BOARD_WINFAST_DV2000] = {
  260. .name = "Leadtek Winfast DV2000",
  261. .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
  262. .radio_type = UNSET,
  263. .tuner_addr = ADDR_UNSET,
  264. .radio_addr = ADDR_UNSET,
  265. .tda9887_conf = TDA9887_PRESENT,
  266. .input = {{
  267. .type = CX88_VMUX_TELEVISION,
  268. .vmux = 0,
  269. .gpio0 = 0x0035e700,
  270. .gpio1 = 0x00003004,
  271. .gpio2 = 0x0035e700,
  272. .gpio3 = 0x02000000,
  273. },{
  274. .type = CX88_VMUX_COMPOSITE1,
  275. .vmux = 1,
  276. .gpio0 = 0x0035c700,
  277. .gpio1 = 0x00003004,
  278. .gpio2 = 0x0035c700,
  279. .gpio3 = 0x02000000,
  280. },{
  281. .type = CX88_VMUX_SVIDEO,
  282. .vmux = 2,
  283. .gpio0 = 0x0035c700,
  284. .gpio1 = 0x0035c700,
  285. .gpio2 = 0x02000000,
  286. .gpio3 = 0x02000000,
  287. }},
  288. .radio = {
  289. .type = CX88_RADIO,
  290. .gpio0 = 0x0035d700,
  291. .gpio1 = 0x00007004,
  292. .gpio2 = 0x0035d700,
  293. .gpio3 = 0x02000000,
  294. },
  295. },
  296. [CX88_BOARD_LEADTEK_PVR2000] = {
  297. // gpio values for PAL version from regspy by DScaler
  298. .name = "Leadtek PVR 2000",
  299. .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
  300. .radio_type = UNSET,
  301. .tuner_addr = ADDR_UNSET,
  302. .radio_addr = ADDR_UNSET,
  303. .tda9887_conf = TDA9887_PRESENT,
  304. .input = {{
  305. .type = CX88_VMUX_TELEVISION,
  306. .vmux = 0,
  307. .gpio0 = 0x0000bde2,
  308. .audioroute = 1,
  309. },{
  310. .type = CX88_VMUX_COMPOSITE1,
  311. .vmux = 1,
  312. .gpio0 = 0x0000bde6,
  313. .audioroute = 1,
  314. },{
  315. .type = CX88_VMUX_SVIDEO,
  316. .vmux = 2,
  317. .gpio0 = 0x0000bde6,
  318. .audioroute = 1,
  319. }},
  320. .radio = {
  321. .type = CX88_RADIO,
  322. .gpio0 = 0x0000bd62,
  323. .audioroute = 1,
  324. },
  325. .mpeg = CX88_MPEG_BLACKBIRD,
  326. },
  327. [CX88_BOARD_IODATA_GVVCP3PCI] = {
  328. .name = "IODATA GV-VCP3/PCI",
  329. .tuner_type = TUNER_ABSENT,
  330. .radio_type = UNSET,
  331. .tuner_addr = ADDR_UNSET,
  332. .radio_addr = ADDR_UNSET,
  333. .input = {{
  334. .type = CX88_VMUX_COMPOSITE1,
  335. .vmux = 0,
  336. },{
  337. .type = CX88_VMUX_COMPOSITE2,
  338. .vmux = 1,
  339. },{
  340. .type = CX88_VMUX_SVIDEO,
  341. .vmux = 2,
  342. }},
  343. },
  344. [CX88_BOARD_PROLINK_PLAYTVPVR] = {
  345. .name = "Prolink PlayTV PVR",
  346. .tuner_type = TUNER_PHILIPS_FM1236_MK3,
  347. .radio_type = UNSET,
  348. .tuner_addr = ADDR_UNSET,
  349. .radio_addr = ADDR_UNSET,
  350. .tda9887_conf = TDA9887_PRESENT,
  351. .input = {{
  352. .type = CX88_VMUX_TELEVISION,
  353. .vmux = 0,
  354. .gpio0 = 0xbff0,
  355. },{
  356. .type = CX88_VMUX_COMPOSITE1,
  357. .vmux = 1,
  358. .gpio0 = 0xbff3,
  359. },{
  360. .type = CX88_VMUX_SVIDEO,
  361. .vmux = 2,
  362. .gpio0 = 0xbff3,
  363. }},
  364. .radio = {
  365. .type = CX88_RADIO,
  366. .gpio0 = 0xbff0,
  367. },
  368. },
  369. [CX88_BOARD_ASUS_PVR_416] = {
  370. .name = "ASUS PVR-416",
  371. .tuner_type = TUNER_PHILIPS_FM1236_MK3,
  372. .radio_type = UNSET,
  373. .tuner_addr = ADDR_UNSET,
  374. .radio_addr = ADDR_UNSET,
  375. .tda9887_conf = TDA9887_PRESENT,
  376. .input = {{
  377. .type = CX88_VMUX_TELEVISION,
  378. .vmux = 0,
  379. .gpio0 = 0x0000fde6,
  380. },{
  381. .type = CX88_VMUX_SVIDEO,
  382. .vmux = 2,
  383. .gpio0 = 0x0000fde6, // 0x0000fda6 L,R RCA audio in?
  384. .audioroute = 1,
  385. }},
  386. .radio = {
  387. .type = CX88_RADIO,
  388. .gpio0 = 0x0000fde2,
  389. },
  390. .mpeg = CX88_MPEG_BLACKBIRD,
  391. },
  392. [CX88_BOARD_MSI_TVANYWHERE] = {
  393. .name = "MSI TV-@nywhere",
  394. .tuner_type = TUNER_MT2032,
  395. .radio_type = UNSET,
  396. .tuner_addr = ADDR_UNSET,
  397. .radio_addr = ADDR_UNSET,
  398. .tda9887_conf = TDA9887_PRESENT,
  399. .input = {{
  400. .type = CX88_VMUX_TELEVISION,
  401. .vmux = 0,
  402. .gpio0 = 0x00000fbf,
  403. .gpio2 = 0x0000fc08,
  404. },{
  405. .type = CX88_VMUX_COMPOSITE1,
  406. .vmux = 1,
  407. .gpio0 = 0x00000fbf,
  408. .gpio2 = 0x0000fc68,
  409. },{
  410. .type = CX88_VMUX_SVIDEO,
  411. .vmux = 2,
  412. .gpio0 = 0x00000fbf,
  413. .gpio2 = 0x0000fc68,
  414. }},
  415. },
  416. [CX88_BOARD_KWORLD_DVB_T] = {
  417. .name = "KWorld/VStream XPert DVB-T",
  418. .tuner_type = TUNER_ABSENT,
  419. .radio_type = UNSET,
  420. .tuner_addr = ADDR_UNSET,
  421. .radio_addr = ADDR_UNSET,
  422. .input = {{
  423. .type = CX88_VMUX_COMPOSITE1,
  424. .vmux = 1,
  425. .gpio0 = 0x0700,
  426. .gpio2 = 0x0101,
  427. },{
  428. .type = CX88_VMUX_SVIDEO,
  429. .vmux = 2,
  430. .gpio0 = 0x0700,
  431. .gpio2 = 0x0101,
  432. }},
  433. .mpeg = CX88_MPEG_DVB,
  434. },
  435. [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1] = {
  436. .name = "DViCO FusionHDTV DVB-T1",
  437. .tuner_type = TUNER_ABSENT, /* No analog tuner */
  438. .radio_type = UNSET,
  439. .tuner_addr = ADDR_UNSET,
  440. .radio_addr = ADDR_UNSET,
  441. .input = {{
  442. .type = CX88_VMUX_COMPOSITE1,
  443. .vmux = 1,
  444. .gpio0 = 0x000027df,
  445. },{
  446. .type = CX88_VMUX_SVIDEO,
  447. .vmux = 2,
  448. .gpio0 = 0x000027df,
  449. }},
  450. .mpeg = CX88_MPEG_DVB,
  451. },
  452. [CX88_BOARD_KWORLD_LTV883] = {
  453. .name = "KWorld LTV883RF",
  454. .tuner_type = TUNER_TNF_8831BGFF,
  455. .radio_type = UNSET,
  456. .tuner_addr = ADDR_UNSET,
  457. .radio_addr = ADDR_UNSET,
  458. .input = {{
  459. .type = CX88_VMUX_TELEVISION,
  460. .vmux = 0,
  461. .gpio0 = 0x07f8,
  462. },{
  463. .type = CX88_VMUX_DEBUG,
  464. .vmux = 0,
  465. .gpio0 = 0x07f9, // mono from tuner chip
  466. },{
  467. .type = CX88_VMUX_COMPOSITE1,
  468. .vmux = 1,
  469. .gpio0 = 0x000007fa,
  470. },{
  471. .type = CX88_VMUX_SVIDEO,
  472. .vmux = 2,
  473. .gpio0 = 0x000007fa,
  474. }},
  475. .radio = {
  476. .type = CX88_RADIO,
  477. .gpio0 = 0x000007f8,
  478. },
  479. },
  480. [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q] = {
  481. .name = "DViCO FusionHDTV 3 Gold-Q",
  482. .tuner_type = TUNER_MICROTUNE_4042FI5,
  483. .radio_type = UNSET,
  484. .tuner_addr = ADDR_UNSET,
  485. .radio_addr = ADDR_UNSET,
  486. /*
  487. GPIO[0] resets DT3302 DTV receiver
  488. 0 - reset asserted
  489. 1 - normal operation
  490. GPIO[1] mutes analog audio output connector
  491. 0 - enable selected source
  492. 1 - mute
  493. GPIO[2] selects source for analog audio output connector
  494. 0 - analog audio input connector on tab
  495. 1 - analog DAC output from CX23881 chip
  496. GPIO[3] selects RF input connector on tuner module
  497. 0 - RF connector labeled CABLE
  498. 1 - RF connector labeled ANT
  499. GPIO[4] selects high RF for QAM256 mode
  500. 0 - normal RF
  501. 1 - high RF
  502. */
  503. .input = {{
  504. .type = CX88_VMUX_TELEVISION,
  505. .vmux = 0,
  506. .gpio0 = 0x0f0d,
  507. },{
  508. .type = CX88_VMUX_CABLE,
  509. .vmux = 0,
  510. .gpio0 = 0x0f05,
  511. },{
  512. .type = CX88_VMUX_COMPOSITE1,
  513. .vmux = 1,
  514. .gpio0 = 0x0f00,
  515. },{
  516. .type = CX88_VMUX_SVIDEO,
  517. .vmux = 2,
  518. .gpio0 = 0x0f00,
  519. }},
  520. .mpeg = CX88_MPEG_DVB,
  521. },
  522. [CX88_BOARD_HAUPPAUGE_DVB_T1] = {
  523. .name = "Hauppauge Nova-T DVB-T",
  524. .tuner_type = TUNER_ABSENT,
  525. .radio_type = UNSET,
  526. .tuner_addr = ADDR_UNSET,
  527. .radio_addr = ADDR_UNSET,
  528. .input = {{
  529. .type = CX88_VMUX_DVB,
  530. .vmux = 0,
  531. }},
  532. .mpeg = CX88_MPEG_DVB,
  533. },
  534. [CX88_BOARD_CONEXANT_DVB_T1] = {
  535. .name = "Conexant DVB-T reference design",
  536. .tuner_type = TUNER_ABSENT,
  537. .radio_type = UNSET,
  538. .tuner_addr = ADDR_UNSET,
  539. .radio_addr = ADDR_UNSET,
  540. .input = {{
  541. .type = CX88_VMUX_DVB,
  542. .vmux = 0,
  543. }},
  544. .mpeg = CX88_MPEG_DVB,
  545. },
  546. [CX88_BOARD_PROVIDEO_PV259] = {
  547. .name = "Provideo PV259",
  548. .tuner_type = TUNER_PHILIPS_FQ1216ME,
  549. .radio_type = UNSET,
  550. .tuner_addr = ADDR_UNSET,
  551. .radio_addr = ADDR_UNSET,
  552. .input = {{
  553. .type = CX88_VMUX_TELEVISION,
  554. .vmux = 0,
  555. .audioroute = 1,
  556. }},
  557. .mpeg = CX88_MPEG_BLACKBIRD,
  558. },
  559. [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS] = {
  560. .name = "DViCO FusionHDTV DVB-T Plus",
  561. .tuner_type = TUNER_ABSENT, /* No analog tuner */
  562. .radio_type = UNSET,
  563. .tuner_addr = ADDR_UNSET,
  564. .radio_addr = ADDR_UNSET,
  565. .input = {{
  566. .type = CX88_VMUX_COMPOSITE1,
  567. .vmux = 1,
  568. .gpio0 = 0x000027df,
  569. },{
  570. .type = CX88_VMUX_SVIDEO,
  571. .vmux = 2,
  572. .gpio0 = 0x000027df,
  573. }},
  574. .mpeg = CX88_MPEG_DVB,
  575. },
  576. [CX88_BOARD_DNTV_LIVE_DVB_T] = {
  577. .name = "digitalnow DNTV Live! DVB-T",
  578. .tuner_type = TUNER_ABSENT,
  579. .radio_type = UNSET,
  580. .tuner_addr = ADDR_UNSET,
  581. .radio_addr = ADDR_UNSET,
  582. .input = {{
  583. .type = CX88_VMUX_COMPOSITE1,
  584. .vmux = 1,
  585. .gpio0 = 0x00000700,
  586. .gpio2 = 0x00000101,
  587. },{
  588. .type = CX88_VMUX_SVIDEO,
  589. .vmux = 2,
  590. .gpio0 = 0x00000700,
  591. .gpio2 = 0x00000101,
  592. }},
  593. .mpeg = CX88_MPEG_DVB,
  594. },
  595. [CX88_BOARD_PCHDTV_HD3000] = {
  596. .name = "pcHDTV HD3000 HDTV",
  597. .tuner_type = TUNER_THOMSON_DTT761X,
  598. .radio_type = UNSET,
  599. .tuner_addr = ADDR_UNSET,
  600. .radio_addr = ADDR_UNSET,
  601. .tda9887_conf = TDA9887_PRESENT,
  602. /* GPIO[2] = audio source for analog audio out connector
  603. * 0 = analog audio input connector
  604. * 1 = CX88 audio DACs
  605. *
  606. * GPIO[7] = input to CX88's audio/chroma ADC
  607. * 0 = FM 10.7 MHz IF
  608. * 1 = Sound 4.5 MHz IF
  609. *
  610. * GPIO[1,5,6] = Oren 51132 pins 27,35,28 respectively
  611. *
  612. * GPIO[16] = Remote control input
  613. */
  614. .input = {{
  615. .type = CX88_VMUX_TELEVISION,
  616. .vmux = 0,
  617. .gpio0 = 0x00008484,
  618. },{
  619. .type = CX88_VMUX_COMPOSITE1,
  620. .vmux = 1,
  621. .gpio0 = 0x00008400,
  622. },{
  623. .type = CX88_VMUX_SVIDEO,
  624. .vmux = 2,
  625. .gpio0 = 0x00008400,
  626. }},
  627. .radio = {
  628. .type = CX88_RADIO,
  629. .gpio0 = 0x00008404,
  630. },
  631. .mpeg = CX88_MPEG_DVB,
  632. },
  633. [CX88_BOARD_HAUPPAUGE_ROSLYN] = {
  634. // entry added by Kaustubh D. Bhalerao <bhalerao.1@osu.edu>
  635. // GPIO values obtained from regspy, courtesy Sean Covel
  636. .name = "Hauppauge WinTV 28xxx (Roslyn) models",
  637. .tuner_type = UNSET,
  638. .radio_type = UNSET,
  639. .tuner_addr = ADDR_UNSET,
  640. .radio_addr = ADDR_UNSET,
  641. .input = {{
  642. .type = CX88_VMUX_TELEVISION,
  643. .vmux = 0,
  644. .gpio0 = 0xed1a,
  645. .gpio2 = 0x00ff,
  646. },{
  647. .type = CX88_VMUX_DEBUG,
  648. .vmux = 0,
  649. .gpio0 = 0xff01,
  650. },{
  651. .type = CX88_VMUX_COMPOSITE1,
  652. .vmux = 1,
  653. .gpio0 = 0xff02,
  654. },{
  655. .type = CX88_VMUX_SVIDEO,
  656. .vmux = 2,
  657. .gpio0 = 0xed92,
  658. .gpio2 = 0x00ff,
  659. }},
  660. .radio = {
  661. .type = CX88_RADIO,
  662. .gpio0 = 0xed96,
  663. .gpio2 = 0x00ff,
  664. },
  665. .mpeg = CX88_MPEG_BLACKBIRD,
  666. },
  667. [CX88_BOARD_DIGITALLOGIC_MEC] = {
  668. .name = "Digital-Logic MICROSPACE Entertainment Center (MEC)",
  669. .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
  670. .radio_type = UNSET,
  671. .tuner_addr = ADDR_UNSET,
  672. .radio_addr = ADDR_UNSET,
  673. .tda9887_conf = TDA9887_PRESENT,
  674. .input = {{
  675. .type = CX88_VMUX_TELEVISION,
  676. .vmux = 0,
  677. .gpio0 = 0x00009d80,
  678. .audioroute = 1,
  679. },{
  680. .type = CX88_VMUX_COMPOSITE1,
  681. .vmux = 1,
  682. .gpio0 = 0x00009d76,
  683. .audioroute = 1,
  684. },{
  685. .type = CX88_VMUX_SVIDEO,
  686. .vmux = 2,
  687. .gpio0 = 0x00009d76,
  688. .audioroute = 1,
  689. }},
  690. .radio = {
  691. .type = CX88_RADIO,
  692. .gpio0 = 0x00009d00,
  693. .audioroute = 1,
  694. },
  695. .mpeg = CX88_MPEG_BLACKBIRD,
  696. },
  697. [CX88_BOARD_IODATA_GVBCTV7E] = {
  698. .name = "IODATA GV/BCTV7E",
  699. .tuner_type = TUNER_PHILIPS_FQ1286,
  700. .radio_type = UNSET,
  701. .tuner_addr = ADDR_UNSET,
  702. .radio_addr = ADDR_UNSET,
  703. .tda9887_conf = TDA9887_PRESENT,
  704. .input = {{
  705. .type = CX88_VMUX_TELEVISION,
  706. .vmux = 1,
  707. .gpio1 = 0x0000e03f,
  708. },{
  709. .type = CX88_VMUX_COMPOSITE1,
  710. .vmux = 2,
  711. .gpio1 = 0x0000e07f,
  712. },{
  713. .type = CX88_VMUX_SVIDEO,
  714. .vmux = 3,
  715. .gpio1 = 0x0000e07f,
  716. }}
  717. },
  718. [CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO] = {
  719. .name = "PixelView PlayTV Ultra Pro (Stereo)",
  720. /* May be also TUNER_YMEC_TVF_5533MF for NTSC/M or PAL/M */
  721. .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
  722. .radio_type = UNSET,
  723. .tuner_addr = ADDR_UNSET,
  724. .radio_addr = ADDR_UNSET,
  725. /* Some variants use a tda9874 and so need the tvaudio module. */
  726. .audio_chip = V4L2_IDENT_TVAUDIO,
  727. .input = {{
  728. .type = CX88_VMUX_TELEVISION,
  729. .vmux = 0,
  730. .gpio0 = 0xbf61, /* internal decoder */
  731. },{
  732. .type = CX88_VMUX_COMPOSITE1,
  733. .vmux = 1,
  734. .gpio0 = 0xbf63,
  735. },{
  736. .type = CX88_VMUX_SVIDEO,
  737. .vmux = 2,
  738. .gpio0 = 0xbf63,
  739. }},
  740. .radio = {
  741. .type = CX88_RADIO,
  742. .gpio0 = 0xbf60,
  743. },
  744. },
  745. [CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T] = {
  746. .name = "DViCO FusionHDTV 3 Gold-T",
  747. .tuner_type = TUNER_THOMSON_DTT761X,
  748. .radio_type = UNSET,
  749. .tuner_addr = ADDR_UNSET,
  750. .radio_addr = ADDR_UNSET,
  751. .tda9887_conf = TDA9887_PRESENT,
  752. .input = {{
  753. .type = CX88_VMUX_TELEVISION,
  754. .vmux = 0,
  755. .gpio0 = 0x97ed,
  756. },{
  757. .type = CX88_VMUX_COMPOSITE1,
  758. .vmux = 1,
  759. .gpio0 = 0x97e9,
  760. },{
  761. .type = CX88_VMUX_SVIDEO,
  762. .vmux = 2,
  763. .gpio0 = 0x97e9,
  764. }},
  765. .mpeg = CX88_MPEG_DVB,
  766. },
  767. [CX88_BOARD_ADSTECH_DVB_T_PCI] = {
  768. .name = "ADS Tech Instant TV DVB-T PCI",
  769. .tuner_type = TUNER_ABSENT,
  770. .radio_type = UNSET,
  771. .tuner_addr = ADDR_UNSET,
  772. .radio_addr = ADDR_UNSET,
  773. .input = {{
  774. .type = CX88_VMUX_COMPOSITE1,
  775. .vmux = 1,
  776. .gpio0 = 0x0700,
  777. .gpio2 = 0x0101,
  778. },{
  779. .type = CX88_VMUX_SVIDEO,
  780. .vmux = 2,
  781. .gpio0 = 0x0700,
  782. .gpio2 = 0x0101,
  783. }},
  784. .mpeg = CX88_MPEG_DVB,
  785. },
  786. [CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1] = {
  787. .name = "TerraTec Cinergy 1400 DVB-T",
  788. .tuner_type = TUNER_ABSENT,
  789. .input = {{
  790. .type = CX88_VMUX_DVB,
  791. .vmux = 0,
  792. },{
  793. .type = CX88_VMUX_COMPOSITE1,
  794. .vmux = 2,
  795. },{
  796. .type = CX88_VMUX_SVIDEO,
  797. .vmux = 2,
  798. }},
  799. .mpeg = CX88_MPEG_DVB,
  800. },
  801. [CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD] = {
  802. .name = "DViCO FusionHDTV 5 Gold",
  803. .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H062F */
  804. .radio_type = UNSET,
  805. .tuner_addr = ADDR_UNSET,
  806. .radio_addr = ADDR_UNSET,
  807. .tda9887_conf = TDA9887_PRESENT,
  808. .input = {{
  809. .type = CX88_VMUX_TELEVISION,
  810. .vmux = 0,
  811. .gpio0 = 0x87fd,
  812. },{
  813. .type = CX88_VMUX_COMPOSITE1,
  814. .vmux = 1,
  815. .gpio0 = 0x87f9,
  816. },{
  817. .type = CX88_VMUX_SVIDEO,
  818. .vmux = 2,
  819. .gpio0 = 0x87f9,
  820. }},
  821. .mpeg = CX88_MPEG_DVB,
  822. },
  823. [CX88_BOARD_AVERMEDIA_ULTRATV_MC_550] = {
  824. .name = "AverMedia UltraTV Media Center PCI 550",
  825. .tuner_type = TUNER_PHILIPS_FM1236_MK3,
  826. .radio_type = UNSET,
  827. .tuner_addr = ADDR_UNSET,
  828. .radio_addr = ADDR_UNSET,
  829. .tda9887_conf = TDA9887_PRESENT,
  830. .input = {{
  831. .type = CX88_VMUX_COMPOSITE1,
  832. .vmux = 0,
  833. .gpio0 = 0x0000cd73,
  834. .audioroute = 1,
  835. },{
  836. .type = CX88_VMUX_SVIDEO,
  837. .vmux = 1,
  838. .gpio0 = 0x0000cd73,
  839. .audioroute = 1,
  840. },{
  841. .type = CX88_VMUX_TELEVISION,
  842. .vmux = 3,
  843. .gpio0 = 0x0000cdb3,
  844. .audioroute = 1,
  845. }},
  846. .radio = {
  847. .type = CX88_RADIO,
  848. .vmux = 2,
  849. .gpio0 = 0x0000cdf3,
  850. .audioroute = 1,
  851. },
  852. .mpeg = CX88_MPEG_BLACKBIRD,
  853. },
  854. [CX88_BOARD_KWORLD_VSTREAM_EXPERT_DVD] = {
  855. /* Alexander Wold <awold@bigfoot.com> */
  856. .name = "Kworld V-Stream Xpert DVD",
  857. .tuner_type = UNSET,
  858. .input = {{
  859. .type = CX88_VMUX_COMPOSITE1,
  860. .vmux = 1,
  861. .gpio0 = 0x03000000,
  862. .gpio1 = 0x01000000,
  863. .gpio2 = 0x02000000,
  864. .gpio3 = 0x00100000,
  865. },{
  866. .type = CX88_VMUX_SVIDEO,
  867. .vmux = 2,
  868. .gpio0 = 0x03000000,
  869. .gpio1 = 0x01000000,
  870. .gpio2 = 0x02000000,
  871. .gpio3 = 0x00100000,
  872. }},
  873. },
  874. [CX88_BOARD_ATI_HDTVWONDER] = {
  875. .name = "ATI HDTV Wonder",
  876. .tuner_type = TUNER_PHILIPS_TUV1236D,
  877. .radio_type = UNSET,
  878. .tuner_addr = ADDR_UNSET,
  879. .radio_addr = ADDR_UNSET,
  880. .input = {{
  881. .type = CX88_VMUX_TELEVISION,
  882. .vmux = 0,
  883. .gpio0 = 0x00000ff7,
  884. .gpio1 = 0x000000ff,
  885. .gpio2 = 0x00000001,
  886. .gpio3 = 0x00000000,
  887. },{
  888. .type = CX88_VMUX_COMPOSITE1,
  889. .vmux = 1,
  890. .gpio0 = 0x00000ffe,
  891. .gpio1 = 0x000000ff,
  892. .gpio2 = 0x00000001,
  893. .gpio3 = 0x00000000,
  894. },{
  895. .type = CX88_VMUX_SVIDEO,
  896. .vmux = 2,
  897. .gpio0 = 0x00000ffe,
  898. .gpio1 = 0x000000ff,
  899. .gpio2 = 0x00000001,
  900. .gpio3 = 0x00000000,
  901. }},
  902. .mpeg = CX88_MPEG_DVB,
  903. },
  904. [CX88_BOARD_WINFAST_DTV1000] = {
  905. .name = "WinFast DTV1000-T",
  906. .tuner_type = TUNER_ABSENT,
  907. .radio_type = UNSET,
  908. .tuner_addr = ADDR_UNSET,
  909. .radio_addr = ADDR_UNSET,
  910. .input = {{
  911. .type = CX88_VMUX_DVB,
  912. .vmux = 0,
  913. },{
  914. .type = CX88_VMUX_COMPOSITE1,
  915. .vmux = 1,
  916. },{
  917. .type = CX88_VMUX_SVIDEO,
  918. .vmux = 2,
  919. }},
  920. .mpeg = CX88_MPEG_DVB,
  921. },
  922. [CX88_BOARD_AVERTV_303] = {
  923. .name = "AVerTV 303 (M126)",
  924. .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
  925. .radio_type = UNSET,
  926. .tuner_addr = ADDR_UNSET,
  927. .radio_addr = ADDR_UNSET,
  928. .tda9887_conf = TDA9887_PRESENT,
  929. .input = {{
  930. .type = CX88_VMUX_TELEVISION,
  931. .vmux = 0,
  932. .gpio0 = 0x00ff,
  933. .gpio1 = 0xe09f,
  934. .gpio2 = 0x0010,
  935. .gpio3 = 0x0000,
  936. },{
  937. .type = CX88_VMUX_COMPOSITE1,
  938. .vmux = 1,
  939. .gpio0 = 0x00ff,
  940. .gpio1 = 0xe05f,
  941. .gpio2 = 0x0010,
  942. .gpio3 = 0x0000,
  943. },{
  944. .type = CX88_VMUX_SVIDEO,
  945. .vmux = 2,
  946. .gpio0 = 0x00ff,
  947. .gpio1 = 0xe05f,
  948. .gpio2 = 0x0010,
  949. .gpio3 = 0x0000,
  950. }},
  951. },
  952. [CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1] = {
  953. .name = "Hauppauge Nova-S-Plus DVB-S",
  954. .tuner_type = TUNER_ABSENT,
  955. .radio_type = UNSET,
  956. .tuner_addr = ADDR_UNSET,
  957. .radio_addr = ADDR_UNSET,
  958. .audio_chip = V4L2_IDENT_WM8775,
  959. .i2sinputcntl = 2,
  960. .input = {{
  961. .type = CX88_VMUX_DVB,
  962. .vmux = 0,
  963. /* 2: Line-In */
  964. .audioroute = 2,
  965. },{
  966. .type = CX88_VMUX_COMPOSITE1,
  967. .vmux = 1,
  968. /* 2: Line-In */
  969. .audioroute = 2,
  970. },{
  971. .type = CX88_VMUX_SVIDEO,
  972. .vmux = 2,
  973. /* 2: Line-In */
  974. .audioroute = 2,
  975. }},
  976. .mpeg = CX88_MPEG_DVB,
  977. },
  978. [CX88_BOARD_HAUPPAUGE_NOVASE2_S1] = {
  979. .name = "Hauppauge Nova-SE2 DVB-S",
  980. .tuner_type = TUNER_ABSENT,
  981. .radio_type = UNSET,
  982. .tuner_addr = ADDR_UNSET,
  983. .radio_addr = ADDR_UNSET,
  984. .input = {{
  985. .type = CX88_VMUX_DVB,
  986. .vmux = 0,
  987. }},
  988. .mpeg = CX88_MPEG_DVB,
  989. },
  990. [CX88_BOARD_KWORLD_DVBS_100] = {
  991. .name = "KWorld DVB-S 100",
  992. .tuner_type = TUNER_ABSENT,
  993. .radio_type = UNSET,
  994. .tuner_addr = ADDR_UNSET,
  995. .radio_addr = ADDR_UNSET,
  996. .audio_chip = V4L2_IDENT_WM8775,
  997. .input = {{
  998. .type = CX88_VMUX_DVB,
  999. .vmux = 0,
  1000. /* 2: Line-In */
  1001. .audioroute = 2,
  1002. },{
  1003. .type = CX88_VMUX_COMPOSITE1,
  1004. .vmux = 1,
  1005. /* 2: Line-In */
  1006. .audioroute = 2,
  1007. },{
  1008. .type = CX88_VMUX_SVIDEO,
  1009. .vmux = 2,
  1010. /* 2: Line-In */
  1011. .audioroute = 2,
  1012. }},
  1013. .mpeg = CX88_MPEG_DVB,
  1014. },
  1015. [CX88_BOARD_HAUPPAUGE_HVR1100] = {
  1016. .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid",
  1017. .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
  1018. .radio_type = UNSET,
  1019. .tuner_addr = ADDR_UNSET,
  1020. .radio_addr = ADDR_UNSET,
  1021. .tda9887_conf = TDA9887_PRESENT,
  1022. .input = {{
  1023. .type = CX88_VMUX_TELEVISION,
  1024. .vmux = 0,
  1025. },{
  1026. .type = CX88_VMUX_COMPOSITE1,
  1027. .vmux = 1,
  1028. },{
  1029. .type = CX88_VMUX_SVIDEO,
  1030. .vmux = 2,
  1031. }},
  1032. /* fixme: Add radio support */
  1033. .mpeg = CX88_MPEG_DVB,
  1034. },
  1035. [CX88_BOARD_HAUPPAUGE_HVR1100LP] = {
  1036. .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)",
  1037. .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
  1038. .radio_type = UNSET,
  1039. .tuner_addr = ADDR_UNSET,
  1040. .radio_addr = ADDR_UNSET,
  1041. .tda9887_conf = TDA9887_PRESENT,
  1042. .input = {{
  1043. .type = CX88_VMUX_TELEVISION,
  1044. .vmux = 0,
  1045. },{
  1046. .type = CX88_VMUX_COMPOSITE1,
  1047. .vmux = 1,
  1048. }},
  1049. /* fixme: Add radio support */
  1050. .mpeg = CX88_MPEG_DVB,
  1051. },
  1052. [CX88_BOARD_DNTV_LIVE_DVB_T_PRO] = {
  1053. .name = "digitalnow DNTV Live! DVB-T Pro",
  1054. .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
  1055. .radio_type = UNSET,
  1056. .tuner_addr = ADDR_UNSET,
  1057. .radio_addr = ADDR_UNSET,
  1058. .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE |
  1059. TDA9887_PORT2_ACTIVE,
  1060. .input = {{
  1061. .type = CX88_VMUX_TELEVISION,
  1062. .vmux = 0,
  1063. .gpio0 = 0xf80808,
  1064. },{
  1065. .type = CX88_VMUX_COMPOSITE1,
  1066. .vmux = 1,
  1067. .gpio0 = 0xf80808,
  1068. },{
  1069. .type = CX88_VMUX_SVIDEO,
  1070. .vmux = 2,
  1071. .gpio0 = 0xf80808,
  1072. }},
  1073. .radio = {
  1074. .type = CX88_RADIO,
  1075. .gpio0 = 0xf80808,
  1076. },
  1077. .mpeg = CX88_MPEG_DVB,
  1078. },
  1079. [CX88_BOARD_KWORLD_DVB_T_CX22702] = {
  1080. /* Kworld V-stream Xpert DVB-T with Thomson tuner */
  1081. /* DTT 7579 Conexant CX22702-19 Conexant CX2388x */
  1082. /* Manenti Marco <marco_manenti@colman.it> */
  1083. .name = "KWorld/VStream XPert DVB-T with cx22702",
  1084. .tuner_type = TUNER_ABSENT,
  1085. .radio_type = UNSET,
  1086. .tuner_addr = ADDR_UNSET,
  1087. .radio_addr = ADDR_UNSET,
  1088. .input = {{
  1089. .type = CX88_VMUX_COMPOSITE1,
  1090. .vmux = 1,
  1091. .gpio0 = 0x0700,
  1092. .gpio2 = 0x0101,
  1093. },{
  1094. .type = CX88_VMUX_SVIDEO,
  1095. .vmux = 2,
  1096. .gpio0 = 0x0700,
  1097. .gpio2 = 0x0101,
  1098. }},
  1099. .mpeg = CX88_MPEG_DVB,
  1100. },
  1101. [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL] = {
  1102. .name = "DViCO FusionHDTV DVB-T Dual Digital",
  1103. .tuner_type = TUNER_ABSENT, /* No analog tuner */
  1104. .radio_type = UNSET,
  1105. .tuner_addr = ADDR_UNSET,
  1106. .radio_addr = ADDR_UNSET,
  1107. .input = {{
  1108. .type = CX88_VMUX_COMPOSITE1,
  1109. .vmux = 1,
  1110. .gpio0 = 0x000067df,
  1111. },{
  1112. .type = CX88_VMUX_SVIDEO,
  1113. .vmux = 2,
  1114. .gpio0 = 0x000067df,
  1115. }},
  1116. .mpeg = CX88_MPEG_DVB,
  1117. },
  1118. [CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT] = {
  1119. .name = "KWorld HardwareMpegTV XPert",
  1120. .tuner_type = TUNER_PHILIPS_TDA8290,
  1121. .radio_type = UNSET,
  1122. .tuner_addr = ADDR_UNSET,
  1123. .radio_addr = ADDR_UNSET,
  1124. .input = {{
  1125. .type = CX88_VMUX_TELEVISION,
  1126. .vmux = 0,
  1127. .gpio0 = 0x3de2,
  1128. .gpio2 = 0x00ff,
  1129. },{
  1130. .type = CX88_VMUX_COMPOSITE1,
  1131. .vmux = 1,
  1132. .gpio0 = 0x3de6,
  1133. .audioroute = 1,
  1134. },{
  1135. .type = CX88_VMUX_SVIDEO,
  1136. .vmux = 2,
  1137. .gpio0 = 0x3de6,
  1138. .audioroute = 1,
  1139. }},
  1140. .radio = {
  1141. .type = CX88_RADIO,
  1142. .gpio0 = 0x3de6,
  1143. .gpio2 = 0x00ff,
  1144. },
  1145. .mpeg = CX88_MPEG_BLACKBIRD,
  1146. },
  1147. [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID] = {
  1148. .name = "DViCO FusionHDTV DVB-T Hybrid",
  1149. .tuner_type = TUNER_THOMSON_FE6600,
  1150. .radio_type = UNSET,
  1151. .tuner_addr = ADDR_UNSET,
  1152. .radio_addr = ADDR_UNSET,
  1153. .input = {{
  1154. .type = CX88_VMUX_TELEVISION,
  1155. .vmux = 0,
  1156. .gpio0 = 0x0000a75f,
  1157. },{
  1158. .type = CX88_VMUX_COMPOSITE1,
  1159. .vmux = 1,
  1160. .gpio0 = 0x0000a75b,
  1161. },{
  1162. .type = CX88_VMUX_SVIDEO,
  1163. .vmux = 2,
  1164. .gpio0 = 0x0000a75b,
  1165. }},
  1166. .mpeg = CX88_MPEG_DVB,
  1167. },
  1168. [CX88_BOARD_PCHDTV_HD5500] = {
  1169. .name = "pcHDTV HD5500 HDTV",
  1170. .tuner_type = TUNER_LG_TDVS_H06XF, /* TDVS-H064F */
  1171. .radio_type = UNSET,
  1172. .tuner_addr = ADDR_UNSET,
  1173. .radio_addr = ADDR_UNSET,
  1174. .tda9887_conf = TDA9887_PRESENT,
  1175. .input = {{
  1176. .type = CX88_VMUX_TELEVISION,
  1177. .vmux = 0,
  1178. .gpio0 = 0x87fd,
  1179. },{
  1180. .type = CX88_VMUX_COMPOSITE1,
  1181. .vmux = 1,
  1182. .gpio0 = 0x87f9,
  1183. },{
  1184. .type = CX88_VMUX_SVIDEO,
  1185. .vmux = 2,
  1186. .gpio0 = 0x87f9,
  1187. }},
  1188. .mpeg = CX88_MPEG_DVB,
  1189. },
  1190. [CX88_BOARD_KWORLD_MCE200_DELUXE] = {
  1191. /* FIXME: tested TV input only, disabled composite,
  1192. svideo and radio until they can be tested also. */
  1193. .name = "Kworld MCE 200 Deluxe",
  1194. .tuner_type = TUNER_TENA_9533_DI,
  1195. .radio_type = UNSET,
  1196. .tda9887_conf = TDA9887_PRESENT,
  1197. .tuner_addr = ADDR_UNSET,
  1198. .radio_addr = ADDR_UNSET,
  1199. .input = {{
  1200. .type = CX88_VMUX_TELEVISION,
  1201. .vmux = 0,
  1202. .gpio0 = 0x0000BDE6
  1203. }},
  1204. .mpeg = CX88_MPEG_BLACKBIRD,
  1205. },
  1206. [CX88_BOARD_PIXELVIEW_PLAYTV_P7000] = {
  1207. /* FIXME: SVideo, Composite and FM inputs are untested */
  1208. .name = "PixelView PlayTV P7000",
  1209. .tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
  1210. .radio_type = UNSET,
  1211. .tuner_addr = ADDR_UNSET,
  1212. .radio_addr = ADDR_UNSET,
  1213. .tda9887_conf = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE |
  1214. TDA9887_PORT2_ACTIVE,
  1215. .input = {{
  1216. .type = CX88_VMUX_TELEVISION,
  1217. .vmux = 0,
  1218. .gpio0 = 0x5da6,
  1219. }},
  1220. .mpeg = CX88_MPEG_BLACKBIRD,
  1221. },
  1222. [CX88_BOARD_NPGTECH_REALTV_TOP10FM] = {
  1223. .name = "NPG Tech Real TV FM Top 10",
  1224. .tuner_type = TUNER_TNF_5335MF, /* Actually a TNF9535 */
  1225. .radio_type = UNSET,
  1226. .tuner_addr = ADDR_UNSET,
  1227. .radio_addr = ADDR_UNSET,
  1228. .input = {{
  1229. .type = CX88_VMUX_TELEVISION,
  1230. .vmux = 0,
  1231. .gpio0 = 0x0788,
  1232. },{
  1233. .type = CX88_VMUX_COMPOSITE1,
  1234. .vmux = 1,
  1235. .gpio0 = 0x078b,
  1236. },{
  1237. .type = CX88_VMUX_SVIDEO,
  1238. .vmux = 2,
  1239. .gpio0 = 0x078b,
  1240. }},
  1241. .radio = {
  1242. .type = CX88_RADIO,
  1243. .gpio0 = 0x074a,
  1244. },
  1245. },
  1246. [CX88_BOARD_WINFAST_DTV2000H] = {
  1247. .name = "WinFast DTV2000 H",
  1248. .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
  1249. .radio_type = UNSET,
  1250. .tuner_addr = ADDR_UNSET,
  1251. .radio_addr = ADDR_UNSET,
  1252. .tda9887_conf = TDA9887_PRESENT,
  1253. .input = {{
  1254. .type = CX88_VMUX_TELEVISION,
  1255. .vmux = 0,
  1256. .gpio0 = 0x00017304,
  1257. .gpio1 = 0x00008203,
  1258. .gpio2 = 0x00017304,
  1259. .gpio3 = 0x02000000,
  1260. }, {
  1261. .type = CX88_VMUX_COMPOSITE1,
  1262. .vmux = 1,
  1263. .gpio0 = 0x0001d701,
  1264. .gpio1 = 0x0000b207,
  1265. .gpio2 = 0x0001d701,
  1266. .gpio3 = 0x02000000,
  1267. }, {
  1268. .type = CX88_VMUX_COMPOSITE2,
  1269. .vmux = 2,
  1270. .gpio0 = 0x0001d503,
  1271. .gpio1 = 0x0000b207,
  1272. .gpio2 = 0x0001d503,
  1273. .gpio3 = 0x02000000,
  1274. }, {
  1275. .type = CX88_VMUX_SVIDEO,
  1276. .vmux = 3,
  1277. .gpio0 = 0x0001d701,
  1278. .gpio1 = 0x0000b207,
  1279. .gpio2 = 0x0001d701,
  1280. .gpio3 = 0x02000000,
  1281. }},
  1282. .radio = {
  1283. .type = CX88_RADIO,
  1284. .gpio0 = 0x00015702,
  1285. .gpio1 = 0x0000f207,
  1286. .gpio2 = 0x00015702,
  1287. .gpio3 = 0x02000000,
  1288. },
  1289. .mpeg = CX88_MPEG_DVB,
  1290. },
  1291. [CX88_BOARD_WINFAST_DTV2000H_J] = {
  1292. .name = "WinFast DTV2000 H rev. J",
  1293. .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
  1294. .radio_type = UNSET,
  1295. .tuner_addr = ADDR_UNSET,
  1296. .radio_addr = ADDR_UNSET,
  1297. .tda9887_conf = TDA9887_PRESENT,
  1298. .input = {{
  1299. .type = CX88_VMUX_TELEVISION,
  1300. .vmux = 0,
  1301. .gpio0 = 0x00017300,
  1302. .gpio1 = 0x00008207,
  1303. .gpio2 = 0x00000000,
  1304. .gpio3 = 0x02000000,
  1305. },{
  1306. .type = CX88_VMUX_TELEVISION,
  1307. .vmux = 0,
  1308. .gpio0 = 0x00018300,
  1309. .gpio1 = 0x0000f207,
  1310. .gpio2 = 0x00017304,
  1311. .gpio3 = 0x02000000,
  1312. },{
  1313. .type = CX88_VMUX_COMPOSITE1,
  1314. .vmux = 1,
  1315. .gpio0 = 0x00018301,
  1316. .gpio1 = 0x0000f207,
  1317. .gpio2 = 0x00017304,
  1318. .gpio3 = 0x02000000,
  1319. },{
  1320. .type = CX88_VMUX_SVIDEO,
  1321. .vmux = 2,
  1322. .gpio0 = 0x00018301,
  1323. .gpio1 = 0x0000f207,
  1324. .gpio2 = 0x00017304,
  1325. .gpio3 = 0x02000000,
  1326. }},
  1327. .radio = {
  1328. .type = CX88_RADIO,
  1329. .gpio0 = 0x00015702,
  1330. .gpio1 = 0x0000f207,
  1331. .gpio2 = 0x00015702,
  1332. .gpio3 = 0x02000000,
  1333. },
  1334. .mpeg = CX88_MPEG_DVB,
  1335. },
  1336. [CX88_BOARD_GENIATECH_DVBS] = {
  1337. .name = "Geniatech DVB-S",
  1338. .tuner_type = TUNER_ABSENT,
  1339. .radio_type = UNSET,
  1340. .tuner_addr = ADDR_UNSET,
  1341. .radio_addr = ADDR_UNSET,
  1342. .input = {{
  1343. .type = CX88_VMUX_DVB,
  1344. .vmux = 0,
  1345. },{
  1346. .type = CX88_VMUX_COMPOSITE1,
  1347. .vmux = 1,
  1348. }},
  1349. .mpeg = CX88_MPEG_DVB,
  1350. },
  1351. [CX88_BOARD_HAUPPAUGE_HVR3000] = {
  1352. .name = "Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T",
  1353. .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
  1354. .radio_type = UNSET,
  1355. .tuner_addr = ADDR_UNSET,
  1356. .radio_addr = ADDR_UNSET,
  1357. .tda9887_conf = TDA9887_PRESENT,
  1358. .audio_chip = V4L2_IDENT_WM8775,
  1359. .input = {{
  1360. .type = CX88_VMUX_TELEVISION,
  1361. .vmux = 0,
  1362. .gpio0 = 0x84bf,
  1363. /* 1: TV Audio / FM Mono */
  1364. .audioroute = 1,
  1365. },{
  1366. .type = CX88_VMUX_COMPOSITE1,
  1367. .vmux = 1,
  1368. .gpio0 = 0x84bf,
  1369. /* 2: Line-In */
  1370. .audioroute = 2,
  1371. },{
  1372. .type = CX88_VMUX_SVIDEO,
  1373. .vmux = 2,
  1374. .gpio0 = 0x84bf,
  1375. /* 2: Line-In */
  1376. .audioroute = 2,
  1377. }},
  1378. .radio = {
  1379. .type = CX88_RADIO,
  1380. .gpio0 = 0x84bf,
  1381. /* 4: FM Stereo (untested) */
  1382. .audioroute = 8,
  1383. },
  1384. .mpeg = CX88_MPEG_DVB,
  1385. .num_frontends = 2,
  1386. },
  1387. [CX88_BOARD_NORWOOD_MICRO] = {
  1388. .name = "Norwood Micro TV Tuner",
  1389. .tuner_type = TUNER_TNF_5335MF,
  1390. .radio_type = UNSET,
  1391. .tuner_addr = ADDR_UNSET,
  1392. .radio_addr = ADDR_UNSET,
  1393. .input = {{
  1394. .type = CX88_VMUX_TELEVISION,
  1395. .vmux = 0,
  1396. .gpio0 = 0x0709,
  1397. },{
  1398. .type = CX88_VMUX_COMPOSITE1,
  1399. .vmux = 1,
  1400. .gpio0 = 0x070b,
  1401. },{
  1402. .type = CX88_VMUX_SVIDEO,
  1403. .vmux = 2,
  1404. .gpio0 = 0x070b,
  1405. }},
  1406. },
  1407. [CX88_BOARD_TE_DTV_250_OEM_SWANN] = {
  1408. .name = "Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM",
  1409. .tuner_type = TUNER_LG_PAL_NEW_TAPC,
  1410. .radio_type = UNSET,
  1411. .tuner_addr = ADDR_UNSET,
  1412. .radio_addr = ADDR_UNSET,
  1413. .input = {{
  1414. .type = CX88_VMUX_TELEVISION,
  1415. .vmux = 0,
  1416. .gpio0 = 0x003fffff,
  1417. .gpio1 = 0x00e00000,
  1418. .gpio2 = 0x003fffff,
  1419. .gpio3 = 0x02000000,
  1420. },{
  1421. .type = CX88_VMUX_COMPOSITE1,
  1422. .vmux = 1,
  1423. .gpio0 = 0x003fffff,
  1424. .gpio1 = 0x00e00000,
  1425. .gpio2 = 0x003fffff,
  1426. .gpio3 = 0x02000000,
  1427. },{
  1428. .type = CX88_VMUX_SVIDEO,
  1429. .vmux = 2,
  1430. .gpio0 = 0x003fffff,
  1431. .gpio1 = 0x00e00000,
  1432. .gpio2 = 0x003fffff,
  1433. .gpio3 = 0x02000000,
  1434. }},
  1435. },
  1436. [CX88_BOARD_HAUPPAUGE_HVR1300] = {
  1437. .name = "Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder",
  1438. .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
  1439. .radio_type = UNSET,
  1440. .tuner_addr = ADDR_UNSET,
  1441. .radio_addr = ADDR_UNSET,
  1442. .tda9887_conf = TDA9887_PRESENT,
  1443. .audio_chip = V4L2_IDENT_WM8775,
  1444. /*
  1445. * gpio0 as reported by Mike Crash <mike AT mikecrash.com>
  1446. */
  1447. .input = {{
  1448. .type = CX88_VMUX_TELEVISION,
  1449. .vmux = 0,
  1450. .gpio0 = 0xef88,
  1451. /* 1: TV Audio / FM Mono */
  1452. .audioroute = 1,
  1453. },{
  1454. .type = CX88_VMUX_COMPOSITE1,
  1455. .vmux = 1,
  1456. .gpio0 = 0xef88,
  1457. /* 2: Line-In */
  1458. .audioroute = 2,
  1459. },{
  1460. .type = CX88_VMUX_SVIDEO,
  1461. .vmux = 2,
  1462. .gpio0 = 0xef88,
  1463. /* 2: Line-In */
  1464. .audioroute = 2,
  1465. }},
  1466. .mpeg = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD,
  1467. .radio = {
  1468. .type = CX88_RADIO,
  1469. .gpio0 = 0xef88,
  1470. /* 4: FM Stereo (untested) */
  1471. .audioroute = 8,
  1472. },
  1473. },
  1474. [CX88_BOARD_SAMSUNG_SMT_7020] = {
  1475. .name = "Samsung SMT 7020 DVB-S",
  1476. .tuner_type = TUNER_ABSENT,
  1477. .radio_type = UNSET,
  1478. .tuner_addr = ADDR_UNSET,
  1479. .radio_addr = ADDR_UNSET,
  1480. .input = { {
  1481. .type = CX88_VMUX_DVB,
  1482. .vmux = 0,
  1483. } },
  1484. .mpeg = CX88_MPEG_DVB,
  1485. },
  1486. [CX88_BOARD_ADSTECH_PTV_390] = {
  1487. .name = "ADS Tech Instant Video PCI",
  1488. .tuner_type = TUNER_ABSENT,
  1489. .radio_type = UNSET,
  1490. .tuner_addr = ADDR_UNSET,
  1491. .radio_addr = ADDR_UNSET,
  1492. .input = {{
  1493. .type = CX88_VMUX_DEBUG,
  1494. .vmux = 3,
  1495. .gpio0 = 0x04ff,
  1496. },{
  1497. .type = CX88_VMUX_COMPOSITE1,
  1498. .vmux = 1,
  1499. .gpio0 = 0x07fa,
  1500. },{
  1501. .type = CX88_VMUX_SVIDEO,
  1502. .vmux = 2,
  1503. .gpio0 = 0x07fa,
  1504. }},
  1505. },
  1506. [CX88_BOARD_PINNACLE_PCTV_HD_800i] = {
  1507. .name = "Pinnacle PCTV HD 800i",
  1508. .tuner_type = TUNER_XC5000,
  1509. .radio_type = UNSET,
  1510. .tuner_addr = ADDR_UNSET,
  1511. .radio_addr = ADDR_UNSET,
  1512. .input = {{
  1513. .type = CX88_VMUX_TELEVISION,
  1514. .vmux = 0,
  1515. .gpio0 = 0x04fb,
  1516. .gpio1 = 0x10ff,
  1517. },{
  1518. .type = CX88_VMUX_COMPOSITE1,
  1519. .vmux = 1,
  1520. .gpio0 = 0x04fb,
  1521. .gpio1 = 0x10ef,
  1522. .audioroute = 1,
  1523. },{
  1524. .type = CX88_VMUX_SVIDEO,
  1525. .vmux = 2,
  1526. .gpio0 = 0x04fb,
  1527. .gpio1 = 0x10ef,
  1528. .audioroute = 1,
  1529. }},
  1530. .mpeg = CX88_MPEG_DVB,
  1531. },
  1532. [CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO] = {
  1533. .name = "DViCO FusionHDTV 5 PCI nano",
  1534. /* xc3008 tuner, digital only for now */
  1535. .tuner_type = TUNER_ABSENT,
  1536. .radio_type = UNSET,
  1537. .tuner_addr = ADDR_UNSET,
  1538. .radio_addr = ADDR_UNSET,
  1539. .input = {{
  1540. .type = CX88_VMUX_TELEVISION,
  1541. .vmux = 0,
  1542. .gpio0 = 0x000027df, /* Unconfirmed */
  1543. }, {
  1544. .type = CX88_VMUX_COMPOSITE1,
  1545. .vmux = 1,
  1546. .gpio0 = 0x000027df, /* Unconfirmed */
  1547. .audioroute = 1,
  1548. }, {
  1549. .type = CX88_VMUX_SVIDEO,
  1550. .vmux = 2,
  1551. .gpio0 = 0x000027df, /* Unconfirmed */
  1552. .audioroute = 1,
  1553. } },
  1554. .mpeg = CX88_MPEG_DVB,
  1555. },
  1556. [CX88_BOARD_PINNACLE_HYBRID_PCTV] = {
  1557. .name = "Pinnacle Hybrid PCTV",
  1558. .tuner_type = TUNER_XC2028,
  1559. .tuner_addr = 0x61,
  1560. .radio_type = TUNER_XC2028,
  1561. .radio_addr = 0x61,
  1562. .input = { {
  1563. .type = CX88_VMUX_TELEVISION,
  1564. .vmux = 0,
  1565. .gpio0 = 0x004ff,
  1566. .gpio1 = 0x010ff,
  1567. .gpio2 = 0x00001,
  1568. }, {
  1569. .type = CX88_VMUX_COMPOSITE1,
  1570. .vmux = 1,
  1571. .gpio0 = 0x004fb,
  1572. .gpio1 = 0x010ef,
  1573. .audioroute = 1,
  1574. }, {
  1575. .type = CX88_VMUX_SVIDEO,
  1576. .vmux = 2,
  1577. .gpio0 = 0x004fb,
  1578. .gpio1 = 0x010ef,
  1579. .audioroute = 1,
  1580. } },
  1581. .radio = {
  1582. .type = CX88_RADIO,
  1583. .gpio0 = 0x004ff,
  1584. .gpio1 = 0x010ff,
  1585. .gpio2 = 0x0ff,
  1586. },
  1587. .mpeg = CX88_MPEG_DVB,
  1588. },
  1589. /* Terry Wu <terrywu2009@gmail.com> */
  1590. /* TV Audio : set GPIO 2, 18, 19 value to 0, 1, 0 */
  1591. /* FM Audio : set GPIO 2, 18, 19 value to 0, 0, 0 */
  1592. /* Line-in Audio : set GPIO 2, 18, 19 value to 0, 1, 1 */
  1593. /* Mute Audio : set GPIO 2 value to 1 */
  1594. [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL] = {
  1595. .name = "Leadtek TV2000 XP Global",
  1596. .tuner_type = TUNER_XC2028,
  1597. .tuner_addr = 0x61,
  1598. .radio_type = TUNER_XC2028,
  1599. .radio_addr = 0x61,
  1600. .input = { {
  1601. .type = CX88_VMUX_TELEVISION,
  1602. .vmux = 0,
  1603. .gpio0 = 0x0400, /* pin 2 = 0 */
  1604. .gpio1 = 0x0000,
  1605. .gpio2 = 0x0C04, /* pin 18 = 1, pin 19 = 0 */
  1606. .gpio3 = 0x0000,
  1607. }, {
  1608. .type = CX88_VMUX_COMPOSITE1,
  1609. .vmux = 1,
  1610. .gpio0 = 0x0400, /* pin 2 = 0 */
  1611. .gpio1 = 0x0000,
  1612. .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */
  1613. .gpio3 = 0x0000,
  1614. }, {
  1615. .type = CX88_VMUX_SVIDEO,
  1616. .vmux = 2,
  1617. .gpio0 = 0x0400, /* pin 2 = 0 */
  1618. .gpio1 = 0x0000,
  1619. .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */
  1620. .gpio3 = 0x0000,
  1621. } },
  1622. .radio = {
  1623. .type = CX88_RADIO,
  1624. .gpio0 = 0x0400, /* pin 2 = 0 */
  1625. .gpio1 = 0x0000,
  1626. .gpio2 = 0x0C00, /* pin 18 = 0, pin 19 = 0 */
  1627. .gpio3 = 0x0000,
  1628. },
  1629. },
  1630. [CX88_BOARD_POWERCOLOR_REAL_ANGEL] = {
  1631. .name = "PowerColor RA330", /* Long names may confuse LIRC. */
  1632. .tuner_type = TUNER_XC2028,
  1633. .tuner_addr = 0x61,
  1634. .input = { {
  1635. .type = CX88_VMUX_DEBUG,
  1636. .vmux = 3, /* Due to the way the cx88 driver is written, */
  1637. .gpio0 = 0x00ff, /* there is no way to deactivate audio pass- */
  1638. .gpio1 = 0xf39d, /* through without this entry. Furthermore, if */
  1639. .gpio3 = 0x0000, /* the TV mux entry is first, you get audio */
  1640. }, { /* from the tuner on boot for a little while. */
  1641. .type = CX88_VMUX_TELEVISION,
  1642. .vmux = 0,
  1643. .gpio0 = 0x00ff,
  1644. .gpio1 = 0xf35d,
  1645. .gpio3 = 0x0000,
  1646. }, {
  1647. .type = CX88_VMUX_COMPOSITE1,
  1648. .vmux = 1,
  1649. .gpio0 = 0x00ff,
  1650. .gpio1 = 0xf37d,
  1651. .gpio3 = 0x0000,
  1652. }, {
  1653. .type = CX88_VMUX_SVIDEO,
  1654. .vmux = 2,
  1655. .gpio0 = 0x000ff,
  1656. .gpio1 = 0x0f37d,
  1657. .gpio3 = 0x00000,
  1658. } },
  1659. .radio = {
  1660. .type = CX88_RADIO,
  1661. .gpio0 = 0x000ff,
  1662. .gpio1 = 0x0f35d,
  1663. .gpio3 = 0x00000,
  1664. },
  1665. },
  1666. [CX88_BOARD_GENIATECH_X8000_MT] = {
  1667. /* Also PowerColor Real Angel 330 and Geniatech X800 OEM */
  1668. .name = "Geniatech X8000-MT DVBT",
  1669. .tuner_type = TUNER_XC2028,
  1670. .tuner_addr = 0x61,
  1671. .input = { {
  1672. .type = CX88_VMUX_TELEVISION,
  1673. .vmux = 0,
  1674. .gpio0 = 0x00000000,
  1675. .gpio1 = 0x00e3e341,
  1676. .gpio2 = 0x00000000,
  1677. .gpio3 = 0x00000000,
  1678. }, {
  1679. .type = CX88_VMUX_COMPOSITE1,
  1680. .vmux = 1,
  1681. .gpio0 = 0x00000000,
  1682. .gpio1 = 0x00e3e361,
  1683. .gpio2 = 0x00000000,
  1684. .gpio3 = 0x00000000,
  1685. }, {
  1686. .type = CX88_VMUX_SVIDEO,
  1687. .vmux = 2,
  1688. .gpio0 = 0x00000000,
  1689. .gpio1 = 0x00e3e361,
  1690. .gpio2 = 0x00000000,
  1691. .gpio3 = 0x00000000,
  1692. } },
  1693. .radio = {
  1694. .type = CX88_RADIO,
  1695. .gpio0 = 0x00000000,
  1696. .gpio1 = 0x00e3e341,
  1697. .gpio2 = 0x00000000,
  1698. .gpio3 = 0x00000000,
  1699. },
  1700. .mpeg = CX88_MPEG_DVB,
  1701. },
  1702. [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO] = {
  1703. .name = "DViCO FusionHDTV DVB-T PRO",
  1704. .tuner_type = TUNER_XC2028,
  1705. .tuner_addr = 0x61,
  1706. .radio_type = UNSET,
  1707. .radio_addr = ADDR_UNSET,
  1708. .input = { {
  1709. .type = CX88_VMUX_COMPOSITE1,
  1710. .vmux = 1,
  1711. .gpio0 = 0x000067df,
  1712. }, {
  1713. .type = CX88_VMUX_SVIDEO,
  1714. .vmux = 2,
  1715. .gpio0 = 0x000067df,
  1716. } },
  1717. .mpeg = CX88_MPEG_DVB,
  1718. },
  1719. [CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD] = {
  1720. .name = "DViCO FusionHDTV 7 Gold",
  1721. .tuner_type = TUNER_XC5000,
  1722. .radio_type = UNSET,
  1723. .tuner_addr = ADDR_UNSET,
  1724. .radio_addr = ADDR_UNSET,
  1725. .input = {{
  1726. .type = CX88_VMUX_TELEVISION,
  1727. .vmux = 0,
  1728. .gpio0 = 0x10df,
  1729. },{
  1730. .type = CX88_VMUX_COMPOSITE1,
  1731. .vmux = 1,
  1732. .gpio0 = 0x16d9,
  1733. },{
  1734. .type = CX88_VMUX_SVIDEO,
  1735. .vmux = 2,
  1736. .gpio0 = 0x16d9,
  1737. }},
  1738. .mpeg = CX88_MPEG_DVB,
  1739. },
  1740. [CX88_BOARD_PROLINK_PV_8000GT] = {
  1741. .name = "Prolink Pixelview MPEG 8000GT",
  1742. .tuner_type = TUNER_XC2028,
  1743. .tuner_addr = 0x61,
  1744. .input = { {
  1745. .type = CX88_VMUX_TELEVISION,
  1746. .vmux = 0,
  1747. .gpio0 = 0x0ff,
  1748. .gpio2 = 0x0cfb,
  1749. }, {
  1750. .type = CX88_VMUX_COMPOSITE1,
  1751. .vmux = 1,
  1752. .gpio2 = 0x0cfb,
  1753. }, {
  1754. .type = CX88_VMUX_SVIDEO,
  1755. .vmux = 2,
  1756. .gpio2 = 0x0cfb,
  1757. } },
  1758. .radio = {
  1759. .type = CX88_RADIO,
  1760. .gpio2 = 0x0cfb,
  1761. },
  1762. },
  1763. [CX88_BOARD_PROLINK_PV_GLOBAL_XTREME] = {
  1764. .name = "Prolink Pixelview Global Extreme",
  1765. .tuner_type = TUNER_XC2028,
  1766. .tuner_addr = 0x61,
  1767. .input = { {
  1768. .type = CX88_VMUX_TELEVISION,
  1769. .vmux = 0,
  1770. .gpio0 = 0x04fb,
  1771. .gpio1 = 0x04080,
  1772. .gpio2 = 0x0cf7,
  1773. }, {
  1774. .type = CX88_VMUX_COMPOSITE1,
  1775. .vmux = 1,
  1776. .gpio0 = 0x04fb,
  1777. .gpio1 = 0x04080,
  1778. .gpio2 = 0x0cfb,
  1779. }, {
  1780. .type = CX88_VMUX_SVIDEO,
  1781. .vmux = 2,
  1782. .gpio0 = 0x04fb,
  1783. .gpio1 = 0x04080,
  1784. .gpio2 = 0x0cfb,
  1785. } },
  1786. .radio = {
  1787. .type = CX88_RADIO,
  1788. .gpio0 = 0x04ff,
  1789. .gpio1 = 0x04080,
  1790. .gpio2 = 0x0cf7,
  1791. },
  1792. },
  1793. /* Both radio, analog and ATSC work with this board.
  1794. However, for analog to work, s5h1409 gate should be open,
  1795. otherwise, tuner-xc3028 won't be detected.
  1796. A proper fix require using the newer i2c methods to add
  1797. tuner-xc3028 without doing an i2c probe.
  1798. */
  1799. [CX88_BOARD_KWORLD_ATSC_120] = {
  1800. .name = "Kworld PlusTV HD PCI 120 (ATSC 120)",
  1801. .tuner_type = TUNER_XC2028,
  1802. .radio_type = UNSET,
  1803. .tuner_addr = ADDR_UNSET,
  1804. .radio_addr = ADDR_UNSET,
  1805. .input = { {
  1806. .type = CX88_VMUX_TELEVISION,
  1807. .vmux = 0,
  1808. .gpio0 = 0x000000ff,
  1809. .gpio1 = 0x0000f35d,
  1810. .gpio2 = 0x00000000,
  1811. }, {
  1812. .type = CX88_VMUX_COMPOSITE1,
  1813. .vmux = 1,
  1814. .gpio0 = 0x000000ff,
  1815. .gpio1 = 0x0000f37e,
  1816. .gpio2 = 0x00000000,
  1817. }, {
  1818. .type = CX88_VMUX_SVIDEO,
  1819. .vmux = 2,
  1820. .gpio0 = 0x000000ff,
  1821. .gpio1 = 0x0000f37e,
  1822. .gpio2 = 0x00000000,
  1823. } },
  1824. .radio = {
  1825. .type = CX88_RADIO,
  1826. .gpio0 = 0x000000ff,
  1827. .gpio1 = 0x0000f35d,
  1828. .gpio2 = 0x00000000,
  1829. },
  1830. .mpeg = CX88_MPEG_DVB,
  1831. },
  1832. [CX88_BOARD_HAUPPAUGE_HVR4000] = {
  1833. .name = "Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid",
  1834. .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3,
  1835. .radio_type = UNSET,
  1836. .tuner_addr = ADDR_UNSET,
  1837. .radio_addr = ADDR_UNSET,
  1838. .tda9887_conf = TDA9887_PRESENT,
  1839. .audio_chip = V4L2_IDENT_WM8775,
  1840. /*
  1841. * GPIO0 (WINTV2000)
  1842. *
  1843. * Analogue SAT DVB-T
  1844. * Antenna 0xc4bf 0xc4bb
  1845. * Composite 0xc4bf 0xc4bb
  1846. * S-Video 0xc4bf 0xc4bb
  1847. * Composite1 0xc4ff 0xc4fb
  1848. * S-Video1 0xc4ff 0xc4fb
  1849. *
  1850. * BIT VALUE FUNCTION GP{x}_IO
  1851. * 0 1 I:?
  1852. * 1 1 I:?
  1853. * 2 1 O:MPEG PORT 0=DVB-T 1=DVB-S
  1854. * 3 1 I:?
  1855. * 4 1 I:?
  1856. * 5 1 I:?
  1857. * 6 0 O:INPUT SELECTOR 0=INTERNAL 1=EXPANSION
  1858. * 7 1 O:DVB-T DEMOD RESET LOW
  1859. *
  1860. * BIT VALUE FUNCTION GP{x}_OE
  1861. * 8 0 I
  1862. * 9 0 I
  1863. * a 1 O
  1864. * b 0 I
  1865. * c 0 I
  1866. * d 0 I
  1867. * e 1 O
  1868. * f 1 O
  1869. *
  1870. * WM8775 ADC
  1871. *
  1872. * 1: TV Audio / FM Mono
  1873. * 2: Line-In
  1874. * 3: Line-In Expansion
  1875. * 4: FM Stereo
  1876. */
  1877. .input = {{
  1878. .type = CX88_VMUX_TELEVISION,
  1879. .vmux = 0,
  1880. .gpio0 = 0xc4bf,
  1881. /* 1: TV Audio / FM Mono */
  1882. .audioroute = 1,
  1883. }, {
  1884. .type = CX88_VMUX_COMPOSITE1,
  1885. .vmux = 1,
  1886. .gpio0 = 0xc4bf,
  1887. /* 2: Line-In */
  1888. .audioroute = 2,
  1889. }, {
  1890. .type = CX88_VMUX_SVIDEO,
  1891. .vmux = 2,
  1892. .gpio0 = 0xc4bf,
  1893. /* 2: Line-In */
  1894. .audioroute = 2,
  1895. } },
  1896. .radio = {
  1897. .type = CX88_RADIO,
  1898. .gpio0 = 0xc4bf,
  1899. /* 4: FM Stereo */
  1900. .audioroute = 8,
  1901. },
  1902. .mpeg = CX88_MPEG_DVB,
  1903. .num_frontends = 2,
  1904. },
  1905. [CX88_BOARD_HAUPPAUGE_HVR4000LITE] = {
  1906. .name = "Hauppauge WinTV-HVR4000(Lite) DVB-S/S2",
  1907. .tuner_type = UNSET,
  1908. .radio_type = UNSET,
  1909. .tuner_addr = ADDR_UNSET,
  1910. .radio_addr = ADDR_UNSET,
  1911. .input = {{
  1912. .type = CX88_VMUX_DVB,
  1913. .vmux = 0,
  1914. } },
  1915. .mpeg = CX88_MPEG_DVB,
  1916. },
  1917. [CX88_BOARD_TEVII_S420] = {
  1918. .name = "TeVii S420 DVB-S",
  1919. .tuner_type = UNSET,
  1920. .radio_type = UNSET,
  1921. .tuner_addr = ADDR_UNSET,
  1922. .radio_addr = ADDR_UNSET,
  1923. .input = {{
  1924. .type = CX88_VMUX_DVB,
  1925. .vmux = 0,
  1926. } },
  1927. .mpeg = CX88_MPEG_DVB,
  1928. },
  1929. [CX88_BOARD_TEVII_S460] = {
  1930. .name = "TeVii S460 DVB-S/S2",
  1931. .tuner_type = UNSET,
  1932. .radio_type = UNSET,
  1933. .tuner_addr = ADDR_UNSET,
  1934. .radio_addr = ADDR_UNSET,
  1935. .input = {{
  1936. .type = CX88_VMUX_DVB,
  1937. .vmux = 0,
  1938. } },
  1939. .mpeg = CX88_MPEG_DVB,
  1940. },
  1941. [CX88_BOARD_TEVII_S464] = {
  1942. .name = "TeVii S464 DVB-S/S2",
  1943. .tuner_type = UNSET,
  1944. .radio_type = UNSET,
  1945. .tuner_addr = ADDR_UNSET,
  1946. .radio_addr = ADDR_UNSET,
  1947. .input = {{
  1948. .type = CX88_VMUX_DVB,
  1949. .vmux = 0,
  1950. } },
  1951. .mpeg = CX88_MPEG_DVB,
  1952. },
  1953. [CX88_BOARD_OMICOM_SS4_PCI] = {
  1954. .name = "Omicom SS4 DVB-S/S2 PCI",
  1955. .tuner_type = UNSET,
  1956. .radio_type = UNSET,
  1957. .tuner_addr = ADDR_UNSET,
  1958. .radio_addr = ADDR_UNSET,
  1959. .input = {{
  1960. .type = CX88_VMUX_DVB,
  1961. .vmux = 0,
  1962. } },
  1963. .mpeg = CX88_MPEG_DVB,
  1964. },
  1965. [CX88_BOARD_TBS_8910] = {
  1966. .name = "TBS 8910 DVB-S",
  1967. .tuner_type = UNSET,
  1968. .radio_type = UNSET,
  1969. .tuner_addr = ADDR_UNSET,
  1970. .radio_addr = ADDR_UNSET,
  1971. .input = {{
  1972. .type = CX88_VMUX_DVB,
  1973. .vmux = 0,
  1974. } },
  1975. .mpeg = CX88_MPEG_DVB,
  1976. },
  1977. [CX88_BOARD_TBS_8920] = {
  1978. .name = "TBS 8920 DVB-S/S2",
  1979. .tuner_type = TUNER_ABSENT,
  1980. .radio_type = UNSET,
  1981. .tuner_addr = ADDR_UNSET,
  1982. .radio_addr = ADDR_UNSET,
  1983. .input = {{
  1984. .type = CX88_VMUX_DVB,
  1985. .vmux = 0,
  1986. .gpio0 = 0x8080,
  1987. } },
  1988. .mpeg = CX88_MPEG_DVB,
  1989. },
  1990. [CX88_BOARD_PROF_6200]