2 * Driver for the Conexant CX23885 PCIe bridge
4 * Copyright (c) 2006 Steven Toth <stoth@linuxtv.org>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 #include <linux/init.h>
23 #include <linux/module.h>
24 #include <linux/pci.h>
25 #include <linux/delay.h>
26 #include <media/cx25840.h>
27 #include <linux/firmware.h>
29 #include "../../../staging/altera-stapl/altera.h"
31 #include "tuner-xc2028.h"
32 #include "netup-init.h"
33 #include "altera-ci.h"
36 #include "cx23888-ir.h"
38 static unsigned int enable_885_ir;
39 module_param(enable_885_ir, int, 0644);
40 MODULE_PARM_DESC(enable_885_ir,
41 "Enable integrated IR controller for supported\n"
42 "\t\t CX2388[57] boards that are wired for it:\n"
43 "\t\t\tHVR-1250 (reported safe)\n"
44 "\t\t\tTeVii S470 (reported unsafe)\n"
45 "\t\t This can cause an interrupt storm with some cards.\n"
46 "\t\t Default: 0 [Disabled]");
48 /* ------------------------------------------------------------------ */
49 /* board config info */
51 struct cx23885_board cx23885_boards[] = {
52 [CX23885_BOARD_UNKNOWN] = {
53 .name = "UNKNOWN/GENERIC",
54 /* Ensure safe default for unknown boards */
57 .type = CX23885_VMUX_COMPOSITE1,
60 .type = CX23885_VMUX_COMPOSITE2,
63 .type = CX23885_VMUX_COMPOSITE3,
66 .type = CX23885_VMUX_COMPOSITE4,
70 [CX23885_BOARD_HAUPPAUGE_HVR1800lp] = {
71 .name = "Hauppauge WinTV-HVR1800lp",
72 .portc = CX23885_MPEG_DVB,
74 .type = CX23885_VMUX_TELEVISION,
78 .type = CX23885_VMUX_DEBUG,
82 .type = CX23885_VMUX_COMPOSITE1,
86 .type = CX23885_VMUX_SVIDEO,
91 [CX23885_BOARD_HAUPPAUGE_HVR1800] = {
92 .name = "Hauppauge WinTV-HVR1800",
93 .porta = CX23885_ANALOG_VIDEO,
94 .portb = CX23885_MPEG_ENCODER,
95 .portc = CX23885_MPEG_DVB,
96 .tuner_type = TUNER_PHILIPS_TDA8290,
97 .tuner_addr = 0x42, /* 0x84 >> 1 */
100 .type = CX23885_VMUX_TELEVISION,
101 .vmux = CX25840_VIN7_CH3 |
106 .type = CX23885_VMUX_COMPOSITE1,
107 .vmux = CX25840_VIN7_CH3 |
112 .type = CX23885_VMUX_SVIDEO,
113 .vmux = CX25840_VIN7_CH3 |
120 [CX23885_BOARD_HAUPPAUGE_HVR1250] = {
121 .name = "Hauppauge WinTV-HVR1250",
122 .portc = CX23885_MPEG_DVB,
124 .type = CX23885_VMUX_TELEVISION,
128 .type = CX23885_VMUX_DEBUG,
132 .type = CX23885_VMUX_COMPOSITE1,
136 .type = CX23885_VMUX_SVIDEO,
141 [CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP] = {
142 .name = "DViCO FusionHDTV5 Express",
143 .portb = CX23885_MPEG_DVB,
145 [CX23885_BOARD_HAUPPAUGE_HVR1500Q] = {
146 .name = "Hauppauge WinTV-HVR1500Q",
147 .portc = CX23885_MPEG_DVB,
149 [CX23885_BOARD_HAUPPAUGE_HVR1500] = {
150 .name = "Hauppauge WinTV-HVR1500",
151 .portc = CX23885_MPEG_DVB,
153 [CX23885_BOARD_HAUPPAUGE_HVR1200] = {
154 .name = "Hauppauge WinTV-HVR1200",
155 .portc = CX23885_MPEG_DVB,
157 [CX23885_BOARD_HAUPPAUGE_HVR1700] = {
158 .name = "Hauppauge WinTV-HVR1700",
159 .portc = CX23885_MPEG_DVB,
161 [CX23885_BOARD_HAUPPAUGE_HVR1400] = {
162 .name = "Hauppauge WinTV-HVR1400",
163 .portc = CX23885_MPEG_DVB,
165 [CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP] = {
166 .name = "DViCO FusionHDTV7 Dual Express",
167 .portb = CX23885_MPEG_DVB,
168 .portc = CX23885_MPEG_DVB,
170 [CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP] = {
171 .name = "DViCO FusionHDTV DVB-T Dual Express",
172 .portb = CX23885_MPEG_DVB,
173 .portc = CX23885_MPEG_DVB,
175 [CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H] = {
176 .name = "Leadtek Winfast PxDVR3200 H",
177 .portc = CX23885_MPEG_DVB,
179 [CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000] = {
180 .name = "Leadtek Winfast PxDVR3200 H XC4000",
181 .porta = CX23885_ANALOG_VIDEO,
182 .portc = CX23885_MPEG_DVB,
183 .tuner_type = TUNER_XC4000,
185 .radio_type = TUNER_XC4000,
188 .type = CX23885_VMUX_TELEVISION,
189 .vmux = CX25840_VIN2_CH1 |
193 .type = CX23885_VMUX_COMPOSITE1,
194 .vmux = CX25840_COMPOSITE1,
196 .type = CX23885_VMUX_SVIDEO,
197 .vmux = CX25840_SVIDEO_LUMA3 |
198 CX25840_SVIDEO_CHROMA4,
200 .type = CX23885_VMUX_COMPONENT,
201 .vmux = CX25840_VIN7_CH1 |
204 CX25840_COMPONENT_ON,
207 [CX23885_BOARD_COMPRO_VIDEOMATE_E650F] = {
208 .name = "Compro VideoMate E650F",
209 .portc = CX23885_MPEG_DVB,
211 [CX23885_BOARD_TBS_6920] = {
212 .name = "TurboSight TBS 6920",
213 .portb = CX23885_MPEG_DVB,
215 [CX23885_BOARD_TEVII_S470] = {
216 .name = "TeVii S470",
217 .portb = CX23885_MPEG_DVB,
219 [CX23885_BOARD_DVBWORLD_2005] = {
220 .name = "DVBWorld DVB-S2 2005",
221 .portb = CX23885_MPEG_DVB,
223 [CX23885_BOARD_NETUP_DUAL_DVBS2_CI] = {
225 .name = "NetUP Dual DVB-S2 CI",
226 .portb = CX23885_MPEG_DVB,
227 .portc = CX23885_MPEG_DVB,
229 [CX23885_BOARD_HAUPPAUGE_HVR1270] = {
230 .name = "Hauppauge WinTV-HVR1270",
231 .portc = CX23885_MPEG_DVB,
233 [CX23885_BOARD_HAUPPAUGE_HVR1275] = {
234 .name = "Hauppauge WinTV-HVR1275",
235 .portc = CX23885_MPEG_DVB,
237 [CX23885_BOARD_HAUPPAUGE_HVR1255] = {
238 .name = "Hauppauge WinTV-HVR1255",
239 .portc = CX23885_MPEG_DVB,
241 [CX23885_BOARD_HAUPPAUGE_HVR1210] = {
242 .name = "Hauppauge WinTV-HVR1210",
243 .portc = CX23885_MPEG_DVB,
245 [CX23885_BOARD_MYGICA_X8506] = {
246 .name = "Mygica X8506 DMB-TH",
247 .tuner_type = TUNER_XC5000,
250 .porta = CX23885_ANALOG_VIDEO,
251 .portb = CX23885_MPEG_DVB,
254 .type = CX23885_VMUX_TELEVISION,
255 .vmux = CX25840_COMPOSITE2,
258 .type = CX23885_VMUX_COMPOSITE1,
259 .vmux = CX25840_COMPOSITE8,
262 .type = CX23885_VMUX_SVIDEO,
263 .vmux = CX25840_SVIDEO_LUMA3 |
264 CX25840_SVIDEO_CHROMA4,
267 .type = CX23885_VMUX_COMPONENT,
268 .vmux = CX25840_COMPONENT_ON |
275 [CX23885_BOARD_MAGICPRO_PROHDTVE2] = {
276 .name = "Magic-Pro ProHDTV Extreme 2",
277 .tuner_type = TUNER_XC5000,
280 .porta = CX23885_ANALOG_VIDEO,
281 .portb = CX23885_MPEG_DVB,
284 .type = CX23885_VMUX_TELEVISION,
285 .vmux = CX25840_COMPOSITE2,
288 .type = CX23885_VMUX_COMPOSITE1,
289 .vmux = CX25840_COMPOSITE8,
292 .type = CX23885_VMUX_SVIDEO,
293 .vmux = CX25840_SVIDEO_LUMA3 |
294 CX25840_SVIDEO_CHROMA4,
297 .type = CX23885_VMUX_COMPONENT,
298 .vmux = CX25840_COMPONENT_ON |
305 [CX23885_BOARD_HAUPPAUGE_HVR1850] = {
306 .name = "Hauppauge WinTV-HVR1850",
307 .portb = CX23885_MPEG_ENCODER,
308 .portc = CX23885_MPEG_DVB,
310 [CX23885_BOARD_COMPRO_VIDEOMATE_E800] = {
311 .name = "Compro VideoMate E800",
312 .portc = CX23885_MPEG_DVB,
314 [CX23885_BOARD_HAUPPAUGE_HVR1290] = {
315 .name = "Hauppauge WinTV-HVR1290",
316 .portc = CX23885_MPEG_DVB,
318 [CX23885_BOARD_MYGICA_X8558PRO] = {
319 .name = "Mygica X8558 PRO DMB-TH",
320 .portb = CX23885_MPEG_DVB,
321 .portc = CX23885_MPEG_DVB,
323 [CX23885_BOARD_LEADTEK_WINFAST_PXTV1200] = {
324 .name = "LEADTEK WinFast PxTV1200",
325 .porta = CX23885_ANALOG_VIDEO,
326 .tuner_type = TUNER_XC2028,
330 .type = CX23885_VMUX_TELEVISION,
331 .vmux = CX25840_VIN2_CH1 |
335 .type = CX23885_VMUX_COMPOSITE1,
336 .vmux = CX25840_COMPOSITE1,
338 .type = CX23885_VMUX_SVIDEO,
339 .vmux = CX25840_SVIDEO_LUMA3 |
340 CX25840_SVIDEO_CHROMA4,
342 .type = CX23885_VMUX_COMPONENT,
343 .vmux = CX25840_VIN7_CH1 |
346 CX25840_COMPONENT_ON,
349 [CX23885_BOARD_GOTVIEW_X5_3D_HYBRID] = {
350 .name = "GoTView X5 3D Hybrid",
351 .tuner_type = TUNER_XC5000,
354 .porta = CX23885_ANALOG_VIDEO,
355 .portb = CX23885_MPEG_DVB,
357 .type = CX23885_VMUX_TELEVISION,
358 .vmux = CX25840_VIN2_CH1 |
362 .type = CX23885_VMUX_COMPOSITE1,
363 .vmux = CX23885_VMUX_COMPOSITE1,
365 .type = CX23885_VMUX_SVIDEO,
366 .vmux = CX25840_SVIDEO_LUMA3 |
367 CX25840_SVIDEO_CHROMA4,
370 [CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF] = {
372 .name = "NetUP Dual DVB-T/C-CI RF",
373 .porta = CX23885_ANALOG_VIDEO,
374 .portb = CX23885_MPEG_DVB,
375 .portc = CX23885_MPEG_DVB,
378 .tuner_type = TUNER_XC5000,
381 .type = CX23885_VMUX_TELEVISION,
382 .vmux = CX25840_COMPOSITE1,
386 const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
388 /* ------------------------------------------------------------------ */
389 /* PCI subsystem IDs */
391 struct cx23885_subid cx23885_subids[] = {
395 .card = CX23885_BOARD_UNKNOWN,
399 .card = CX23885_BOARD_HAUPPAUGE_HVR1800lp,
403 .card = CX23885_BOARD_HAUPPAUGE_HVR1800,
407 .card = CX23885_BOARD_HAUPPAUGE_HVR1800,
411 .card = CX23885_BOARD_HAUPPAUGE_HVR1800,
415 .card = CX23885_BOARD_HAUPPAUGE_HVR1250,
419 .card = CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP,
423 .card = CX23885_BOARD_HAUPPAUGE_HVR1500Q,
427 .card = CX23885_BOARD_HAUPPAUGE_HVR1500Q,
431 .card = CX23885_BOARD_HAUPPAUGE_HVR1500,
435 .card = CX23885_BOARD_HAUPPAUGE_HVR1500,
439 .card = CX23885_BOARD_HAUPPAUGE_HVR1200,
443 .card = CX23885_BOARD_HAUPPAUGE_HVR1200,
447 .card = CX23885_BOARD_HAUPPAUGE_HVR1700,
451 .card = CX23885_BOARD_HAUPPAUGE_HVR1400,
455 .card = CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP,
459 .card = CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP,
463 .card = CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H,
467 .card = CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000,
471 .card = CX23885_BOARD_COMPRO_VIDEOMATE_E650F,
475 .card = CX23885_BOARD_TBS_6920,
479 .card = CX23885_BOARD_TEVII_S470,
483 .card = CX23885_BOARD_DVBWORLD_2005,
487 .card = CX23885_BOARD_NETUP_DUAL_DVBS2_CI,
491 .card = CX23885_BOARD_HAUPPAUGE_HVR1270,
495 .card = CX23885_BOARD_HAUPPAUGE_HVR1275,
499 .card = CX23885_BOARD_HAUPPAUGE_HVR1275,
503 .card = CX23885_BOARD_HAUPPAUGE_HVR1255,
507 .card = CX23885_BOARD_HAUPPAUGE_HVR1255,
511 .card = CX23885_BOARD_HAUPPAUGE_HVR1210,
515 .card = CX23885_BOARD_HAUPPAUGE_HVR1210,
519 .card = CX23885_BOARD_HAUPPAUGE_HVR1210,
523 .card = CX23885_BOARD_HAUPPAUGE_HVR1210, /* HVR1215 */
527 .card = CX23885_BOARD_HAUPPAUGE_HVR1210,
531 .card = CX23885_BOARD_HAUPPAUGE_HVR1255,
535 .card = CX23885_BOARD_HAUPPAUGE_HVR1275,
539 .card = CX23885_BOARD_HAUPPAUGE_HVR1210, /* HVR1215 */
543 .card = CX23885_BOARD_HAUPPAUGE_HVR1210,
547 .card = CX23885_BOARD_HAUPPAUGE_HVR1210, /* HVR1215 */
551 .card = CX23885_BOARD_MYGICA_X8506,
555 .card = CX23885_BOARD_MAGICPRO_PROHDTVE2,
559 .card = CX23885_BOARD_HAUPPAUGE_HVR1850,
563 .card = CX23885_BOARD_COMPRO_VIDEOMATE_E800,
567 .card = CX23885_BOARD_HAUPPAUGE_HVR1290,
571 .card = CX23885_BOARD_MYGICA_X8558PRO,
575 .card = CX23885_BOARD_LEADTEK_WINFAST_PXTV1200,
579 .card = CX23885_BOARD_GOTVIEW_X5_3D_HYBRID,
583 .card = CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF,
586 const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids);
588 void cx23885_card_list(struct cx23885_dev *dev)
592 if (0 == dev->pci->subsystem_vendor &&
593 0 == dev->pci->subsystem_device) {
595 "%s: Board has no valid PCIe Subsystem ID and can't\n"
596 "%s: be autodetected. Pass card=<n> insmod option\n"
597 "%s: to workaround that. Redirect complaints to the\n"
598 "%s: vendor of the TV card. Best regards,\n"
600 dev->name, dev->name, dev->name, dev->name, dev->name);
603 "%s: Your board isn't known (yet) to the driver.\n"
604 "%s: Try to pick one of the existing card configs via\n"
605 "%s: card=<n> insmod option. Updating to the latest\n"
606 "%s: version might help as well.\n",
607 dev->name, dev->name, dev->name, dev->name);
609 printk(KERN_INFO "%s: Here is a list of valid choices for the card=<n> insmod option:\n",
611 for (i = 0; i < cx23885_bcount; i++)
612 printk(KERN_INFO "%s: card=%d -> %s\n",
613 dev->name, i, cx23885_boards[i].name);
616 static void hauppauge_eeprom(struct cx23885_dev *dev, u8 *eeprom_data)
620 tveeprom_hauppauge_analog(&dev->i2c_bus[0].i2c_client, &tv,
623 /* Make sure we support the board model */
626 /* WinTV-HVR1270 (PCIe, Retail, half height)
627 * ATSC/QAM and basic analog, IR Blast */
629 /* WinTV-HVR1210 (PCIe, Retail, half height)
630 * DVB-T and basic analog, IR Blast */
632 /* WinTV-HVR1270 (PCIe, Retail, half height)
633 * ATSC/QAM and basic analog, IR Recv */
635 /* WinTV-HVR1210 (PCIe, Retail, half height)
636 * DVB-T and basic analog, IR Recv */
638 /* WinTV-HVR1275 (PCIe, Retail, half height)
639 * ATSC/QAM and basic analog, IR Recv */
641 /* WinTV-HVR1210 (PCIe, Retail, half height)
642 * DVB-T and basic analog, IR Recv */
644 /* WinTV-HVR1270 (PCIe, Retail, full height)
645 * ATSC/QAM and basic analog, IR Blast */
647 /* WinTV-HVR1210 (PCIe, Retail, full height)
648 * DVB-T and basic analog, IR Blast */
650 /* WinTV-HVR1270 (PCIe, Retail, full height)
651 * ATSC/QAM and basic analog, IR Recv */
653 /* WinTV-HVR1210 (PCIe, Retail, full height)
654 * DVB-T and basic analog, IR Recv */
656 /* WinTV-HVR1275 (PCIe, Retail, full height)
657 * ATSC/QAM and basic analog, IR Recv */
659 /* WinTV-HVR1210 (PCIe, Retail, full height)
660 * DVB-T and basic analog, IR Recv */
662 /* WinTV-HVR1200 (PCIe, Retail, full height)
663 * DVB-T and basic analog */
665 /* WinTV-HVR1200 (PCIe, OEM, half height)
666 * DVB-T and basic analog */
668 /* WinTV-HVR1200 (PCIe, OEM, half height)
669 * DVB-T and basic analog */
671 /* WinTV-HVR1200 (PCIe, OEM, full height)
672 * DVB-T and basic analog */
674 /* WinTV-HVR1200 (PCIe, OEM, half height)
675 * DVB-T and basic analog */
677 /* WinTV-HVR1200 (PCIe, OEM, full height)
678 * DVB-T and basic analog */
680 /* WinTV-HVR1200 (PCIe, OEM, full height)
681 * DVB-T and basic analog */
683 /* WinTV-HVR1200 (PCIe, OEM, half height)
684 * DVB-T and basic analog */
686 /* WinTV-HVR1200 (PCIe, OEM, full height)
687 * DVB-T and basic analog */
689 /* WinTV-HVR1800lp (PCIe, Retail, No IR, Dual
690 channel ATSC and MPEG2 HW Encoder */
692 /* WinTV-HVR1500 (Express Card, OEM, No IR, ATSC
695 /* WinTV-HVR1500 (Express Card, Retail, No IR, ATSC
698 /* WinTV-HVR1500Q (Express Card, OEM, No IR, ATSC/QAM
701 /* WinTV-HVR1500Q (Express Card, Retail, No IR, ATSC/QAM
704 /* WinTV-HVR1800 (PCIe, Retail, 3.5mm in, IR, No FM,
705 Dual channel ATSC and MPEG2 HW Encoder */
707 /* WinTV-HVR1800 (PCIe, OEM, RCA in, No IR, FM,
708 Dual channel ATSC and MPEG2 HW Encoder */
710 /* WinTV-HVR1800 (PCIe, OEM, RCA in, No IR, FM,
711 Dual channel ATSC and MPEG2 HW Encoder */
713 /* WinTV-HVR1800 (PCIe, OEM, RCA in, No IR, No FM,
714 Dual channel ATSC and MPEG2 HW Encoder */
716 /* WinTV-HVR1800 (PCIe, OEM, No IR, No FM,
717 Dual channel ATSC and MPEG2 HW Encoder */
719 /* WinTV-HVR1250 (PCIe, Retail, IR, full height,
720 ATSC and Basic analog */
722 /* WinTV-HVR1250 (PCIe, Retail, IR, half height,
723 ATSC and Basic analog */
725 /* WinTV-HVR1250 (PCIe, No IR, half height,
726 ATSC [at least] and Basic analog) */
728 /* WinTV-HVR1250 (PCIe, OEM, No IR, half height,
729 ATSC and Basic analog */
731 /* WinTV-HVR1250 (PCIe, OEM, No IR, full height,
732 ATSC and Basic analog */
734 /* WinTV-HVR1250 (PCIe, OEM, No IR, half height,
735 ATSC and Basic analog */
737 /* WinTV-HVR1400 (Express Card, Retail, IR,
738 * DVB-T and Basic analog */
740 /* WinTV-HVR1700 (PCIe, OEM, No IR, half height)
741 * DVB-T and MPEG2 HW Encoder */
743 /* WinTV-HVR1700 (PCIe, OEM, No IR, full height)
744 * DVB-T and MPEG2 HW Encoder */
747 /* WinTV-HVR1850 (PCIe, Retail, 3.5mm in, IR, FM,
748 Dual channel ATSC and MPEG2 HW Encoder */
751 /* WinTV-HVR1290 (PCIe, OEM, RCA in, IR,
752 Dual channel ATSC and Basic analog */
755 printk(KERN_WARNING "%s: warning: "
756 "unknown hauppauge model #%d\n",
757 dev->name, tv.model);
761 printk(KERN_INFO "%s: hauppauge eeprom: model=%d\n",
762 dev->name, tv.model);
765 int cx23885_tuner_callback(void *priv, int component, int command, int arg)
767 struct cx23885_tsport *port = priv;
768 struct cx23885_dev *dev = port->dev;
771 if (command == XC2028_RESET_CLK)
775 printk(KERN_ERR "%s(): Unknown command 0x%x.\n",
780 switch (dev->board) {
781 case CX23885_BOARD_HAUPPAUGE_HVR1400:
782 case CX23885_BOARD_HAUPPAUGE_HVR1500:
783 case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
784 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:
785 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000:
786 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F:
787 case CX23885_BOARD_COMPRO_VIDEOMATE_E800:
788 case CX23885_BOARD_LEADTEK_WINFAST_PXTV1200:
789 /* Tuner Reset Command */
792 case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:
793 case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
794 /* Two identical tuners on two different i2c buses,
795 * we need to reset the correct gpio. */
798 else if (port->nr == 2)
801 case CX23885_BOARD_GOTVIEW_X5_3D_HYBRID:
802 /* Tuner Reset Command */
805 case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF:
806 altera_ci_tuner_reset(dev, port->nr);
811 /* Drive the tuner into reset and back out */
812 cx_clear(GP0_IO, bitmask);
814 cx_set(GP0_IO, bitmask);
820 void cx23885_gpio_setup(struct cx23885_dev *dev)
822 switch (dev->board) {
823 case CX23885_BOARD_HAUPPAUGE_HVR1250:
824 /* GPIO-0 cx24227 demodulator reset */
825 cx_set(GP0_IO, 0x00010001); /* Bring the part out of reset */
827 case CX23885_BOARD_HAUPPAUGE_HVR1500:
828 /* GPIO-0 cx24227 demodulator */
829 /* GPIO-2 xc3028 tuner */
831 /* Put the parts into reset */
832 cx_set(GP0_IO, 0x00050000);
833 cx_clear(GP0_IO, 0x00000005);
836 /* Bring the parts out of reset */
837 cx_set(GP0_IO, 0x00050005);
839 case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
840 /* GPIO-0 cx24227 demodulator reset */
841 /* GPIO-2 xc5000 tuner reset */
842 cx_set(GP0_IO, 0x00050005); /* Bring the part out of reset */
844 case CX23885_BOARD_HAUPPAUGE_HVR1800:
847 /* GPIO-2 8295A Reset */
848 /* GPIO-3-10 cx23417 data0-7 */
849 /* GPIO-11-14 cx23417 addr0-3 */
850 /* GPIO-15-18 cx23417 READY, CS, RD, WR */
854 /* EIO15 Zilog Reset */
855 /* EIO14 S5H1409/CX24227 Reset */
856 mc417_gpio_enable(dev, GPIO_15 | GPIO_14, 1);
858 /* Put the demod into reset and protect the eeprom */
859 mc417_gpio_clear(dev, GPIO_15 | GPIO_14);
862 /* Bring the demod and blaster out of reset */
863 mc417_gpio_set(dev, GPIO_15 | GPIO_14);
866 /* Force the TDA8295A into reset and back */
867 cx23885_gpio_enable(dev, GPIO_2, 1);
868 cx23885_gpio_set(dev, GPIO_2);
870 cx23885_gpio_clear(dev, GPIO_2);
872 cx23885_gpio_set(dev, GPIO_2);
875 case CX23885_BOARD_HAUPPAUGE_HVR1200:
876 /* GPIO-0 tda10048 demodulator reset */
877 /* GPIO-2 tda18271 tuner reset */
879 /* Put the parts into reset and back */
880 cx_set(GP0_IO, 0x00050000);
882 cx_clear(GP0_IO, 0x00000005);
884 cx_set(GP0_IO, 0x00050005);
886 case CX23885_BOARD_HAUPPAUGE_HVR1700:
887 /* GPIO-0 TDA10048 demodulator reset */
888 /* GPIO-2 TDA8295A Reset */
889 /* GPIO-3-10 cx23417 data0-7 */
890 /* GPIO-11-14 cx23417 addr0-3 */
891 /* GPIO-15-18 cx23417 READY, CS, RD, WR */
893 /* The following GPIO's are on the interna AVCore (cx25840) */
895 /* GPIO-20 IR_TX 416/DVBT Select */
896 /* GPIO-21 IIS DAT */
897 /* GPIO-22 IIS WCLK */
898 /* GPIO-23 IIS BCLK */
900 /* Put the parts into reset and back */
901 cx_set(GP0_IO, 0x00050000);
903 cx_clear(GP0_IO, 0x00000005);
905 cx_set(GP0_IO, 0x00050005);
907 case CX23885_BOARD_HAUPPAUGE_HVR1400:
908 /* GPIO-0 Dibcom7000p demodulator reset */
909 /* GPIO-2 xc3028L tuner reset */
912 /* Put the parts into reset and back */
913 cx_set(GP0_IO, 0x00050000);
915 cx_clear(GP0_IO, 0x00000005);
917 cx_set(GP0_IO, 0x00050005);
919 case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:
920 /* GPIO-0 xc5000 tuner reset i2c bus 0 */
921 /* GPIO-1 s5h1409 demod reset i2c bus 0 */
922 /* GPIO-2 xc5000 tuner reset i2c bus 1 */
923 /* GPIO-3 s5h1409 demod reset i2c bus 0 */
925 /* Put the parts into reset and back */
926 cx_set(GP0_IO, 0x000f0000);
928 cx_clear(GP0_IO, 0x0000000f);
930 cx_set(GP0_IO, 0x000f000f);
932 case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
933 /* GPIO-0 portb xc3028 reset */
934 /* GPIO-1 portb zl10353 reset */
935 /* GPIO-2 portc xc3028 reset */
936 /* GPIO-3 portc zl10353 reset */
938 /* Put the parts into reset and back */
939 cx_set(GP0_IO, 0x000f0000);
941 cx_clear(GP0_IO, 0x0000000f);
943 cx_set(GP0_IO, 0x000f000f);
945 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:
946 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000:
947 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F:
948 case CX23885_BOARD_COMPRO_VIDEOMATE_E800:
949 case CX23885_BOARD_LEADTEK_WINFAST_PXTV1200:
950 /* GPIO-2 xc3028 tuner reset */
952 /* The following GPIO's are on the internal AVCore (cx25840) */
953 /* GPIO-? zl10353 demod reset */
955 /* Put the parts into reset and back */
956 cx_set(GP0_IO, 0x00040000);
958 cx_clear(GP0_IO, 0x00000004);
960 cx_set(GP0_IO, 0x00040004);
962 case CX23885_BOARD_TBS_6920:
963 cx_write(MC417_CTL, 0x00000036);
964 cx_write(MC417_OEN, 0x00001000);
965 cx_set(MC417_RWD, 0x00000002);
967 cx_clear(MC417_RWD, 0x00000800);
969 cx_set(MC417_RWD, 0x00000800);
972 case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
973 /* GPIO-0 INTA from CiMax1
974 GPIO-1 INTB from CiMax2
976 GPIO-3 to GPIO-10 data/addr for CA
977 GPIO-11 ~CS0 to CiMax1
978 GPIO-12 ~CS1 to CiMax2
979 GPIO-13 ADL0 load LSB addr
980 GPIO-14 ADL1 load MSB addr
981 GPIO-15 ~RDY from CiMax
985 cx_set(GP0_IO, 0x00040000); /* GPIO as out */
986 /* GPIO1 and GPIO2 as INTA and INTB from CiMaxes, reset low */
987 cx_clear(GP0_IO, 0x00030004);
988 mdelay(100);/* reset delay */
989 cx_set(GP0_IO, 0x00040004); /* GPIO as out, reset high */
990 cx_write(MC417_CTL, 0x00000037);/* enable GPIO3-18 pins */
991 /* GPIO-15 IN as ~ACK, rest as OUT */
992 cx_write(MC417_OEN, 0x00001000);
993 /* ~RD, ~WR high; ADL0, ADL1 low; ~CS0, ~CS1 high */
994 cx_write(MC417_RWD, 0x0000c300);
996 cx_write(GPIO_ISM, 0x00000000);/* INTERRUPTS active low*/
998 case CX23885_BOARD_HAUPPAUGE_HVR1270:
999 case CX23885_BOARD_HAUPPAUGE_HVR1275:
1000 case CX23885_BOARD_HAUPPAUGE_HVR1255:
1001 case CX23885_BOARD_HAUPPAUGE_HVR1210:
1002 /* GPIO-5 RF Control: 0 = RF1 Terrestrial, 1 = RF2 Cable */
1003 /* GPIO-6 I2C Gate which can isolate the demod from the bus */
1004 /* GPIO-9 Demod reset */
1006 /* Put the parts into reset and back */
1007 cx23885_gpio_enable(dev, GPIO_9 | GPIO_6 | GPIO_5, 1);
1008 cx23885_gpio_set(dev, GPIO_9 | GPIO_6 | GPIO_5);
1009 cx23885_gpio_clear(dev, GPIO_9);
1011 cx23885_gpio_set(dev, GPIO_9);
1013 case CX23885_BOARD_MYGICA_X8506:
1014 case CX23885_BOARD_MAGICPRO_PROHDTVE2:
1015 /* GPIO-0 (0)Analog / (1)Digital TV */
1016 /* GPIO-1 reset XC5000 */
1017 /* GPIO-2 reset LGS8GL5 / LGS8G75 */
1018 cx23885_gpio_enable(dev, GPIO_0 | GPIO_1 | GPIO_2, 1);
1019 cx23885_gpio_clear(dev, GPIO_1 | GPIO_2);
1021 cx23885_gpio_set(dev, GPIO_0 | GPIO_1 | GPIO_2);
1024 case CX23885_BOARD_MYGICA_X8558PRO:
1025 /* GPIO-0 reset first ATBM8830 */
1026 /* GPIO-1 reset second ATBM8830 */
1027 cx23885_gpio_enable(dev, GPIO_0 | GPIO_1, 1);
1028 cx23885_gpio_clear(dev, GPIO_0 | GPIO_1);
1030 cx23885_gpio_set(dev, GPIO_0 | GPIO_1);
1033 case CX23885_BOARD_HAUPPAUGE_HVR1850:
1034 case CX23885_BOARD_HAUPPAUGE_HVR1290:
1035 /* GPIO-0 656_CLK */
1038 /* GPIO-3-10 cx23417 data0-7 */
1039 /* GPIO-11-14 cx23417 addr0-3 */
1040 /* GPIO-15-18 cx23417 READY, CS, RD, WR */
1042 /* GPIO-20 C_IR_TX */
1043 /* GPIO-21 I2S DAT */
1044 /* GPIO-22 I2S WCLK */
1045 /* GPIO-23 I2S BCLK */
1046 /* ALT GPIO: EXP GPIO LATCH */
1048 /* CX23417 GPIO's */
1049 /* GPIO-14 S5H1411/CX24228 Reset */
1050 /* GPIO-13 EEPROM write protect */
1051 mc417_gpio_enable(dev, GPIO_14 | GPIO_13, 1);
1053 /* Put the demod into reset and protect the eeprom */
1054 mc417_gpio_clear(dev, GPIO_14 | GPIO_13);
1057 /* Bring the demod out of reset */
1058 mc417_gpio_set(dev, GPIO_14);
1062 /* Connected to IF / Mux */
1064 case CX23885_BOARD_GOTVIEW_X5_3D_HYBRID:
1065 cx_set(GP0_IO, 0x00010001); /* Bring the part out of reset */
1067 case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF:
1070 GPIO-2 ~reset chips out
1071 GPIO-3 to GPIO-10 data/addr for CA in/out
1081 cx_set(GP0_IO, 0x00060000); /* GPIO-1,2 as out */
1082 /* GPIO-0 as INT, reset & TMS low */
1083 cx_clear(GP0_IO, 0x00010006);
1084 mdelay(100);/* reset delay */
1085 cx_set(GP0_IO, 0x00000004); /* reset high */
1086 cx_write(MC417_CTL, 0x00000037);/* enable GPIO-3..18 pins */
1087 /* GPIO-17 is TDO in, GPIO-15 is ~RDY in, rest is out */
1088 cx_write(MC417_OEN, 0x00005000);
1089 /* ~RD, ~WR high; ADDR low; ~CS high */
1090 cx_write(MC417_RWD, 0x00000d00);
1092 cx_write(GPIO_ISM, 0x00000000);/* INTERRUPTS active low*/
1097 int cx23885_ir_init(struct cx23885_dev *dev)
1099 static struct v4l2_subdev_io_pin_config ir_rxtx_pin_cfg[] = {
1101 .flags = V4L2_SUBDEV_IO_PIN_INPUT,
1102 .pin = CX23885_PIN_IR_RX_GPIO19,
1103 .function = CX23885_PAD_IR_RX,
1105 .strength = CX25840_PIN_DRIVE_MEDIUM,
1107 .flags = V4L2_SUBDEV_IO_PIN_OUTPUT,
1108 .pin = CX23885_PIN_IR_TX_GPIO20,
1109 .function = CX23885_PAD_IR_TX,
1111 .strength = CX25840_PIN_DRIVE_MEDIUM,
1114 const size_t ir_rxtx_pin_cfg_count = ARRAY_SIZE(ir_rxtx_pin_cfg);
1116 static struct v4l2_subdev_io_pin_config ir_rx_pin_cfg[] = {
1118 .flags = V4L2_SUBDEV_IO_PIN_INPUT,
1119 .pin = CX23885_PIN_IR_RX_GPIO19,
1120 .function = CX23885_PAD_IR_RX,
1122 .strength = CX25840_PIN_DRIVE_MEDIUM,
1125 const size_t ir_rx_pin_cfg_count = ARRAY_SIZE(ir_rx_pin_cfg);
1127 struct v4l2_subdev_ir_parameters params;
1129 switch (dev->board) {
1130 case CX23885_BOARD_HAUPPAUGE_HVR1500:
1131 case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
1132 case CX23885_BOARD_HAUPPAUGE_HVR1800:
1133 case CX23885_BOARD_HAUPPAUGE_HVR1200:
1134 case CX23885_BOARD_HAUPPAUGE_HVR1400:
1135 case CX23885_BOARD_HAUPPAUGE_HVR1275:
1136 case CX23885_BOARD_HAUPPAUGE_HVR1255:
1137 case CX23885_BOARD_HAUPPAUGE_HVR1210:
1138 /* FIXME: Implement me */
1140 case CX23885_BOARD_HAUPPAUGE_HVR1270:
1141 ret = cx23888_ir_probe(dev);
1144 dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_888_IR);
1145 v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config,
1146 ir_rx_pin_cfg_count, ir_rx_pin_cfg);
1148 case CX23885_BOARD_HAUPPAUGE_HVR1850:
1149 case CX23885_BOARD_HAUPPAUGE_HVR1290:
1150 ret = cx23888_ir_probe(dev);
1153 dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_888_IR);
1154 v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config,
1155 ir_rxtx_pin_cfg_count, ir_rxtx_pin_cfg);
1157 * For these boards we need to invert the Tx output via the
1158 * IR controller to have the LED off while idle
1160 v4l2_subdev_call(dev->sd_ir, ir, tx_g_parameters, ¶ms);
1161 params.enable = false;
1162 params.shutdown = false;
1163 params.invert_level = true;
1164 v4l2_subdev_call(dev->sd_ir, ir, tx_s_parameters, ¶ms);
1165 params.shutdown = true;
1166 v4l2_subdev_call(dev->sd_ir, ir, tx_s_parameters, ¶ms);
1168 case CX23885_BOARD_TEVII_S470:
1171 dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE);
1172 if (dev->sd_ir == NULL) {
1176 v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config,
1177 ir_rx_pin_cfg_count, ir_rx_pin_cfg);
1179 case CX23885_BOARD_HAUPPAUGE_HVR1250:
1182 dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE);
1183 if (dev->sd_ir == NULL) {
1187 v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config,
1188 ir_rxtx_pin_cfg_count, ir_rxtx_pin_cfg);
1190 case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
1191 request_module("ir-kbd-i2c");
1198 void cx23885_ir_fini(struct cx23885_dev *dev)
1200 switch (dev->board) {
1201 case CX23885_BOARD_HAUPPAUGE_HVR1270:
1202 case CX23885_BOARD_HAUPPAUGE_HVR1850:
1203 case CX23885_BOARD_HAUPPAUGE_HVR1290:
1204 cx23885_irq_remove(dev, PCI_MSK_IR);
1205 cx23888_ir_remove(dev);
1208 case CX23885_BOARD_TEVII_S470:
1209 case CX23885_BOARD_HAUPPAUGE_HVR1250:
1210 cx23885_irq_remove(dev, PCI_MSK_AV_CORE);
1211 /* sd_ir is a duplicate pointer to the AV Core, just clear it */
1217 int netup_jtag_io(void *device, int tms, int tdi, int read_tdo)
1221 struct cx23885_dev *dev = (struct cx23885_dev *)device;
1223 data = ((cx_read(GP0_IO)) & (~0x00000002));
1224 data |= (tms ? 0x00020002 : 0x00020000);
1225 cx_write(GP0_IO, data);
1228 data = ((cx_read(MC417_RWD)) & (~0x0000a000));
1229 data |= (tdi ? 0x00008000 : 0);
1230 cx_write(MC417_RWD, data);
1232 tdo = (data & 0x00004000) ? 1 : 0; /*TDO*/
1234 cx_write(MC417_RWD, data | 0x00002000);
1237 cx_write(MC417_RWD, data);
1242 void cx23885_ir_pci_int_enable(struct cx23885_dev *dev)
1244 switch (dev->board) {
1245 case CX23885_BOARD_HAUPPAUGE_HVR1270:
1246 case CX23885_BOARD_HAUPPAUGE_HVR1850:
1247 case CX23885_BOARD_HAUPPAUGE_HVR1290:
1249 cx23885_irq_add_enable(dev, PCI_MSK_IR);
1251 case CX23885_BOARD_TEVII_S470:
1252 case CX23885_BOARD_HAUPPAUGE_HVR1250:
1254 cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE);
1259 void cx23885_card_setup(struct cx23885_dev *dev)
1261 struct cx23885_tsport *ts1 = &dev->ts1;
1262 struct cx23885_tsport *ts2 = &dev->ts2;
1264 static u8 eeprom[256];
1266 if (dev->i2c_bus[0].i2c_rc == 0) {
1267 dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1;
1268 tveeprom_read(&dev->i2c_bus[0].i2c_client,
1269 eeprom, sizeof(eeprom));
1272 switch (dev->board) {
1273 case CX23885_BOARD_HAUPPAUGE_HVR1250:
1274 if (dev->i2c_bus[0].i2c_rc == 0) {
1275 if (eeprom[0x80] != 0x84)
1276 hauppauge_eeprom(dev, eeprom+0xc0);
1278 hauppauge_eeprom(dev, eeprom+0x80);
1281 case CX23885_BOARD_HAUPPAUGE_HVR1500:
1282 case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
1283 case CX23885_BOARD_HAUPPAUGE_HVR1400:
1284 if (dev->i2c_bus[0].i2c_rc == 0)
1285 hauppauge_eeprom(dev, eeprom+0x80);
1287 case CX23885_BOARD_HAUPPAUGE_HVR1800:
1288 case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
1289 case CX23885_BOARD_HAUPPAUGE_HVR1200:
1290 case CX23885_BOARD_HAUPPAUGE_HVR1700:
1291 case CX23885_BOARD_HAUPPAUGE_HVR1270:
1292 case CX23885_BOARD_HAUPPAUGE_HVR1275:
1293 case CX23885_BOARD_HAUPPAUGE_HVR1255:
1294 case CX23885_BOARD_HAUPPAUGE_HVR1210:
1295 case CX23885_BOARD_HAUPPAUGE_HVR1850:
1296 case CX23885_BOARD_HAUPPAUGE_HVR1290:
1297 if (dev->i2c_bus[0].i2c_rc == 0)
1298 hauppauge_eeprom(dev, eeprom+0xc0);
1302 switch (dev->board) {
1303 case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:
1304 case CX23885_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL_EXP:
1305 ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
1306 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1307 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1308 /* break omitted intentionally */
1309 case CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP:
1310 ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
1311 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1312 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1314 case CX23885_BOARD_HAUPPAUGE_HVR1800:
1315 /* Defaults for VID B - Analog encoder */
1316 /* DREQ_POL, SMODE, PUNC_CLK, MCLK_POL Serial bus + punc clk */
1317 ts1->gen_ctrl_val = 0x10e;
1318 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1319 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1321 /* APB_TSVALERR_POL (active low)*/
1322 ts1->vld_misc_val = 0x2000;
1323 ts1->hw_sop_ctrl_val = (0x47 << 16 | 188 << 4 | 0xc);
1325 /* Defaults for VID C */
1326 ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
1327 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1328 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1330 case CX23885_BOARD_TBS_6920:
1331 ts1->gen_ctrl_val = 0x4; /* Parallel */
1332 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1333 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1335 case CX23885_BOARD_TEVII_S470:
1336 case CX23885_BOARD_DVBWORLD_2005:
1337 ts1->gen_ctrl_val = 0x5; /* Parallel */
1338 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1339 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1341 case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
1342 case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF:
1343 ts1->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
1344 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1345 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1346 ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
1347 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1348 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1350 case CX23885_BOARD_MYGICA_X8506:
1351 case CX23885_BOARD_MAGICPRO_PROHDTVE2:
1352 ts1->gen_ctrl_val = 0x5; /* Parallel */
1353 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1354 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1356 case CX23885_BOARD_MYGICA_X8558PRO:
1357 ts1->gen_ctrl_val = 0x5; /* Parallel */
1358 ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1359 ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1360 ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
1361 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1362 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1364 case CX23885_BOARD_HAUPPAUGE_HVR1250:
1365 case CX23885_BOARD_HAUPPAUGE_HVR1500:
1366 case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
1367 case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
1368 case CX23885_BOARD_HAUPPAUGE_HVR1200:
1369 case CX23885_BOARD_HAUPPAUGE_HVR1700:
1370 case CX23885_BOARD_HAUPPAUGE_HVR1400:
1371 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:
1372 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000:
1373 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F:
1374 case CX23885_BOARD_HAUPPAUGE_HVR1270:
1375 case CX23885_BOARD_HAUPPAUGE_HVR1275:
1376 case CX23885_BOARD_HAUPPAUGE_HVR1255:
1377 case CX23885_BOARD_HAUPPAUGE_HVR1210:
1378 case CX23885_BOARD_HAUPPAUGE_HVR1850:
1379 case CX23885_BOARD_COMPRO_VIDEOMATE_E800:
1380 case CX23885_BOARD_HAUPPAUGE_HVR1290:
1381 case CX23885_BOARD_GOTVIEW_X5_3D_HYBRID:
1383 ts2->gen_ctrl_val = 0xc; /* Serial bus + punctured clock */
1384 ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
1385 ts2->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
1388 /* Certain boards support analog, or require the avcore to be
1389 * loaded, ensure this happens.
1391 switch (dev->board) {
1392 case CX23885_BOARD_TEVII_S470:
1393 case CX23885_BOARD_HAUPPAUGE_HVR1250:
1394 /* Currently only enabled for the integrated IR controller */
1397 case CX23885_BOARD_HAUPPAUGE_HVR1800:
1398 case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
1399 case CX23885_BOARD_HAUPPAUGE_HVR1700:
1400 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H:
1401 case CX23885_BOARD_LEADTEK_WINFAST_PXDVR3200_H_XC4000:
1402 case CX23885_BOARD_COMPRO_VIDEOMATE_E650F:
1403 case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
1404 case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF:
1405 case CX23885_BOARD_COMPRO_VIDEOMATE_E800:
1406 case CX23885_BOARD_HAUPPAUGE_HVR1270:
1407 case CX23885_BOARD_HAUPPAUGE_HVR1850:
1408 case CX23885_BOARD_MYGICA_X8506:
1409 case CX23885_BOARD_MAGICPRO_PROHDTVE2:
1410 case CX23885_BOARD_HAUPPAUGE_HVR1290:
1411 case CX23885_BOARD_LEADTEK_WINFAST_PXTV1200:
1412 case CX23885_BOARD_GOTVIEW_X5_3D_HYBRID:
1413 dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev,
1414 &dev->i2c_bus[2].i2c_adap,
1415 "cx25840", 0x88 >> 1, NULL);
1416 if (dev->sd_cx25840) {
1417 dev->sd_cx25840->grp_id = CX23885_HW_AV_CORE;
1418 v4l2_subdev_call(dev->sd_cx25840, core, load_fw);
1423 /* AUX-PLL 27MHz CLK */
1424 switch (dev->board) {
1425 case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
1426 netup_initialize(dev);
1428 case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: {
1430 const struct firmware *fw;
1431 const char *filename = "dvb-netup-altera-01.fw";
1432 char *action = "configure";
1433 struct altera_config netup_config = {
1436 .jtag_io = netup_jtag_io,
1439 netup_initialize(dev);
1441 ret = request_firmware(&fw, filename, &dev->pci->dev);
1443 printk(KERN_ERR "did not find the firmware file. (%s) "
1444 "Please see linux/Documentation/dvb/ for more details "
1445 "on firmware-problems.", filename);
1447 altera_init(&netup_config, fw);
1449 release_firmware(fw);
1455 /* ------------------------------------------------------------------ */