tvafe_general.c 94 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454
  1. /******************************Includes************************************/
  2. #include <linux/errno.h>
  3. #include <mach/am_regs.h>
  4. #include "tvin_global.h"
  5. #include "tvafe.h"
  6. #include "tvafe_regs.h"
  7. #include "tvafe_adc.h"
  8. #include "tvafe_cvd.h"
  9. #include "tvafe_general.h"
  10. struct tvafe_adc_cal_s cal_std_value_component={
  11. .a_analog_clamp = 73,
  12. .a_analog_gain = 112,
  13. .a_digital_gain = 975, // 0dB
  14. .a_digital_offset1 = 1,
  15. .a_digital_offset2 = 28,
  16. .b_analog_clamp = 65,
  17. .b_analog_gain = 122,
  18. .b_digital_gain = 899, // 0dB
  19. .b_digital_offset1 = 3,
  20. .b_digital_offset2 = 64,
  21. .c_analog_clamp = 62,
  22. .c_analog_gain = 121,
  23. .c_digital_gain = 899, // 0dB
  24. .c_digital_offset1 = 2,
  25. .c_digital_offset2 = 64,
  26. };
  27. struct tvafe_adc_cal_s cal_std_value_vga={
  28. .a_analog_clamp = 66,
  29. .a_analog_gain = 153,
  30. .a_digital_gain = 1024, // 0dB
  31. .a_digital_offset1 = 0,
  32. .a_digital_offset2 = 0,
  33. .b_analog_clamp = 71,
  34. .b_analog_gain = 162,
  35. .b_digital_gain = 1024, // 0dB
  36. .b_digital_offset1 = 0,
  37. .b_digital_offset2 = 0,
  38. .c_analog_clamp = 65,
  39. .c_analog_gain = 162,
  40. .c_digital_gain = 1024,// 0dB
  41. .c_digital_offset1 = 0,
  42. .c_digital_offset2 = 0,
  43. };
  44. static int threshold_value = 32;
  45. /***************************Global Variables**********************************/
  46. enum tvafe_adc_pin_e tvafe_default_cvbs_out;
  47. const signed short tvafe_comp_hs_patch[TVIN_SIG_FMT_COMP_MAX - TVIN_SIG_FMT_VGA_MAX - 1] =
  48. {
  49. //VGA
  50. #if 0
  51. 0, // TVIN_SIG_FMT_VGA_560X384P_60D147,
  52. 0, // TVIN_SIG_FMT_VGA_640X200P_59D924,
  53. 0, // TVIN_SIG_FMT_VGA_640X350P_85D080,
  54. 0, // TVIN_SIG_FMT_VGA_640X400P_59D940,
  55. 0, // TVIN_SIG_FMT_VGA_640X400P_85D080,
  56. 0, // TVIN_SIG_FMT_VGA_640X400P_59D638,
  57. 0, // TVIN_SIG_FMT_VGA_640X400P_56D416,
  58. 0, // TVIN_SIG_FMT_VGA_640X480P_66D619,
  59. 0, // TVIN_SIG_FMT_VGA_640X480P_66D667, // 10
  60. 0, // TVIN_SIG_FMT_VGA_640X480P_59D940,
  61. 0, // TVIN_SIG_FMT_VGA_640X480P_60D000,
  62. 0, // TVIN_SIG_FMT_VGA_640X480P_72D809,
  63. 0, // TVIN_SIG_FMT_VGA_640X480P_75D000_A,
  64. 0, // TVIN_SIG_FMT_VGA_640X480P_85D008,
  65. 0, // TVIN_SIG_FMT_VGA_640X480P_59D638,
  66. 0, // TVIN_SIG_FMT_VGA_640X480P_75D000_B,
  67. 0, // TVIN_SIG_FMT_VGA_640X870P_75D000,
  68. 0, // TVIN_SIG_FMT_VGA_720X350P_70D086,
  69. 0, // TVIN_SIG_FMT_VGA_720X400P_85D039, // 20
  70. 0, // TVIN_SIG_FMT_VGA_720X400P_70D086,
  71. 0, // TVIN_SIG_FMT_VGA_720X400P_87D849,
  72. 0, // TVIN_SIG_FMT_VGA_720X400P_59D940,
  73. 0, // TVIN_SIG_FMT_VGA_720X480P_59D940,
  74. 0, // TVIN_SIG_FMT_VGA_768X480P_59D896,
  75. 0, // TVIN_SIG_FMT_VGA_800X600P_56D250,
  76. 0, // TVIN_SIG_FMT_VGA_800X600P_60D317,
  77. 0, // TVIN_SIG_FMT_VGA_800X600P_72D188,
  78. 0, // TVIN_SIG_FMT_VGA_800X600P_75D000,
  79. 0, // TVIN_SIG_FMT_VGA_800X600P_85D061, // 30
  80. 0, // TVIN_SIG_FMT_VGA_832X624P_75D087,
  81. 0, // TVIN_SIG_FMT_VGA_848X480P_84D751,
  82. 0, // TVIN_SIG_FMT_VGA_960X600P_59D635,
  83. 0, // TVIN_SIG_FMT_VGA_1024X768P_59D278,
  84. 0, // TVIN_SIG_FMT_VGA_1024X768P_74D927,
  85. 0, // TVIN_SIG_FMT_VGA_1024X768P_60D004,
  86. 0, // TVIN_SIG_FMT_VGA_1024X768P_70D069,
  87. 0, // TVIN_SIG_FMT_VGA_1024X768P_75D029,
  88. 0, // TVIN_SIG_FMT_VGA_1024X768P_84D997,
  89. 0, // TVIN_SIG_FMT_VGA_1024X768P_60D000, // 40
  90. 0, // TVIN_SIG_FMT_VGA_1024X768P_74D925,
  91. 0, // TVIN_SIG_FMT_VGA_1024X768P_75D020,
  92. 0, // TVIN_SIG_FMT_VGA_1024X768P_70D008,
  93. 0, // TVIN_SIG_FMT_VGA_1024X768P_75D782,
  94. 0, // TVIN_SIG_FMT_VGA_1024X768P_77D069,
  95. 0, // TVIN_SIG_FMT_VGA_1024X768P_71D799,
  96. 0, // TVIN_SIG_FMT_VGA_1024X1024P_60D000,
  97. 0, // TVIN_SIG_FMT_VGA_1152X864P_70D012,
  98. 0, // TVIN_SIG_FMT_VGA_1152X864P_75D000,
  99. 0, // TVIN_SIG_FMT_VGA_1152X864P_84D999, // 50
  100. 0, // TVIN_SIG_FMT_VGA_1152X870P_75D062,
  101. 0, // TVIN_SIG_FMT_VGA_1152X900P_65D950,
  102. 0, // TVIN_SIG_FMT_VGA_1152X900P_66D004,
  103. 0, // TVIN_SIG_FMT_VGA_1152X900P_76D047,
  104. 0, // TVIN_SIG_FMT_VGA_1152X900P_76D149,
  105. 0, // TVIN_SIG_FMT_VGA_1280X720P_59D855,
  106. 0, // TVIN_SIG_FMT_VGA_1280X768P_59D870,
  107. 0, // TVIN_SIG_FMT_VGA_1280X768P_59D995,
  108. 0, // TVIN_SIG_FMT_VGA_1280X768P_60D100,
  109. 0, // TVIN_SIG_FMT_VGA_1280X768P_74D893, // 60
  110. 0, // TVIN_SIG_FMT_VGA_1280X768P_84D837,
  111. 0, // TVIN_SIG_FMT_VGA_1280X800P_59D810,
  112. 0, // TVIN_SIG_FMT_VGA_1280X960P_60D000,
  113. 0, // TVIN_SIG_FMT_VGA_1280X960P_75D000,
  114. 0, // TVIN_SIG_FMT_VGA_1280X960P_85D002,
  115. 0, // TVIN_SIG_FMT_VGA_1280X1024P_60D020,
  116. 0, // TVIN_SIG_FMT_VGA_1280X1024P_75D025,
  117. 0, // TVIN_SIG_FMT_VGA_1280X1024P_85D024,
  118. 0, // TVIN_SIG_FMT_VGA_1280X1024P_59D979,
  119. 0, // TVIN_SIG_FMT_VGA_1280X1024P_72D005, // 70
  120. 0, // TVIN_SIG_FMT_VGA_1280X1024P_60D002,
  121. 0, // TVIN_SIG_FMT_VGA_1280X1024P_67D003,
  122. 0, // TVIN_SIG_FMT_VGA_1280X1024P_74D112,
  123. 0, // TVIN_SIG_FMT_VGA_1280X1024P_76D179,
  124. 0, // TVIN_SIG_FMT_VGA_1280X1024P_66D718,
  125. 0, // TVIN_SIG_FMT_VGA_1280X1024P_66D677,
  126. 0, // TVIN_SIG_FMT_VGA_1280X1024P_76D107,
  127. 0, // TVIN_SIG_FMT_VGA_1280X1024P_59D996,
  128. 0, // TVIN_SIG_FMT_VGA_1360X768P_59D799,
  129. 0, // TVIN_SIG_FMT_VGA_1440X1080P_60D000, // 80
  130. 0, // TVIN_SIG_FMT_VGA_1600X1200P_60D000,
  131. 0, // TVIN_SIG_FMT_VGA_1600X1200P_65D000,
  132. 0, // TVIN_SIG_FMT_VGA_1600X1200P_70D000,
  133. 0, // TVIN_SIG_FMT_VGA_1680X1080P_60D000,
  134. 0, // TVIN_SIG_FMT_VGA_1920X1080P_59D963,
  135. 0, // TVIN_SIG_FMT_VGA_1920X1080P_60D000,
  136. 0, // TVIN_SIG_FMT_VGA_1920X1200P_59D950,
  137. 0, // TVIN_SIG_FMT_VGA_MAX,
  138. #endif
  139. //Component format
  140. -47, // TVIN_SIG_FMT_COMPONENT_480P_60D000,
  141. 6, // TVIN_SIG_FMT_COMPONENT_480I_59D940,
  142. -47, // TVIN_SIG_FMT_COMPONENT_576P_50D000,
  143. 3, // TVIN_SIG_FMT_COMPONENT_576I_50D000,
  144. -29, // TVIN_SIG_FMT_COMPONENT_720P_59D940,
  145. -29, // TVIN_SIG_FMT_COMPONENT_720P_50D000,
  146. 0, // TVIN_SIG_FMT_COMPONENT_1080P_23D976,
  147. 0, // TVIN_SIG_FMT_COMPONENT_1080P_24D000,
  148. 14, // TVIN_SIG_FMT_COMPONENT_1080P_25D000, // 90
  149. 14, // TVIN_SIG_FMT_COMPONENT_1080P_30D000,
  150. -29, // TVIN_SIG_FMT_COMPONENT_1080P_50D000,
  151. -41, // TVIN_SIG_FMT_COMPONENT_1080P_60D000,
  152. 0, // TVIN_SIG_FMT_COMPONENT_1080I_47D952,
  153. 0, // TVIN_SIG_FMT_COMPONENT_1080I_48D000,
  154. -29, // TVIN_SIG_FMT_COMPONENT_1080I_50D000_A,
  155. 0, // TVIN_SIG_FMT_COMPONENT_1080I_50D000_B,
  156. 0, // TVIN_SIG_FMT_COMPONENT_1080I_50D000_C,
  157. -28, // TVIN_SIG_FMT_COMPONENT_1080I_60D000, //99
  158. };
  159. // *****************************************************************************
  160. // Function:
  161. //
  162. // Params:
  163. //
  164. // Return:
  165. //
  166. // *****************************************************************************
  167. enum tvafe_adc_pin_e tvafe_get_free_pga_pin(struct tvafe_pin_mux_s *pinmux)
  168. {
  169. unsigned int i = 0;
  170. unsigned int flag = 0;
  171. enum tvafe_adc_pin_e ret = TVAFE_ADC_PIN_NULL;
  172. for (i=0; i<TVAFE_SRC_SIG_MAX_NUM; i++)
  173. {
  174. if (pinmux->pin[i] == TVAFE_ADC_PIN_A_PGA_0)
  175. flag |= 0x00000001;
  176. if (pinmux->pin[i] == TVAFE_ADC_PIN_A_PGA_1)
  177. flag |= 0x00000002;
  178. if (pinmux->pin[i] == TVAFE_ADC_PIN_A_PGA_2)
  179. flag |= 0x00000004;
  180. if (pinmux->pin[i] == TVAFE_ADC_PIN_A_PGA_3)
  181. flag |= 0x00000008;
  182. }
  183. if (!(flag&0x00000001))
  184. {
  185. ret = TVAFE_ADC_PIN_A_PGA_0;
  186. }
  187. else if (!(flag&0x00000002))
  188. {
  189. ret = TVAFE_ADC_PIN_A_PGA_1;
  190. }
  191. else if (!(flag&0x00000004))
  192. {
  193. ret = TVAFE_ADC_PIN_A_PGA_2;
  194. }
  195. else if (!(flag&0x00000008))
  196. {
  197. ret = TVAFE_ADC_PIN_A_PGA_3;
  198. }
  199. else // In the worst case, CVBS_OUT links to TV
  200. {
  201. ret = pinmux->pin[CVBS0_Y];
  202. }
  203. return ret;
  204. }
  205. #include <linux/kernel.h>
  206. static inline enum tvafe_adc_ch_e tvafe_pin_adc_muxing(enum tvafe_adc_pin_e pin)
  207. {
  208. enum tvafe_adc_ch_e ret = TVAFE_ADC_CH_NULL;
  209. if ((pin >= TVAFE_ADC_PIN_A_PGA_0) && (pin <= TVAFE_ADC_PIN_A_PGA_3))
  210. {
  211. WRITE_APB_REG_BITS(ADC_REG_06, 1, ENPGA_BIT, ENPGA_WID);
  212. WRITE_APB_REG_BITS(ADC_REG_17, pin-TVAFE_ADC_PIN_A_PGA_0, INMUXA_BIT, INMUXA_WID);
  213. ret = TVAFE_ADC_CH_PGA;
  214. }
  215. else if ((pin >= TVAFE_ADC_PIN_A_0) && (pin <= TVAFE_ADC_PIN_A_3))
  216. {
  217. WRITE_APB_REG_BITS(ADC_REG_06, 0, ENPGA_BIT, ENPGA_WID);
  218. WRITE_APB_REG_BITS(ADC_REG_17, pin-TVAFE_ADC_PIN_A_0, INMUXA_BIT, INMUXA_WID);
  219. ret = TVAFE_ADC_CH_A;
  220. }
  221. else if ((pin >= TVAFE_ADC_PIN_B_0) && (pin <= TVAFE_ADC_PIN_B_4))
  222. {
  223. WRITE_APB_REG_BITS(ADC_REG_17, pin-TVAFE_ADC_PIN_B_0, INMUXB_BIT, INMUXB_WID);
  224. ret = TVAFE_ADC_CH_B;
  225. }
  226. else if ((pin >= TVAFE_ADC_PIN_C_0) && (pin <= TVAFE_ADC_PIN_C_4))
  227. {
  228. WRITE_APB_REG_BITS(ADC_REG_18, pin-TVAFE_ADC_PIN_C_0, INMUXC_BIT, INMUXC_WID);
  229. ret = TVAFE_ADC_CH_C;
  230. }
  231. return ret;
  232. }
  233. /*
  234. 000: abc
  235. 001: acb
  236. 010: bac
  237. 011: bca
  238. 100: cab
  239. 101: cba
  240. */
  241. static inline int tvafe_adc_top_muxing(enum tvafe_adc_ch_e gy,
  242. enum tvafe_adc_ch_e bpb,
  243. enum tvafe_adc_ch_e rpr,
  244. unsigned int s_video_flag)
  245. {
  246. int ret = 0;
  247. switch (gy)
  248. {
  249. case TVAFE_ADC_CH_PGA:
  250. case TVAFE_ADC_CH_A:
  251. switch (bpb)
  252. {
  253. case TVAFE_ADC_CH_B:
  254. // abc => abc
  255. if (s_video_flag || (rpr == TVAFE_ADC_CH_C))
  256. {
  257. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 0, SWT_GY_BCB_RCR_IN_BIT,
  258. SWT_GY_BCB_RCR_IN_WID);
  259. }
  260. else
  261. {
  262. ret = -EFAULT;
  263. }
  264. break;
  265. case TVAFE_ADC_CH_C:
  266. // acb => abc
  267. if (s_video_flag || (rpr == TVAFE_ADC_CH_B))
  268. {
  269. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 1, SWT_GY_BCB_RCR_IN_BIT,
  270. SWT_GY_BCB_RCR_IN_WID);
  271. }
  272. else
  273. {
  274. ret = -EFAULT;
  275. }
  276. break;
  277. default:
  278. ret = -EFAULT;
  279. break;
  280. }
  281. break;
  282. case TVAFE_ADC_CH_B:
  283. switch (bpb)
  284. {
  285. case TVAFE_ADC_CH_PGA:
  286. case TVAFE_ADC_CH_A:
  287. // bac => abc
  288. if (s_video_flag || (rpr == TVAFE_ADC_CH_C))
  289. {
  290. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 2, SWT_GY_BCB_RCR_IN_BIT,
  291. SWT_GY_BCB_RCR_IN_WID);
  292. }
  293. else
  294. {
  295. ret = -EFAULT;
  296. }
  297. break;
  298. case TVAFE_ADC_CH_C:
  299. // bca => abc
  300. if (s_video_flag || (rpr == TVAFE_ADC_CH_PGA)
  301. || (rpr == TVAFE_ADC_CH_A))
  302. {
  303. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 3, SWT_GY_BCB_RCR_IN_BIT,
  304. SWT_GY_BCB_RCR_IN_WID);
  305. }
  306. else
  307. {
  308. ret = -EFAULT;
  309. }
  310. break;
  311. default:
  312. ret = -EFAULT;
  313. break;
  314. }
  315. break;
  316. case TVAFE_ADC_CH_C:
  317. switch (bpb)
  318. {
  319. case TVAFE_ADC_CH_PGA:
  320. case TVAFE_ADC_CH_A:
  321. // cab => abc
  322. if (s_video_flag || (rpr == TVAFE_ADC_CH_B))
  323. {
  324. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 4, SWT_GY_BCB_RCR_IN_BIT,
  325. SWT_GY_BCB_RCR_IN_WID);
  326. }
  327. else
  328. {
  329. ret = -EFAULT;
  330. }
  331. break;
  332. case TVAFE_ADC_CH_B:
  333. // cba => abc
  334. if (s_video_flag || (rpr == TVAFE_ADC_CH_PGA)
  335. || (rpr == TVAFE_ADC_CH_A))
  336. {
  337. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 5, SWT_GY_BCB_RCR_IN_BIT,
  338. SWT_GY_BCB_RCR_IN_WID);
  339. }
  340. else
  341. {
  342. ret = -EFAULT;
  343. }
  344. break;
  345. default:
  346. ret = -EFAULT;
  347. break;
  348. }
  349. break;
  350. default:
  351. ret = -EFAULT;
  352. break;
  353. }
  354. return ret;
  355. }
  356. int tvafe_source_muxing(struct tvafe_info_s *info)
  357. {
  358. int ret = 0;
  359. switch (info->param.port)
  360. {
  361. case TVIN_PORT_CVBS0:
  362. if (tvafe_pin_adc_muxing(info->pinmux->pin[CVBS0_Y]) == TVAFE_ADC_CH_PGA)
  363. {
  364. WRITE_APB_REG_BITS(ADC_REG_20, info->pinmux->pin[CVBS0_Y]-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  365. if (info->pinmux->pin[CVBS0_SOG] >= TVAFE_ADC_PIN_SOG_0)
  366. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[CVBS0_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  367. }
  368. else
  369. {
  370. ret = -EFAULT;
  371. }
  372. break;
  373. case TVIN_PORT_CVBS1:
  374. if (tvafe_pin_adc_muxing(info->pinmux->pin[CVBS1_Y]) == TVAFE_ADC_CH_PGA)
  375. {
  376. WRITE_APB_REG_BITS(ADC_REG_20, info->pinmux->pin[CVBS1_Y]-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  377. if (info->pinmux->pin[CVBS1_SOG] >= TVAFE_ADC_PIN_SOG_0)
  378. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[CVBS1_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  379. }
  380. else
  381. {
  382. ret = -EFAULT;
  383. }
  384. break;
  385. case TVIN_PORT_CVBS2:
  386. if (tvafe_pin_adc_muxing(info->pinmux->pin[CVBS2_Y]) == TVAFE_ADC_CH_PGA)
  387. {
  388. WRITE_APB_REG_BITS(ADC_REG_20, info->pinmux->pin[CVBS2_Y]-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  389. if (info->pinmux->pin[CVBS2_SOG] >= TVAFE_ADC_PIN_SOG_0)
  390. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[CVBS2_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  391. }
  392. else
  393. {
  394. ret = -EFAULT;
  395. }
  396. break;
  397. case TVIN_PORT_CVBS3:
  398. if (tvafe_pin_adc_muxing(info->pinmux->pin[CVBS3_Y]) == TVAFE_ADC_CH_PGA)
  399. {
  400. WRITE_APB_REG_BITS(ADC_REG_20, info->pinmux->pin[CVBS3_Y]-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  401. if (info->pinmux->pin[CVBS3_SOG] >= TVAFE_ADC_PIN_SOG_0)
  402. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[CVBS3_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  403. }
  404. else
  405. {
  406. ret = -EFAULT;
  407. }
  408. break;
  409. case TVIN_PORT_CVBS4:
  410. if (tvafe_pin_adc_muxing(info->pinmux->pin[CVBS4_Y]) == TVAFE_ADC_CH_PGA)
  411. {
  412. WRITE_APB_REG_BITS(ADC_REG_20, info->pinmux->pin[CVBS4_Y]-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  413. if (info->pinmux->pin[CVBS4_SOG] >= TVAFE_ADC_PIN_SOG_0)
  414. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[CVBS5_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  415. }
  416. else
  417. {
  418. ret = -EFAULT;
  419. }
  420. break;
  421. case TVIN_PORT_CVBS5:
  422. if (tvafe_pin_adc_muxing(info->pinmux->pin[CVBS5_Y]) == TVAFE_ADC_CH_PGA)
  423. {
  424. WRITE_APB_REG_BITS(ADC_REG_20, info->pinmux->pin[CVBS5_Y]-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  425. if (info->pinmux->pin[CVBS5_SOG] >= TVAFE_ADC_PIN_SOG_0)
  426. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[CVBS5_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  427. }
  428. else
  429. {
  430. ret = -EFAULT;
  431. }
  432. break;
  433. case TVIN_PORT_CVBS6:
  434. if (tvafe_pin_adc_muxing(info->pinmux->pin[CVBS6_Y]) == TVAFE_ADC_CH_PGA)
  435. {
  436. WRITE_APB_REG_BITS(ADC_REG_20, info->pinmux->pin[CVBS6_Y]-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  437. if (info->pinmux->pin[CVBS6_SOG] >= TVAFE_ADC_PIN_SOG_0)
  438. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[CVBS6_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  439. }
  440. else
  441. {
  442. ret = -EFAULT;
  443. }
  444. break;
  445. case TVIN_PORT_CVBS7:
  446. if (tvafe_pin_adc_muxing(info->pinmux->pin[CVBS7_Y]) == TVAFE_ADC_CH_PGA)
  447. {
  448. WRITE_APB_REG_BITS(ADC_REG_20, info->pinmux->pin[CVBS7_Y]-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  449. if (info->pinmux->pin[CVBS7_SOG] >= TVAFE_ADC_PIN_SOG_0)
  450. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[CVBS7_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  451. }
  452. else
  453. {
  454. ret = -EFAULT;
  455. }
  456. break;
  457. case TVIN_PORT_SVIDEO0:
  458. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO0_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO0_C]), TVAFE_ADC_CH_NULL, 1) == 0)
  459. {
  460. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  461. if (info->pinmux->pin[S_VIDEO0_SOG] >= TVAFE_ADC_PIN_SOG_0)
  462. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[S_VIDEO0_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  463. }
  464. else
  465. {
  466. ret = -EFAULT;
  467. }
  468. break;
  469. case TVIN_PORT_SVIDEO1:
  470. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO1_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO1_C]), TVAFE_ADC_CH_NULL, 1) == 0)
  471. {
  472. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  473. if (info->pinmux->pin[S_VIDEO1_SOG] >= TVAFE_ADC_PIN_SOG_0)
  474. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[S_VIDEO1_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  475. }
  476. else
  477. {
  478. ret = -EFAULT;
  479. }
  480. break;
  481. case TVIN_PORT_SVIDEO2:
  482. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO2_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO2_C]), TVAFE_ADC_CH_NULL, 1) == 0)
  483. {
  484. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  485. if (info->pinmux->pin[S_VIDEO2_SOG] >= TVAFE_ADC_PIN_SOG_0)
  486. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[S_VIDEO2_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  487. }
  488. else
  489. {
  490. ret = -EFAULT;
  491. }
  492. break;
  493. case TVIN_PORT_SVIDEO3:
  494. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO3_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO3_C]), TVAFE_ADC_CH_NULL, 1) == 0)
  495. {
  496. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  497. if (info->pinmux->pin[S_VIDEO3_SOG] >= TVAFE_ADC_PIN_SOG_0)
  498. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[S_VIDEO3_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  499. }
  500. else
  501. {
  502. ret = -EFAULT;
  503. }
  504. break;
  505. case TVIN_PORT_SVIDEO4:
  506. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO4_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO4_C]), TVAFE_ADC_CH_NULL, 1) == 0)
  507. {
  508. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  509. if (info->pinmux->pin[S_VIDEO4_SOG] >= TVAFE_ADC_PIN_SOG_0)
  510. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[S_VIDEO4_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  511. }
  512. else
  513. {
  514. ret = -EFAULT;
  515. }
  516. break;
  517. case TVIN_PORT_SVIDEO5:
  518. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO5_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO5_C]), TVAFE_ADC_CH_NULL, 1) == 0)
  519. {
  520. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  521. if (info->pinmux->pin[S_VIDEO5_SOG] >= TVAFE_ADC_PIN_SOG_0)
  522. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[S_VIDEO5_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  523. }
  524. else
  525. {
  526. ret = -EFAULT;
  527. }
  528. break;
  529. case TVIN_PORT_SVIDEO6:
  530. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO6_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO6_C]), TVAFE_ADC_CH_NULL, 1) == 0)
  531. {
  532. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  533. if (info->pinmux->pin[S_VIDEO6_SOG] >= TVAFE_ADC_PIN_SOG_0)
  534. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[S_VIDEO6_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  535. }
  536. else
  537. {
  538. ret = -EFAULT;
  539. }
  540. break;
  541. case TVIN_PORT_SVIDEO7:
  542. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO7_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[S_VIDEO7_C]), TVAFE_ADC_CH_NULL, 1) == 0)
  543. {
  544. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  545. if (info->pinmux->pin[S_VIDEO7_SOG] >= TVAFE_ADC_PIN_SOG_0)
  546. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[S_VIDEO7_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  547. }
  548. else
  549. {
  550. ret = -EFAULT;
  551. }
  552. break;
  553. case TVIN_PORT_VGA0:
  554. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[VGA0_G]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA0_B]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA0_R]), 0) == 0)
  555. {
  556. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  557. if (info->pinmux->pin[VGA0_SOG] >= TVAFE_ADC_PIN_SOG_0)
  558. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[VGA0_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  559. WRITE_APB_REG_BITS(ADC_REG_39, 0, INSYNCMUXCTRL_BIT, INSYNCMUXCTRL_WID);
  560. }
  561. else
  562. {
  563. ret = -EFAULT;
  564. }
  565. break;
  566. case TVIN_PORT_VGA1:
  567. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[VGA1_G]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA1_B]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA1_R]), 0) == 0)
  568. {
  569. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  570. if (info->pinmux->pin[VGA1_SOG] >= TVAFE_ADC_PIN_SOG_0)
  571. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[VGA1_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  572. WRITE_APB_REG_BITS(ADC_REG_39, 1, INSYNCMUXCTRL_BIT, INSYNCMUXCTRL_WID);
  573. }
  574. else
  575. {
  576. ret = -EFAULT;
  577. }
  578. break;
  579. case TVIN_PORT_VGA2:
  580. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[VGA2_G]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA2_B]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA2_R]), 0) == 0)
  581. {
  582. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  583. if (info->pinmux->pin[VGA2_SOG] >= TVAFE_ADC_PIN_SOG_0)
  584. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[VGA2_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  585. }
  586. else
  587. {
  588. ret = -EFAULT;
  589. }
  590. break;
  591. case TVIN_PORT_VGA3:
  592. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[VGA3_G]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA3_B]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA3_R]), 0) == 0)
  593. {
  594. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  595. if (info->pinmux->pin[VGA3_SOG] >= TVAFE_ADC_PIN_SOG_0)
  596. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[VGA3_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  597. }
  598. else
  599. {
  600. ret = -EFAULT;
  601. }
  602. break;
  603. case TVIN_PORT_VGA4:
  604. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[VGA4_G]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA4_B]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA4_R]), 0) == 0)
  605. {
  606. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  607. if (info->pinmux->pin[VGA4_SOG] >= TVAFE_ADC_PIN_SOG_0)
  608. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[VGA4_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  609. }
  610. else
  611. {
  612. ret = -EFAULT;
  613. }
  614. break;
  615. case TVIN_PORT_VGA5:
  616. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[VGA5_G]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA5_B]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA5_R]), 0) == 0)
  617. {
  618. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  619. if (info->pinmux->pin[VGA5_SOG] >= TVAFE_ADC_PIN_SOG_0)
  620. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[VGA5_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  621. }
  622. else
  623. {
  624. ret = -EFAULT;
  625. }
  626. break;
  627. case TVIN_PORT_VGA6:
  628. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[VGA6_G]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA6_B]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA6_R]), 0) == 0)
  629. {
  630. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  631. if (info->pinmux->pin[VGA6_SOG] >= TVAFE_ADC_PIN_SOG_0)
  632. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[VGA6_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  633. }
  634. else
  635. {
  636. ret = -EFAULT;
  637. }
  638. break;
  639. case TVIN_PORT_VGA7:
  640. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[VGA7_G]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA7_B]), tvafe_pin_adc_muxing(info->pinmux->pin[VGA7_R]), 0) == 0)
  641. {
  642. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  643. if (info->pinmux->pin[VGA7_SOG] >= TVAFE_ADC_PIN_SOG_0)
  644. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[VGA7_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  645. }
  646. else
  647. {
  648. ret = -EFAULT;
  649. }
  650. break;
  651. case TVIN_PORT_COMP0:
  652. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[COMP0_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP0_PB]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP0_PR]), 0) == 0)
  653. {
  654. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  655. if (info->pinmux->pin[COMP0_SOG] >= TVAFE_ADC_PIN_SOG_0)
  656. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[COMP0_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  657. }
  658. else
  659. {
  660. ret = -EFAULT;
  661. }
  662. break;
  663. case TVIN_PORT_COMP1:
  664. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[COMP1_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP1_PB]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP1_PR]), 0) == 0)
  665. {
  666. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  667. if (info->pinmux->pin[COMP1_SOG] >= TVAFE_ADC_PIN_SOG_0)
  668. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[COMP1_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  669. }
  670. else
  671. {
  672. ret = -EFAULT;
  673. }
  674. break;
  675. case TVIN_PORT_COMP2:
  676. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[COMP2_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP2_PB]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP2_PR]), 0) == 0)
  677. {
  678. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  679. if (info->pinmux->pin[COMP2_SOG] >= TVAFE_ADC_PIN_SOG_0)
  680. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[COMP2_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  681. }
  682. else
  683. {
  684. ret = -EFAULT;
  685. }
  686. break;
  687. case TVIN_PORT_COMP3:
  688. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[COMP3_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP3_PB]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP3_PR]), 0) == 0)
  689. {
  690. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  691. if (info->pinmux->pin[COMP3_SOG] >= TVAFE_ADC_PIN_SOG_0)
  692. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[COMP3_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  693. }
  694. else
  695. {
  696. ret = -EFAULT;
  697. }
  698. break;
  699. case TVIN_PORT_COMP4:
  700. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[COMP4_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP4_PB]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP4_PR]), 0) == 0)
  701. {
  702. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  703. if (info->pinmux->pin[COMP4_SOG] >= TVAFE_ADC_PIN_SOG_0)
  704. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[COMP4_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  705. }
  706. else
  707. {
  708. ret = -EFAULT;
  709. }
  710. break;
  711. case TVIN_PORT_COMP5:
  712. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[COMP5_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP5_PB]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP5_PR]), 0) == 0)
  713. {
  714. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  715. if (info->pinmux->pin[COMP5_SOG] >= TVAFE_ADC_PIN_SOG_0)
  716. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[COMP5_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  717. }
  718. else
  719. {
  720. ret = -EFAULT;
  721. }
  722. break;
  723. case TVIN_PORT_COMP6:
  724. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[COMP6_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP6_PB]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP6_PR]), 0) == 0)
  725. {
  726. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  727. if (info->pinmux->pin[COMP6_SOG] >= TVAFE_ADC_PIN_SOG_0)
  728. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[COMP6_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  729. }
  730. else
  731. {
  732. ret = -EFAULT;
  733. }
  734. break;
  735. case TVIN_PORT_COMP7:
  736. if (tvafe_adc_top_muxing(tvafe_pin_adc_muxing(info->pinmux->pin[COMP7_Y]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP7_PB]), tvafe_pin_adc_muxing(info->pinmux->pin[COMP7_PR]), 0) == 0)
  737. {
  738. WRITE_APB_REG_BITS(ADC_REG_20, tvafe_default_cvbs_out-TVAFE_ADC_PIN_A_PGA_0, INMUXBUF_BIT, INMUXBUF_WID);
  739. if (info->pinmux->pin[COMP7_SOG] >= TVAFE_ADC_PIN_SOG_0)
  740. WRITE_APB_REG_BITS(ADC_REG_24, (info->pinmux->pin[COMP7_SOG] - TVAFE_ADC_PIN_SOG_0), INMUXSOG_BIT, INMUXSOG_WID);
  741. }
  742. else
  743. {
  744. ret = -EFAULT;
  745. }
  746. break;
  747. default:
  748. ret = -EFAULT;
  749. break;
  750. }
  751. return ret;
  752. }
  753. void tvafe_vga_set_edid(struct tvafe_vga_edid_s *edid)
  754. {
  755. unsigned int i = 0;
  756. // diable TCON
  757. WRITE_CBUS_REG_BITS(PERIPHS_PIN_MUX_7, 0, 1, 1);
  758. // diable DVIN
  759. WRITE_CBUS_REG_BITS(PERIPHS_PIN_MUX_6, 0, 27, 1);
  760. // DDC_SDA0
  761. WRITE_CBUS_REG_BITS(PERIPHS_PIN_MUX_6, 1, 13, 1);
  762. // DDC_SCL0
  763. WRITE_CBUS_REG_BITS(PERIPHS_PIN_MUX_6, 1, 12, 1);
  764. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 1, EDID_CLK_EN_BIT,EDID_CLK_EN_WID); // VGA_CLK_EN
  765. // APB Bus accessing mode
  766. WRITE_APB_REG(TVFE_EDID_CONFIG, 0x00000000);
  767. WRITE_APB_REG(TVFE_EDID_RAM_ADDR, 0x00000000);
  768. for (i=0; i<256; i++)
  769. WRITE_APB_REG(TVFE_EDID_RAM_WDATA, (unsigned int)edid->value[i]);
  770. // Slave IIC acessing mode, 8-bit standard IIC protocol
  771. WRITE_APB_REG(TVFE_EDID_CONFIG, TVAFE_EDID_CONFIG);
  772. }
  773. void tvafe_vga_get_edid(struct tvafe_vga_edid_s *edid)
  774. {
  775. unsigned int i = 0;
  776. // diable TCON
  777. WRITE_CBUS_REG_BITS(PERIPHS_PIN_MUX_7, 0, 1, 1);
  778. // diable DVIN
  779. WRITE_CBUS_REG_BITS(PERIPHS_PIN_MUX_6, 0, 27, 1);
  780. // DDC_SDA0
  781. WRITE_CBUS_REG_BITS(PERIPHS_PIN_MUX_6, 1, 13, 1);
  782. // DDC_SCL0
  783. WRITE_CBUS_REG_BITS(PERIPHS_PIN_MUX_6, 1, 12, 1);
  784. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 1, EDID_CLK_EN_BIT,EDID_CLK_EN_WID); // VGA_CLK_EN
  785. // APB Bus accessing mode
  786. WRITE_APB_REG(TVFE_EDID_CONFIG, 0x00000000);
  787. WRITE_APB_REG(TVFE_EDID_RAM_ADDR, 0x00000100);
  788. for (i=0; i<256; i++)
  789. edid->value[i] = (unsigned char)(READ_APB_REG_BITS(TVFE_EDID_RAM_RDATA, EDID_RAM_RDATA_BIT, EDID_RAM_RDATA_WID));
  790. // Slave IIC acessing mode, 8-bit standard IIC protocol
  791. WRITE_APB_REG(TVFE_EDID_CONFIG, TVAFE_EDID_CONFIG);
  792. return;
  793. }
  794. ///////////////////TVFE top control////////////////////
  795. const static unsigned int aafilter_ctl[][2] = {
  796. //TVIN_SIG_FMT_NULL = 0,
  797. {0,0},
  798. //VDIN_SIG_FORMAT_VGA_512X384P_60D147,
  799. {
  800. 0x00082222, // TVFE_AAFILTER_CTRL1
  801. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  802. },
  803. //VDIN_SIG_FORMAT_VGA_560X384P_60D147,
  804. {
  805. 0x00082222, // TVFE_AAFILTER_CTRL1
  806. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  807. },
  808. //VDIN_SIG_FORMAT_VGA_640X200P_59D924,
  809. {
  810. 0x00082222, // TVFE_AAFILTER_CTRL1
  811. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  812. },
  813. //VDIN_SIG_FORMAT_VGA_640X350P_85D080,
  814. {
  815. 0x00082222, // TVFE_AAFILTER_CTRL1
  816. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  817. },
  818. //VDIN_SIG_FORMAT_VGA_640X400P_59D940,
  819. {
  820. 0x00082222, // TVFE_AAFILTER_CTRL1
  821. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  822. },
  823. //VDIN_SIG_FORMAT_VGA_640X400P_85D080,
  824. {
  825. 0x00082222, // TVFE_AAFILTER_CTRL1
  826. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  827. },
  828. //VDIN_SIG_FORMAT_VGA_640X400P_59D638,
  829. {
  830. 0x00082222, // TVFE_AAFILTER_CTRL1
  831. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  832. },
  833. //VDIN_SIG_FORMAT_VGA_640X400P_56D416,
  834. {
  835. 0x00082222, // TVFE_AAFILTER_CTRL1
  836. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  837. },
  838. //VDIN_SIG_FORMAT_VGA_640X480I_29D970,
  839. {
  840. 0x00082222, // TVFE_AAFILTER_CTRL1
  841. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  842. },
  843. //VDIN_SIG_FORMAT_VGA_640X480P_66D619,
  844. {
  845. 0x00082222, // TVFE_AAFILTER_CTRL1
  846. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  847. },
  848. //VDIN_SIG_FORMAT_VGA_640X480P_66D667,
  849. {
  850. 0x00082222, // TVFE_AAFILTER_CTRL1
  851. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  852. },
  853. //VDIN_SIG_FORMAT_VGA_640X480P_59D940,
  854. {
  855. 0x00082222, // TVFE_AAFILTER_CTRL1
  856. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  857. },
  858. //VDIN_SIG_FORMAT_VGA_640X480P_60D000,
  859. {
  860. 0x00082222, // TVFE_AAFILTER_CTRL1
  861. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  862. },
  863. //VDIN_SIG_FORMAT_VGA_640X480P_72D809,
  864. {
  865. 0x00082222, // TVFE_AAFILTER_CTRL1
  866. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  867. },
  868. //VDIN_SIG_FORMAT_VGA_640X480P_75D000_A,
  869. {
  870. 0x00082222, // TVFE_AAFILTER_CTRL1
  871. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  872. },
  873. //VDIN_SIG_FORMAT_VGA_640X480P_85D008,
  874. {
  875. 0x00082222, // TVFE_AAFILTER_CTRL1
  876. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  877. },
  878. //VDIN_SIG_FORMAT_VGA_640X480P_59D638,
  879. {
  880. 0x00082222, // TVFE_AAFILTER_CTRL1
  881. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  882. },
  883. //VDIN_SIG_FORMAT_VGA_640X480P_75D000_B,
  884. {
  885. 0x00082222, // TVFE_AAFILTER_CTRL1
  886. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  887. },
  888. //VDIN_SIG_FORMAT_VGA_640X870P_75D000,
  889. {
  890. 0x00082222, // TVFE_AAFILTER_CTRL1
  891. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  892. },
  893. //VDIN_SIG_FORMAT_VGA_720X350P_70D086,
  894. {
  895. 0x00082222, // TVFE_AAFILTER_CTRL1
  896. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  897. },
  898. //VDIN_SIG_FORMAT_VGA_720X400P_85D039,
  899. {
  900. 0x00082222, // TVFE_AAFILTER_CTRL1
  901. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  902. },
  903. //VDIN_SIG_FORMAT_VGA_720X400P_70D086,
  904. {
  905. 0x00082222, // TVFE_AAFILTER_CTRL1
  906. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  907. },
  908. //VDIN_SIG_FORMAT_VGA_720X400P_87D849,
  909. {
  910. 0x00082222, // TVFE_AAFILTER_CTRL1
  911. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  912. },
  913. //VDIN_SIG_FORMAT_VGA_720X400P_59D940,
  914. {
  915. 0x00082222, // TVFE_AAFILTER_CTRL1
  916. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  917. },
  918. //VDIN_SIG_FORMAT_VGA_720X480P_59D940,
  919. {
  920. 0x00082222, // TVFE_AAFILTER_CTRL1
  921. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  922. },
  923. //VDIN_SIG_FORMAT_VGA_752X484I_29D970,
  924. {
  925. 0x00082222, // TVFE_AAFILTER_CTRL1
  926. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  927. },
  928. //VDIN_SIG_FORMAT_VGA_768X574I_25D000,
  929. {
  930. 0x00082222, // TVFE_AAFILTER_CTRL1
  931. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  932. },
  933. //VDIN_SIG_FORMAT_VGA_800X600P_56D250,
  934. {
  935. 0x00082222, // TVFE_AAFILTER_CTRL1
  936. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  937. },
  938. //VDIN_SIG_FORMAT_VGA_800X600P_60D317,
  939. {
  940. 0x00082222, // TVFE_AAFILTER_CTRL1
  941. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  942. },
  943. //VDIN_SIG_FORMAT_VGA_800X600P_72D188,
  944. {
  945. 0x00082222, // TVFE_AAFILTER_CTRL1
  946. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  947. },
  948. //VDIN_SIG_FORMAT_VGA_800X600P_75D000,
  949. {
  950. 0x00082222, // TVFE_AAFILTER_CTRL1
  951. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  952. },
  953. //VDIN_SIG_FORMAT_VGA_800X600P_85D061,
  954. {
  955. 0x00082222, // TVFE_AAFILTER_CTRL1
  956. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  957. },
  958. //VDIN_SIG_FORMAT_VGA_832X624P_75D087,
  959. {
  960. 0x00082222, // TVFE_AAFILTER_CTRL1
  961. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  962. },
  963. //VDIN_SIG_FORMAT_VGA_848X480P_84D751,
  964. {
  965. 0x00082222, // TVFE_AAFILTER_CTRL1
  966. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  967. },
  968. //VDIN_SIG_FORMAT_VGA_1024X768P_59D278,
  969. {
  970. 0x00082222, // TVFE_AAFILTER_CTRL1
  971. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  972. },
  973. //VDIN_SIG_FORMAT_VGA_1024X768P_74D927,
  974. {
  975. 0x00082222, // TVFE_AAFILTER_CTRL1
  976. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  977. },
  978. //VDIN_SIG_FORMAT_VGA_1024X768I_43D479,
  979. {
  980. 0x00082222, // TVFE_AAFILTER_CTRL1
  981. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  982. },
  983. //VDIN_SIG_FORMAT_VGA_1024X768P_60D004,
  984. {
  985. 0x00082222, // TVFE_AAFILTER_CTRL1
  986. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  987. },
  988. //VDIN_SIG_FORMAT_VGA_1024X768P_70D069,
  989. {
  990. 0x00082222, // TVFE_AAFILTER_CTRL1
  991. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  992. },
  993. //VDIN_SIG_FORMAT_VGA_1024X768P_75D029,
  994. {
  995. 0x00082222, // TVFE_AAFILTER_CTRL1
  996. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  997. },
  998. //VDIN_SIG_FORMAT_VGA_1024X768P_84D997,
  999. {
  1000. 0x00082222, // TVFE_AAFILTER_CTRL1
  1001. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1002. },
  1003. //VDIN_SIG_FORMAT_VGA_1024X768P_60D000,
  1004. {
  1005. 0x00082222, // TVFE_AAFILTER_CTRL1
  1006. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1007. },
  1008. //VDIN_SIG_FORMAT_VGA_1024X768P_74D925,
  1009. {
  1010. 0x00082222, // TVFE_AAFILTER_CTRL1
  1011. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1012. },
  1013. //VDIN_SIG_FORMAT_VGA_1024X768P_75D020,
  1014. {
  1015. 0x00082222, // TVFE_AAFILTER_CTRL1
  1016. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1017. },
  1018. //VDIN_SIG_FORMAT_VGA_1024X768P_70D008,
  1019. {
  1020. 0x00082222, // TVFE_AAFILTER_CTRL1
  1021. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1022. },
  1023. //VDIN_SIG_FORMAT_VGA_1024X768P_75D782,
  1024. {
  1025. 0x00082222, // TVFE_AAFILTER_CTRL1
  1026. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1027. },
  1028. //VDIN_SIG_FORMAT_VGA_1024X768P_77D069,
  1029. {
  1030. 0x00082222, // TVFE_AAFILTER_CTRL1
  1031. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1032. },
  1033. //VDIN_SIG_FORMAT_VGA_1024X768P_71D799,
  1034. {
  1035. 0x00082222, // TVFE_AAFILTER_CTRL1
  1036. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1037. },
  1038. //VDIN_SIG_FORMAT_VGA_1024X1024P_60D000,
  1039. {
  1040. 0x00082222, // TVFE_AAFILTER_CTRL1
  1041. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1042. },
  1043. //VDIN_SIG_FORMAT_VGA_1053X754I_43D453,
  1044. {
  1045. 0x00082222, // TVFE_AAFILTER_CTRL1
  1046. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1047. },
  1048. //VDIN_SIG_FORMAT_VGA_1056X768I_43D470,
  1049. {
  1050. 0x00082222, // TVFE_AAFILTER_CTRL1
  1051. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1052. },
  1053. //VDIN_SIG_FORMAT_VGA_1120X750I_40D021,
  1054. {
  1055. 0x00082222, // TVFE_AAFILTER_CTRL1
  1056. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1057. },
  1058. //VDIN_SIG_FORMAT_VGA_1152X864P_70D012,
  1059. {
  1060. 0x00082222, // TVFE_AAFILTER_CTRL1
  1061. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1062. },
  1063. //VDIN_SIG_FORMAT_VGA_1152X864P_75D000,
  1064. {
  1065. 0x00082222, // TVFE_AAFILTER_CTRL1
  1066. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1067. },
  1068. //VDIN_SIG_FORMAT_VGA_1152X864P_84D999,
  1069. {
  1070. 0x00082222, // TVFE_AAFILTER_CTRL1
  1071. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1072. },
  1073. //VDIN_SIG_FORMAT_VGA_1152X870P_75D062,
  1074. {
  1075. 0x00082222, // TVFE_AAFILTER_CTRL1
  1076. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1077. },
  1078. //VDIN_SIG_FORMAT_VGA_1152X900P_65D950,
  1079. {
  1080. 0x00082222, // TVFE_AAFILTER_CTRL1
  1081. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1082. },
  1083. //VDIN_SIG_FORMAT_VGA_1152X900P_66D004,
  1084. {
  1085. 0x00082222, // TVFE_AAFILTER_CTRL1
  1086. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1087. },
  1088. //VDIN_SIG_FORMAT_VGA_1152X900P_76D047,
  1089. {
  1090. 0x00082222, // TVFE_AAFILTER_CTRL1
  1091. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1092. },
  1093. //VDIN_SIG_FORMAT_VGA_1152X900P_76D149,
  1094. {
  1095. 0x00082222, // TVFE_AAFILTER_CTRL1
  1096. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1097. },
  1098. //VDIN_SIG_FORMAT_VGA_1244X842I_30D000,
  1099. {
  1100. 0x00082222, // TVFE_AAFILTER_CTRL1
  1101. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1102. },
  1103. //VDIN_SIG_FORMAT_VGA_1280X768P_59D995,
  1104. {
  1105. 0x00082222, // TVFE_AAFILTER_CTRL1
  1106. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1107. },
  1108. //VDIN_SIG_FORMAT_VGA_1280X768P_74D893,
  1109. {
  1110. 0x00082222, // TVFE_AAFILTER_CTRL1
  1111. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1112. },
  1113. //VDIN_SIG_FORMAT_VGA_1280X768P_84D837,
  1114. {
  1115. 0x00082222, // TVFE_AAFILTER_CTRL1
  1116. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1117. },
  1118. //VDIN_SIG_FORMAT_VGA_1280X960P_60D000,
  1119. {
  1120. 0x00082222, // TVFE_AAFILTER_CTRL1
  1121. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1122. },
  1123. //VDIN_SIG_FORMAT_VGA_1280X960P_75D000,
  1124. {
  1125. 0x00082222, // TVFE_AAFILTER_CTRL1
  1126. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1127. },
  1128. //VDIN_SIG_FORMAT_VGA_1280X960P_85D002,
  1129. {
  1130. 0x00082222, // TVFE_AAFILTER_CTRL1
  1131. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1132. },
  1133. //VDIN_SIG_FORMAT_VGA_1280X1024I_43D436,
  1134. {
  1135. 0x00082222, // TVFE_AAFILTER_CTRL1
  1136. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1137. },
  1138. //VDIN_SIG_FORMAT_VGA_1280X1024P_60D020,
  1139. {
  1140. 0x00082222, // TVFE_AAFILTER_CTRL1
  1141. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1142. },
  1143. //VDIN_SIG_FORMAT_VGA_1280X1024P_75D025,
  1144. {
  1145. 0x00082222, // TVFE_AAFILTER_CTRL1
  1146. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1147. },
  1148. //VDIN_SIG_FORMAT_VGA_1280X1024P_85D024,
  1149. {
  1150. 0x00082222, // TVFE_AAFILTER_CTRL1
  1151. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1152. },
  1153. //VDIN_SIG_FORMAT_VGA_1280X1024P_59D979,
  1154. {
  1155. 0x00082222, // TVFE_AAFILTER_CTRL1
  1156. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1157. },
  1158. //VDIN_SIG_FORMAT_VGA_1280X1024P_72D005,
  1159. {
  1160. 0x00082222, // TVFE_AAFILTER_CTRL1
  1161. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1162. },
  1163. //VDIN_SIG_FORMAT_VGA_1280X1024P_60D002,
  1164. {
  1165. 0x00082222, // TVFE_AAFILTER_CTRL1
  1166. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1167. },
  1168. //VDIN_SIG_FORMAT_VGA_1280X1024P_67D003,
  1169. {
  1170. 0x00082222, // TVFE_AAFILTER_CTRL1
  1171. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1172. },
  1173. //VDIN_SIG_FORMAT_VGA_1280X1024P_74D112,
  1174. {
  1175. 0x00082222, // TVFE_AAFILTER_CTRL1
  1176. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1177. },
  1178. //VDIN_SIG_FORMAT_VGA_1280X1024P_76D179,
  1179. {
  1180. 0x00082222, // TVFE_AAFILTER_CTRL1
  1181. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1182. },
  1183. //VDIN_SIG_FORMAT_VGA_1280X1024P_66D718,
  1184. {
  1185. 0x00082222, // TVFE_AAFILTER_CTRL1
  1186. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1187. },
  1188. //VDIN_SIG_FORMAT_VGA_1280X1024P_66D677,
  1189. {
  1190. 0x00082222, // TVFE_AAFILTER_CTRL1
  1191. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1192. },
  1193. //VDIN_SIG_FORMAT_VGA_1280X1024P_76D107,
  1194. {
  1195. 0x00082222, // TVFE_AAFILTER_CTRL1
  1196. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1197. },
  1198. //VDIN_SIG_FORMAT_VGA_1280X1024P_59D996,
  1199. {
  1200. 0x00082222, // TVFE_AAFILTER_CTRL1
  1201. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1202. },
  1203. //VDIN_SIG_FORMAT_VGA_1360X768P_59D799,
  1204. {
  1205. 0x00082222, // TVFE_AAFILTER_CTRL1
  1206. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1207. },
  1208. //VDIN_SIG_FORMAT_VGA_1360X1024I_51D476,
  1209. {
  1210. 0x00082222, // TVFE_AAFILTER_CTRL1
  1211. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1212. },
  1213. //VDIN_SIG_FORMAT_VGA_1440X1080P_60D000,
  1214. {
  1215. 0x00082222, // TVFE_AAFILTER_CTRL1
  1216. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1217. },
  1218. //VDIN_SIG_FORMAT_VGA_1600X1200I_48D040,
  1219. {
  1220. 0x00082222, // TVFE_AAFILTER_CTRL1
  1221. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1222. },
  1223. //VDIN_SIG_FORMAT_VGA_1600X1200P_60D000,
  1224. {
  1225. 0x00082222, // TVFE_AAFILTER_CTRL1
  1226. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1227. },
  1228. //VDIN_SIG_FORMAT_VGA_1600X1200P_65D000,
  1229. {
  1230. 0x00082222, // TVFE_AAFILTER_CTRL1
  1231. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1232. },
  1233. //VDIN_SIG_FORMAT_VGA_1600X1200P_70D000,
  1234. {
  1235. 0x00082222, // TVFE_AAFILTER_CTRL1
  1236. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1237. },
  1238. //VDIN_SIG_FORMAT_VGA_1600X1200P_75D000,
  1239. {
  1240. 0x00082222, // TVFE_AAFILTER_CTRL1
  1241. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1242. },
  1243. //VDIN_SIG_FORMAT_VGA_1600X1200P_80D000,
  1244. {
  1245. 0x00082222, // TVFE_AAFILTER_CTRL1
  1246. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1247. },
  1248. //VDIN_SIG_FORMAT_VGA_1600X1200P_85D000,
  1249. {
  1250. 0x00082222, // TVFE_AAFILTER_CTRL1
  1251. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1252. },
  1253. //VDIN_SIG_FORMAT_VGA_1600X1280P_66D931,
  1254. {
  1255. 0x00082222, // TVFE_AAFILTER_CTRL1
  1256. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1257. },
  1258. //VDIN_SIG_FORMAT_VGA_1680X1080P_60D000,
  1259. {
  1260. 0x00082222, // TVFE_AAFILTER_CTRL1
  1261. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1262. },
  1263. //VDIN_SIG_FORMAT_VGA_1792X1344P_60D000,
  1264. {
  1265. 0x00082222, // TVFE_AAFILTER_CTRL1
  1266. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1267. },
  1268. //VDIN_SIG_FORMAT_VGA_1792X1344P_74D997,
  1269. {
  1270. 0x00082222, // TVFE_AAFILTER_CTRL1
  1271. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1272. },
  1273. //VDIN_SIG_FORMAT_VGA_1856X1392P_59D995,
  1274. {
  1275. 0x00082222, // TVFE_AAFILTER_CTRL1
  1276. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1277. },
  1278. //VDIN_SIG_FORMAT_VGA_1856X1392P_75D000,
  1279. {
  1280. 0x00082222, // TVFE_AAFILTER_CTRL1
  1281. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1282. },
  1283. //VDIN_SIG_FORMAT_VGA_1868X1200P_75D000,
  1284. //VDIN_SIG_FORMAT_VGA_1920X1080P_60D000,
  1285. {
  1286. 0x00082222, // TVFE_AAFILTER_CTRL1
  1287. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1288. },
  1289. //VDIN_SIG_FORMAT_VGA_1920X1080P_75D000,
  1290. {
  1291. 0x00082222, // TVFE_AAFILTER_CTRL1
  1292. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1293. },
  1294. //VDIN_SIG_FORMAT_VGA_1920X1080P_85D000,
  1295. {
  1296. 0x00082222, // TVFE_AAFILTER_CTRL1
  1297. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1298. },
  1299. //VDIN_SIG_FORMAT_VGA_1920X1200P_84D932,
  1300. {
  1301. 0x00082222, // TVFE_AAFILTER_CTRL1
  1302. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1303. },
  1304. //VDIN_SIG_FORMAT_VGA_1920X1200P_75D000,
  1305. {
  1306. 0x00082222, // TVFE_AAFILTER_CTRL1
  1307. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1308. },
  1309. //VDIN_SIG_FORMAT_VGA_1920X1200P_85D000,
  1310. {
  1311. 0x00082222, // TVFE_AAFILTER_CTRL1
  1312. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1313. },
  1314. //VDIN_SIG_FORMAT_VGA_1920X1234P_75D000,
  1315. {
  1316. 0x00082222, // TVFE_AAFILTER_CTRL1
  1317. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1318. },
  1319. //VDIN_SIG_FORMAT_VGA_1920X1234P_85D000,
  1320. {
  1321. 0x00082222, // TVFE_AAFILTER_CTRL1
  1322. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1323. },
  1324. //VDIN_SIG_FORMAT_VGA_1920X1440P_60D000,
  1325. {
  1326. 0x00082222, // TVFE_AAFILTER_CTRL1
  1327. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1328. },
  1329. //VDIN_SIG_FORMAT_VGA_1920X1440P_75D000,
  1330. {
  1331. 0x00082222, // TVFE_AAFILTER_CTRL1
  1332. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1333. },
  1334. //VDIN_SIG_FORMAT_VGA_2048X1536P_60D000_A,
  1335. {
  1336. 0x00082222, //
  1337. 0x252b39c6, //
  1338. },
  1339. //VDIN_SIG_FORMAT_VGA_2048X1536P_75D000,
  1340. {0,0},
  1341. //VDIN_SIG_FORMAT_VGA_2048X1536P_60D000_B,
  1342. {0,0},
  1343. //VDIN_SIG_FORMAT_VGA_2048X2048P_60D008,
  1344. {0,0},
  1345. //TVIN_SIG_FMT_VGA_MAX,
  1346. {0,0},
  1347. ///////////////////////////////////////////////////////////////
  1348. //VDIN_SIG_FORMAT_COMPONENT_480P_60D000,
  1349. {
  1350. 0x00082222, // TVFE_AAFILTER_CTRL1
  1351. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1352. },
  1353. //VDIN_SIG_FORMAT_COMPONENT_480I_59D940,
  1354. {
  1355. 0x00082222, // TVFE_AAFILTER_CTRL1
  1356. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1357. },
  1358. //VDIN_SIG_FORMAT_COMPONENT_576P_50D000,
  1359. {
  1360. 0x00082222, // TVFE_AAFILTER_CTRL1
  1361. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1362. },
  1363. //VDIN_SIG_FORMAT_COMPONENT_576I_50D000,
  1364. {
  1365. 0x00082222, // TVFE_AAFILTER_CTRL1
  1366. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1367. },
  1368. //VDIN_SIG_FORMAT_COMPONENT_720P_59D940,
  1369. {
  1370. 0x00082222, // TVFE_AAFILTER_CTRL1
  1371. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1372. },
  1373. //VDIN_SIG_FORMAT_COMPONENT_720P_50D000,
  1374. {
  1375. 0x00082222, // TVFE_AAFILTER_CTRL1
  1376. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1377. },
  1378. //VDIN_SIG_FORMAT_COMPONENT_1080P_23D976,
  1379. {
  1380. 0x00082222, // TVFE_AAFILTER_CTRL1
  1381. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1382. },
  1383. //VDIN_SIG_FORMAT_COMPONENT_1080P_24D000,
  1384. {
  1385. 0x00082222, // TVFE_AAFILTER_CTRL1
  1386. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1387. },
  1388. //VDIN_SIG_FORMAT_COMPONENT_1080P_25D000,
  1389. {
  1390. 0x00082222, // TVFE_AAFILTER_CTRL1
  1391. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1392. },
  1393. //VDIN_SIG_FORMAT_COMPONENT_1080P_30D000,
  1394. {
  1395. 0x00082222, // TVFE_AAFILTER_CTRL1
  1396. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1397. },
  1398. //VDIN_SIG_FORMAT_COMPONENT_1080P_50D000,
  1399. {
  1400. 0x00082222, // TVFE_AAFILTER_CTRL1
  1401. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1402. },
  1403. //VDIN_SIG_FORMAT_COMPONENT_1080P_60D000,
  1404. {
  1405. 0x00082222, // TVFE_AAFILTER_CTRL1
  1406. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1407. },
  1408. //VDIN_SIG_FORMAT_COMPONENT_1080I_29D970,
  1409. {
  1410. 0x00082222, // TVFE_AAFILTER_CTRL1
  1411. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1412. },
  1413. //VDIN_SIG_FORMAT_COMPONENT_1080I_47D952,
  1414. {
  1415. 0x00082222, // TVFE_AAFILTER_CTRL1
  1416. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1417. },
  1418. //VDIN_SIG_FORMAT_COMPONENT_1080I_48D000,
  1419. {
  1420. 0x00082222, // TVFE_AAFILTER_CTRL1
  1421. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1422. },
  1423. //VDIN_SIG_FORMAT_COMPONENT_1080I_50D000_A,
  1424. {
  1425. 0x00082222, // TVFE_AAFILTER_CTRL1
  1426. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1427. },
  1428. //VDIN_SIG_FORMAT_COMPONENT_1080I_50D000_B,
  1429. {
  1430. 0x00082222, // TVFE_AAFILTER_CTRL1
  1431. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1432. },
  1433. //VDIN_SIG_FORMAT_COMPONENT_1080I_50D000_C,
  1434. {
  1435. 0x00082222, // TVFE_AAFILTER_CTRL1
  1436. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1437. },
  1438. //VDIN_SIG_FORMAT_COMPONENT_1080I_60D000,
  1439. {
  1440. 0x00082222, // TVFE_AAFILTER_CTRL1
  1441. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1442. },
  1443. //TVIN_SIG_FMT_COMP_MAX,
  1444. {0,0},
  1445. //VDIN_SIG_FORMAT_CVBS_NTSC_M,
  1446. { 0x00082222, // TVFE_AAFILTER_CTRL1
  1447. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1448. },
  1449. //VDIN_SIG_FORMAT_CVBS_NTSC_443,
  1450. { 0x00082222, // TVFE_AAFILTER_CTRL1
  1451. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1452. },
  1453. //VDIN_SIG_FORMAT_CVBS_PAL_I,
  1454. { 0x00082222, // TVFE_AAFILTER_CTRL1
  1455. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1456. },
  1457. //VDIN_SIG_FORMAT_CVBS_PAL_M,
  1458. { 0x00082222, // TVFE_AAFILTER_CTRL1
  1459. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1460. },
  1461. //VDIN_SIG_FORMAT_CVBS_PAL_60,
  1462. { 0x00082222, // TVFE_AAFILTER_CTRL1
  1463. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1464. },
  1465. //VDIN_SIG_FORMAT_CVBS_PAL_CN,
  1466. { 0x00082222, // TVFE_AAFILTER_CTRL1
  1467. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1468. },
  1469. //VDIN_SIG_FORMAT_CVBS_SECAM,
  1470. { 0x00082222, // TVFE_AAFILTER_CTRL1
  1471. 0x252b39c6, // TVFE_AAFILTER_CTRL2
  1472. },
  1473. //VDIN_SIG_FORMAT_MAX,
  1474. {0,0 }
  1475. };
  1476. // *****************************************************************************
  1477. // Function:set aafilter control
  1478. //
  1479. // Params: format index
  1480. //
  1481. // Return: none
  1482. //
  1483. // *****************************************************************************
  1484. void tvafe_top_set_aafilter_control(enum tvin_sig_fmt_e fmt)
  1485. {
  1486. WRITE_APB_REG(TVFE_AAFILTER_CTRL1, aafilter_ctl[fmt][0]);
  1487. WRITE_APB_REG(TVFE_AAFILTER_CTRL2, aafilter_ctl[fmt][1]);
  1488. return;
  1489. }
  1490. // *****************************************************************************
  1491. // Function:set bp gate of tvfe top module
  1492. //
  1493. // Params: format index
  1494. //
  1495. // Return: none
  1496. //
  1497. // *****************************************************************************
  1498. void tvafe_top_set_bp_gate(enum tvin_sig_fmt_e fmt)
  1499. {
  1500. unsigned int h_bp_end,h_bp_start;
  1501. unsigned int v_bp_end,v_bp_start;
  1502. h_bp_start = tvin_fmt_tbl[fmt].hs_width + 1;
  1503. WRITE_APB_REG_BITS(TVFE_BPG_BACKP_H, h_bp_start, BACKP_H_ST_BIT, BACKP_H_ST_WID);
  1504. h_bp_end = tvin_fmt_tbl[fmt].h_total
  1505. - tvin_fmt_tbl[fmt].hs_front + 1;
  1506. WRITE_APB_REG_BITS(TVFE_BPG_BACKP_H, h_bp_end, BACKP_H_ED_BIT, BACKP_H_ED_WID);
  1507. v_bp_start = tvin_fmt_tbl[fmt].vs_width + 1;
  1508. WRITE_APB_REG_BITS(TVFE_BPG_BACKP_V, v_bp_start, BACKP_V_ST_BIT, BACKP_V_ST_WID);
  1509. v_bp_end = tvin_fmt_tbl[fmt].v_total
  1510. - tvin_fmt_tbl[fmt].vs_front + 1;
  1511. WRITE_APB_REG_BITS(TVFE_BPG_BACKP_V, v_bp_end, BACKP_V_ED_BIT, BACKP_V_ED_WID);
  1512. return;
  1513. }
  1514. // *****************************************************************************
  1515. // Function:set mvdet control of tvfe module
  1516. //
  1517. // Params: format index
  1518. //
  1519. // Return: none
  1520. //
  1521. // *****************************************************************************
  1522. void tvafe_top_set_mvdet_control(enum tvin_sig_fmt_e fmt)
  1523. {
  1524. unsigned int sd_mvd_reg_15_1b[] = {0, 0, 0, 0, 0, 0, 0,};
  1525. if ((fmt > TVIN_SIG_FMT_COMP_480P_60D000)
  1526. && (fmt < TVIN_SIG_FMT_COMP_576I_50D000)) {
  1527. WRITE_APB_REG(TVFE_DVSS_MVDET_CTRL1, sd_mvd_reg_15_1b[0]);
  1528. WRITE_APB_REG(TVFE_DVSS_MVDET_CTRL2, sd_mvd_reg_15_1b[1]);
  1529. WRITE_APB_REG(TVFE_DVSS_MVDET_CTRL3, sd_mvd_reg_15_1b[2]);
  1530. WRITE_APB_REG(TVFE_DVSS_MVDET_CTRL4, sd_mvd_reg_15_1b[3]);
  1531. WRITE_APB_REG(TVFE_DVSS_MVDET_CTRL5, sd_mvd_reg_15_1b[4]);
  1532. WRITE_APB_REG(TVFE_DVSS_MVDET_CTRL6, sd_mvd_reg_15_1b[5]);
  1533. WRITE_APB_REG(TVFE_DVSS_MVDET_CTRL7, sd_mvd_reg_15_1b[6]);
  1534. }
  1535. return;
  1536. }
  1537. // *****************************************************************************
  1538. // Function:set wss of tvfe top module
  1539. //
  1540. // Params: format index
  1541. //
  1542. // Return: none
  1543. //
  1544. // *****************************************************************************
  1545. void tvafe_top_set_wss_control(enum tvin_sig_fmt_e fmt)
  1546. {
  1547. unsigned int hd_mvd_reg_2a_2d[] = {0, 0, 0, 0};
  1548. if (fmt > TVIN_SIG_FMT_COMP_720P_59D940
  1549. && fmt < TVIN_SIG_FMT_COMP_1080I_60D000) {
  1550. WRITE_APB_REG(TVFE_MISC_WSS1_MUXCTRL1, hd_mvd_reg_2a_2d[0]);
  1551. WRITE_APB_REG(TVFE_MISC_WSS1_MUXCTRL2, hd_mvd_reg_2a_2d[1]);
  1552. WRITE_APB_REG(TVFE_MISC_WSS2_MUXCTRL1, hd_mvd_reg_2a_2d[2]);
  1553. WRITE_APB_REG(TVFE_MISC_WSS2_MUXCTRL2, hd_mvd_reg_2a_2d[3]);
  1554. }
  1555. return;
  1556. }
  1557. // *****************************************************************************
  1558. // Function:set sfg control of tvfe top module
  1559. //
  1560. // Params: format index
  1561. //
  1562. // Return: none
  1563. //
  1564. // *****************************************************************************
  1565. void tvafe_top_set_sfg_mux_control(enum tvin_sig_fmt_e fmt)
  1566. {
  1567. unsigned int h_total = tvin_fmt_tbl[fmt].h_total, pixel_clk = tvin_fmt_tbl[fmt].pixel_clk, tmp = 0;
  1568. if (pixel_clk)
  1569. {
  1570. //tmp = (h_total*219)/pixel_clk; // ((h_total*5M/(pixel_clk*10K))/2)*7/8 = h_total*219/pixel_clk
  1571. //if (tmp > 255)
  1572. // tmp = 255;
  1573. //WRITE_APB_REG(ADC_REG_31, tmp);
  1574. tmp = (h_total+2)>>2;
  1575. WRITE_APB_REG_BITS(TVFE_SYNCTOP_SFG_MUXCTRL1, tmp, SFG_DET_HSTART_BIT, SFG_DET_HSTART_WID);
  1576. tmp = (h_total+h_total+h_total+2)>>2;
  1577. WRITE_APB_REG_BITS(TVFE_SYNCTOP_SFG_MUXCTRL1, tmp, SFG_DET_HEND_BIT, SFG_DET_HEND_WID);
  1578. }
  1579. return;
  1580. }
  1581. enum tvin_scan_mode_e tvafe_top_get_scan_mode(void)
  1582. {
  1583. unsigned int scan_mode;
  1584. scan_mode = READ_APB_REG_BITS(TVFE_SYNCTOP_INDICATOR3,
  1585. SFG_PROGRESSIVE_BIT, SFG_PROGRESSIVE_WID);
  1586. if (scan_mode == 0)
  1587. return TVIN_SCAN_MODE_INTERLACED;
  1588. else
  1589. return TVIN_SCAN_MODE_PROGRESSIVE;
  1590. }
  1591. //
  1592. //function:the parameter stdvalue replace the parameter original
  1593. //
  1594. void tvafe_reset_cal_value(struct tvafe_adc_cal_s *original,struct tvafe_adc_cal_s *stdvalue)
  1595. {
  1596. #ifdef LOG_ADC_CAL
  1597. printk("++++++reset cal value\n");
  1598. #endif
  1599. //a
  1600. original->a_analog_clamp = stdvalue->a_analog_clamp;
  1601. original->a_analog_gain = stdvalue->a_analog_gain;
  1602. original->a_digital_offset1 = stdvalue->a_digital_offset1;
  1603. //b
  1604. original->b_analog_clamp = stdvalue->b_analog_clamp;
  1605. original->b_analog_gain = stdvalue->b_analog_gain;
  1606. original->b_digital_offset1 = stdvalue->b_digital_offset1;
  1607. //c
  1608. original->c_analog_clamp = stdvalue->c_analog_clamp;
  1609. original->c_analog_gain = stdvalue->c_analog_gain;
  1610. original->c_digital_offset1 = stdvalue->c_digital_offset1;
  1611. }
  1612. //
  1613. //function:compare calibration value (calvalue) with standard value (stdvalue)
  1614. //
  1615. unsigned char tvafe_compare_cal_value(unsigned short calvalue,unsigned short stdvalue)
  1616. {
  1617. unsigned char ret=0;
  1618. if(calvalue > stdvalue)
  1619. {
  1620. if((calvalue - stdvalue) > threshold_value)
  1621. {
  1622. ret=1;
  1623. return ret;
  1624. }
  1625. }
  1626. else if((stdvalue - calvalue) > threshold_value)
  1627. {
  1628. ret=1;
  1629. return ret;
  1630. }
  1631. return ret;
  1632. }
  1633. //
  1634. //function:if adc_cal value is not valid,then adc_cal value will been replaced
  1635. //
  1636. void tvafe_adjust_cal_value(struct tvafe_adc_cal_s *para,bool iscomponent)
  1637. {
  1638. unsigned char flag = 0;
  1639. struct tvafe_adc_cal_s *stdvaluep = iscomponent ? (&cal_std_value_component) : (&cal_std_value_vga);
  1640. flag |= tvafe_compare_cal_value(para->a_analog_clamp, stdvaluep->a_analog_clamp );
  1641. flag |= tvafe_compare_cal_value(para->a_analog_gain, stdvaluep->a_analog_gain );
  1642. flag |= tvafe_compare_cal_value(para->b_analog_clamp, stdvaluep->b_analog_clamp );
  1643. flag |= tvafe_compare_cal_value(para->b_analog_gain, stdvaluep->b_analog_gain );
  1644. flag |= tvafe_compare_cal_value(para->c_analog_clamp, stdvaluep->c_analog_clamp );
  1645. flag |= tvafe_compare_cal_value(para->c_analog_gain, stdvaluep->c_analog_gain );
  1646. if(flag)
  1647. tvafe_reset_cal_value(para,stdvaluep);
  1648. }
  1649. // *****************************************************************************
  1650. // Function: get & set cal result & internal cal
  1651. //
  1652. // Params: system info
  1653. //
  1654. // Return: none
  1655. //
  1656. // *****************************************************************************
  1657. void tvafe_set_cal_value(struct tvafe_adc_cal_s *para)
  1658. {
  1659. unsigned int clamp_h = 0, clamp_l = 0;
  1660. if (!(para->reserved & TVAFE_ADC_CAL_VALID))
  1661. return;
  1662. WRITE_APB_REG_BITS(TVFE_OGO_OFFSET1, 1, OGO_EN_BIT, OGO_EN_WID);
  1663. clamp_h = (para->a_analog_clamp)>>2;
  1664. clamp_l = (para->a_analog_clamp)&3;
  1665. WRITE_APB_REG_BITS(ADC_REG_0B, clamp_h, CTRCLREFA_0B_BIT, CTRCLREFA_0B_WID);
  1666. WRITE_APB_REG_BITS(ADC_REG_0F, clamp_l, CTRCLREFA_0F_BIT, CTRCLREFA_0F_WID);
  1667. clamp_h = (para->b_analog_clamp)>>2;
  1668. clamp_l = (para->b_analog_clamp)&3;
  1669. WRITE_APB_REG_BITS(ADC_REG_0C, clamp_h, CTRCLREFB_0C_BIT, CTRCLREFB_0C_WID);
  1670. WRITE_APB_REG_BITS(ADC_REG_10, clamp_l, CTRCLREFB_10_BIT, CTRCLREFB_10_WID);
  1671. clamp_h = (para->c_analog_clamp)>>2;
  1672. clamp_l = (para->c_analog_clamp)&3;
  1673. WRITE_APB_REG_BITS(ADC_REG_0D, clamp_h, CTRCLREFC_0D_BIT, CTRCLREFC_0D_WID);
  1674. WRITE_APB_REG_BITS(ADC_REG_11, clamp_l, CTRCLREFC_11_BIT, CTRCLREFC_11_WID);
  1675. WRITE_APB_REG_BITS(ADC_REG_07, para->a_analog_gain, ADCGAINA_BIT, ADCGAINA_WID);
  1676. WRITE_APB_REG_BITS(ADC_REG_08, para->b_analog_gain, ADCGAINB_BIT, ADCGAINB_WID);
  1677. WRITE_APB_REG_BITS(ADC_REG_09, para->c_analog_gain, ADCGAINC_BIT, ADCGAINC_WID);
  1678. WRITE_APB_REG_BITS(TVFE_OGO_OFFSET1, para->a_digital_offset1,
  1679. OGO_YG_OFFSET1_BIT, OGO_YG_OFFSET1_WID);
  1680. WRITE_APB_REG_BITS(TVFE_OGO_OFFSET1, para->b_digital_offset1,
  1681. OGO_UB_OFFSET1_BIT, OGO_UB_OFFSET1_WID);
  1682. WRITE_APB_REG_BITS(TVFE_OGO_OFFSET3, para->c_digital_offset1,
  1683. OGO_VR_OFFSET1_BIT, OGO_VR_OFFSET1_WID);
  1684. WRITE_APB_REG_BITS(TVFE_OGO_GAIN1, para->a_digital_gain,
  1685. OGO_YG_GAIN_BIT, OGO_YG_GAIN_WID);
  1686. WRITE_APB_REG_BITS(TVFE_OGO_GAIN1, para->b_digital_gain,
  1687. OGO_UB_GAIN_BIT, OGO_UB_GAIN_WID);
  1688. WRITE_APB_REG_BITS(TVFE_OGO_GAIN2, para->c_digital_gain,
  1689. OGO_VR_GAIN_BIT, OGO_VR_GAIN_WID);
  1690. WRITE_APB_REG_BITS(TVFE_OGO_OFFSET2, para->a_digital_offset2,
  1691. OGO_YG_OFFSET2_BIT, OGO_YG_OFFSET2_WID);
  1692. WRITE_APB_REG_BITS(TVFE_OGO_OFFSET2, para->b_digital_offset2,
  1693. OGO_UB_OFFSET2_BIT, OGO_UB_OFFSET2_WID);
  1694. WRITE_APB_REG_BITS(TVFE_OGO_OFFSET3, para->c_digital_offset2,
  1695. OGO_VR_OFFSET2_BIT, OGO_VR_OFFSET2_WID);
  1696. }
  1697. void tvafe_get_cal_value(struct tvafe_adc_cal_s *para)
  1698. {
  1699. unsigned int clamp_h = 0, clamp_l = 0;
  1700. clamp_h = READ_APB_REG_BITS(ADC_REG_0B, CTRCLREFA_0B_BIT, CTRCLREFA_0B_WID);
  1701. clamp_l = READ_APB_REG_BITS(ADC_REG_0F, CTRCLREFA_0F_BIT, CTRCLREFA_0F_WID);
  1702. para->a_analog_clamp = (clamp_h<<2)|clamp_l;
  1703. clamp_h = READ_APB_REG_BITS(ADC_REG_0C, CTRCLREFB_0C_BIT, CTRCLREFB_0C_WID);
  1704. clamp_l = READ_APB_REG_BITS(ADC_REG_10, CTRCLREFB_10_BIT, CTRCLREFB_10_WID);
  1705. para->b_analog_clamp = (clamp_h<<2)|clamp_l;
  1706. clamp_h = READ_APB_REG_BITS(ADC_REG_0D, CTRCLREFC_0D_BIT, CTRCLREFC_0D_WID);
  1707. clamp_l = READ_APB_REG_BITS(ADC_REG_11, CTRCLREFC_11_BIT, CTRCLREFC_11_WID);
  1708. para->c_analog_clamp = (clamp_h<<2)|clamp_l;
  1709. para->a_analog_gain = READ_APB_REG_BITS(ADC_REG_07, ADCGAINA_BIT, ADCGAINA_WID);
  1710. para->b_analog_gain = READ_APB_REG_BITS(ADC_REG_08, ADCGAINB_BIT, ADCGAINB_WID);
  1711. para->c_analog_gain = READ_APB_REG_BITS(ADC_REG_09, ADCGAINC_BIT, ADCGAINC_WID);
  1712. para->a_digital_offset1 = READ_APB_REG_BITS(TVFE_OGO_OFFSET1, OGO_YG_OFFSET1_BIT, OGO_YG_OFFSET1_WID);
  1713. para->b_digital_offset1 = READ_APB_REG_BITS(TVFE_OGO_OFFSET1, OGO_UB_OFFSET1_BIT, OGO_UB_OFFSET1_WID);
  1714. para->c_digital_offset1 = READ_APB_REG_BITS(TVFE_OGO_OFFSET3, OGO_VR_OFFSET1_BIT, OGO_VR_OFFSET1_WID);
  1715. para->a_digital_gain = READ_APB_REG_BITS(TVFE_OGO_GAIN1, OGO_YG_GAIN_BIT, OGO_YG_GAIN_WID);
  1716. para->b_digital_gain = READ_APB_REG_BITS(TVFE_OGO_GAIN1, OGO_UB_GAIN_BIT, OGO_UB_GAIN_WID);
  1717. para->c_digital_gain = READ_APB_REG_BITS(TVFE_OGO_GAIN2, OGO_VR_GAIN_BIT, OGO_VR_GAIN_WID);
  1718. para->a_digital_offset2 = READ_APB_REG_BITS(TVFE_OGO_OFFSET2, OGO_YG_OFFSET2_BIT, OGO_YG_OFFSET2_WID);
  1719. para->b_digital_offset2 = READ_APB_REG_BITS(TVFE_OGO_OFFSET2, OGO_UB_OFFSET2_BIT, OGO_UB_OFFSET2_WID);
  1720. para->c_digital_offset2 = READ_APB_REG_BITS(TVFE_OGO_OFFSET3, OGO_VR_OFFSET2_BIT, OGO_VR_OFFSET2_WID);
  1721. }
  1722. void tvafe_adc_cal_read(unsigned char *ch, unsigned int *a, unsigned int *b, unsigned int *c)
  1723. {
  1724. unsigned int i = 0, j = 0, data = 0, da[16], db[16], dc[16];
  1725. for (i = 0; i < 16; i++)
  1726. {
  1727. data = READ_APB_REG(TVFE_ADC_READBACK_INDICATOR);
  1728. da[i] = (data >> ADC_READBACK_DA_BIT) & ((1 << ADC_READBACK_DA_WID) - 1);
  1729. db[i] = (data >> ADC_READBACK_DB_BIT) & ((1 << ADC_READBACK_DB_WID) - 1);
  1730. dc[i] = (data >> ADC_READBACK_DC_BIT) & ((1 << ADC_READBACK_DC_WID) - 1);
  1731. }
  1732. for (i = 0; i < 15; i++)
  1733. {
  1734. for (j = i + 1; j < 16; j++)
  1735. {
  1736. if (da[i] > da[j])
  1737. {
  1738. data = da[i];
  1739. da[i] = da[j];
  1740. da[j] = data;
  1741. }
  1742. if (db[i] > db[j])
  1743. {
  1744. data = db[i];
  1745. db[i] = db[j];
  1746. db[j] = data;
  1747. }
  1748. if (dc[i] > dc[j])
  1749. {
  1750. data = dc[i];
  1751. dc[i] = dc[j];
  1752. dc[j] = data;
  1753. }
  1754. }
  1755. }
  1756. *a = *b = *c = 4;
  1757. for (i = 4; i < 12; i++)
  1758. {
  1759. *a += da[i];
  1760. *b += db[i];
  1761. *c += dc[i];
  1762. }
  1763. *a >>= 3;
  1764. *b >>= 3;
  1765. *c >>= 3;
  1766. #ifdef LOG_ADC_CAL
  1767. pr_info("%s = %4d %4d %4d\n", ch, (int)*a, (int)*b, (int)*c);
  1768. #endif
  1769. }
  1770. // for Y:
  1771. // diff*0.777V/(479/1023)V <= 1023, diff <=616
  1772. // standard is 0.7V, to support -4% ~ +107% supper black/white, increase the range to 111% of 0.7V
  1773. // for Cb/Cr/R/G/B:
  1774. // diff*0.7V/(479/1023)V <= 1023, diff <= 684
  1775. // standard is 0.7V
  1776. bool tvafe_gain_overflow(unsigned int a1, unsigned int a2, bool is_component)
  1777. {
  1778. unsigned int win = is_component ? 616 : 684;
  1779. if ((a2 - a1) > win)
  1780. return (true);
  1781. else
  1782. return (false);
  1783. }
  1784. // #define TVAFE_ADC_CAL_VALIDATION
  1785. #define TVAFE_ADC_CAL_STEP_GAIN 1
  1786. #define TVAFE_ADC_CAL_STEP_CLAMP 1
  1787. #define TVAFE_ADC_CAL_STEP_SHIFT 1
  1788. #define TVAFE_ADC_CAL_STEP_STAGE (TVAFE_ADC_CAL_STEP_GAIN*16 + TVAFE_ADC_CAL_STEP_SHIFT)
  1789. // standard is 16~235, supper black/white is 7~250
  1790. bool tvafe_adc_cal(struct tvafe_info_s *info, struct tvafe_operand_s *operand)
  1791. {
  1792. struct tvafe_adc_cal_s *adc_cal = &info->adc_cal_val;
  1793. bool is_component = (info->param.port >= TVIN_PORT_COMP0) && (info->param.port <= TVIN_PORT_COMP7);
  1794. unsigned int a = 0, b = 0, c = 0, mutex = 0;
  1795. unsigned int z_lu = is_component ? 37 : 0; // 37 = 1023*4%/111%
  1796. unsigned int z_ch = is_component ? 512 : 0;
  1797. unsigned int l_dg = is_component ? 975 : 1024; // 976 = 219*111%*4+3
  1798. unsigned int l_do = is_component ? 28 : 0; // 28 = 7*4
  1799. unsigned int c_dg = is_component ? 899 : 1024; // 899 = 224*4+3
  1800. unsigned int c_do = is_component ? 64 : 0; // 64 = 16*4
  1801. unsigned short step_up = 0, step_dn = 0;
  1802. switch (operand->step++)
  1803. {
  1804. case TVAFE_ADC_CAL_STEP_GAIN*0:
  1805. // init
  1806. adc_cal->a_analog_clamp = 64;
  1807. adc_cal->a_analog_gain = 128;
  1808. adc_cal->a_digital_gain = l_dg; // 0dB
  1809. adc_cal->a_digital_offset1 = 0;
  1810. adc_cal->a_digital_offset2 = l_do;
  1811. adc_cal->b_analog_clamp = 64;
  1812. adc_cal->b_analog_gain = 128;
  1813. adc_cal->b_digital_gain = c_dg; // 0dB
  1814. adc_cal->b_digital_offset1 = 0;
  1815. adc_cal->b_digital_offset2 = c_do;
  1816. adc_cal->c_analog_clamp = 64;
  1817. adc_cal->c_analog_gain = 128;
  1818. adc_cal->c_digital_gain = c_dg; // 0dB
  1819. adc_cal->c_digital_offset1 = 0;
  1820. adc_cal->c_digital_offset2 = c_do;
  1821. // config readback
  1822. WRITE_APB_REG_BITS(TVFE_ADC_READBACK_CTRL, 0, ADC_READBACK_MODE_BIT , ADC_READBACK_MODE_WID );
  1823. // record bpg_h, bpg_v, bpg_m, clamp_inv, clamp_ext, clk_ext, clk_ctl, lpf_a, lpf_b, lpf_c
  1824. operand->bpg_h = READ_APB_REG(TVFE_BPG_BACKP_H);
  1825. operand->bpg_v = READ_APB_REG(TVFE_BPG_BACKP_V);
  1826. operand->bpg_m = READ_APB_REG_BITS(TVFE_TOP_CTRL, TVFE_BACKP_GATE_MUX_BIT, TVFE_BACKP_GATE_MUX_WID);
  1827. operand->clamp_inv = READ_APB_REG_BITS(TVFE_DVSS_MUXCTRL, DVSS_CLAMP_INV_BIT, DVSS_CLAMP_INV_WID );
  1828. operand->clamp_ext = READ_APB_REG_BITS(ADC_REG_2F, CLAMPEXT_BIT, CLAMPEXT_WID );
  1829. // operand->lpf_a = READ_APB_REG_BITS(ADC_REG_19, ENLPFA_BIT, ENLPFA_WID );
  1830. // operand->lpf_b = READ_APB_REG_BITS(ADC_REG_1A, ENLPFB_BIT, ENLPFB_WID );
  1831. // operand->lpf_c = READ_APB_REG_BITS(ADC_REG_1B, ENLPFC_BIT, ENLPFC_WID );
  1832. operand->clk_ext = READ_APB_REG_BITS(ADC_REG_58, EXTCLKSEL_BIT, EXTCLKSEL_WID);
  1833. operand->clk_ctl = READ_CBUS_REG(HHI_VAFE_CLKIN_CNTL);
  1834. // disable lpf_a, lpf_b, lpf_c
  1835. // WRITE_APB_REG_BITS(ADC_REG_19, 0, ENLPFA_BIT, ENLPFA_WID);
  1836. // WRITE_APB_REG_BITS(ADC_REG_1A, 0, ENLPFB_BIT, ENLPFB_WID);
  1837. // WRITE_APB_REG_BITS(ADC_REG_1B, 0, ENLPFC_BIT, ENLPFC_WID);
  1838. // set clk_ext & clk_ctl
  1839. WRITE_APB_REG_BITS(ADC_REG_58, 1, EXTCLKSEL_BIT, EXTCLKSEL_WID);
  1840. WRITE_CBUS_REG(HHI_VAFE_CLKIN_CNTL, 0x00000100);
  1841. // load adc cal values
  1842. adc_cal->reserved |= TVAFE_ADC_CAL_VALID;
  1843. tvafe_set_cal_value(adc_cal);
  1844. adc_cal->reserved &= ~TVAFE_ADC_CAL_VALID;
  1845. // disable offset calibration
  1846. WRITE_APB_REG_BITS(TVFE_VAFE_CTRL, 0, VAFE_ENOFFSETCAL_BIT, VAFE_ENOFFSETCAL_WID);
  1847. // enable gain calibration
  1848. WRITE_APB_REG_BITS(TVFE_VAFE_CTRL, 1, VAFE_ENGAINCAL_BIT, VAFE_ENGAINCAL_WID);
  1849. // select level 1
  1850. WRITE_APB_REG_BITS(TVFE_VAFE_CTRL, 1, VAFE_SELGAINCALLVL_BIT, VAFE_SELGAINCALLVL_WID);
  1851. break;
  1852. case TVAFE_ADC_CAL_STEP_GAIN*1:
  1853. case TVAFE_ADC_CAL_STEP_GAIN*3:
  1854. case TVAFE_ADC_CAL_STEP_GAIN*5:
  1855. case TVAFE_ADC_CAL_STEP_GAIN*7:
  1856. case TVAFE_ADC_CAL_STEP_GAIN*9:
  1857. case TVAFE_ADC_CAL_STEP_GAIN*11:
  1858. case TVAFE_ADC_CAL_STEP_GAIN*13:
  1859. case TVAFE_ADC_CAL_STEP_GAIN*15:
  1860. #ifdef LOG_ADC_CAL
  1861. pr_info("\nA_gn = %4d %4d %4d\n", (int)adc_cal->a_analog_gain, (int)adc_cal->b_analog_gain, (int)adc_cal->c_analog_gain);
  1862. #endif
  1863. // get data of level 1
  1864. tvafe_adc_cal_read("Lvl1", &operand->a, &operand->b, &operand->c);
  1865. // select level 2
  1866. WRITE_APB_REG_BITS(TVFE_VAFE_CTRL, 2, VAFE_SELGAINCALLVL_BIT, VAFE_SELGAINCALLVL_WID);
  1867. break;
  1868. case TVAFE_ADC_CAL_STEP_GAIN*2:
  1869. if (!mutex)
  1870. {
  1871. mutex = 1;
  1872. step_up = 64;
  1873. step_dn = 64;
  1874. }
  1875. case TVAFE_ADC_CAL_STEP_GAIN*4:
  1876. if (!mutex)
  1877. {
  1878. mutex = 1;
  1879. step_up = 32;
  1880. step_dn = 32;
  1881. }
  1882. case TVAFE_ADC_CAL_STEP_GAIN*6:
  1883. if (!mutex)
  1884. {
  1885. mutex = 1;
  1886. step_up = 16;
  1887. step_dn = 16;
  1888. }
  1889. case TVAFE_ADC_CAL_STEP_GAIN*8:
  1890. if (!mutex)
  1891. {
  1892. mutex = 1;
  1893. step_up = 8;
  1894. step_dn = 8;
  1895. }
  1896. case TVAFE_ADC_CAL_STEP_GAIN*10:
  1897. if (!mutex)
  1898. {
  1899. mutex = 1;
  1900. step_up = 4;
  1901. step_dn = 4;
  1902. }
  1903. case TVAFE_ADC_CAL_STEP_GAIN*12:
  1904. if (!mutex)
  1905. {
  1906. mutex = 1;
  1907. step_up = 2;
  1908. step_dn = 2;
  1909. }
  1910. case TVAFE_ADC_CAL_STEP_GAIN*14:
  1911. if (!mutex)
  1912. {
  1913. mutex = 1;
  1914. step_up = 1;
  1915. step_dn = 1;
  1916. }
  1917. case TVAFE_ADC_CAL_STEP_GAIN*16:
  1918. if (!mutex)
  1919. {
  1920. mutex = 1;
  1921. step_up = 0;
  1922. step_dn = 1;
  1923. }
  1924. // get data of level 2
  1925. tvafe_adc_cal_read("Lvl2", &a, &b, &c);
  1926. #ifdef LOG_ADC_CAL
  1927. pr_info("Diff = %4d %4d %4d\n", (int)(a - operand->a), (int)(b - operand->b), (int)(c - operand->c));
  1928. #endif
  1929. // tune analog gain
  1930. if (tvafe_gain_overflow(operand->a, a, is_component))
  1931. adc_cal->a_analog_gain -= step_dn;
  1932. else
  1933. adc_cal->a_analog_gain += step_up;
  1934. if (tvafe_gain_overflow(operand->b, b, false))
  1935. adc_cal->b_analog_gain -= step_dn;
  1936. else
  1937. adc_cal->b_analog_gain += step_up;
  1938. if (tvafe_gain_overflow(operand->c, c, false))
  1939. adc_cal->c_analog_gain -= step_dn;
  1940. else
  1941. adc_cal->c_analog_gain += step_up;
  1942. // load adc cal values
  1943. adc_cal->reserved |= TVAFE_ADC_CAL_VALID;
  1944. tvafe_set_cal_value(adc_cal);
  1945. adc_cal->reserved &= ~TVAFE_ADC_CAL_VALID;
  1946. // select level 1
  1947. WRITE_APB_REG_BITS(TVFE_VAFE_CTRL, 1, VAFE_SELGAINCALLVL_BIT, VAFE_SELGAINCALLVL_WID);
  1948. if (operand->step == TVAFE_ADC_CAL_STEP_GAIN*16 + 1)
  1949. {
  1950. #ifdef LOG_ADC_CAL
  1951. pr_info("\nfresh_adc_cal after gain\n");
  1952. pr_info("A_cl = %4d %4d %4d\n", (int)(adc_cal->a_analog_clamp),
  1953. (int)(adc_cal->b_analog_clamp),
  1954. (int)(adc_cal->c_analog_clamp));
  1955. pr_info("A_gn = %4d %4d %4d\n", (int)(adc_cal->a_analog_gain),
  1956. (int)(adc_cal->b_analog_gain),
  1957. (int)(adc_cal->c_analog_gain));
  1958. pr_info("D_gn = %4d %4d %4d\n", (int)(adc_cal->a_digital_gain),
  1959. (int)(adc_cal->b_digital_gain),
  1960. (int)(adc_cal->c_digital_gain));
  1961. pr_info("D_o1 = %4d %4d %4d\n", ((int)(adc_cal->a_digital_offset1) << 21) >> 21,
  1962. ((int)(adc_cal->b_digital_offset1) << 21) >> 21,
  1963. ((int)(adc_cal->c_digital_offset1) << 21) >> 21);
  1964. pr_info("D_o2 = %4d %4d %4d\n", ((int)(adc_cal->a_digital_offset2) << 21) >> 21,
  1965. ((int)(adc_cal->b_digital_offset2) << 21) >> 21,
  1966. ((int)(adc_cal->c_digital_offset2) << 21) >> 21);
  1967. pr_info("\n");
  1968. #endif
  1969. // disable gain calibration
  1970. WRITE_APB_REG_BITS(TVFE_VAFE_CTRL, 0, VAFE_ENGAINCAL_BIT, VAFE_ENGAINCAL_WID);
  1971. // set bpg_h, bpg_v, bpg_m, clamp_inv, clamp_ext
  1972. WRITE_APB_REG(TVFE_BPG_BACKP_H, 1);
  1973. WRITE_APB_REG(TVFE_BPG_BACKP_V, 1);
  1974. // WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 1, TVFE_BACKP_GATE_MUX_BIT, TVFE_BACKP_GATE_MUX_WID);
  1975. // WRITE_APB_REG_BITS(TVFE_DVSS_MUXCTRL, 1, DVSS_CLAMP_INV_BIT, DVSS_CLAMP_INV_WID );
  1976. WRITE_APB_REG_BITS(ADC_REG_2F, 1, CLAMPEXT_BIT, CLAMPEXT_WID );
  1977. WRITE_APB_REG_BITS(ADC_REG_58, 1, EXTCLKSEL_BIT, EXTCLKSEL_WID );
  1978. }
  1979. break;
  1980. case TVAFE_ADC_CAL_STEP_STAGE + TVAFE_ADC_CAL_STEP_CLAMP*1:
  1981. if (!mutex)
  1982. {
  1983. mutex = 1;
  1984. step_up = 32;
  1985. step_dn = 32;
  1986. }
  1987. case TVAFE_ADC_CAL_STEP_STAGE + TVAFE_ADC_CAL_STEP_CLAMP*2:
  1988. if (!mutex)
  1989. {
  1990. mutex = 1;
  1991. step_up = 16;
  1992. step_dn = 16;
  1993. }
  1994. case TVAFE_ADC_CAL_STEP_STAGE + TVAFE_ADC_CAL_STEP_CLAMP*3:
  1995. if (!mutex)
  1996. {
  1997. mutex = 1;
  1998. step_up = 8;
  1999. step_dn = 8;
  2000. }
  2001. case TVAFE_ADC_CAL_STEP_STAGE + TVAFE_ADC_CAL_STEP_CLAMP*4:
  2002. if (!mutex)
  2003. {
  2004. mutex = 1;
  2005. step_up = 4;
  2006. step_dn = 4;
  2007. }
  2008. case TVAFE_ADC_CAL_STEP_STAGE + TVAFE_ADC_CAL_STEP_CLAMP*5:
  2009. if (!mutex)
  2010. {
  2011. mutex = 1;
  2012. step_up = 2;
  2013. step_dn = 2;
  2014. }
  2015. case TVAFE_ADC_CAL_STEP_STAGE + TVAFE_ADC_CAL_STEP_CLAMP*6:
  2016. if (!mutex)
  2017. {
  2018. mutex = 1;
  2019. step_up = 1;
  2020. step_dn = 1;
  2021. }
  2022. case TVAFE_ADC_CAL_STEP_STAGE + TVAFE_ADC_CAL_STEP_CLAMP*7:
  2023. if (!mutex)
  2024. {
  2025. mutex = 1;
  2026. step_up = 0;
  2027. step_dn = 1;
  2028. }
  2029. #ifdef LOG_ADC_CAL
  2030. pr_info("\nA_cl = %4d %4d %4d\n", (int)adc_cal->a_analog_clamp, (int)adc_cal->b_analog_clamp, (int)adc_cal->c_analog_clamp);
  2031. #endif
  2032. // get data of blank
  2033. tvafe_adc_cal_read("Dark", &a, &b, &c);
  2034. // tune analog clamp
  2035. if (a > z_lu)
  2036. adc_cal->a_analog_clamp -= step_dn;
  2037. else
  2038. adc_cal->a_analog_clamp += step_up;
  2039. if (b > z_ch)
  2040. adc_cal->b_analog_clamp -= step_dn;
  2041. else
  2042. adc_cal->b_analog_clamp += step_up;
  2043. if (c > z_ch)
  2044. adc_cal->c_analog_clamp -= step_dn;
  2045. else
  2046. adc_cal->c_analog_clamp += step_up;
  2047. // load adc cal values
  2048. adc_cal->reserved |= TVAFE_ADC_CAL_VALID;
  2049. tvafe_set_cal_value(adc_cal);
  2050. adc_cal->reserved &= ~TVAFE_ADC_CAL_VALID;
  2051. if (operand->step == TVAFE_ADC_CAL_STEP_STAGE + TVAFE_ADC_CAL_STEP_CLAMP*7 + 1)
  2052. {
  2053. #ifdef LOG_ADC_CAL
  2054. pr_info("\nfresh_adc_cal after clamp\n");
  2055. pr_info("A_cl = %4d %4d %4d\n", (int)(adc_cal->a_analog_clamp),
  2056. (int)(adc_cal->b_analog_clamp),
  2057. (int)(adc_cal->c_analog_clamp));
  2058. pr_info("A_gn = %4d %4d %4d\n", (int)(adc_cal->a_analog_gain),
  2059. (int)(adc_cal->b_analog_gain),
  2060. (int)(adc_cal->c_analog_gain));
  2061. pr_info("D_gn = %4d %4d %4d\n", (int)(adc_cal->a_digital_gain),
  2062. (int)(adc_cal->b_digital_gain),
  2063. (int)(adc_cal->c_digital_gain));
  2064. pr_info("D_o1 = %4d %4d %4d\n", ((int)(adc_cal->a_digital_offset1) << 21) >> 21,
  2065. ((int)(adc_cal->b_digital_offset1) << 21) >> 21,
  2066. ((int)(adc_cal->c_digital_offset1) << 21) >> 21);
  2067. pr_info("D_o2 = %4d %4d %4d\n", ((int)(adc_cal->a_digital_offset2) << 21) >> 21,
  2068. ((int)(adc_cal->b_digital_offset2) << 21) >> 21,
  2069. ((int)(adc_cal->c_digital_offset2) << 21) >> 21);
  2070. pr_info("\n");
  2071. #endif
  2072. #ifdef TVAFE_ADC_CAL_VALIDATION
  2073. // adjust adc cal values
  2074. tvafe_adjust_cal_value(adc_cal,is_component);
  2075. // load adc cal values
  2076. adc_cal->reserved |= TVAFE_ADC_CAL_VALID;
  2077. tvafe_set_cal_value(adc_cal);
  2078. adc_cal->reserved &= ~TVAFE_ADC_CAL_VALID;
  2079. #endif
  2080. #ifdef LOG_ADC_CAL
  2081. pr_info("\nfinal_adc_cal after validation\n");
  2082. pr_info("A_cl = %4d %4d %4d\n", (int)(adc_cal->a_analog_clamp),
  2083. (int)(adc_cal->b_analog_clamp),
  2084. (int)(adc_cal->c_analog_clamp));
  2085. pr_info("A_gn = %4d %4d %4d\n", (int)(adc_cal->a_analog_gain),
  2086. (int)(adc_cal->b_analog_gain),
  2087. (int)(adc_cal->c_analog_gain));
  2088. pr_info("D_gn = %4d %4d %4d\n", (int)(adc_cal->a_digital_gain),
  2089. (int)(adc_cal->b_digital_gain),
  2090. (int)(adc_cal->c_digital_gain));
  2091. pr_info("D_o1 = %4d %4d %4d\n", ((int)(adc_cal->a_digital_offset1) << 21) >> 21,
  2092. ((int)(adc_cal->b_digital_offset1) << 21) >> 21,
  2093. ((int)(adc_cal->c_digital_offset1) << 21) >> 21);
  2094. pr_info("D_o2 = %4d %4d %4d\n", ((int)(adc_cal->a_digital_offset2) << 21) >> 21,
  2095. ((int)(adc_cal->b_digital_offset2) << 21) >> 21,
  2096. ((int)(adc_cal->c_digital_offset2) << 21) >> 21);
  2097. pr_info("\n");
  2098. #endif
  2099. // restore bpg_h, bpg_v, bpg_m, clamp_inv, clamp_ext, clk_ext, clk_ctl, lpf_a, lpf_b, lpf_c
  2100. WRITE_APB_REG(TVFE_BPG_BACKP_H, operand->bpg_h);
  2101. WRITE_APB_REG(TVFE_BPG_BACKP_V, operand->bpg_v);
  2102. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, operand->bpg_m, TVFE_BACKP_GATE_MUX_BIT, TVFE_BACKP_GATE_MUX_WID);
  2103. // WRITE_APB_REG_BITS(TVFE_DVSS_MUXCTRL, operand->clamp_inv, DVSS_CLAMP_INV_BIT, DVSS_CLAMP_INV_WID );
  2104. WRITE_APB_REG_BITS(ADC_REG_2F, operand->clamp_ext, CLAMPEXT_BIT, CLAMPEXT_WID );
  2105. // WRITE_APB_REG_BITS(ADC_REG_19, operand->lpf_a, ENLPFA_BIT, ENLPFA_WID );
  2106. // WRITE_APB_REG_BITS(ADC_REG_1A, operand->lpf_b, ENLPFB_BIT, ENLPFB_WID );
  2107. // WRITE_APB_REG_BITS(ADC_REG_1B, operand->lpf_c, ENLPFC_BIT, ENLPFC_WID );
  2108. WRITE_APB_REG_BITS(ADC_REG_58, operand->clk_ext, EXTCLKSEL_BIT, EXTCLKSEL_WID);
  2109. WRITE_CBUS_REG(HHI_VAFE_CLKIN_CNTL, operand->clk_ctl);
  2110. // validate result
  2111. // adc_cal->reserved |= TVAFE_ADC_CAL_VALID;
  2112. // end of cal
  2113. operand->step = 0;
  2114. }
  2115. break;
  2116. default:
  2117. break;
  2118. }
  2119. if (operand->step)
  2120. return (true);
  2121. else
  2122. return (false);
  2123. }
  2124. void tvafe_adc_clamp_adjust(struct tvafe_info_s *info)
  2125. {
  2126. struct tvafe_operand_s *operand = &info->operand;
  2127. struct tvafe_adc_cal_s *adc_cal = &info->adc_cal_val;
  2128. unsigned int data = READ_APB_REG(TVFE_ADC_READBACK_INDICATOR);
  2129. unsigned int tgt_y = 0, tgt_c = 0;
  2130. bool cond = true;
  2131. // do adjust after TVIN_IOC_S_AFE_ADC_CAL is executed
  2132. if (!(adc_cal->reserved & TVAFE_ADC_CAL_VALID))
  2133. return;
  2134. // skip over the 1st vsync after TVIN_IOC_S_AFE_ADC_CAL is executed
  2135. operand->cnt++;
  2136. if (operand->cnt <= 1)
  2137. return;
  2138. if ((!adc_cal->a_analog_clamp) ||
  2139. (!adc_cal->b_analog_clamp) ||
  2140. (!adc_cal->c_analog_clamp) ||
  2141. (adc_cal->a_analog_clamp == 127) ||
  2142. (adc_cal->b_analog_clamp == 127) ||
  2143. (adc_cal->c_analog_clamp == 127)
  2144. )
  2145. return;
  2146. if ((info->param.port >= TVIN_PORT_COMP0) &&
  2147. (info->param.port <= TVIN_PORT_COMP7)
  2148. )
  2149. {
  2150. tgt_y = 37;
  2151. tgt_c = 512;
  2152. }
  2153. else if ((info->param.port >= TVIN_PORT_VGA0) &&
  2154. (info->param.port <= TVIN_PORT_VGA7)
  2155. )
  2156. {
  2157. tgt_y = 0;
  2158. tgt_c = 0;
  2159. }
  2160. else
  2161. return;
  2162. operand->adc0 += (data >> 20) & 0x000003ff;
  2163. operand->adc1 += (data >> 10) & 0x000003ff;
  2164. operand->adc2 += (data >> 0) & 0x000003ff;
  2165. if (operand->cnt == 5)
  2166. {
  2167. operand->adj = 0;
  2168. operand->adc0 = (operand->adc0 + 2) >> 2;
  2169. operand->adc1 = (operand->adc1 + 2) >> 2;
  2170. operand->adc2 = (operand->adc2 + 2) >> 2;
  2171. if (operand->adc0 > tgt_y)
  2172. {
  2173. cond = (!operand->dir) || (operand->dir0);
  2174. if ((adc_cal->a_analog_clamp) && cond)
  2175. {
  2176. adc_cal->a_analog_clamp--;
  2177. operand->dir = 1;
  2178. operand->dir0 = 1;
  2179. operand->adj = 1;
  2180. }
  2181. }
  2182. else
  2183. {
  2184. cond = (!operand->dir) || (!operand->dir0);
  2185. if ((adc_cal->a_analog_clamp < 127) && cond)
  2186. {
  2187. adc_cal->a_analog_clamp++;
  2188. operand->dir = 1;
  2189. operand->adj = 1;
  2190. }
  2191. }
  2192. if (operand->adc1 > tgt_c)
  2193. {
  2194. cond = (!operand->dir) || (operand->dir1);
  2195. if ((adc_cal->b_analog_clamp) && cond)
  2196. {
  2197. adc_cal->b_analog_clamp--;
  2198. operand->dir = 1;
  2199. operand->dir1 = 1;
  2200. operand->adj = 1;
  2201. }
  2202. }
  2203. else
  2204. {
  2205. cond = (!operand->dir) || (!operand->dir1);
  2206. if ((adc_cal->b_analog_clamp < 127) && cond)
  2207. {
  2208. adc_cal->b_analog_clamp++;
  2209. operand->dir = 1;
  2210. operand->adj = 1;
  2211. }
  2212. }
  2213. if (operand->adc2 > tgt_c)
  2214. {
  2215. cond = (!operand->dir) || (operand->dir2);
  2216. if ((adc_cal->c_analog_clamp) && cond)
  2217. {
  2218. adc_cal->c_analog_clamp--;
  2219. operand->dir = 1;
  2220. operand->dir0 = 1;
  2221. operand->adj = 1;
  2222. }
  2223. }
  2224. else
  2225. {
  2226. cond = (!operand->dir) || (!operand->dir2);
  2227. if ((adc_cal->c_analog_clamp < 127) && cond)
  2228. {
  2229. adc_cal->c_analog_clamp++;
  2230. operand->dir = 1;
  2231. operand->adj = 1;
  2232. }
  2233. }
  2234. if (operand->adj)
  2235. {
  2236. tvafe_set_cal_value(adc_cal);
  2237. operand->data0 = operand->adc0;
  2238. operand->data1 = operand->adc1;
  2239. operand->data2 = operand->adc2;
  2240. }
  2241. operand->cnt = 1;
  2242. operand->adc0 = 0;
  2243. operand->adc1 = 0;
  2244. operand->adc2 = 0;
  2245. }
  2246. }
  2247. // *****************************************************************************
  2248. // Function: fetch WSS data
  2249. //
  2250. // Params: system info
  2251. //
  2252. // Return: none
  2253. //
  2254. // *****************************************************************************
  2255. void tvafe_get_wss_data(struct tvafe_comp_wss_s *para)
  2256. {
  2257. para->wss1[0] = READ_APB_REG(TVFE_MISC_WSS1_INDICATOR1);
  2258. para->wss1[1] = READ_APB_REG(TVFE_MISC_WSS1_INDICATOR2);
  2259. para->wss1[2] = READ_APB_REG(TVFE_MISC_WSS1_INDICATOR3);
  2260. para->wss1[3] = READ_APB_REG(TVFE_MISC_WSS1_INDICATOR4);
  2261. para->wss1[4] = READ_APB_REG_BITS(TVFE_MISC_WSS1_INDICATOR5, WSS1_DATA_143_128_BIT, WSS1_DATA_143_128_WID);
  2262. para->wss2[0] = READ_APB_REG(TVFE_MISC_WSS2_INDICATOR1);
  2263. para->wss2[1] = READ_APB_REG(TVFE_MISC_WSS2_INDICATOR2);
  2264. para->wss2[2] = READ_APB_REG(TVFE_MISC_WSS2_INDICATOR3);
  2265. para->wss2[3] = READ_APB_REG(TVFE_MISC_WSS2_INDICATOR4);
  2266. para->wss2[4] = READ_APB_REG_BITS(TVFE_MISC_WSS2_INDICATOR5, WSS2_DATA_143_128_BIT, WSS2_DATA_143_128_WID);
  2267. }
  2268. void tvafe_top_set_de(enum tvin_sig_fmt_e fmt)
  2269. {
  2270. unsigned int hs = 0, he = 0, vs = 0, ve = 0;
  2271. hs = tvin_fmt_tbl[fmt].hs_width + tvin_fmt_tbl[fmt].hs_bp;
  2272. /* fix Comp de bug*/
  2273. if (fmt < TVIN_SIG_FMT_COMP_MAX && fmt > TVIN_SIG_FMT_VGA_MAX)
  2274. hs = (unsigned int)((signed int)hs + (signed int)tvafe_comp_hs_patch[fmt- TVIN_SIG_FMT_VGA_MAX - 1]);
  2275. vs = tvin_fmt_tbl[fmt].vs_width + tvin_fmt_tbl[fmt].vs_bp;
  2276. he = hs + tvin_fmt_tbl[fmt].h_active - 1;
  2277. ve = vs + tvin_fmt_tbl[fmt].v_active - 1;
  2278. WRITE_APB_REG_BITS(TVFE_DEG_H, hs,
  2279. DEG_HSTART_BIT, DEG_HSTART_WID);
  2280. WRITE_APB_REG_BITS(TVFE_DEG_H, he,
  2281. DEG_HEND_BIT, DEG_HEND_WID);
  2282. WRITE_APB_REG_BITS(TVFE_DEG_VODD, vs,
  2283. DEG_VSTART_ODD_BIT, DEG_VSTART_ODD_WID);
  2284. WRITE_APB_REG_BITS(TVFE_DEG_VODD, ve,
  2285. DEG_VEND_ODD_BIT, DEG_VEND_ODD_WID);
  2286. WRITE_APB_REG_BITS(TVFE_DEG_VEVEN, vs,
  2287. DEG_VSTART_EVEN_BIT, DEG_VSTART_EVEN_WID);
  2288. WRITE_APB_REG_BITS(TVFE_DEG_VEVEN, ve,
  2289. DEG_VEND_EVEN_BIT, DEG_VEND_EVEN_WID);
  2290. //fix 1080i60 field gen bug
  2291. if (fmt == TVIN_SIG_FMT_COMP_1080I_60D000)
  2292. WRITE_APB_REG_BITS(TVFE_SYNCTOP_SFG_MUXCTRL1, 0,
  2293. SFG_FLD_MANUAL_INV_BIT, SFG_FLD_MANUAL_INV_WID);
  2294. else
  2295. WRITE_APB_REG_BITS(TVFE_SYNCTOP_SFG_MUXCTRL1, 1,
  2296. SFG_FLD_MANUAL_INV_BIT, SFG_FLD_MANUAL_INV_WID);
  2297. }
  2298. void tvafe_top_config(enum tvin_sig_fmt_e fmt)
  2299. {
  2300. //tvafe_top_set_aafilter_control(fmt);
  2301. //tvafe_top_set_bp_gate(fmt);
  2302. //tvafe_top_set_mvdet_control(fmt);
  2303. tvafe_top_set_sfg_mux_control(fmt);
  2304. tvafe_top_set_wss_control(fmt);
  2305. tvafe_top_set_de(fmt);
  2306. }
  2307. void tvafe_reset_module(void)
  2308. {
  2309. WRITE_APB_REG_BITS(TVFE_RST_CTRL, 1, ALL_CLK_RST_BIT, ALL_CLK_RST_WID);
  2310. WRITE_APB_REG_BITS(TVFE_RST_CTRL, 0, ALL_CLK_RST_BIT, ALL_CLK_RST_WID);
  2311. }
  2312. void tvafe_enable_module(bool enable)
  2313. {
  2314. // enable
  2315. //main clk up
  2316. WRITE_CBUS_REG(HHI_VAFE_CLKXTALIN_CNTL, 0x100);
  2317. WRITE_CBUS_REG(HHI_VAFE_CLKOSCIN_CNTL, 0x100);
  2318. WRITE_CBUS_REG(HHI_VAFE_CLKIN_CNTL, 0x100);
  2319. WRITE_CBUS_REG(HHI_VAFE_CLKPI_CNTL, 0x100);
  2320. WRITE_CBUS_REG(HHI_TVFE_AUTOMODE_CLK_CNTL, 0x100);
  2321. //tvfe power up
  2322. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 1, COMP_CLK_ENABLE_BIT, COMP_CLK_ENABLE_WID);
  2323. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 1, EDID_CLK_EN_BIT, EDID_CLK_EN_WID);
  2324. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 1, DCLK_ENABLE_BIT, DCLK_ENABLE_WID);
  2325. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 1, VAFE_MCLK_EN_BIT, VAFE_MCLK_EN_WID);
  2326. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 3, TVFE_ADC_CLK_DIV_BIT, TVFE_ADC_CLK_DIV_WID);
  2327. //adc power up
  2328. WRITE_APB_REG_BITS(ADC_REG_21, 1, FULLPDZ_BIT, FULLPDZ_WID);
  2329. /*reset module*/
  2330. tvafe_reset_module();
  2331. // disable
  2332. if (!enable)
  2333. {
  2334. //adc power down
  2335. WRITE_APB_REG_BITS(ADC_REG_21, 0, FULLPDZ_BIT, FULLPDZ_WID);
  2336. //tvfe power down
  2337. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 0, COMP_CLK_ENABLE_BIT, COMP_CLK_ENABLE_WID);
  2338. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 0, EDID_CLK_EN_BIT, EDID_CLK_EN_WID);
  2339. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 0, DCLK_ENABLE_BIT, DCLK_ENABLE_WID);
  2340. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 0, VAFE_MCLK_EN_BIT, VAFE_MCLK_EN_WID);
  2341. WRITE_APB_REG_BITS(TVFE_TOP_CTRL, 0, TVFE_ADC_CLK_DIV_BIT, TVFE_ADC_CLK_DIV_WID);
  2342. //main clk down
  2343. WRITE_CBUS_REG(HHI_VAFE_CLKXTALIN_CNTL, 0);
  2344. WRITE_CBUS_REG(HHI_VAFE_CLKOSCIN_CNTL, 0);
  2345. WRITE_CBUS_REG(HHI_VAFE_CLKIN_CNTL, 0);
  2346. WRITE_CBUS_REG(HHI_VAFE_CLKPI_CNTL, 0);
  2347. WRITE_CBUS_REG(HHI_TVFE_AUTOMODE_CLK_CNTL, 0);
  2348. }
  2349. }