1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 cx231xx-pcb-config.c - driver for Conexant 4 Cx23100/101/102 USB video capture devices 5 6 Copyright (C) 2008 <srinivasa.deevi at conexant dot com> 7 8 */ 9 10 #include "cx231xx.h" 11 #include "cx231xx-conf-reg.h" 12 13 static unsigned int pcb_debug; 14 module_param(pcb_debug, int, 0644); 15 MODULE_PARM_DESC(pcb_debug, "enable pcb config debug messages [video]"); 16 17 /******************************************************************************/ 18 19 static struct pcb_config cx231xx_Scenario[] = { 20 { 21 INDEX_SELFPOWER_DIGITAL_ONLY, /* index */ 22 USB_SELF_POWER, /* power_type */ 23 0, /* speed , not decide yet */ 24 MOD_DIGITAL, /* mode */ 25 SOURCE_TS_BDA, /* ts1_source, digital tv only */ 26 NOT_SUPPORTED, /* ts2_source */ 27 NOT_SUPPORTED, /* analog source */ 28 29 0, /* digital_index */ 30 0, /* analog index */ 31 0, /* dif_index */ 32 0, /* external_index */ 33 34 1, /* only one configuration */ 35 { 36 { 37 0, /* config index */ 38 { 39 0, /* interrupt ep index */ 40 1, /* ts1 index */ 41 NOT_SUPPORTED, /* TS2 index */ 42 NOT_SUPPORTED, /* AUDIO */ 43 NOT_SUPPORTED, /* VIDEO */ 44 NOT_SUPPORTED, /* VANC */ 45 NOT_SUPPORTED, /* HANC */ 46 NOT_SUPPORTED /* ir_index */ 47 } 48 , 49 } 50 , 51 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 52 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 53 NOT_SUPPORTED} 54 } 55 , 56 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 57 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 58 NOT_SUPPORTED} 59 } 60 } 61 , 62 /* full-speed config */ 63 { 64 { 65 0, /* config index */ 66 { 67 0, /* interrupt ep index */ 68 1, /* ts1 index */ 69 NOT_SUPPORTED, /* TS2 index */ 70 NOT_SUPPORTED, /* AUDIO */ 71 NOT_SUPPORTED, /* VIDEO */ 72 NOT_SUPPORTED, /* VANC */ 73 NOT_SUPPORTED, /* HANC */ 74 NOT_SUPPORTED /* ir_index */ 75 } 76 } 77 , 78 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 79 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 80 NOT_SUPPORTED} 81 } 82 , 83 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 84 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 85 NOT_SUPPORTED} 86 } 87 } 88 } 89 , 90 91 { 92 INDEX_SELFPOWER_DUAL_DIGITAL, /* index */ 93 USB_SELF_POWER, /* power_type */ 94 0, /* speed , not decide yet */ 95 MOD_DIGITAL, /* mode */ 96 SOURCE_TS_BDA, /* ts1_source, digital tv only */ 97 0, /* ts2_source,need update from register */ 98 NOT_SUPPORTED, /* analog source */ 99 0, /* digital_index */ 100 0, /* analog index */ 101 0, /* dif_index */ 102 0, /* external_index */ 103 104 1, /* only one configuration */ 105 { 106 { 107 0, /* config index */ 108 { 109 0, /* interrupt ep index */ 110 1, /* ts1 index */ 111 2, /* TS2 index */ 112 NOT_SUPPORTED, /* AUDIO */ 113 NOT_SUPPORTED, /* VIDEO */ 114 NOT_SUPPORTED, /* VANC */ 115 NOT_SUPPORTED, /* HANC */ 116 NOT_SUPPORTED /* ir_index */ 117 } 118 } 119 , 120 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 121 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 122 NOT_SUPPORTED} 123 } 124 , 125 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 126 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 127 NOT_SUPPORTED} 128 } 129 } 130 , 131 /* full-speed */ 132 { 133 { 134 0, /* config index */ 135 { 136 0, /* interrupt ep index */ 137 1, /* ts1 index */ 138 2, /* TS2 index */ 139 NOT_SUPPORTED, /* AUDIO */ 140 NOT_SUPPORTED, /* VIDEO */ 141 NOT_SUPPORTED, /* VANC */ 142 NOT_SUPPORTED, /* HANC */ 143 NOT_SUPPORTED /* ir_index */ 144 } 145 } 146 , 147 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 148 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 149 NOT_SUPPORTED} 150 } 151 , 152 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 153 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 154 NOT_SUPPORTED} 155 } 156 } 157 } 158 , 159 160 { 161 INDEX_SELFPOWER_ANALOG_ONLY, /* index */ 162 USB_SELF_POWER, /* power_type */ 163 0, /* speed , not decide yet */ 164 MOD_ANALOG | MOD_DIF | MOD_EXTERNAL, /* mode ,analog tv only */ 165 NOT_SUPPORTED, /* ts1_source, NOT SUPPORT */ 166 NOT_SUPPORTED, /* ts2_source,NOT SUPPORT */ 167 0, /* analog source, need update */ 168 169 0, /* digital_index */ 170 0, /* analog index */ 171 0, /* dif_index */ 172 0, /* external_index */ 173 174 1, /* only one configuration */ 175 { 176 { 177 0, /* config index */ 178 { 179 0, /* interrupt ep index */ 180 NOT_SUPPORTED, /* ts1 index */ 181 NOT_SUPPORTED, /* TS2 index */ 182 1, /* AUDIO */ 183 2, /* VIDEO */ 184 3, /* VANC */ 185 4, /* HANC */ 186 NOT_SUPPORTED /* ir_index */ 187 } 188 } 189 , 190 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 191 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 192 NOT_SUPPORTED} 193 } 194 , 195 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 196 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 197 NOT_SUPPORTED} 198 } 199 } 200 , 201 /* full-speed */ 202 { 203 { 204 0, /* config index */ 205 { 206 0, /* interrupt ep index */ 207 NOT_SUPPORTED, /* ts1 index */ 208 NOT_SUPPORTED, /* TS2 index */ 209 1, /* AUDIO */ 210 2, /* VIDEO */ 211 NOT_SUPPORTED, /* VANC */ 212 NOT_SUPPORTED, /* HANC */ 213 NOT_SUPPORTED /* ir_index */ 214 } 215 } 216 , 217 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 218 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 219 NOT_SUPPORTED} 220 } 221 , 222 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 223 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 224 NOT_SUPPORTED} 225 } 226 } 227 } 228 , 229 230 { 231 INDEX_SELFPOWER_DUAL, /* index */ 232 USB_SELF_POWER, /* power_type */ 233 0, /* speed , not decide yet */ 234 /* mode ,analog tv and digital path */ 235 MOD_ANALOG | MOD_DIF | MOD_DIGITAL | MOD_EXTERNAL, 236 0, /* ts1_source,will update in register */ 237 NOT_SUPPORTED, /* ts2_source,NOT SUPPORT */ 238 0, /* analog source need update */ 239 0, /* digital_index */ 240 0, /* analog index */ 241 0, /* dif_index */ 242 0, /* external_index */ 243 1, /* only one configuration */ 244 { 245 { 246 0, /* config index */ 247 { 248 0, /* interrupt ep index */ 249 1, /* ts1 index */ 250 NOT_SUPPORTED, /* TS2 index */ 251 2, /* AUDIO */ 252 3, /* VIDEO */ 253 4, /* VANC */ 254 5, /* HANC */ 255 NOT_SUPPORTED /* ir_index */ 256 } 257 } 258 , 259 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 260 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 261 NOT_SUPPORTED} 262 } 263 , 264 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 265 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 266 NOT_SUPPORTED} 267 } 268 } 269 , 270 /* full-speed */ 271 { 272 { 273 0, /* config index */ 274 { 275 0, /* interrupt ep index */ 276 1, /* ts1 index */ 277 NOT_SUPPORTED, /* TS2 index */ 278 2, /* AUDIO */ 279 3, /* VIDEO */ 280 NOT_SUPPORTED, /* VANC */ 281 NOT_SUPPORTED, /* HANC */ 282 NOT_SUPPORTED /* ir_index */ 283 } 284 } 285 , 286 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 287 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 288 NOT_SUPPORTED} 289 } 290 , 291 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 292 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 293 NOT_SUPPORTED} 294 } 295 } 296 } 297 , 298 299 { 300 INDEX_SELFPOWER_TRIPLE, /* index */ 301 USB_SELF_POWER, /* power_type */ 302 0, /* speed , not decide yet */ 303 /* mode ,analog tv and digital path */ 304 MOD_ANALOG | MOD_DIF | MOD_DIGITAL | MOD_EXTERNAL, 305 0, /* ts1_source, update in register */ 306 0, /* ts2_source,update in register */ 307 0, /* analog source, need update */ 308 309 0, /* digital_index */ 310 0, /* analog index */ 311 0, /* dif_index */ 312 0, /* external_index */ 313 1, /* only one configuration */ 314 { 315 { 316 0, /* config index */ 317 { 318 0, /* interrupt ep index */ 319 1, /* ts1 index */ 320 2, /* TS2 index */ 321 3, /* AUDIO */ 322 4, /* VIDEO */ 323 5, /* VANC */ 324 6, /* HANC */ 325 NOT_SUPPORTED /* ir_index */ 326 } 327 } 328 , 329 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 330 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 331 NOT_SUPPORTED} 332 } 333 , 334 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 335 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 336 NOT_SUPPORTED} 337 } 338 } 339 , 340 /* full-speed */ 341 { 342 { 343 0, /* config index */ 344 { 345 0, /* interrupt ep index */ 346 1, /* ts1 index */ 347 2, /* TS2 index */ 348 3, /* AUDIO */ 349 4, /* VIDEO */ 350 NOT_SUPPORTED, /* VANC */ 351 NOT_SUPPORTED, /* HANC */ 352 NOT_SUPPORTED /* ir_index */ 353 } 354 } 355 , 356 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 357 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 358 NOT_SUPPORTED} 359 } 360 , 361 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 362 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 363 NOT_SUPPORTED} 364 } 365 } 366 } 367 , 368 369 { 370 INDEX_SELFPOWER_COMPRESSOR, /* index */ 371 USB_SELF_POWER, /* power_type */ 372 0, /* speed , not decide yet */ 373 /* mode ,analog tv AND DIGITAL path */ 374 MOD_ANALOG | MOD_DIF | MOD_DIGITAL | MOD_EXTERNAL, 375 NOT_SUPPORTED, /* ts1_source, disable */ 376 SOURCE_TS_BDA, /* ts2_source */ 377 0, /* analog source,need update */ 378 0, /* digital_index */ 379 0, /* analog index */ 380 0, /* dif_index */ 381 0, /* external_index */ 382 1, /* only one configuration */ 383 { 384 { 385 0, /* config index */ 386 { 387 0, /* interrupt ep index */ 388 NOT_SUPPORTED, /* ts1 index */ 389 1, /* TS2 index */ 390 2, /* AUDIO */ 391 3, /* VIDEO */ 392 4, /* VANC */ 393 5, /* HANC */ 394 NOT_SUPPORTED /* ir_index */ 395 } 396 } 397 , 398 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 399 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 400 NOT_SUPPORTED} 401 } 402 , 403 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 404 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 405 NOT_SUPPORTED} 406 } 407 } 408 , 409 /* full-speed */ 410 { 411 { 412 0, /* config index */ 413 { 414 0, /* interrupt ep index */ 415 NOT_SUPPORTED, /* ts1 index */ 416 1, /* TS2 index */ 417 2, /* AUDIO */ 418 3, /* VIDEO */ 419 NOT_SUPPORTED, /* VANC */ 420 NOT_SUPPORTED, /* HANC */ 421 NOT_SUPPORTED /* ir_index */ 422 } 423 } 424 , 425 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 426 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 427 NOT_SUPPORTED} 428 } 429 , 430 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 431 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 432 NOT_SUPPORTED} 433 } 434 } 435 } 436 , 437 438 { 439 INDEX_BUSPOWER_DIGITAL_ONLY, /* index */ 440 USB_BUS_POWER, /* power_type */ 441 0, /* speed , not decide yet */ 442 MOD_DIGITAL, /* mode ,analog tv AND DIGITAL path */ 443 SOURCE_TS_BDA, /* ts1_source, disable */ 444 NOT_SUPPORTED, /* ts2_source */ 445 NOT_SUPPORTED, /* analog source */ 446 447 0, /* digital_index */ 448 0, /* analog index */ 449 0, /* dif_index */ 450 0, /* external_index */ 451 452 1, /* only one configuration */ 453 { 454 { 455 0, /* config index */ 456 { 457 0, /* interrupt ep index = 2 */ 458 1, /* ts1 index */ 459 NOT_SUPPORTED, /* TS2 index */ 460 NOT_SUPPORTED, /* AUDIO */ 461 NOT_SUPPORTED, /* VIDEO */ 462 NOT_SUPPORTED, /* VANC */ 463 NOT_SUPPORTED, /* HANC */ 464 NOT_SUPPORTED /* ir_index */ 465 } 466 } 467 , 468 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 469 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 470 NOT_SUPPORTED} 471 } 472 , 473 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 474 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 475 NOT_SUPPORTED} 476 } 477 } 478 , 479 /* full-speed */ 480 { 481 { 482 0, /* config index */ 483 { 484 0, /* interrupt ep index = 2 */ 485 1, /* ts1 index */ 486 NOT_SUPPORTED, /* TS2 index */ 487 NOT_SUPPORTED, /* AUDIO */ 488 NOT_SUPPORTED, /* VIDEO */ 489 NOT_SUPPORTED, /* VANC */ 490 NOT_SUPPORTED, /* HANC */ 491 NOT_SUPPORTED /* ir_index */ 492 } 493 } 494 , 495 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 496 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 497 NOT_SUPPORTED} 498 } 499 , 500 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 501 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 502 NOT_SUPPORTED} 503 } 504 } 505 } 506 , 507 { 508 INDEX_BUSPOWER_ANALOG_ONLY, /* index */ 509 USB_BUS_POWER, /* power_type */ 510 0, /* speed , not decide yet */ 511 MOD_ANALOG, /* mode ,analog tv AND DIGITAL path */ 512 NOT_SUPPORTED, /* ts1_source, disable */ 513 NOT_SUPPORTED, /* ts2_source */ 514 SOURCE_ANALOG, /* analog source--analog */ 515 0, /* digital_index */ 516 0, /* analog index */ 517 0, /* dif_index */ 518 0, /* external_index */ 519 1, /* only one configuration */ 520 { 521 { 522 0, /* config index */ 523 { 524 0, /* interrupt ep index */ 525 NOT_SUPPORTED, /* ts1 index */ 526 NOT_SUPPORTED, /* TS2 index */ 527 1, /* AUDIO */ 528 2, /* VIDEO */ 529 3, /* VANC */ 530 4, /* HANC */ 531 NOT_SUPPORTED /* ir_index */ 532 } 533 } 534 , 535 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 536 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 537 NOT_SUPPORTED} 538 } 539 , 540 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 541 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 542 NOT_SUPPORTED} 543 } 544 } 545 , 546 { /* full-speed */ 547 { 548 0, /* config index */ 549 { 550 0, /* interrupt ep index */ 551 NOT_SUPPORTED, /* ts1 index */ 552 NOT_SUPPORTED, /* TS2 index */ 553 1, /* AUDIO */ 554 2, /* VIDEO */ 555 NOT_SUPPORTED, /* VANC */ 556 NOT_SUPPORTED, /* HANC */ 557 NOT_SUPPORTED /* ir_index */ 558 } 559 } 560 , 561 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 562 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 563 NOT_SUPPORTED} 564 } 565 , 566 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 567 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 568 NOT_SUPPORTED} 569 } 570 } 571 } 572 , 573 { 574 INDEX_BUSPOWER_DIF_ONLY, /* index */ 575 USB_BUS_POWER, /* power_type */ 576 0, /* speed , not decide yet */ 577 /* mode ,analog tv AND DIGITAL path */ 578 MOD_DIF | MOD_ANALOG | MOD_DIGITAL | MOD_EXTERNAL, 579 SOURCE_TS_BDA, /* ts1_source, disable */ 580 NOT_SUPPORTED, /* ts2_source */ 581 SOURCE_DIF | SOURCE_ANALOG | SOURCE_EXTERNAL, /* analog source, dif */ 582 0, /* digital_index */ 583 0, /* analog index */ 584 0, /* dif_index */ 585 0, /* external_index */ 586 1, /* only one configuration */ 587 { 588 { 589 0, /* config index */ 590 { 591 0, /* interrupt ep index */ 592 1, /* ts1 index */ 593 NOT_SUPPORTED, /* TS2 index */ 594 2, /* AUDIO */ 595 3, /* VIDEO */ 596 4, /* VANC */ 597 5, /* HANC */ 598 NOT_SUPPORTED /* ir_index */ 599 } 600 } 601 , 602 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 603 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 604 NOT_SUPPORTED} 605 } 606 , 607 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 608 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 609 NOT_SUPPORTED} 610 } 611 } 612 , 613 { /* full speed */ 614 { 615 0, /* config index */ 616 { 617 0, /* interrupt ep index */ 618 1, /* ts1 index */ 619 NOT_SUPPORTED, /* TS2 index */ 620 2, /* AUDIO */ 621 3, /* VIDEO */ 622 NOT_SUPPORTED, /* VANC */ 623 NOT_SUPPORTED, /* HANC */ 624 NOT_SUPPORTED /* ir_index */ 625 } 626 } 627 , 628 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 629 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 630 NOT_SUPPORTED} 631 } 632 , 633 {NOT_SUPPORTED, {NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 634 NOT_SUPPORTED, NOT_SUPPORTED, NOT_SUPPORTED, 635 NOT_SUPPORTED} 636 } 637 } 638 } 639 , 640 641 }; 642 643 /*****************************************************************/ 644 645 int initialize_cx231xx(struct cx231xx *dev) 646 { 647 int retval; 648 u32 config_info = 0; 649 struct pcb_config *p_pcb_info; 650 u8 usb_speed = 1; /* from register,1--HS, 0--FS */ 651 u8 data[4] = { 0, 0, 0, 0 }; 652 u32 ts1_source = 0; 653 u32 ts2_source = 0; 654 u32 analog_source = 0; 655 u8 _current_scenario_idx = 0xff; 656 657 ts1_source = SOURCE_TS_BDA; 658 ts2_source = SOURCE_TS_BDA; 659 660 /* read board config register to find out which 661 pcb config it is related to */ 662 retval = cx231xx_read_ctrl_reg(dev, VRT_GET_REGISTER, BOARD_CFG_STAT, 663 data, 4); 664 if (retval < 0) 665 return retval; 666 667 config_info = le32_to_cpu(*((__le32 *)data)); 668 usb_speed = (u8) (config_info & 0x1); 669 670 /* Verify this device belongs to Bus power or Self power device */ 671 if (config_info & BUS_POWER) { /* bus-power */ 672 switch (config_info & BUSPOWER_MASK) { 673 case TS1_PORT | BUS_POWER: 674 cx231xx_Scenario[INDEX_BUSPOWER_DIGITAL_ONLY].speed = 675 usb_speed; 676 p_pcb_info = 677 &cx231xx_Scenario[INDEX_BUSPOWER_DIGITAL_ONLY]; 678 _current_scenario_idx = INDEX_BUSPOWER_DIGITAL_ONLY; 679 break; 680 case AVDEC_ENABLE | BUS_POWER: 681 cx231xx_Scenario[INDEX_BUSPOWER_ANALOG_ONLY].speed = 682 usb_speed; 683 p_pcb_info = 684 &cx231xx_Scenario[INDEX_BUSPOWER_ANALOG_ONLY]; 685 _current_scenario_idx = INDEX_BUSPOWER_ANALOG_ONLY; 686 break; 687 case AVDEC_ENABLE | BUS_POWER | TS1_PORT: 688 cx231xx_Scenario[INDEX_BUSPOWER_DIF_ONLY].speed = 689 usb_speed; 690 p_pcb_info = &cx231xx_Scenario[INDEX_BUSPOWER_DIF_ONLY]; 691 _current_scenario_idx = INDEX_BUSPOWER_DIF_ONLY; 692 break; 693 default: 694 dev_err(dev->dev, 695 "bad config in buspower!!!!\nconfig_info=%x\n", 696 config_info & BUSPOWER_MASK); 697 return 1; 698 } 699 } else { /* self-power */ 700 701 switch (config_info & SELFPOWER_MASK) { 702 case TS1_PORT | SELF_POWER: 703 cx231xx_Scenario[INDEX_SELFPOWER_DIGITAL_ONLY].speed = 704 usb_speed; 705 p_pcb_info = 706 &cx231xx_Scenario[INDEX_SELFPOWER_DIGITAL_ONLY]; 707 _current_scenario_idx = INDEX_SELFPOWER_DIGITAL_ONLY; 708 break; 709 case TS1_TS2_PORT | SELF_POWER: 710 cx231xx_Scenario[INDEX_SELFPOWER_DUAL_DIGITAL].speed = 711 usb_speed; 712 cx231xx_Scenario[INDEX_SELFPOWER_DUAL_DIGITAL]. 713 ts2_source = ts2_source; 714 p_pcb_info = 715 &cx231xx_Scenario[INDEX_SELFPOWER_DUAL_DIGITAL]; 716 _current_scenario_idx = INDEX_SELFPOWER_DUAL_DIGITAL; 717 break; 718 case AVDEC_ENABLE | SELF_POWER: 719 cx231xx_Scenario[INDEX_SELFPOWER_ANALOG_ONLY].speed = 720 usb_speed; 721 cx231xx_Scenario[INDEX_SELFPOWER_ANALOG_ONLY]. 722 analog_source = analog_source; 723 p_pcb_info = 724 &cx231xx_Scenario[INDEX_SELFPOWER_ANALOG_ONLY]; 725 _current_scenario_idx = INDEX_SELFPOWER_ANALOG_ONLY; 726 break; 727 case AVDEC_ENABLE | TS1_PORT | SELF_POWER: 728 cx231xx_Scenario[INDEX_SELFPOWER_DUAL].speed = 729 usb_speed; 730 cx231xx_Scenario[INDEX_SELFPOWER_DUAL].ts1_source = 731 ts1_source; 732 cx231xx_Scenario[INDEX_SELFPOWER_DUAL].analog_source = 733 analog_source; 734 p_pcb_info = &cx231xx_Scenario[INDEX_SELFPOWER_DUAL]; 735 _current_scenario_idx = INDEX_SELFPOWER_DUAL; 736 break; 737 case AVDEC_ENABLE | TS1_TS2_PORT | SELF_POWER: 738 cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].speed = 739 usb_speed; 740 cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].ts1_source = 741 ts1_source; 742 cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].ts2_source = 743 ts2_source; 744 cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE].analog_source = 745 analog_source; 746 p_pcb_info = &cx231xx_Scenario[INDEX_SELFPOWER_TRIPLE]; 747 _current_scenario_idx = INDEX_SELFPOWER_TRIPLE; 748 break; 749 case AVDEC_ENABLE | TS1VIP_TS2_PORT | SELF_POWER: 750 cx231xx_Scenario[INDEX_SELFPOWER_COMPRESSOR].speed = 751 usb_speed; 752 cx231xx_Scenario[INDEX_SELFPOWER_COMPRESSOR]. 753 analog_source = analog_source; 754 p_pcb_info = 755 &cx231xx_Scenario[INDEX_SELFPOWER_COMPRESSOR]; 756 _current_scenario_idx = INDEX_SELFPOWER_COMPRESSOR; 757 break; 758 default: 759 dev_err(dev->dev, 760 "bad scenario!!!!!\nconfig_info=%x\n", 761 config_info & SELFPOWER_MASK); 762 return -ENODEV; 763 } 764 } 765 766 dev->current_scenario_idx = _current_scenario_idx; 767 768 memcpy(&dev->current_pcb_config, p_pcb_info, 769 sizeof(struct pcb_config)); 770 771 if (pcb_debug) { 772 dev_info(dev->dev, 773 "SC(0x00) register = 0x%x\n", config_info); 774 dev_info(dev->dev, 775 "scenario %d\n", 776 (dev->current_pcb_config.index) + 1); 777 dev_info(dev->dev, 778 "type=%x\n", 779 dev->current_pcb_config.type); 780 dev_info(dev->dev, 781 "mode=%x\n", 782 dev->current_pcb_config.mode); 783 dev_info(dev->dev, 784 "speed=%x\n", 785 dev->current_pcb_config.speed); 786 dev_info(dev->dev, 787 "ts1_source=%x\n", 788 dev->current_pcb_config.ts1_source); 789 dev_info(dev->dev, 790 "ts2_source=%x\n", 791 dev->current_pcb_config.ts2_source); 792 dev_info(dev->dev, 793 "analog_source=%x\n", 794 dev->current_pcb_config.analog_source); 795 } 796 797 return 0; 798 } 799