cx231xx-pcb-cfg.c 20 KB

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