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