799 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 cx231xx-pcb-config.c - driver for Conexant4 Cx23100/101/102 USB video capture devices5 6 Copyright (C) 2008 <srinivasa.deevi at conexant dot com>7 8 */9 10#include "cx231xx.h"11#include "cx231xx-conf-reg.h"12 13static unsigned int pcb_debug;14module_param(pcb_debug, int, 0644);15MODULE_PARM_DESC(pcb_debug, "enable pcb config debug messages [video]");16 17/******************************************************************************/18 19static 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 645int 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 which661 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