linux/drivers/media/usb/cx231xx/cx231xx-pcb-cfg.c
<<
>>
Prefs
   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
  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 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