cx23885-cards.c revision 90a71b1c1ab003dd4524afca44c2ad2519f4420c
1/*
2 *  Driver for the Conexant CX23885 PCIe bridge
3 *
4 *  Copyright (c) 2006 Steven Toth <stoth@linuxtv.org>
5 *
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.
10 *
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
14 *
15 *  GNU General Public License for more details.
16 *
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.
20 */
21
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
28#include "cx23885.h"
29#include "tuner-xc2028.h"
30
31/* ------------------------------------------------------------------ */
32/* board config info                                                  */
33
34struct cx23885_board cx23885_boards[] = {
35	[CX23885_BOARD_UNKNOWN] = {
36		.name		= "UNKNOWN/GENERIC",
37		/* Ensure safe default for unknown boards */
38		.clk_freq       = 0,
39		.input          = {{
40			.type   = CX23885_VMUX_COMPOSITE1,
41			.vmux   = 0,
42		},{
43			.type   = CX23885_VMUX_COMPOSITE2,
44			.vmux   = 1,
45		},{
46			.type   = CX23885_VMUX_COMPOSITE3,
47			.vmux   = 2,
48		},{
49			.type   = CX23885_VMUX_COMPOSITE4,
50			.vmux   = 3,
51		}},
52	},
53	[CX23885_BOARD_HAUPPAUGE_HVR1800lp] = {
54		.name		= "Hauppauge WinTV-HVR1800lp",
55		.portc		= CX23885_MPEG_DVB,
56		.input          = {{
57			.type   = CX23885_VMUX_TELEVISION,
58			.vmux   = 0,
59			.gpio0  = 0xff00,
60		},{
61			.type   = CX23885_VMUX_DEBUG,
62			.vmux   = 0,
63			.gpio0  = 0xff01,
64		},{
65			.type   = CX23885_VMUX_COMPOSITE1,
66			.vmux   = 1,
67			.gpio0  = 0xff02,
68		},{
69			.type   = CX23885_VMUX_SVIDEO,
70			.vmux   = 2,
71			.gpio0  = 0xff02,
72		}},
73	},
74	[CX23885_BOARD_HAUPPAUGE_HVR1800] = {
75		.name		= "Hauppauge WinTV-HVR1800",
76		.porta		= CX23885_ANALOG_VIDEO,
77		.portb		= CX23885_MPEG_ENCODER,
78		.portc		= CX23885_MPEG_DVB,
79		.tuner_type	= TUNER_PHILIPS_TDA8290,
80		.tuner_addr	= 0x42, /* 0x84 >> 1 */
81		.input          = {{
82			.type   = CX23885_VMUX_TELEVISION,
83			.vmux   =	CX25840_VIN7_CH3 |
84					CX25840_VIN5_CH2 |
85					CX25840_VIN2_CH1,
86			.gpio0  = 0,
87		},{
88			.type   = CX23885_VMUX_COMPOSITE1,
89			.vmux   =	CX25840_VIN7_CH3 |
90					CX25840_VIN4_CH2 |
91					CX25840_VIN6_CH1,
92			.gpio0  = 0,
93		},{
94			.type   = CX23885_VMUX_SVIDEO,
95			.vmux   =	CX25840_VIN7_CH3 |
96					CX25840_VIN4_CH2 |
97					CX25840_VIN8_CH1 |
98					CX25840_SVIDEO_ON,
99			.gpio0  = 0,
100		}},
101	},
102	[CX23885_BOARD_HAUPPAUGE_HVR1250] = {
103		.name		= "Hauppauge WinTV-HVR1250",
104		.portc		= CX23885_MPEG_DVB,
105		.input          = {{
106			.type   = CX23885_VMUX_TELEVISION,
107			.vmux   = 0,
108			.gpio0  = 0xff00,
109		},{
110			.type   = CX23885_VMUX_DEBUG,
111			.vmux   = 0,
112			.gpio0  = 0xff01,
113		},{
114			.type   = CX23885_VMUX_COMPOSITE1,
115			.vmux   = 1,
116			.gpio0  = 0xff02,
117		},{
118			.type   = CX23885_VMUX_SVIDEO,
119			.vmux   = 2,
120			.gpio0  = 0xff02,
121		}},
122	},
123	[CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP] = {
124		.name		= "DViCO FusionHDTV5 Express",
125		.portb		= CX23885_MPEG_DVB,
126	},
127	[CX23885_BOARD_HAUPPAUGE_HVR1500Q] = {
128		.name		= "Hauppauge WinTV-HVR1500Q",
129		.portc		= CX23885_MPEG_DVB,
130	},
131	[CX23885_BOARD_HAUPPAUGE_HVR1500] = {
132		.name		= "Hauppauge WinTV-HVR1500",
133		.portc		= CX23885_MPEG_DVB,
134	},
135	[CX23885_BOARD_HAUPPAUGE_HVR1200] = {
136		.name		= "Hauppauge WinTV-HVR1200",
137		.portc		= CX23885_MPEG_DVB,
138	},
139	[CX23885_BOARD_HAUPPAUGE_HVR1700] = {
140		.name		= "Hauppauge WinTV-HVR1700",
141		.portc		= CX23885_MPEG_DVB,
142	},
143	[CX23885_BOARD_HAUPPAUGE_HVR1400] = {
144		.name		= "Hauppauge WinTV-HVR1400",
145		.portc		= CX23885_MPEG_DVB,
146	},
147	[CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP] = {
148		.name		= "DViCO FusionHDTV7 Dual Express",
149		.portb		= CX23885_MPEG_DVB,
150		.portc		= CX23885_MPEG_DVB,
151	},
152};
153const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
154
155/* ------------------------------------------------------------------ */
156/* PCI subsystem IDs                                                  */
157
158struct cx23885_subid cx23885_subids[] = {
159	{
160		.subvendor = 0x0070,
161		.subdevice = 0x3400,
162		.card      = CX23885_BOARD_UNKNOWN,
163	},{
164		.subvendor = 0x0070,
165		.subdevice = 0x7600,
166		.card      = CX23885_BOARD_HAUPPAUGE_HVR1800lp,
167	},{
168		.subvendor = 0x0070,
169		.subdevice = 0x7800,
170		.card      = CX23885_BOARD_HAUPPAUGE_HVR1800,
171	},{
172		.subvendor = 0x0070,
173		.subdevice = 0x7801,
174		.card      = CX23885_BOARD_HAUPPAUGE_HVR1800,
175	},{
176		.subvendor = 0x0070,
177		.subdevice = 0x7809,
178		.card      = CX23885_BOARD_HAUPPAUGE_HVR1800,
179	},{
180		.subvendor = 0x0070,
181		.subdevice = 0x7911,
182		.card      = CX23885_BOARD_HAUPPAUGE_HVR1250,
183	},{
184		.subvendor = 0x18ac,
185		.subdevice = 0xd500,
186		.card      = CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP,
187	},{
188		.subvendor = 0x0070,
189		.subdevice = 0x7790,
190		.card      = CX23885_BOARD_HAUPPAUGE_HVR1500Q,
191	},{
192		.subvendor = 0x0070,
193		.subdevice = 0x7797,
194		.card      = CX23885_BOARD_HAUPPAUGE_HVR1500Q,
195	},{
196		.subvendor = 0x0070,
197		.subdevice = 0x7710,
198		.card      = CX23885_BOARD_HAUPPAUGE_HVR1500,
199	},{
200		.subvendor = 0x0070,
201		.subdevice = 0x7717,
202		.card      = CX23885_BOARD_HAUPPAUGE_HVR1500,
203	}, {
204		.subvendor = 0x0070,
205		.subdevice = 0x71d1,
206		.card      = CX23885_BOARD_HAUPPAUGE_HVR1200,
207	}, {
208		.subvendor = 0x0070,
209		.subdevice = 0x71d3,
210		.card      = CX23885_BOARD_HAUPPAUGE_HVR1200,
211	}, {
212		.subvendor = 0x0070,
213		.subdevice = 0x8101,
214		.card      = CX23885_BOARD_HAUPPAUGE_HVR1700,
215	}, {
216		.subvendor = 0x0070,
217		.subdevice = 0x8010,
218		.card      = CX23885_BOARD_HAUPPAUGE_HVR1400,
219	},{
220		.subvendor = 0x18ac,
221		.subdevice = 0xd618,
222		.card      = CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP,
223	},
224};
225const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids);
226
227void cx23885_card_list(struct cx23885_dev *dev)
228{
229	int i;
230
231	if (0 == dev->pci->subsystem_vendor &&
232	    0 == dev->pci->subsystem_device) {
233		printk("%s: Your board has no valid PCIe Subsystem ID and thus can't\n"
234		       "%s: be autodetected.  Please pass card=<n> insmod option to\n"
235		       "%s: workaround that.  Redirect complaints to the vendor of\n"
236		       "%s: the TV card.  Best regards,\n"
237		       "%s:         -- tux\n",
238		       dev->name, dev->name, dev->name, dev->name, dev->name);
239	} else {
240		printk("%s: Your board isn't known (yet) to the driver.  You can\n"
241		       "%s: try to pick one of the existing card configs via\n"
242		       "%s: card=<n> insmod option.  Updating to the latest\n"
243		       "%s: version might help as well.\n",
244		       dev->name, dev->name, dev->name, dev->name);
245	}
246	printk("%s: Here is a list of valid choices for the card=<n> insmod option:\n",
247	       dev->name);
248	for (i = 0; i < cx23885_bcount; i++)
249		printk("%s:    card=%d -> %s\n",
250		       dev->name, i, cx23885_boards[i].name);
251}
252
253static void hauppauge_eeprom(struct cx23885_dev *dev, u8 *eeprom_data)
254{
255	struct tveeprom tv;
256
257	tveeprom_hauppauge_analog(&dev->i2c_bus[0].i2c_client, &tv, eeprom_data);
258
259	/* Make sure we support the board model */
260	switch (tv.model)
261	{
262	case 71009:
263		/* WinTV-HVR1200 (PCIe, Retail, full height)
264		 * DVB-T and basic analog */
265	case 71359:
266		/* WinTV-HVR1200 (PCIe, OEM, half height)
267		 * DVB-T and basic analog */
268	case 71439:
269		/* WinTV-HVR1200 (PCIe, OEM, half height)
270		 * DVB-T and basic analog */
271	case 71449:
272		/* WinTV-HVR1200 (PCIe, OEM, full height)
273		 * DVB-T and basic analog */
274	case 71939:
275		/* WinTV-HVR1200 (PCIe, OEM, half height)
276		 * DVB-T and basic analog */
277	case 71949:
278		/* WinTV-HVR1200 (PCIe, OEM, full height)
279		 * DVB-T and basic analog */
280	case 71959:
281		/* WinTV-HVR1200 (PCIe, OEM, full height)
282		 * DVB-T and basic analog */
283	case 71979:
284		/* WinTV-HVR1200 (PCIe, OEM, half height)
285		 * DVB-T and basic analog */
286	case 71999:
287		/* WinTV-HVR1200 (PCIe, OEM, full height)
288		 * DVB-T and basic analog */
289	case 76601: /* WinTV-HVR1800lp (PCIe, Retail, No IR, Dual channel ATSC and MPEG2 HW Encoder */
290	case 77001: /* WinTV-HVR1500 (Express Card, OEM, No IR, ATSC and Basic analog */
291	case 77011: /* WinTV-HVR1500 (Express Card, Retail, No IR, ATSC and Basic analog */
292	case 77041: /* WinTV-HVR1500Q (Express Card, OEM, No IR, ATSC/QAM and Basic analog */
293	case 77051: /* WinTV-HVR1500Q (Express Card, Retail, No IR, ATSC/QAM and Basic analog */
294	case 78011: /* WinTV-HVR1800 (PCIe, Retail, 3.5mm in, IR, No FM, Dual channel ATSC and MPEG2 HW Encoder */
295	case 78501: /* WinTV-HVR1800 (PCIe, OEM, RCA in, No IR, FM, Dual channel ATSC and MPEG2 HW Encoder */
296	case 78521: /* WinTV-HVR1800 (PCIe, OEM, RCA in, No IR, FM, Dual channel ATSC and MPEG2 HW Encoder */
297	case 78531: /* WinTV-HVR1800 (PCIe, OEM, RCA in, No IR, No FM, Dual channel ATSC and MPEG2 HW Encoder */
298	case 78631: /* WinTV-HVR1800 (PCIe, OEM, No IR, No FM, Dual channel ATSC and MPEG2 HW Encoder */
299	case 79001: /* WinTV-HVR1250 (PCIe, Retail, IR, full height, ATSC and Basic analog */
300	case 79101: /* WinTV-HVR1250 (PCIe, Retail, IR, half height, ATSC and Basic analog */
301	case 79561: /* WinTV-HVR1250 (PCIe, OEM, No IR, half height, ATSC and Basic analog */
302	case 79571: /* WinTV-HVR1250 (PCIe, OEM, No IR, full height, ATSC and Basic analog */
303	case 79671: /* WinTV-HVR1250 (PCIe, OEM, No IR, half height, ATSC and Basic analog */
304	case 80019:
305		/* WinTV-HVR1400 (Express Card, Retail, IR,
306		 * DVB-T and Basic analog */
307	case 81509:
308		/* WinTV-HVR1700 (PCIe, OEM, No IR, half height)
309		 * DVB-T and MPEG2 HW Encoder */
310	case 81519:
311		/* WinTV-HVR1700 (PCIe, OEM, No IR, full height)
312		 * DVB-T and MPEG2 HW Encoder */
313		break;
314	default:
315		printk("%s: warning: unknown hauppauge model #%d\n", dev->name, tv.model);
316		break;
317	}
318
319	printk(KERN_INFO "%s: hauppauge eeprom: model=%d\n",
320			dev->name, tv.model);
321}
322
323static int cx23885_tuner_callback(struct cx23885_dev *dev, int port,
324				  int command, int arg)
325{
326	u32 bitmask = 0;
327
328	if (command != 0) {
329		printk(KERN_ERR "%s(): Unknown command 0x%x.\n",
330			__func__, command);
331		return -EINVAL;
332	}
333
334	switch(dev->board) {
335	case CX23885_BOARD_HAUPPAUGE_HVR1400:
336	case CX23885_BOARD_HAUPPAUGE_HVR1500:
337	case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
338		/* Tuner Reset Command */
339		if (command == 0)
340			bitmask = 0x04;
341		break;
342	case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:
343		if (command == 0) {
344
345			/* Two identical tuners on two different i2c buses,
346			 * we need to reset the correct gpio. */
347			if (port == 0)
348				bitmask = 0x01;
349			else if (port == 1)
350				bitmask = 0x04;
351		}
352		break;
353	}
354
355	if (bitmask) {
356		/* Drive the tuner into reset and back out */
357		cx_clear(GP0_IO, bitmask);
358		mdelay(200);
359		cx_set(GP0_IO, bitmask);
360	}
361
362	return 0;
363}
364
365int cx23885_xc5000_tuner_callback(void *priv, int command, int arg)
366{
367	struct cx23885_i2c *bus = priv;
368	struct cx23885_dev *dev = bus->dev;
369
370	return cx23885_tuner_callback(dev, bus->nr, command, arg);
371}
372
373int cx23885_xc3028_tuner_callback(void *priv, int command, int arg)
374{
375	struct cx23885_tsport *port = priv;
376	struct cx23885_dev *dev = port->dev;
377
378	if (command == XC2028_RESET_CLK)
379		return 0;
380
381	return cx23885_tuner_callback(dev, port->nr, command, arg);
382}
383
384void cx23885_gpio_setup(struct cx23885_dev *dev)
385{
386	switch(dev->board) {
387	case CX23885_BOARD_HAUPPAUGE_HVR1250:
388		/* GPIO-0 cx24227 demodulator reset */
389		cx_set(GP0_IO, 0x00010001); /* Bring the part out of reset */
390		break;
391	case CX23885_BOARD_HAUPPAUGE_HVR1500:
392		/* GPIO-0 cx24227 demodulator */
393		/* GPIO-2 xc3028 tuner */
394
395		/* Put the parts into reset */
396		cx_set(GP0_IO, 0x00050000);
397		cx_clear(GP0_IO, 0x00000005);
398		msleep(5);
399
400		/* Bring the parts out of reset */
401		cx_set(GP0_IO, 0x00050005);
402		break;
403	case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
404		/* GPIO-0 cx24227 demodulator reset */
405		/* GPIO-2 xc5000 tuner reset */
406		cx_set(GP0_IO, 0x00050005); /* Bring the part out of reset */
407		break;
408	case CX23885_BOARD_HAUPPAUGE_HVR1800:
409		/* GPIO-0 656_CLK */
410		/* GPIO-1 656_D0 */
411		/* GPIO-2 8295A Reset */
412		/* GPIO-3-10 cx23417 data0-7 */
413		/* GPIO-11-14 cx23417 addr0-3 */
414		/* GPIO-15-18 cx23417 READY, CS, RD, WR */
415		/* GPIO-19 IR_RX */
416
417		/* CX23417 GPIO's */
418		/* EIO15 Zilog Reset */
419		/* EIO14 S5H1409/CX24227 Reset */
420
421		/* Force the TDA8295A into reset and back */
422		cx_set(GP0_IO, 0x00040004);
423		mdelay(20);
424		cx_clear(GP0_IO, 0x00000004);
425		mdelay(20);
426		cx_set(GP0_IO, 0x00040004);
427		mdelay(20);
428		break;
429	case CX23885_BOARD_HAUPPAUGE_HVR1200:
430		/* GPIO-0 tda10048 demodulator reset */
431		/* GPIO-2 tda18271 tuner reset */
432
433		/* Put the parts into reset and back */
434		cx_set(GP0_IO, 0x00050000);
435		mdelay(20);
436		cx_clear(GP0_IO, 0x00000005);
437		mdelay(20);
438		cx_set(GP0_IO, 0x00050005);
439		break;
440	case CX23885_BOARD_HAUPPAUGE_HVR1700:
441		/* GPIO-0 TDA10048 demodulator reset */
442		/* GPIO-2 TDA8295A Reset */
443		/* GPIO-3-10 cx23417 data0-7 */
444		/* GPIO-11-14 cx23417 addr0-3 */
445		/* GPIO-15-18 cx23417 READY, CS, RD, WR */
446
447		/* The following GPIO's are on the interna AVCore (cx25840) */
448		/* GPIO-19 IR_RX */
449		/* GPIO-20 IR_TX 416/DVBT Select */
450		/* GPIO-21 IIS DAT */
451		/* GPIO-22 IIS WCLK */
452		/* GPIO-23 IIS BCLK */
453
454		/* Put the parts into reset and back */
455		cx_set(GP0_IO, 0x00050000);
456		mdelay(20);
457		cx_clear(GP0_IO, 0x00000005);
458		mdelay(20);
459		cx_set(GP0_IO, 0x00050005);
460		break;
461	case CX23885_BOARD_HAUPPAUGE_HVR1400:
462		/* GPIO-0  Dibcom7000p demodulator reset */
463		/* GPIO-2  xc3028L tuner reset */
464		/* GPIO-13 LED */
465
466		/* Put the parts into reset and back */
467		cx_set(GP0_IO, 0x00050000);
468		mdelay(20);
469		cx_clear(GP0_IO, 0x00000005);
470		mdelay(20);
471		cx_set(GP0_IO, 0x00050005);
472		break;
473	case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:
474		/* GPIO-0 xc5000 tuner reset i2c bus 0 */
475		/* GPIO-1 s5h1409 demod reset i2c bus 0 */
476		/* GPIO-2 xc5000 tuner reset i2c bus 1 */
477		/* GPIO-3 s5h1409 demod reset i2c bus 0 */
478
479		/* Put the parts into reset and back */
480		cx_set(GP0_IO, 0x000f0000);
481		mdelay(20);
482		cx_clear(GP0_IO, 0x0000000f);
483		mdelay(20);
484		cx_set(GP0_IO, 0x000f000f);
485		break;
486	}
487}
488
489int cx23885_ir_init(struct cx23885_dev *dev)
490{
491	switch (dev->board) {
492	case CX23885_BOARD_HAUPPAUGE_HVR1250:
493	case CX23885_BOARD_HAUPPAUGE_HVR1500:
494	case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
495	case CX23885_BOARD_HAUPPAUGE_HVR1800:
496	case CX23885_BOARD_HAUPPAUGE_HVR1200:
497	case CX23885_BOARD_HAUPPAUGE_HVR1400:
498		/* FIXME: Implement me */
499		break;
500	}
501
502	return 0;
503}
504
505void cx23885_card_setup(struct cx23885_dev *dev)
506{
507	struct cx23885_tsport *ts1 = &dev->ts1;
508	struct cx23885_tsport *ts2 = &dev->ts2;
509
510	static u8 eeprom[256];
511
512	if (dev->i2c_bus[0].i2c_rc == 0) {
513		dev->i2c_bus[0].i2c_client.addr = 0xa0 >> 1;
514		tveeprom_read(&dev->i2c_bus[0].i2c_client,
515			      eeprom, sizeof(eeprom));
516	}
517
518	switch (dev->board) {
519	case CX23885_BOARD_HAUPPAUGE_HVR1250:
520	case CX23885_BOARD_HAUPPAUGE_HVR1500:
521	case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
522	case CX23885_BOARD_HAUPPAUGE_HVR1400:
523		if (dev->i2c_bus[0].i2c_rc == 0)
524			hauppauge_eeprom(dev, eeprom+0x80);
525		break;
526	case CX23885_BOARD_HAUPPAUGE_HVR1800:
527	case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
528	case CX23885_BOARD_HAUPPAUGE_HVR1200:
529	case CX23885_BOARD_HAUPPAUGE_HVR1700:
530		if (dev->i2c_bus[0].i2c_rc == 0)
531			hauppauge_eeprom(dev, eeprom+0xc0);
532		break;
533	}
534
535	switch (dev->board) {
536	case CX23885_BOARD_DVICO_FUSIONHDTV_7_DUAL_EXP:
537		ts2->gen_ctrl_val  = 0xc; /* Serial bus + punctured clock */
538		ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
539		ts2->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
540		/* break omitted intentionally */
541	case CX23885_BOARD_DVICO_FUSIONHDTV_5_EXP:
542		ts1->gen_ctrl_val  = 0xc; /* Serial bus + punctured clock */
543		ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
544		ts1->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
545		break;
546	case CX23885_BOARD_HAUPPAUGE_HVR1800:
547		/* Defaults for VID B - Analog encoder */
548		/* DREQ_POL, SMODE, PUNC_CLK, MCLK_POL Serial bus + punc clk */
549		ts1->gen_ctrl_val    = 0x10e;
550		ts1->ts_clk_en_val   = 0x1; /* Enable TS_CLK */
551		ts1->src_sel_val     = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
552
553		/* APB_TSVALERR_POL (active low)*/
554		ts1->vld_misc_val    = 0x2000;
555		ts1->hw_sop_ctrl_val = (0x47 << 16 | 188 << 4 | 0xc);
556
557		/* Defaults for VID C */
558		ts2->gen_ctrl_val  = 0xc; /* Serial bus + punctured clock */
559		ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
560		ts2->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
561		break;
562	case CX23885_BOARD_HAUPPAUGE_HVR1250:
563	case CX23885_BOARD_HAUPPAUGE_HVR1500:
564	case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
565	case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
566	case CX23885_BOARD_HAUPPAUGE_HVR1200:
567	case CX23885_BOARD_HAUPPAUGE_HVR1700:
568	case CX23885_BOARD_HAUPPAUGE_HVR1400:
569	default:
570		ts2->gen_ctrl_val  = 0xc; /* Serial bus + punctured clock */
571		ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
572		ts2->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
573	}
574
575	/* Certain boards support analog, or require the avcore to be
576	 * loaded, ensure this happens.
577	 */
578	switch (dev->board) {
579	case CX23885_BOARD_HAUPPAUGE_HVR1800:
580	case CX23885_BOARD_HAUPPAUGE_HVR1800lp:
581	case CX23885_BOARD_HAUPPAUGE_HVR1700:
582		request_module("cx25840");
583		break;
584	}
585}
586
587/* ------------------------------------------------------------------ */
588
589/*
590 * Local variables:
591 * c-basic-offset: 8
592 * End:
593 * kate: eol "unix"; indent-width 3; remove-trailing-space on; replace-trailing-space-save on; tab-width 8; replace-tabs off; space-indent off; mixed-indent off
594 */
595