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