ark1668_lcd.c 59 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931
  1. #include <asm-generic/gpio.h>
  2. #include <asm/arch/ark-common.h>
  3. #include "ark1668_lcd.h"
  4. extern struct screen_info *g_screen_info;
  5. extern display_updatepara g_display_para;
  6. unsigned int ark_sys_read(unsigned int reg_offset)
  7. {
  8. return *((volatile unsigned int *)(SYS_BASE+reg_offset));
  9. }
  10. void ark_sys_write(unsigned int reg_offset, unsigned long value)
  11. {
  12. *((volatile unsigned int *)(SYS_BASE+reg_offset)) = value;
  13. }
  14. void ark_sys_pad_config(unsigned int reg_offset, unsigned int mask,
  15. unsigned int bit_offset, unsigned int val)
  16. {
  17. unsigned int reg;
  18. reg = ark_sys_read(reg_offset);
  19. reg &= ~(mask << bit_offset);
  20. reg |= ((val & mask) << bit_offset);
  21. ark_sys_write(reg_offset, reg);
  22. }
  23. void ark_osd_en_layer(int id, unsigned int enable)
  24. {
  25. unsigned int pos;
  26. /* CLCD_CONTROL REG0x04 */
  27. switch (id)
  28. {
  29. case 0: // osd1
  30. pos = 7;
  31. break;
  32. case 1: // osd2
  33. pos = 8;
  34. break;
  35. case 2: // osd3
  36. pos = 9;
  37. break;
  38. default:
  39. return;
  40. }
  41. if (enable)
  42. rLCD_CONTROL |= (1 << pos); /* enable osd layer on LCD screen */
  43. else
  44. rLCD_CONTROL &= ~(1 << pos); /* disable osd layer on LCD screen */
  45. }
  46. void ark_set_osd_frame_mode(int id, int frame)
  47. {
  48. /* frame mode select for interlace data capture (read) of osd layer,
  49. * normally used in cvbs, itu656, ypbpr
  50. */
  51. if (id == 0) {
  52. if (frame) {
  53. // CLCD_OSD1_CTL Reg0x074
  54. rLCD_OSD1_CTL |= 1<<26; //1=frame mode for interlace get data
  55. // from memory
  56. } else {
  57. rLCD_OSD1_CTL &= ~(1<<26); //0=field mode
  58. }
  59. } else if (id == 1) {
  60. if (frame) {
  61. // CLCD_OSD2_CTL Reg0x088
  62. rLCD_OSD2_CTL |= 1<<26;
  63. } else {
  64. rLCD_OSD2_CTL &= ~(1<<26);
  65. }
  66. } else if (id == 2) {
  67. if (frame) {
  68. // CLCD_OSD3_CTL Reg0x098
  69. rLCD_OSD3_CTL |= 1<<26;
  70. } else {
  71. rLCD_OSD3_CTL &= ~(1<<26);
  72. }
  73. }
  74. }
  75. #if ARK_DISPLAY_ALL_MODE
  76. void ark_osd_en_layer_tvenc(int id, unsigned int enable)
  77. {
  78. unsigned int pos;
  79. /* CLCD_CONTROL REG0x04 */
  80. switch (id)
  81. {
  82. case 0: // osd1
  83. if (enable) {
  84. rSYS_LCD_CLK_CFG |=(1<<13);
  85. rLCD_TV_CONTROL |= 1<<4;
  86. rLCD_CONTROL &= ~(1 << 7);
  87. } else {
  88. rSYS_LCD_CLK_CFG &=~(1<<13);
  89. rLCD_TV_CONTROL &=~(1<<4);
  90. }
  91. break;
  92. case 1: // osd2
  93. if (enable) {
  94. rSYS_LCD_CLK_CFG |=(1<<12);
  95. rLCD_TV_CONTROL |= 1<<5;
  96. rLCD_CONTROL &= ~(1 << 8);
  97. } else {
  98. rSYS_LCD_CLK_CFG &=~(1<<12);
  99. rLCD_TV_CONTROL &=~(1<<5);
  100. }
  101. break;
  102. case 2: // osd3
  103. if (enable) {
  104. rSYS_LCD_CLK_CFG |=(1<<11);
  105. rLCD_TV_CONTROL |= 1<<6;
  106. rLCD_CONTROL &= ~(1 << 9);
  107. } else {
  108. rSYS_LCD_CLK_CFG &=~(1<<11);
  109. rLCD_TV_CONTROL &=~(1<<6);
  110. }
  111. break;
  112. }
  113. }
  114. void ark_video_en_layer(int id, int enable)
  115. {
  116. unsigned int pos;
  117. /* CLCD_CONTROL REG0x04 */
  118. switch (id)
  119. {
  120. case 0: // video
  121. pos = 5;
  122. break;
  123. case 1: // video2
  124. pos = 6;
  125. break;
  126. default:
  127. return;
  128. }
  129. if (enable)
  130. rLCD_CONTROL |= (1 << pos); /* enable video layer on LCD screen */
  131. else
  132. rLCD_CONTROL &= ~(1 << pos); /* disable video layer on LCD screen */
  133. }
  134. void ark_video_en_layer_tvenc(int id, int enable)
  135. {
  136. unsigned int pos;
  137. /* CLCD_CONTROL REG0x04 */
  138. switch (id)
  139. {
  140. case 0: // video
  141. if (enable) {
  142. rSYS_LCD_CLK_CFG |=(1<<14);
  143. rLCD_TV_CONTROL |= 1<<2;
  144. rLCD_CONTROL &= ~(1 << 5);
  145. } else {
  146. rSYS_LCD_CLK_CFG &=~(1<<14);
  147. rLCD_TV_CONTROL &=~(1<<2);
  148. }
  149. break;
  150. case 1: // video2
  151. if (enable) {
  152. rSYS_DEVICE_CLK_CFG0 |=(1<<28);
  153. rLCD_TV_CONTROL |= 1<<3;
  154. rLCD_CONTROL &= ~(1 << 6);
  155. } else {
  156. rSYS_DEVICE_CLK_CFG0&=~(1<<28);
  157. rLCD_CONTROL&=~(1<<3);
  158. }
  159. break;
  160. default:
  161. break;
  162. }
  163. }
  164. #endif
  165. void ark_lcd_select_pad(void)
  166. {
  167. rSYS_PAD_CTRL00 = (1<<28) |(1<<24) |(1<<20) |(1<<16) |(1<<12) |(1<<8) | (1<<4) |(1<<0);
  168. rSYS_PAD_CTRL01 = (1<<28) |(1<<24) |(1<<20) |(1<<16) |(1<<12) |(1<<8) | (1<<4) |(1<<0);
  169. rSYS_PAD_CTRL02 = (1<<28) |(1<<24) |(1<<20) |(1<<16) |(1<<12) |(1<<8) | (1<<4) |(1<<0);
  170. rSYS_PAD_CTRL03 = (1<<12) |(1<<8) | (1<<4) |(1<<0);
  171. }
  172. void ark_lcd_clk_cfg(void)
  173. {
  174. rSYS_PER_CLK_EN |= 1 << 4;
  175. rSYS_LCD_CLK_CFG = (0<<31) | (0x36<<25) | (1<<23) | (4<<19) | (1<<7) | (3<<4) | 0;
  176. //rSYS_LCD_CLK_CFG = 0xa0e80090;
  177. }
  178. void ark_select_pad_for_pwm0(void)
  179. {
  180. u32 val;
  181. val = rSYS_PAD_CTRL09;
  182. val &= ~(0x3<<16);
  183. val |= (0x1<<16);
  184. val |= (0x2<<0);
  185. rSYS_PAD_CTRL09 = val;
  186. }
  187. void ark_select_pad_for_pwm1(void)
  188. {
  189. u32 val;
  190. val = rSYS_PAD_CTRL09;
  191. val &= ~(0x3<<2);
  192. val |= (0x2<<2);
  193. val &= ~(0x03 << 18);
  194. val |= (0x1<<18);//set GPIO79 as pwm1 function
  195. rSYS_PAD_CTRL09 = val;
  196. }
  197. void ark_select_pad_for_pwm3(void)
  198. {
  199. u32 val;
  200. val = rSYS_PAD_CTRL09;
  201. val &= ~(0x3<<22);
  202. val |= (1 << 22);
  203. rSYS_PAD_CTRL09 = val;
  204. }
  205. void ark_backlight_config_f(int screen_id)
  206. {
  207. if (screen_id == SCREEN_QUN700) {
  208. /////
  209. }else if (screen_id == SCREEN_CLAA101) {
  210. rPWM_ENA1 = 0x0;
  211. rPWM_CNTR1 = (50000 * 24) / 1000;
  212. rPWM_DUTY1 = (50000 * 24) / 1000;
  213. rPWM_ENA1 = 0x1;
  214. ark_select_pad_for_pwm1();
  215. udelay(200);
  216. //SetGPIODataDirection(81,euOutputPad);
  217. //SetGPIOPadData(81, 1); //open backlight
  218. gpio_direction_output(81,1);
  219. }else if (screen_id == SCREEN_C101EAN) {
  220. /////
  221. }
  222. }
  223. void ark_backlight_config(int screen_id)
  224. {
  225. int bkl_val = 30;
  226. if (screen_id == SCREEN_QUN700) {
  227. //SetGPIODataDirection(81,euOutputPad);
  228. mdelay(50);
  229. rPWM_ENA1 = 0x0;
  230. rPWM_CNTR1 = (50000 * 24) / 1000;
  231. rPWM_DUTY1 = (bkl_val*500 * 24)/ 1000;
  232. rPWM_ENA1 = 0x1;
  233. ark_select_pad_for_pwm1();
  234. //SetGPIOPadData(81, 1); //open backlight
  235. gpio_direction_output(81,1);
  236. }else if (screen_id == SCREEN_CLAA101) {
  237. rPWM_ENA1 = 0x0;
  238. rPWM_CNTR1 = (50000 * 24) / 1000;
  239. rPWM_DUTY1 = (bkl_val*500 * 24)/ 1000;
  240. rPWM_ENA1 = 0x1;
  241. ark_select_pad_for_pwm1();
  242. }else if (screen_id == SCREEN_C101EAN) {
  243. //selct gpio110(power), gpio65(leden), gpio56(backlight) pad
  244. //power on when system power on, no need config here
  245. //rSYS_PAD_CTRL0B &= ~(1 << 25);
  246. rSYS_PAD_CTRL08 &= ~(3 << 6);
  247. rSYS_PAD_CTRL06 &= ~(0xF << 4);
  248. //config init status
  249. //rGPIO_PD_MOD &= ~(1 << 14);
  250. //rGPIO_PD_RDATA &= (1 << 14);
  251. rGPIO_PC_MOD &= ~(1 << 1);
  252. rGPIO_PC_RDATA &= (1 << 1);
  253. rGPIO_PB_MOD &= ~(1 << 24);
  254. rGPIO_PB_RDATA &= (1 << 24);
  255. udelay(100);
  256. //power on
  257. //rGPIO_PD_RDATA |= (1 << 14);
  258. //mdelay(30);
  259. //leden on
  260. rGPIO_PC_RDATA |= (1 << 1);
  261. mdelay(200);
  262. //config backlight
  263. rPWM_ENA3 = 0x0;
  264. rPWM_CNTR3 = (50000 * 24) / 1000;;
  265. rPWM_DUTY3 = (bkl_val*500 * 24)/ 1000; ;
  266. rPWM_ENA3 = 0x1;
  267. ark_select_pad_for_pwm3();
  268. }
  269. }
  270. void ark_set_video_alpha(unsigned char alpha)
  271. {
  272. rLCD_VIDEO_VIDEO2_BLD_COEF &= ~0xFF;
  273. rLCD_VIDEO_VIDEO2_BLD_COEF |= alpha;
  274. }
  275. void ark_set_video2_alpha(unsigned char alpha)
  276. {
  277. rLCD_VIDEO_VIDEO2_BLD_COEF &= ~(0xFF<<8);
  278. rLCD_VIDEO_VIDEO2_BLD_COEF |= alpha<<8;
  279. }
  280. void ark_set_win1_alpha(u8 alpha)
  281. {
  282. rLCD_OSD1_CTL &= ~0xFF;
  283. rLCD_OSD1_CTL |= alpha;
  284. }
  285. void ark_set_win2_alpha(u8 alpha)
  286. {
  287. rLCD_OSD2_CTL &= ~0xFF;
  288. rLCD_OSD2_CTL |= alpha;
  289. }
  290. void ark_set_win3_alpha(u8 alpha)
  291. {
  292. rLCD_OSD3_CTL &= ~0xFF;
  293. rLCD_OSD3_CTL |= alpha;
  294. }
  295. #if ARK_DISPLAY_ALL_MODE
  296. void ark_set_gamma(void)
  297. {
  298. rLCD_GAMMA_REG_0 = 3;
  299. rLCD_GAMMA_REG_1 = (0X09 << 24) | (0X09 << 16) | (0X04 << 8) | 0X04;
  300. rLCD_GAMMA_REG_2 = (0X15 << 24) | (0X15 << 16) | (0X0F << 8) | 0X0F;
  301. rLCD_GAMMA_REG_3 = (0X24 << 24) | (0X24 << 16) | (0X1C << 8) | 0X1C;
  302. rLCD_GAMMA_REG_4 = (0X34 << 24) | (0X34 << 16) | (0X2C << 8) | 0X2C;
  303. rLCD_GAMMA_REG_5 = (0X44 << 24) | (0X44 << 16) | (0X3C << 8) | 0X3C;
  304. rLCD_GAMMA_REG_6 = (0X56 << 24) | (0X56 << 16) | (0X4D << 8) | 0X4D;
  305. rLCD_GAMMA_REG_7 = (0X68 << 24) | (0X68 << 16) | (0X5F << 8) | 0X5F;
  306. rLCD_GAMMA_REG_8 = (0X7C << 24) | (0X7C << 16) | (0X72 << 8) | 0X72;
  307. rLCD_GAMMA_REG_9 = (0X8F << 24) | (0X8F << 16) | (0X85 << 8) | 0X85;
  308. rLCD_GAMMA_REG_10 = (0XA3 << 24) | (0XA3 << 16) | (0X99 << 8) | 0X99;
  309. rLCD_GAMMA_REG_11 = (0XB5 << 24) | (0XB5 << 16) | (0XAC << 8) | 0XAC;
  310. rLCD_GAMMA_REG_12 = (0XC6 << 24) | (0XC6 << 16) | (0XBD << 8) | 0XBD;
  311. rLCD_GAMMA_REG_13 = (0XD5 << 24) | (0XD5 << 16) | (0XCD << 8) | 0XCD;
  312. rLCD_GAMMA_REG_14 = (0XE3 << 24) | (0XE3 << 16) | (0XDC << 8) | 0XDC;
  313. rLCD_GAMMA_REG_15 = (0XF1 << 24) | (0XF1 << 16) | (0XEA << 8) | 0XEA;
  314. rLCD_GAMMA_REG_16 = (0XFF << 24) | (0XFF << 16) | (0XF8 << 8) | 0XF8;
  315. rLCD_GAMMA_REG_17 = (0X09 << 24) | (0X09 << 16) | (0X04 << 8) | 0X04;
  316. rLCD_GAMMA_REG_18 = (0X15 << 24) | (0X15 << 16) | (0X0F << 8) | 0X0F;
  317. rLCD_GAMMA_REG_19 = (0X24 << 24) | (0X24 << 16) | (0X1C << 8) | 0X1C;
  318. rLCD_GAMMA_REG_20 = (0X34 << 24) | (0X34 << 16) | (0X2C << 8) | 0X2C;
  319. rLCD_GAMMA_REG_21 = (0X44 << 24) | (0X44 << 16) | (0X3C << 8) | 0X3C;
  320. rLCD_GAMMA_REG_22 = (0X56 << 24) | (0X56 << 16) | (0X4D << 8) | 0X4D;
  321. rLCD_GAMMA_REG_23 = (0X68 << 24) | (0X68 << 16) | (0X5F << 8) | 0X5F;
  322. rLCD_GAMMA_REG_24 = (0X7C << 24) | (0X7C << 16) | (0X72 << 8) | 0X72;
  323. rLCD_GAMMA_REG_25 = (0X8F << 24) | (0X8F << 16) | (0X85 << 8) | 0X85;
  324. rLCD_GAMMA_REG_26 = (0XA3 << 24) | (0XA3 << 16) | (0X99 << 8) | 0X99;
  325. rLCD_GAMMA_REG_27 = (0XB5 << 24) | (0XB5 << 16) | (0XAC << 8) | 0XAC;
  326. rLCD_GAMMA_REG_28 = (0XC6 << 24) | (0XC6 << 16) | (0XBD << 8) | 0XBD;
  327. rLCD_GAMMA_REG_29 = (0XD5 << 24) | (0XD5 << 16) | (0XCD << 8) | 0XCD;
  328. rLCD_GAMMA_REG_30 = (0XE3 << 24) | (0XE3 << 16) | (0XDC << 8) | 0XDC;
  329. rLCD_GAMMA_REG_31 = (0XF1 << 24) | (0XF1 << 16) | (0XEA << 8) | 0XEA;
  330. rLCD_GAMMA_REG_32 = (0XFF << 24) | (0XFF << 16) | (0XF8 << 8) | 0XF8;
  331. rLCD_GAMMA_REG_33 = (0X09 << 24) | (0X09 << 16) | (0X04 << 8) | 0X04;
  332. rLCD_GAMMA_REG_34 = (0X15 << 24) | (0X15 << 16) | (0X0F << 8) | 0X0F;
  333. rLCD_GAMMA_REG_35 = (0X24 << 24) | (0X24 << 16) | (0X1C << 8) | 0X1C;
  334. rLCD_GAMMA_REG_36 = (0X34 << 24) | (0X34 << 16) | (0X2C << 8) | 0X2C;
  335. rLCD_GAMMA_REG_37 = (0X44 << 24) | (0X44 << 16) | (0X3C << 8) | 0X3C;
  336. rLCD_GAMMA_REG_38 = (0X56 << 24) | (0X56 << 16) | (0X4D << 8) | 0X4D;
  337. rLCD_GAMMA_REG_39 = (0X68 << 24) | (0X68 << 16) | (0X5F << 8) | 0X5F;
  338. rLCD_GAMMA_REG_40 = (0X7C << 24) | (0X7C << 16) | (0X72 << 8) | 0X72;
  339. rLCD_GAMMA_REG_41 = (0X8F << 24) | (0X8F << 16) | (0X85 << 8) | 0X85;
  340. rLCD_GAMMA_REG_42 = (0XA3 << 24) | (0XA3 << 16) | (0X99 << 8) | 0X99;
  341. rLCD_GAMMA_REG_43 = (0XB5 << 24) | (0XB5 << 16) | (0XAC << 8) | 0XAC;
  342. rLCD_GAMMA_REG_44 = (0XC6 << 24) | (0XC6 << 16) | (0XBD << 8) | 0XBD;
  343. rLCD_GAMMA_REG_45 = (0XD5 << 24) | (0XD5 << 16) | (0XCD << 8) | 0XCD;
  344. rLCD_GAMMA_REG_46 = (0XE3 << 24) | (0XE3 << 16) | (0XDC << 8) | 0XDC;
  345. rLCD_GAMMA_REG_47 = (0XF1 << 24) | (0XF1 << 16) | (0XEA << 8) | 0XEA;
  346. rLCD_GAMMA_REG_48 = (0XFF << 24) | (0XFF << 16) | (0XF8 << 8) | 0XF8;
  347. }
  348. #endif
  349. void ark_gamma_init(void)
  350. {
  351. #if ARK_DISPLAY_ALL_MODE
  352. int i;
  353. unsigned int * reg_pos = &rLCD_GAMMA_REG_1;
  354. //set gamma from flash
  355. if ((g_display_para.gammainfo.gamma_en== 0x03) && (g_display_para.flag_gamma== GAMMA_INFO_FLAG))
  356. {
  357. printf("set gamma info from flash.\n");
  358. rLCD_GAMMA_REG_0 = 3;
  359. for (i = 0;i < GAMMA_REG_MAX;i++)
  360. {
  361. *reg_pos = g_display_para.gammainfo.gamma_regval[i];
  362. //printf("gamma[%d]0x%x = 0x%x.\n",i,reg_pos,*reg_pos);
  363. reg_pos++;
  364. }
  365. }
  366. else
  367. {
  368. //ark_set_gamma();
  369. //printf("set gamma info default.\n");
  370. }
  371. #endif
  372. }
  373. void ark_init_clcd_reg(void)
  374. {
  375. rLCD_CONTROL =
  376. 0<<29 | // 0=Prgb bit reverse disable
  377. 0<<28 | // 0=0-255 out yuv range in LCD layer
  378. // (1=16-235, for "601" standard)
  379. 5<<23 | // 26-23: 0=axi_read_cmd_id
  380. 0<<21 | // 22-21: 0=generate intr at start of LCD vsync
  381. 0<<18 | // 20-18: 0=BGR (RGB output mode)
  382. // this reg used to adjust sRGB screen data polarity
  383. 0<<15 | // 0=deinterlace output mode in LCD layer (?v????X?Ҧ?)
  384. 0<<11 | // 12-11: 0=generate intr at start of TV vsync
  385. 0<<10 | // 0=disable write back for video 2 layer
  386. 0<<9 | // disable osd layer 3
  387. 0<<8 | // disable osd layer 2
  388. 0<<7 | // disable osd layer 1
  389. 0<<6 | // disable video 2 layer
  390. 0<<5 | // disable video layer
  391. 0<<2 | // 4-2: 0=parallel screen 24 bit
  392. 0<<1 | // 0=srgb output signal
  393. // (1=output syuv422 signal)
  394. 1<<0; // 1=enable LCD display output
  395. rLCD_TIMING0 = (HSW<<20) | (HBP<<10) | (HFP<<0);
  396. rLCD_TIMING1 = (VFP<<19) | (VSW<<13) | ((LCD_W-1)<<0);
  397. rLCD_TIMING2 = (IOE<<23) | (IHS<<22) | (IVS<<21) | ((LCD_H-1)<<10) | (VBP<<0);
  398. rLCD_Y2R_COEF321 = 298<<0 | 91<<10 | 425<<20;
  399. rLCD_Y2R_COEF654 = 96<<0 | 184<<10| 465<<20;
  400. rLCD_Y2R_COEF7 = (rLCD_Y2R_COEF7&0xffffcc00) | 41<<0 | 1<<12 | 0<<13;
  401. rLCD_BACK_COLOR =
  402. 0x10<<16 | // 23-16: y of back color
  403. 0x80<<8 | // 15-8: Cb of back color
  404. 0x80; // 7-0: Cr of back color;
  405. /*set vp*/
  406. rLCD_VIDEO_VP_REG_0 = 0x17; //all vp bypass
  407. rLCD_VIDEO2_VP_REG_0 = 0x17; //all vp bypass
  408. /*set vde*/
  409. rLCD_VIDEO_VP_REG_1 = (0x40<<16) | (0x80<<8) | 0x80;
  410. rLCD_VIDEO2_VP_REG_1 = (0x40<<16) | (0x80<<8) | 0x80;
  411. rLCD_OSD1_VP_REG_1 = (0x40<<16) | (0x80<<8) | 0x80;
  412. rLCD_OSD2_VP_REG_1 = (0x40<<16) | (0x80<<8) | 0x80;
  413. rLCD_OSD3_VP_REG_1 = (0x40<<16) | (0x80<<8) | 0x80;
  414. /*set alpha*/
  415. ark_set_video_alpha(0xFF);
  416. ark_set_video2_alpha(0xFF);
  417. ark_set_win1_alpha(0xFF);
  418. ark_set_win2_alpha(0xFF);
  419. ark_set_win3_alpha(0xFF);
  420. rLCD_DITHERING = 1 << 23;
  421. rLCD_EANBLE = 1;
  422. }
  423. void ark_set_video_priority(int level)
  424. {
  425. rLCD_BLD_MODE_LCD_REG0 &= ~(0x7<<0);
  426. rLCD_BLD_MODE_LCD_REG0 |= (level<<0);
  427. }
  428. void ark_set_video2_priority(int level)
  429. {
  430. rLCD_BLD_MODE_LCD_REG1 &= ~(0x7<<0);
  431. rLCD_BLD_MODE_LCD_REG1 |= (level<<0);
  432. }
  433. void ark_set_win1_priority(int level)
  434. {
  435. rLCD_BLD_MODE_LCD_REG0 &= ~(0x7<<8);
  436. rLCD_BLD_MODE_LCD_REG0 |= (level << 8);
  437. }
  438. void ark_set_win2_priority(int level)
  439. {
  440. rLCD_BLD_MODE_LCD_REG0 &= ~(0x7<<16);
  441. rLCD_BLD_MODE_LCD_REG0 |= (level << 16);
  442. }
  443. void ark_set_win3_priority(int level)
  444. {
  445. rLCD_BLD_MODE_LCD_REG0 &= ~(0x7<<24);
  446. rLCD_BLD_MODE_LCD_REG0 |= (level<<24);
  447. }
  448. void ark_set_video_priority_tvenc(int level)
  449. {
  450. rLCD_BLD_MODE_TV_REG0 &= ~(0x7<<0);
  451. rLCD_BLD_MODE_TV_REG0 |= (level <<0);
  452. }
  453. void ark_set_video2_priority_tvenc(int level)
  454. {
  455. rLCD_BLD_MODE_TV_REG1 &= ~(0x7<<0);// video2
  456. rLCD_BLD_MODE_TV_REG1 |= (level <<0);
  457. }
  458. void ark_set_win1_priority_tvenc(int level)
  459. {
  460. rLCD_BLD_MODE_TV_REG0 &= ~(0x7<<8);// win1
  461. rLCD_BLD_MODE_TV_REG0 |= (level << 8);
  462. }
  463. void ark_set_win2_priority_tvenc(int level)
  464. {
  465. rLCD_BLD_MODE_TV_REG0 &= ~(0x7<<16);// win2
  466. rLCD_BLD_MODE_TV_REG0 |= (level << 16);
  467. }
  468. void ark_set_win3_priority_tvenc(int level)
  469. {
  470. rLCD_BLD_MODE_TV_REG0 &= ~(0x7<<24);// win3
  471. rLCD_BLD_MODE_TV_REG0 |= (level <<24);
  472. }
  473. void ark_disp_set_osd_alpha_blend_en_lcd(int id, int enable)
  474. {
  475. unsigned int pos;
  476. switch (id)
  477. {
  478. case 0: /* osd1 */
  479. pos = 13;
  480. break;
  481. case 1: /* osd2 */
  482. pos = 15;
  483. break;
  484. case 2: /* osd3 */
  485. pos = 17;
  486. break;
  487. default:
  488. return;
  489. }
  490. /* CLCD_BLD_MODE_LCD_REG1 REG0x064 */
  491. if (enable) {
  492. rLCD_BLD_MODE_LCD_REG1 |= 1 << pos;
  493. /* enable blending of osd layer with back color */
  494. } else {
  495. rLCD_BLD_MODE_LCD_REG1 &= ~(1 << pos);
  496. /* disable blending of osd layer with back color */
  497. }
  498. }
  499. void ark_disp_set_osd_per_pix_alpha_blend_en_lcd(int id, int enable)
  500. {
  501. unsigned int pos;
  502. switch (id)
  503. {
  504. case 0: /* osd1 */
  505. pos = 12;
  506. break;
  507. case 1: /* osd2 */
  508. pos = 14;
  509. break;
  510. case 2: /* osd3 */
  511. pos = 16;
  512. break;
  513. default:
  514. return;
  515. }
  516. /* CLCD_BLD_MODE_LCD_REG1 REG0x064 */
  517. if (enable) {
  518. rLCD_BLD_MODE_LCD_REG1 |= 1 << pos;
  519. /* enable using of pixel alpha (alpha value from pixel data) */
  520. } else {
  521. rLCD_BLD_MODE_LCD_REG1 &= ~(1 << pos);
  522. /* enable using of layer alpha (alpha value from register) */
  523. }
  524. }
  525. void ark_disp_set_osd_blend_mode_lcd(int id, unsigned int mode)
  526. {
  527. unsigned int pos;
  528. switch (id)
  529. {
  530. case 0: /* osd1 */
  531. pos = 12; // 15-12: blending mode of osd1
  532. break;
  533. case 1: /* osd2 */
  534. pos = 20; // 23-20: blending mode of osd2
  535. break;
  536. case 2: /* osd3 */
  537. pos = 28; // 31-28: blending mode of osd3
  538. break;
  539. default:
  540. return;
  541. }
  542. /* CLCD_BLD_MODE_LCD_REG0 REG0x060 */
  543. rLCD_BLD_MODE_LCD_REG0 &= ~(0xF << pos); // clear bits
  544. rLCD_BLD_MODE_LCD_REG0 |= mode << pos; // set blending mode of osd
  545. // 0000: the whole blending;
  546. // 0001: the whole overwrite;
  547. // 0010: key color transparence absolutely, the other overwrite;
  548. // 0011: key color transparence absolutely, the other blending;
  549. // 0100: key color overwrite, the other blending;
  550. // 0101: key color overwrite, the other transparence absolutely;
  551. // 0110: key color blending, the other overwrite;
  552. // 0111:key color blending, the other transparence absolutely;
  553. // 1000: the whole blending;
  554. // 1001: the whole overwrite(layer1 x a);
  555. // 1010: key color transparence, the other overwrite (xa);
  556. // 1011: key color transparence, the other blending;
  557. // 1100: key color overwrite(xa), the other blending;
  558. // 1101: key color overwrite(xa), the other transparence;
  559. // 1110: key color blending, the other overwrite(xa);
  560. }
  561. int ark_set_window_priority(int video_pri, int video2_pri, int win1_pri,int win2_pri,int win3_pri)
  562. {
  563. if(video_pri+video2_pri+win1_pri+win2_pri+win3_pri != 10)
  564. {
  565. return 0;
  566. }
  567. ark_set_video_priority(video_pri);
  568. ark_set_video2_priority(video2_pri);
  569. ark_set_win1_priority(win1_pri);
  570. ark_set_win2_priority(win2_pri);
  571. ark_set_win3_priority(win3_pri);
  572. return 1;
  573. }
  574. void ark_disp_set_video_layer_position(int id, int x, int y)
  575. {
  576. unsigned int x_sign, y_sign;
  577. int x_start, y_start;
  578. if (x < 0) {
  579. x_sign = 1;
  580. x_start = 0 - x;
  581. } else {
  582. x_sign = 0;
  583. x_start = x;
  584. }
  585. if(y < 0) {
  586. y_sign = 1;
  587. y_start = 0 - y;
  588. } else {
  589. y_sign = 0;
  590. y_start = y;
  591. }
  592. if (id == 0) {
  593. /* CLCD_VIDEO_POSITION REG0x04c */
  594. rLCD_VIDEO_POSITION =
  595. y_sign << 25 | // sign of y
  596. y_start << 13 | // 24-13: y of video layer
  597. x_sign << 12 | // sign of x
  598. x_start << 0; // 11-0: x of video layer
  599. } else if (id == 1) {
  600. /* CLCD_VIDEO2_POSITION REG0x334 */
  601. rLCD_VIDEO2_POSITION =
  602. y_sign << 25 | // sign of y
  603. y_start << 13 | // 24-13: y position of video2 layer
  604. x_sign << 12 | // sign of x
  605. x_start << 0; // 11-0: x position of video2 layer
  606. }
  607. }
  608. void ark_disp_set_osd_layer_position(int id, int x, int y)
  609. {
  610. unsigned int x_sign, y_sign;
  611. int x_start, y_start;
  612. if (x < 0) {
  613. x_sign = 1;
  614. x_start = 0 - x;
  615. } else {
  616. x_sign = 0;
  617. x_start = x;
  618. }
  619. if (y < 0) {
  620. y_sign = 1;
  621. y_start = 0 - y;
  622. } else {
  623. y_sign = 0;
  624. y_start = y;
  625. }
  626. switch (id)
  627. {
  628. case 0:
  629. /* CLCD_OSD1_POSITION REG0x7c */
  630. rLCD_OSD1_POSITION =
  631. y_sign << 25 | // sign of y
  632. y_start << 13 | // 24-13: y value of osd1 position on display
  633. x_sign << 12 | // sign of x
  634. x_start << 0; // 11-0: x value of osd1 position on display
  635. break;
  636. case 1:
  637. /* CLCD_OSD2_POSITION REG0x90 */
  638. rLCD_OSD2_POSITION =
  639. y_sign << 25 | // sign of y
  640. y_start << 13 | // 24-13: y value of osd2 position on display
  641. x_sign << 12 | // sign of x
  642. x_start << 0; // 11-0: x value of osd2 position on display
  643. break;
  644. case 2:
  645. /* CLCD_OSD3_POSITION REG0xa0 */
  646. rLCD_OSD3_POSITION =
  647. y_sign << 25 | // sign of y
  648. y_start << 13 | // y value of osd3 layer position on display
  649. x_sign << 12 | // sign of x
  650. x_start << 0; // x value of osd3 layer position on display
  651. break;
  652. default:
  653. break;
  654. }
  655. }
  656. void ark_display_video_image(unsigned int width,unsigned int height,unsigned int * buf,int format)
  657. {
  658. unsigned int rgb_ycbcr_bypass=0;
  659. unsigned int y_uv_order=0;
  660. if(format >= SEQ_Y_UV422)
  661. {
  662. y_uv_order = 1;
  663. format &= 1;
  664. rgb_ycbcr_bypass = 1;
  665. }
  666. else if(format <= YUV444)//rgb565
  667. {
  668. rgb_ycbcr_bypass = 1;
  669. }
  670. else
  671. {
  672. rgb_ycbcr_bypass = 0;
  673. }
  674. /*0x400322 ----> 0x420312*/
  675. rLCD_VIDEO_CTL = (1<<22) /*0x3c*/
  676. | (y_uv_order<<21) // 0
  677. | (1<<17)
  678. | (1<<9)
  679. | (1<<8)
  680. | (1<<5)
  681. | (rgb_ycbcr_bypass<<4) // 0
  682. | (format<<0); // 2
  683. if(format == SEQ_YUV420)
  684. rLCD_VIDEO_CTL |= (1<<11);
  685. /*swidth=3120 c30, sheight=4208 1070*/
  686. rLCD_VIDEO_WIN_POINT = 0; /*0x15c*/
  687. rLCD_VIDEO_WIN_SIZE = (height<<12) | (width<<0); /*0x40*/
  688. rLCD_VIDEO_POSITION = 0; /*0x4c*/
  689. rLCD_VIDEO_SIZE = (height<<12) | (width<<0); /*0x44*/
  690. rLCD_VIDEO_SOURCE_SIZE = (height << 12) | (width); /*0x16c*/
  691. rLCD_VIDEO_ADDR1 = (unsigned int )buf; /*0x054*/
  692. rLCD_VIDEO_ADDR2 = (unsigned int )buf + width*height; /*0x058*//*c3bc280*/
  693. if(format == SEQ_YUV420)
  694. {
  695. rLCD_VIDEO_ADDR3 = rLCD_VIDEO_ADDR2 + width*height/4;
  696. }
  697. else
  698. {
  699. rLCD_VIDEO_ADDR3 = rLCD_VIDEO_ADDR2 + width*height/2; /*0x5c*/
  700. }
  701. rLCD_CONTROL |= (1<<5);
  702. }
  703. int ark_set_window_priority_tvenc(int video_pri, int video2_pri, int win1_pri,int win2_pri,int win3_pri)
  704. {
  705. if(video_pri+video2_pri+win1_pri+win2_pri+win3_pri != 10)
  706. {
  707. return 0;
  708. }
  709. ark_set_video_priority_tvenc(video_pri);
  710. ark_set_video2_priority_tvenc(video2_pri);
  711. ark_set_win1_priority_tvenc(win1_pri);
  712. ark_set_win2_priority_tvenc(win2_pri);
  713. ark_set_win3_priority_tvenc(win3_pri);
  714. return 1;
  715. }
  716. void ark_set_osd_image(enum DISP_OSD_LAYER_ID layer_id,
  717. int format, int width, int height)
  718. {
  719. unsigned int rgb_ycbcr_bypass;
  720. unsigned int rgb_order = 0;
  721. unsigned int yuv_order = 0;
  722. unsigned int order;
  723. order = DispGetYUVOrder(format);
  724. format = DispGetYUVFormat(format);
  725. if(format == DISP_YUV422 || format == DISP_YUV444)
  726. {
  727. rgb_ycbcr_bypass = 1;
  728. yuv_order = order;
  729. }
  730. else
  731. {
  732. rgb_ycbcr_bypass = 0;
  733. rgb_order = order;
  734. }
  735. switch(layer_id)
  736. {
  737. case OSD1_LAYER:
  738. rLCD_OSD1_SIZE = (height<<12) | width;
  739. rLCD_OSD1_SOURCE_SIZE = (height << 12) | (width);
  740. rLCD_OSD1_WIN_POINT = (0 << 12) | (0);
  741. rLCD_OSD1_CTL &= ~(0x7FF<<12);
  742. rLCD_OSD1_CTL |= (yuv_order << 21) | (rgb_order << 18) |
  743. (1 << 17) | (rgb_ycbcr_bypass << 16) | (format << 12);
  744. break;
  745. case OSD2_LAYER:
  746. rLCD_OSD2_SIZE = (height<<12) | width;
  747. rLCD_OSD2_SOURCE_SIZE = (height << 12) | (width);
  748. rLCD_OSD2_WIN_POINT = (0 << 12) | (0);
  749. rLCD_OSD2_CTL &= ~(0x7FF<<12);
  750. rLCD_OSD2_CTL |= (yuv_order << 21) | (rgb_order << 18) |
  751. (1 << 17) | (rgb_ycbcr_bypass << 16) | (format << 12);
  752. break;
  753. case OSD3_LAYER:
  754. rLCD_OSD3_SIZE = (height<<12) | width;
  755. rLCD_OSD3_SOURCE_SIZE = (height << 12) | (width);
  756. rLCD_OSD3_WIN_POINT = (0 << 12) | (0);
  757. rLCD_OSD3_CTL &= ~(0x7FF<<12);
  758. rLCD_OSD3_CTL |= (yuv_order << 21) | (rgb_order << 18) |
  759. (1 << 17) | (rgb_ycbcr_bypass << 16) | (format << 12);
  760. break;
  761. default:
  762. printf("error osd layer_id %d.\n", layer_id);
  763. break;
  764. }
  765. }
  766. #if ARK_DISPLAY_ALL_MODE
  767. void ark_set_video_scaler(enum DISP_OSD_LAYER_ID layer_id,
  768. int format, int src_width, int src_height,
  769. int dst_width, int dst_height, int interlace)
  770. {
  771. unsigned int rgb_ycbcr_bypass=0;
  772. unsigned int vblank,hblank;
  773. unsigned int rgb_order = 0;
  774. unsigned int yuv_order = 0;
  775. if(DispGetYUVFormat(format) == DISP_SEQ_YUV420)
  776. {
  777. if(src_width & 7)
  778. {
  779. printf("Parameter error, width is not the multiple of 8.\r\n");
  780. return;
  781. }
  782. }
  783. if(DispGetYUVFormat(format) <= DISP_YUV444)
  784. {
  785. rgb_ycbcr_bypass = 1;
  786. yuv_order = DispGetYUVOrder(format);
  787. }
  788. else
  789. {
  790. rgb_ycbcr_bypass = 0;
  791. rgb_order = DispGetYUVOrder(format);
  792. }
  793. if(layer_id == VIDEO_LAYER)
  794. {
  795. rLCD_VIDEO_CTL = (1<<22) | ((yuv_order&3)<<17) | ((rgb_order&7)<<14)
  796. | (1<<8) | (1<<5) | (rgb_ycbcr_bypass<<4) | (DispGetYUVFormat(format)<<0);
  797. if(format == DISP_SEQ_Y_UV420 || format == DISP_SEQ_Y_UV422)
  798. rLCD_VIDEO_CTL |= (1<<21);
  799. if(DispGetYUVFormat(format) == DISP_SEQ_YUV420)
  800. rLCD_VIDEO_CTL |= (1<<11);
  801. rLCD_VIDEO_WIN_POINT = (0<< 12) | (0);
  802. rLCD_VIDEO_WIN_SIZE = (src_height<<12) | (src_width<<0);
  803. rLCD_VIDEO_POSITION = 0;
  804. rLCD_VIDEO_SIZE = (dst_height<<12) | (dst_width<<0);
  805. rLCD_VIDEO_SOURCE_SIZE = (src_height << 12) | (src_width);
  806. rLCD_VIDEO_SCALE_CTL = (1<<7) | (1<<5);
  807. if(dst_width < src_width) // enable filter when horizontal down scaler
  808. rLCD_VIDEO_SCALE_CTL |= (1<<6);
  809. /*When need cut after scaler,the dest size of the scaler must be the size
  810. you wanted plus the cut number you wanted*/
  811. rLCD_VIDEO_RIGHT_BOTTOM_CUT_NUM = (0<<8) | (0);
  812. rLCD_VIDEO_SCAL_CTL0 = (0<<18) | (src_width*1024/dst_width);
  813. rLCD_VIDEO_SCAL_CTL1 = (0<<18) | (src_height*1024/dst_height);
  814. if(interlace)
  815. {
  816. rLCD_TV_CONTROL &= ~(1<<8);
  817. //when v scaler cof is 0x400,v scaler bypass, now we should change the cof to
  818. //force v scaler, otherwise there was sawtooth on picture
  819. if((rLCD_VIDEO_SCAL_CTL1 & 0x3FFFF) == 0x400)
  820. rLCD_VIDEO_SCAL_CTL1 = rLCD_VIDEO_SCAL_CTL1 - 1;
  821. rLCD_VIDEO_SCALE_CTL &= ~(7<<9);
  822. rLCD_VIDEO_SCALE_CTL |= (1<<9) | (1<<11);
  823. }
  824. }
  825. else if(layer_id == VIDEO2_LAYER)
  826. {
  827. rLCD_VIDEO2_CTL = (1<<22) | ((yuv_order&3)<<17) | ((rgb_order&7)<<14)
  828. | (1<<8) | (1<<5) | (rgb_ycbcr_bypass<<4) | (DispGetYUVFormat(format)<<0);
  829. if(format == DISP_SEQ_Y_UV420 || format == DISP_SEQ_Y_UV422)
  830. rLCD_VIDEO2_CTL |= (1<<21);
  831. if(DispGetYUVFormat(format) == DISP_SEQ_YUV420)
  832. rLCD_VIDEO2_CTL |= (1<<13);
  833. rLCD_VIDEO2_WIN_POINT = (0 << 12) | (0);
  834. rLCD_VIDEO2_WIN_SIZE = (src_height<<12) | (src_width<<0);
  835. rLCD_VIDEO2_POSITION = 0;
  836. rLCD_VIDEO2_SIZE = (dst_height<<12) | (dst_width<<0);
  837. rLCD_VIDEO2_SOURCE_SIZE = (src_height << 12) | (src_width);
  838. rLCD_VIDEO2_SCALE_CTL = (1<<7) | (1<<5);
  839. if(dst_width < src_width) // enable filter when horizontal down scaler
  840. rLCD_VIDEO2_SCALE_CTL |= (1<<6);
  841. /*When need cut after scaler,the dest size of the scaler must be the size
  842. you wanted plus the cut number you wanted*/
  843. rLCD_VIDEO2_RIGHT_BOTTOM_CUT_NUM = (0<<8) | (0);
  844. rLCD_VIDEO2_SCAL_CTL0 = (0<<18) | (src_width*1024/dst_width);
  845. rLCD_VIDEO2_SCAL_CTL1 = (0<<18) | (src_height*1024/dst_height);
  846. if(interlace)
  847. {
  848. rLCD_TV_CONTROL &= ~(1<<8);
  849. //when v scaler cof is 0x400,v scaler bypass, now we should change the cof to
  850. //force v scaler, otherwise there was sawtooth on picture
  851. if((rLCD_VIDEO2_SCAL_CTL1 & 0x3FFFF) == 0x400)
  852. rLCD_VIDEO2_SCAL_CTL1 = rLCD_VIDEO2_SCAL_CTL1 - 1;
  853. rLCD_VIDEO2_SCALE_CTL &= ~(7<<9);
  854. rLCD_VIDEO2_SCALE_CTL |= (1<<9) | (1<<11);
  855. }
  856. if(rLCD_CONTROL & (1<<10))
  857. {
  858. rLCD_CONTROL &= ~(1<<10);
  859. rLCD_VIDEO2_CTL |= (1<<24);
  860. rLCD_VIDEO2_CTL &= ~(1<<24);
  861. }
  862. }
  863. }
  864. void ark_set_video_addr(enum DISP_VIDEO_LAYER_ID layer_id,
  865. unsigned int yrgbaddr, unsigned int cbcraddr,
  866. unsigned int craddr)
  867. {
  868. if( layer_id == VIDEO_LAYER ) {
  869. rLCD_VIDEO_ADDR1 = yrgbaddr;
  870. rLCD_VIDEO_ADDR2 = cbcraddr;
  871. rLCD_VIDEO_ADDR3 = craddr;
  872. } else if ( layer_id == VIDEO2_LAYER ) {
  873. rLCD_VIDEO2_ADDR1 = yrgbaddr;
  874. rLCD_VIDEO2_ADDR2 = cbcraddr;
  875. rLCD_VIDEO2_ADDR3 = craddr;
  876. } else printf("error video layer_id %d.\n", layer_id);
  877. }
  878. #endif
  879. void ark_set_osd_addr(enum DISP_OSD_LAYER_ID layer_id, unsigned int addr)
  880. {
  881. if( layer_id == OSD1_LAYER ) rLCD_OSD1_ADDR = addr;
  882. else if ( layer_id == OSD2_LAYER ) rLCD_OSD2_ADDR = addr;
  883. else if ( layer_id == OSD3_LAYER ) rLCD_OSD3_ADDR = addr;
  884. else printf("error osd layer_id %d.\n", layer_id);
  885. }
  886. void ark_disp_wait_lcd_frame_int(void)
  887. {
  888. // wait until LCD timing point intr happens (which is VSync here)
  889. rLCD_INTERRUPT_STATUS = 0;
  890. while(!(rLCD_INTERRUPT_STATUS & 0x01));
  891. // the timing point is set at bit22-21 on CLCD_CONTROL reg
  892. }
  893. void ark_disp_wait_tvenc_frame_int(void)
  894. {
  895. // wait until TV timing point intr happens (which is VSYNC here)
  896. rLCD_INTERRUPT_STATUS = 0;
  897. while(!(rLCD_INTERRUPT_STATUS & 0x08));
  898. // NOTE: the timing point is set at bit12-11 on CLCD_CONTROL reg
  899. }
  900. #if ARK_DISPLAY_ALL_MODE
  901. void ark_disp_set_tvenc_output_mode(int interlace)
  902. {
  903. if (interlace)
  904. rLCD_TV_CONTROL |= (1 << 8);
  905. else
  906. rLCD_TV_CONTROL &= ~(1 << 8);
  907. }
  908. void tvenc_reset(void)
  909. {
  910. rSYS_ANALOG_REG0 &= ~(3<<19);
  911. rSYS_ANALOG_REG1 &= ~((3<<22) | (1<<17) | (1<<15) | (7<<3) | 1);
  912. rLCD_YPBPR_CTRL0 &= ~1;
  913. rLCD_TV_CONTROL = 0;
  914. }
  915. void set_dds_freq(unsigned int dds_clk)
  916. {
  917. unsigned int dto_inc;
  918. unsigned int dds_cofe;
  919. unsigned int val;
  920. val = rSYS_ANALOG_REG1;
  921. val &= ~(0x1<<2);// scaler_factor = 32
  922. val &= ~(0x07<<10);
  923. val |= (1<<18); // enable
  924. rSYS_ANALOG_REG1 = val;
  925. dds_cofe = 1<<22;
  926. dto_inc = dds_cofe*dds_clk/(24*32);
  927. val = rSYS_DDS_CLK_CFG;
  928. val &= ~(0x3fffff);
  929. val |= dto_inc;
  930. rSYS_DDS_CLK_CFG = val;
  931. }
  932. #endif
  933. int is_interlace_tvenc(struct screen_info *screen)
  934. {
  935. if(screen->screen_type == SCREEN_TYPE_VGA)
  936. return 0;
  937. else if(screen->screen_type == SCREEN_TYPE_CVBS ||
  938. screen->screen_type == SCREEN_TYPE_ITU656)
  939. return 1;
  940. else if(screen->screen_type == SCREEN_TYPE_YPBPR)
  941. {
  942. if(screen->format == 0 || screen->format == 1 || screen->format == 6 ||
  943. screen->format == 7 || screen->format == 8)
  944. return 1;
  945. else
  946. return 0;
  947. }
  948. return 0;
  949. }
  950. #if ARK_DISPLAY_ALL_MODE
  951. void initializa_tvenc_vga(struct screen_info *screen)
  952. {
  953. tvenc_reset();
  954. //select pad
  955. rSYS_PAD_CTRL03 &= ~(0xFF<<8);
  956. rSYS_PAD_CTRL03 |= (5<<8) | (5<<12);
  957. //config timing
  958. rLCD_TIMING0_TV = ((screen->hsw-1)<<20)|((screen->hbp-1)<<10)|((screen->hfp-1)<<0);
  959. rLCD_TIMING1_TV = (screen->vfp<<19)|((screen->vsw-1)<<13)|(screen->width - 1);
  960. //rLCD_TIMING2_TV =(0<<23)|(0<<22)|(0<<21)|((screen->height - 1)<<10)| screen->vbp;
  961. rLCD_TIMING2_TV =(screen->de_active<<23)|(screen->hsync_active<<22)|(screen->vsync_active<<21)|((screen->height - 1)<<10)| screen->vbp;
  962. rLCD_TIMING_FRAME_START_CNT_TV = (screen->vsw-1) / 2;
  963. rLCD_TV_CONTROL |= (1<<31) | (1<<10) | 1;
  964. rLCD_YPBPR_CTRL0 = (1<<0);
  965. //config clk
  966. rSYS_DEVICE_CLK_CFG2 &=~(0xf<<20);
  967. rSYS_DEVICE_CLK_CFG2 |=(0x2<<20); //int_tv_clk = dds_clk:
  968. set_dds_freq(screen->clk_freq);
  969. rSYS_LCD_CLK_CFG &= ~(0x3f<<25);
  970. rSYS_LCD_CLK_CFG |= (1<<31)|(screen->clk_div1<<25); // clk_freq/clk_div1 = ?M
  971. udelay(10);
  972. //enable DAC
  973. rSYS_ANALOG_REG0 |= 3<<19;
  974. rSYS_ANALOG_REG1 |= (1<<22) | (1<<17) | (7<<3) | 1;
  975. }
  976. static void cvbs_init_ntsc(void)
  977. {
  978. //TV encoder setting
  979. #define chroma_freq_palbg 0x2a098acb //pal
  980. #define chroma_freq_palm 0x21e6efa4 //palm
  981. #define chroma_freq_palnc 0x21f69446 //palnc
  982. #define chroma_freq_ntsc 0x21f07c1f //ntsc
  983. #define chroma_phase 0x2a
  984. #define clrbar_sel 0
  985. #define clrbar_mode 0
  986. #define bypass_yclamp 0
  987. #define yc_delay 4
  988. #define cvbs_enable 1
  989. #define chroma_bw_1 0 // bw_1,bw_0 : 00: narrow band; 01: wide band; 10: extra wide; 11: ultra wide.
  990. #define chroma_bw_0 1
  991. #define comp_yuv 0
  992. #define compchgain 0
  993. #define hsync_width 0x3f //0x7e*2
  994. #define burst_width 0x44 //pal 0x3e ntsc 0x44
  995. #define back_porch 0x3b //pal 0x45 ntsc 0x3b
  996. #define cr_burst_amp 0x00 //pal 0x20 ntsc 0x00
  997. #define slave_mode 0x1
  998. #define blank_level 0xf0
  999. #define n1 0x17
  1000. #define n3 0x21
  1001. #define n8 0x1b
  1002. #define n9 0x1b
  1003. #define n10 0x24
  1004. #define num_lines 525 // pal: 625; ntsc: 525.
  1005. #define n0 0x3e
  1006. #define n13 0x0f
  1007. #define n14 0x0f
  1008. #define n15 0x60
  1009. #define n5 0x05
  1010. #define n20 0x04
  1011. #define n16 0x1
  1012. #define n7 0x2
  1013. #define tint 0
  1014. #define n17 0x0a
  1015. #define n19 0x05
  1016. #define n18 0x00
  1017. #define breeze_way 0x16
  1018. #define n21 0x3ff
  1019. #define front_porch 0x10 //pal 0x0c ntsc 0x10 ??
  1020. #define n11 0x7ce
  1021. #define n12 0x000
  1022. #define activeline 1440
  1023. #define uv_order 0
  1024. #define pal_mode 0 //pal 0x1 ntsc 0x0
  1025. #define invert_top 0
  1026. #define sys625_50 0
  1027. #define cphase_rst 3
  1028. #define n22 0
  1029. #define agc_pulse_level 0xa3
  1030. #define bp_pulse_level 0xc8
  1031. #define n4 0x15
  1032. #define n6 0x05
  1033. #define n2 0x15
  1034. #define soft_rst 0
  1035. #define row63 0
  1036. #define row64 0x07
  1037. #define wss_clock 0x2f7
  1038. #define wss_dataf1 0
  1039. #define wss_dataf0 0
  1040. #define wss_linef1 0
  1041. #define wss_linef0 0
  1042. #define wss_level 0x3ff
  1043. #define venc_en 1
  1044. #define uv_first 0
  1045. #define uv_flter_en 1
  1046. #define notch_en 0
  1047. #define notch_wide 0
  1048. #define notch_freq 0
  1049. #define row78 0
  1050. #define row79 0
  1051. #define row80 0
  1052. #define vsync5 0// 1 modify 190802 ntsc 0 pal 1
  1053. #if defined(CONFIG_CVBS_INIT_NEW)
  1054. //#define black_level 0x11a//0x110 modify 190802
  1055. #define black_level 0xf2//0x11a//0x110 modify 191123
  1056. #define white_level 0x380//0x36c modify 190802
  1057. #define sync_level 0x10//0x0 modify 190802
  1058. #define cb_burst_amp 0x60 //0x20 modify 190802
  1059. #define cb_gain 0xf9//0x89 modify 190802
  1060. #define cr_gain 0xf9//0x89 modify 190802
  1061. #define firstvideoline 0x15//0xe modify 190802
  1062. //#define vsync5 0// 1 modify 190802
  1063. #define vbi_blank_level 0xf0//0x128 modify 190802
  1064. //printf("cvbs_init_ntsc,change level.\r\n");
  1065. #else
  1066. #define black_level 0xf2
  1067. #define white_level 0x320
  1068. #define sync_level 0x48
  1069. #define cb_burst_amp 0x20
  1070. #define cb_gain 0x89
  1071. #define cr_gain 0x89
  1072. #define firstvideoline 0xe
  1073. //#define vsync5 1
  1074. #define vbi_blank_level 0x128
  1075. #endif
  1076. rLCD_TV_PARAM_REG0 = chroma_freq_ntsc ;//\u017d\CB\u017d\u0160\B6\u0161\D2\E5 N\D6\C6 P\D6\C6
  1077. rLCD_TV_PARAM_REG1 = chroma_bw_1<<27 | comp_yuv<<26|compchgain<<24|yc_delay<<17|cvbs_enable<<16|clrbar_sel<<10|clrbar_mode<<9|
  1078. bypass_yclamp<<8 | chroma_phase ;
  1079. rLCD_TV_PARAM_REG2 = cb_burst_amp<<24 | back_porch<<16 | burst_width<<8 | hsync_width;
  1080. rLCD_TV_PARAM_REG3 = black_level<< 16 | slave_mode<<8 | cr_burst_amp ;
  1081. rLCD_TV_PARAM_REG4 = n3<<24 | n1<<16 | blank_level ;
  1082. rLCD_TV_PARAM_REG5 = n10<<24 | n9<<16 | n8 ;
  1083. rLCD_TV_PARAM_REG6 = num_lines ;
  1084. rLCD_TV_PARAM_REG7 = n15<<24 | n14<<16| n13<<8 | n0 ;
  1085. rLCD_TV_PARAM_REG8 = cb_gain<<24 | white_level<<8 | n5 ;
  1086. rLCD_TV_PARAM_REG9 = n7<<24 | n16 <<16 | cr_gain<<8 | n20 ;
  1087. rLCD_TV_PARAM_REG10 = n18<<24 | n19 <<16 | n17<<8 | tint ;
  1088. rLCD_TV_PARAM_REG11 = front_porch<<24 | n21<<8 | breeze_way ;
  1089. rLCD_TV_PARAM_REG12 = n12 <<16 | n11 ;
  1090. rLCD_TV_PARAM_REG13 = activeline ;
  1091. rLCD_TV_PARAM_REG14 = n22<<24 | sync_level <<16 | uv_order<<15|pal_mode<<14|chroma_bw_0<<13|invert_top<<12|sys625_50<<11|
  1092. cphase_rst<<9|vsync5<<8 | firstvideoline ;
  1093. rLCD_TV_PARAM_REG15 = n6<<24 | n4 <<16 | bp_pulse_level<<8 | agc_pulse_level ;
  1094. rLCD_TV_PARAM_REG16 = soft_rst<<24| vbi_blank_level<<8 | n2 ;
  1095. rLCD_TV_PARAM_REG17 = row64 <<16 | wss_clock ;
  1096. rLCD_TV_PARAM_REG18 = wss_dataf1 ;
  1097. rLCD_TV_PARAM_REG19 = wss_dataf0 ;
  1098. rLCD_TV_PARAM_REG20 = wss_level <<16 | wss_linef0<<8 | wss_linef1 ;
  1099. rLCD_TV_PARAM_REG21 = row80<<24 | row79<<16 | row78<<8 | venc_en<<7 | uv_first <<6 | uv_flter_en<<5 |notch_en<<4 | notch_wide<<3 | notch_freq ;
  1100. }
  1101. static void cvbs_init_pal(void)
  1102. {
  1103. //TV encoder setting
  1104. #define chroma_freq_palbg 0x2a098acb //pal
  1105. #define chroma_freq_palm 0x21e6efa4 //palm
  1106. #define chroma_freq_palnc 0x21f69446 //palnc
  1107. #define chroma_freq_ntsc 0x21f07c1f //ntsc
  1108. #define chroma_phase 0x2a
  1109. #define clrbar_sel 0
  1110. #define clrbar_mode 0
  1111. #define bypass_yclamp 0
  1112. #define yc_delay 4
  1113. #define cvbs_enable 1
  1114. #define chroma_bw_1 0 // bw_1,bw_0 : 00: narrow band; 01: wide band; 10: extra wide; 11: ultra wide.
  1115. #define chroma_bw_0 1
  1116. #define comp_yuv 0
  1117. #define compchgain 0
  1118. #define hsync_width 0x3f //0x7e*2
  1119. #define burst_width 0x3e //pal 0x3e ntsc 0x44
  1120. #define back_porch 0x45 //pal 0x45 ntsc 0x3b
  1121. #define cb_burst_amp 0x20
  1122. #define cr_burst_amp 0x20 //pal 0x20 ntsc 0x00
  1123. #define slave_mode 0x1
  1124. #define blank_level 0xf0
  1125. #define n1 0x17
  1126. #define n3 0x21
  1127. #define n8 0x1b
  1128. #define n9 0x1b
  1129. #define n10 0x24
  1130. #define num_lines 625 // pal: 625; ntsc: 525.
  1131. #define n0 0x3e
  1132. #define n13 0x0f
  1133. #define n14 0x0f
  1134. #define n15 0x60
  1135. #define n5 0x05
  1136. #define cb_gain 0x89
  1137. #define n20 0x04
  1138. #define cr_gain 0x89
  1139. #define n16 0x1
  1140. #define n7 0x2
  1141. #define tint 0
  1142. #define n17 0x0a
  1143. #define n19 0x05
  1144. #define n18 0x00
  1145. #define breeze_way 0x16
  1146. #define n21 0x3ff
  1147. #define front_porch 0x0c //pal 0x0c ntsc 0x10
  1148. #define n11 0x7ce
  1149. #define n12 0x000
  1150. #define activeline 1440
  1151. #define firstvideoline 0x0e
  1152. #define uv_order 0
  1153. #define pal_mode 1 //pal 0x1 ntsc 0x0
  1154. #define invert_top 0
  1155. #define sys625_50 0
  1156. #define cphase_rst 3
  1157. #define vsync5 1
  1158. #define n22 0
  1159. #define agc_pulse_level 0xa3
  1160. #define bp_pulse_level 0xc8
  1161. #define n4 0x15
  1162. #define n6 0x05
  1163. #define n2 0x15
  1164. #define vbi_blank_level 0x128
  1165. #define soft_rst 0
  1166. #define row63 0
  1167. #define row64 0x07
  1168. #define wss_clock 0x2f7
  1169. #define wss_dataf1 0
  1170. #define wss_dataf0 0
  1171. #define wss_linef1 0
  1172. #define wss_linef0 0
  1173. #define wss_level 0x3ff
  1174. #define venc_en 1
  1175. #define uv_first 0
  1176. #define uv_flter_en 1
  1177. #define notch_en 0
  1178. #define notch_wide 0
  1179. #define notch_freq 0
  1180. #define row78 0
  1181. #define row79 0
  1182. #define row80 0
  1183. #if defined(CONFIG_CVBS_INIT_NEW)
  1184. #define black_level 0x110
  1185. #define white_level 0x36c
  1186. #define sync_level 0x0
  1187. printf("cvbs_init_pal,change level.\r\n");
  1188. #else
  1189. #define black_level 0xf2
  1190. #define white_level 0x320
  1191. #define sync_level 0x48
  1192. #endif
  1193. rLCD_TV_PARAM_REG0 = chroma_freq_palbg;//chroma_freq_ntsc ;//\u017d\CB\u017d\u0160\B6\u0161\D2\E5 N\D6\C6 P\D6\C6
  1194. rLCD_TV_PARAM_REG1 = chroma_bw_1<<27 | comp_yuv<<26|compchgain<<24|yc_delay<<17|cvbs_enable<<16|clrbar_sel<<10|clrbar_mode<<9|
  1195. bypass_yclamp<<8 | chroma_phase ;
  1196. rLCD_TV_PARAM_REG2 = cb_burst_amp<<24 | back_porch<<16 | burst_width<<8 | hsync_width;
  1197. rLCD_TV_PARAM_REG3 = black_level<< 16 | slave_mode<<8 | cr_burst_amp ;
  1198. rLCD_TV_PARAM_REG4 = n3<<24 | n1<<16 | blank_level ;
  1199. rLCD_TV_PARAM_REG5 = n10<<24 | n9<<16 | n8 ;
  1200. rLCD_TV_PARAM_REG6 = num_lines ;
  1201. rLCD_TV_PARAM_REG7 = n15<<24 | n14<<16| n13<<8 | n0 ;
  1202. rLCD_TV_PARAM_REG8 = cb_gain<<24 | white_level<<8 | n5 ;
  1203. rLCD_TV_PARAM_REG9 = n7<<24 | n16 <<16 | cr_gain<<8 | n20 ;
  1204. rLCD_TV_PARAM_REG10 = n18<<24 | n19 <<16 | n17<<8 | tint ;
  1205. rLCD_TV_PARAM_REG11 = front_porch<<24 | n21<<8 | breeze_way ;
  1206. rLCD_TV_PARAM_REG12 = n12 <<16 | n11 ;
  1207. rLCD_TV_PARAM_REG13 = activeline ;
  1208. rLCD_TV_PARAM_REG14 = n22<<24 | sync_level <<16 | uv_order<<15|pal_mode<<14|chroma_bw_0<<13|invert_top<<12|sys625_50<<11|
  1209. cphase_rst<<9|vsync5<<8 | firstvideoline ;
  1210. rLCD_TV_PARAM_REG15 = n6<<24 | n4 <<16 | bp_pulse_level<<8 | agc_pulse_level ;
  1211. rLCD_TV_PARAM_REG16 = soft_rst<<24| vbi_blank_level<<8 | n2 ;
  1212. rLCD_TV_PARAM_REG17 = row64 <<16 | wss_clock ;
  1213. rLCD_TV_PARAM_REG18 = wss_dataf1 ;
  1214. rLCD_TV_PARAM_REG19 = wss_dataf0 ;
  1215. rLCD_TV_PARAM_REG20 = wss_level <<16 | wss_linef0<<8 | wss_linef1 ;
  1216. rLCD_TV_PARAM_REG21 = row80<<24 | row79<<16 | row78<<8 | venc_en<<7 | uv_first <<6 | uv_flter_en<<5 |notch_en<<4 | notch_wide<<3 | notch_freq ;
  1217. }
  1218. void initializa_tvenc_cvbs(struct screen_info *screen)
  1219. {
  1220. unsigned int val;
  1221. tvenc_reset();
  1222. //clk enable
  1223. rSYS_PER_CLK_EN |= (1<<20);
  1224. //config timing
  1225. rLCD_TIMING0_TV = ((screen->hsw-1)<<20)|(0<<10)|(0<<0);
  1226. rLCD_TIMING1_TV = (0<<19)|((screen->vsw-1)<<13)|(screen->width - 1);
  1227. rLCD_TIMING2_TV =(0<<23)|(0<<22)|(0<<21)|((screen->height/2 - 1)<<10)| screen->vbp;
  1228. rLCD_TIMING_FRAME_START_CNT_TV = (screen->vsw-1) / 2;
  1229. rLCD_TV_HV_DELAY = 39;
  1230. if(screen->format == CVBS_FORMAT_NTSC) {
  1231. rLCD_TV_CONTROL |= (1<<1);
  1232. cvbs_init_ntsc();
  1233. } else if (screen->format == CVBS_FORMAT_PAL) {
  1234. rLCD_TV_CONTROL &= ~(1<<1);
  1235. cvbs_init_pal();
  1236. }
  1237. rLCD_TV_CONTROL |= 1;
  1238. #if defined(CONFIG_CVBS_INIT_NEW)
  1239. rLCD_TV_CONTROL |= (1<<9);//add 20190802
  1240. #endif
  1241. //config clk
  1242. set_dds_freq(216);
  1243. //set_dds_freq(screen->clk_freq);
  1244. //set div to get 13.5M clk
  1245. val = rSYS_LCD_CLK_CFG;
  1246. val &= ~(0x7f<<25);
  1247. val |= (4<<25);//add
  1248. rSYS_LCD_CLK_CFG = val;
  1249. //select dds clk src
  1250. val = rSYS_DEVICE_CLK_CFG2;
  1251. val &= ~(0x1FF<<20);
  1252. val |= (2<<20) | (4<<24) | (1<<28);
  1253. rSYS_DEVICE_CLK_CFG2 = val;
  1254. udelay(10);
  1255. //enable DAC
  1256. rSYS_ANALOG_REG1 |= (3<<22) | (1<<17) | (1<<15) | (1<<5);
  1257. }
  1258. void cvbs_dac_enable(void)
  1259. {
  1260. int val = 0;
  1261. char *s = NULL;
  1262. s = getenv("uboot_cvbs_disable");
  1263. if (s){
  1264. strict_strtoul(s, 19, &val);
  1265. if (val == 1){
  1266. rSYS_ANALOG_REG1 &= ~(1<<5);
  1267. printf("+++cvbs dac disable.\r\n");
  1268. return;
  1269. }
  1270. }
  1271. rSYS_ANALOG_REG1 |= (1<<5);
  1272. printf("cvbs dac enable.\r\n");
  1273. }
  1274. void initializa_tvenc_ypbpr(struct screen_info *screen)
  1275. {
  1276. int lps = screen->height;
  1277. int scan_mode = 0;
  1278. unsigned int val;
  1279. if(is_interlace_tvenc(screen)) {
  1280. lps /= 2;
  1281. scan_mode = 1;
  1282. }
  1283. tvenc_reset();
  1284. //enable clk
  1285. rSYS_PER_CLK_EN |= (1<<24);
  1286. //config timing
  1287. rLCD_TIMING0_TV = ((screen->hsw-1)<<20)|(0<<10)|(0<<0);
  1288. rLCD_TIMING1_TV = (0<<19)|((screen->vsw-1)<<13)|(screen->width - 1);
  1289. rLCD_TIMING2_TV =(0<<23)|(0<<22)|(0<<21)|((lps - 1)<<10)| 0;
  1290. rLCD_TIMING_FRAME_START_CNT_TV = (screen->vsw-1) / 2;
  1291. rLCD_TV_HV_DELAY = 39;
  1292. rLCD_TV_CONTROL = (scan_mode<<8) | (1<<0);
  1293. if(screen->format <= 3)
  1294. rLCD_YPBPR_CTRL0 = (1<<7)|(scan_mode<<6)|(screen->format<<2)|(1<<1)|(1<<0);
  1295. else
  1296. rLCD_YPBPR_CTRL0 = (0<<7)|(scan_mode<<6)|(screen->format<<2)|(1<<1)|(1<<0);
  1297. rLCD_YPBPR_CTRL0 |= (1 << 0);
  1298. //config clk
  1299. //set_dds_freq(297);
  1300. set_dds_freq(screen->clk_freq);
  1301. val = rSYS_LCD_CLK_CFG;
  1302. val &= ~(0x3f<<25);
  1303. val |= (1<<31);
  1304. #if 1
  1305. val |= screen->clk_div1<<25;
  1306. #else
  1307. switch(screen->format)
  1308. {
  1309. case YPBPR_FORMAT_480I: //13.5M
  1310. case YPBPR_FORMAT_576I:
  1311. val |= 22<<25;
  1312. break;
  1313. case YPBPR_FORMAT_480P: //27M
  1314. case YPBPR_FORMAT_576P:
  1315. val |= 11<<25;
  1316. break;
  1317. case YPBPR_FORMAT_720P60HZ:
  1318. case YPBPR_FORMAT_720P50HZ:
  1319. case YPBPR_FORMAT_1080I60HZ:
  1320. case YPBPR_FORMAT_1080I50HZ:
  1321. case YPBPR_FORMAT_1080I50HZ_1250: //74.25M
  1322. val |= 4<<25;
  1323. break;
  1324. case YPBPR_FORMAT_1080P60HZ: //148.5Mhz
  1325. case YPBPR_FORMAT_1080P50HZ:
  1326. val |= 2<<25;
  1327. break;
  1328. default:
  1329. break;
  1330. }
  1331. #endif
  1332. rSYS_LCD_CLK_CFG = val;
  1333. //select dds clk src
  1334. val = rSYS_DEVICE_CLK_CFG2;
  1335. val &= ~(0x1FF<<20);
  1336. val |= (2<<20) | (4<<24) | (1<<28);
  1337. rSYS_DEVICE_CLK_CFG2 = val;
  1338. udelay(10);
  1339. //enable DAC
  1340. rSYS_ANALOG_REG0 |= 3<<19;
  1341. rSYS_ANALOG_REG1 |= (1<<17) | (7<<3) | 1;
  1342. }
  1343. void initializa_tvenc_itu656(struct screen_info *screen)
  1344. {
  1345. unsigned int val;
  1346. tvenc_reset();
  1347. //select pad
  1348. rSYS_PAD_CTRL00 &= ~(0xFFFFFF<<8);
  1349. rSYS_PAD_CTRL00 |= (7<<8) | (7<<12) | (7<<16) | (7<<20) | (7<<24) | (7<<28);
  1350. rSYS_PAD_CTRL01 &= ~(0xFF<<8);
  1351. rSYS_PAD_CTRL01 |= (7<<8) | (7<<12);
  1352. rSYS_PAD_CTRL03 &= ~(0xF<<4);
  1353. rSYS_PAD_CTRL03 |= (7<<4);
  1354. //config timing
  1355. rLCD_TIMING0_TV = ((screen->hsw-1)<<20)|(0<<10)|(0<<0);
  1356. rLCD_TIMING1_TV = (0<<19)|((screen->vsw-1)<<13)|(screen->width - 1);
  1357. rLCD_TIMING2_TV =(0<<23)|(0<<22)|(0<<21)|((screen->height/2 - 1)<<10)| (0<<0);
  1358. rLCD_TIMING_FRAME_START_CNT_TV = (screen->vsw-1) / 2;
  1359. rLCD_TV_HV_DELAY = 0x22;
  1360. rLCD_TV_CONTROL &= ~(1 << 1);
  1361. rLCD_TV_CONTROL |= (1<<8)|(1<<7)|(screen->format<<1)|(1<<0);
  1362. //config clk
  1363. set_dds_freq(216);
  1364. val = rSYS_DEVICE_CLK_CFG2;
  1365. val &= ~(0x1FF<<20);//clk_54m = int_tv_clk/(clk_54m_div? clk_54m_div:1)
  1366. val |= (2<<20) | (4<<24) | (1<<28);//clk_54m =216M(DDS)/4 = 54m
  1367. rSYS_DEVICE_CLK_CFG2 = val;
  1368. val = rSYS_LCD_CLK_CFG;
  1369. val &= ~(1<<31); // clk_13p5m
  1370. val &= ~(0x3f<<25);
  1371. val |= (1<<24);// 1: ~ clk_27m
  1372. rSYS_LCD_CLK_CFG = val;
  1373. //enable DAC
  1374. rSYS_ANALOG_REG1 |= 1<<17;// rgb DAC enable
  1375. rSYS_ANALOG_REG1 &=~(7<<3);
  1376. }
  1377. #endif
  1378. void ark_display_initialize_common(void)
  1379. {
  1380. #if ARK_DISPLAY_ALL_MODE
  1381. vp_info *vp = &g_display_para.vpinfo;
  1382. //set vp
  1383. rLCD_VIDEO_VP_REG_0 = 0x17; //all vp bypass
  1384. rLCD_VIDEO2_VP_REG_0 = 0x17; //all vp bypass
  1385. rLCD_VIDEO_VP_REG_1 = (vp->video_hue<<24) | (vp->video_saturation<<16) | (vp->video_brightness<<8) | vp->video_contrast;
  1386. rLCD_VIDEO2_VP_REG_1 = (vp->video2_hue<<24)| (vp->video2_saturation<<16)| (vp->video2_brightness<<8)| vp->video2_contrast;
  1387. rLCD_OSD1_VP_REG_1 = (vp->osd1_hue<<24) | (vp->osd1_saturation<<16) | (vp->osd1_brightness<<8) | vp->osd1_contrast;
  1388. rLCD_OSD2_VP_REG_1 = (vp->osd2_hue<<24) | (vp->osd2_saturation<<16) | (vp->osd2_brightness<<8) | vp->osd2_contrast;
  1389. rLCD_OSD3_VP_REG_1 = (vp->osd3_hue<<24) | (vp->osd3_saturation<<16) | (vp->osd3_brightness<<8) | vp->osd3_contrast;
  1390. #else
  1391. rLCD_VIDEO_VP_REG_0 = 0x17; //all vp bypass
  1392. rLCD_VIDEO2_VP_REG_0 = 0x17; //all vp bypass
  1393. rLCD_VIDEO_VP_REG_1 = (0x0<<24) | (0x40<<16) | (0x80<<8) | 0x80;
  1394. rLCD_VIDEO2_VP_REG_1 = (0x0<<24) | (0x40<<16) | (0x80<<8) | 0x80;
  1395. rLCD_OSD1_VP_REG_1 = (0x0<<24) | (0x40<<16) | (0x80<<8) | 0x80;
  1396. rLCD_OSD2_VP_REG_1 = (0x0<<24) | (0x40<<16) | (0x80<<8) | 0x80;
  1397. rLCD_OSD3_VP_REG_1 = (0x0<<24) | (0x40<<16) | (0x80<<8) | 0x80;
  1398. #endif
  1399. /*printf("vp set: video=0x%08x, video2=0x%08x, osd1=0x%08x, osd2=0x%08x, osd3=0x%08x \r\n",
  1400. rLCD_VIDEO_VP_REG_1, rLCD_VIDEO2_VP_REG_1,rLCD_OSD1_VP_REG_1, rLCD_OSD2_VP_REG_1,rLCD_OSD3_VP_REG_1);*/
  1401. //set gamma
  1402. ark_gamma_init();
  1403. //set alpha
  1404. rLCD_VIDEO_VIDEO2_BLD_COEF &= ~0xFFFF;
  1405. rLCD_VIDEO_VIDEO2_BLD_COEF |= 0xFFFF;
  1406. rLCD_OSD1_CTL &= ~0xFF;
  1407. rLCD_OSD1_CTL |= 0xFF;
  1408. rLCD_OSD2_CTL &= ~0xFF;
  1409. rLCD_OSD2_CTL |= 0xFF;
  1410. rLCD_OSD3_CTL &= ~0xFF;
  1411. rLCD_OSD3_CTL |= 0xFF;
  1412. //set blend
  1413. #ifdef BOOT_CONFIG_PIXEL_ALPHA
  1414. rLCD_BLD_MODE_LCD_REG0 &= ~(0xF << 12);
  1415. rLCD_BLD_MODE_LCD_REG0 |= (0 << 12);
  1416. rLCD_BLD_MODE_LCD_REG1 |= (3 << 12);
  1417. rLCD_BLD_MODE_TV_REG0 &= ~(0xF << 12);
  1418. rLCD_BLD_MODE_TV_REG0 |= (0 << 12);
  1419. rLCD_BLD_MODE_TV_REG1 |= (3 << 12);
  1420. rLCD_BLD_MODE_LCD_REG0 &= ~(0xF << 28);
  1421. rLCD_BLD_MODE_LCD_REG0 |= (0 << 28);
  1422. rLCD_BLD_MODE_LCD_REG1 |= (3 << 16);
  1423. rLCD_BLD_MODE_TV_REG0 &= ~(0xF << 28);
  1424. rLCD_BLD_MODE_TV_REG0 |= (0 << 28);
  1425. rLCD_BLD_MODE_TV_REG1 |= (3 << 16);
  1426. #else
  1427. rLCD_BLD_MODE_LCD_REG0 &= ~(0xF << 12);
  1428. rLCD_BLD_MODE_LCD_REG0 |= (2 << 12);
  1429. rLCD_BLD_MODE_LCD_REG1 |= (1 << 13);
  1430. rLCD_BLD_MODE_TV_REG0 &= ~(0xF << 12);
  1431. rLCD_BLD_MODE_TV_REG0 |= (2 << 12);
  1432. rLCD_BLD_MODE_TV_REG1 |= (1 << 13);
  1433. rLCD_COLOR_KEY_MASK_VALUE_OSD1 = (1 << 24) | (BLACK_Y<<16) | (BLACK_U<<8) | BLACK_V;
  1434. #endif
  1435. rLCD_VIDEO_BURST_CTL = 0x1B84;
  1436. rLCD_VIDEO2_BURST_CTL = 0x1B84;
  1437. rLCD_EANBLE = 1;
  1438. }
  1439. void ark_display_initialize_rgbif(struct screen_info *screen)
  1440. {
  1441. unsigned int val;
  1442. if(screen->pad_unset == 1)
  1443. {
  1444. rSYS_PAD_CTRL00 = 0;
  1445. rSYS_PAD_CTRL01 = 0;
  1446. rSYS_PAD_CTRL02 = 0;
  1447. rSYS_PAD_CTRL03&= ~0xFFFF;
  1448. rGPIO_PA_MOD |= (0xFFFFFFF << 2);
  1449. //printf("rgbif pad unset: PAD_CTRL00=0x%08x,PAD_CTRL01=0x%08x,PAD_CTRL02=0x%08x,PAD_CTRL03=0x%08x,rGPIO_PA_MOD=0x%08x \r\n",
  1450. //rSYS_PAD_CTRL00, rSYS_PAD_CTRL01,rSYS_PAD_CTRL02, rSYS_PAD_CTRL03,rGPIO_PA_MOD);
  1451. }
  1452. else
  1453. {
  1454. rSYS_PAD_CTRL00 = (1<<28) |(1<<24) |(1<<20) |(1<<16) |(1<<12) |(1<<8) | (1<<4) |(1<<0);
  1455. rSYS_PAD_CTRL01 = (1<<28) |(1<<24) |(1<<20) |(1<<16) |(1<<12) |(1<<8) | (1<<4) |(1<<0);
  1456. rSYS_PAD_CTRL02 = (1<<28) |(1<<24) |(1<<20) |(1<<16) |(1<<12) |(1<<8) | (1<<4) |(1<<0);
  1457. rSYS_PAD_CTRL03 = (1<<12) |(1<<8) | (1<<4) |(1<<0);
  1458. }
  1459. rSYS_PER_CLK_EN |= 1 << 4;
  1460. val = rSYS_LCD_CLK_CFG;
  1461. val &= ~((0x1F<<19) | 0x7FF);
  1462. val |= (1<<23)
  1463. | (screen->clk_div1 << 19) //srgb_clock div factor, which divided from lcd clock defined in bit7
  1464. | (screen->clk_source << 7) //lcd clock select from system pll
  1465. | (screen->clk_div2 << 4) //lcd clock div factor, which divided from srgb_clock, syspll/13/1 = 393/13 =30.23M
  1466. | 5; //scaler clock div factor, it derived from lcd clock select switch defined in bit 7
  1467. rSYS_LCD_CLK_CFG = val;
  1468. //config video2 scaler clk
  1469. val = rSYS_DEVICE_CLK_CFG0;
  1470. val &= ~(0xF << 24);
  1471. val |= 4 << 24;
  1472. rSYS_DEVICE_CLK_CFG0 = val;
  1473. rSYS_CLK_DLY_REG &= ~(1 << 16);
  1474. rSYS_CLK_DLY_REG |= (screen->vclk_active << 16);
  1475. rLCD_CONTROL = (rLCD_CONTROL & (0xB << 6)) | (0<<29) | (0<<28) | (6<<23) | (3<<21) | (screen->rgb_mode<<18) | (1<<0);
  1476. rLCD_TIMING0 = (screen->hsw<<20) | (screen->hbp<<10) | (screen->hfp<<0);
  1477. rLCD_TIMING1 = (screen->vfp<<19) | (screen->vsw<<13) | ((screen->width-1)<<0);
  1478. rLCD_TIMING2 = (screen->hsync_active << 22) | (screen->vsync_active << 21) |
  1479. (screen->de_active << 23) | ((screen->height-1)<<10) | screen->vbp;
  1480. rLCD_Y2R_COEF321 = 298<<0
  1481. |91<<10
  1482. |425<<20;
  1483. rLCD_Y2R_COEF654 = 96<<0
  1484. |184<<10
  1485. |465<<20;
  1486. rLCD_Y2R_COEF7 = (rLCD_Y2R_COEF7 & 0xffffcc00)
  1487. |41<<0
  1488. |1<<12
  1489. |0<<13;
  1490. rLCD_BACK_COLOR = (BLACK_Y<<16) | (BLACK_U<<8) | BLACK_V; //set lcd back color
  1491. ark_set_window_priority(4, 1, 2, 0, 3);
  1492. ark_set_window_priority_tvenc(0, 4, 1, 2, 3);
  1493. ark_display_initialize_common();
  1494. }
  1495. void ark_display_initialize_lvdsif(struct screen_info *screen)
  1496. {
  1497. unsigned int val;
  1498. rSYS_PAD_CTRL08 |= (1<<31); // 1, select LVDS PAD
  1499. rSYS_PAD_CTRL09 &= ~(0x1ffff<<0); // select : b,c,d,ck pn
  1500. rSYS_PAD_CTRL00 &= ~(0xff<<0); //select: lvds_ap/an
  1501. rSYS_ANALOG_REG1 |= 1 << 26;
  1502. val = rSYS_LCD_CLK_CFG;
  1503. val &= ~((0x1F<<19) | 0x7FF);
  1504. val |= (1<<23)
  1505. | (screen->clk_div1 << 19) //srgb_clock div factor, which divided from lcd clock defined in bit7
  1506. | (screen->clk_source << 7) //lcd clock select from system pll
  1507. | (screen->clk_div2 << 4) //lcd clock div factor, which divided from srgb_clock, syspll/13/1 = 393/13 =30.23M
  1508. | 5; //scaler clock div factor, it derived from lcd clock select switch defined in bit 7
  1509. rSYS_LCD_CLK_CFG = val;
  1510. //config video2 scaler clk
  1511. val = rSYS_DEVICE_CLK_CFG0;
  1512. val &= ~(0xF << 24);
  1513. val |= 4 << 24;
  1514. rSYS_DEVICE_CLK_CFG0 = val;
  1515. rSYS_CLK_DLY_REG &= ~(1 << 16);
  1516. rSYS_CLK_DLY_REG |= (screen->vclk_active << 16);
  1517. rLCD_CONTROL = (rLCD_CONTROL & (0xB << 6)) | (0<<29) | (0<<28) | (6<<23) | (3<<21) | (screen->rgb_mode<<18) | (1<<0);
  1518. rLCD_TIMING0 = (screen->hsw<<20) | (screen->hbp<<10) | (screen->hfp<<0);
  1519. rLCD_TIMING1 = (screen->vfp<<19) | (screen->vsw<<13) | ((screen->width-1)<<0);
  1520. rLCD_TIMING2 = (screen->hsync_active << 22) | (screen->vsync_active << 21) |
  1521. (screen->de_active << 23) | ((screen->height-1)<<10) | screen->vbp;
  1522. rLCD_Y2R_COEF321 = 298<<0
  1523. |91<<10
  1524. |425<<20;
  1525. rLCD_Y2R_COEF654 = 96<<0
  1526. |184<<10
  1527. |465<<20;
  1528. rLCD_Y2R_COEF7 = (rLCD_Y2R_COEF7 & 0xffffcc00)
  1529. |41<<0
  1530. |1<<12
  1531. |0<<13;
  1532. rLCD_BACK_COLOR = (BLACK_Y<<16) | (BLACK_U<<8) | BLACK_V; //set lcd back color
  1533. ark_set_window_priority(4, 1, 2, 0, 3);
  1534. ark_set_window_priority_tvenc(0, 4, 1, 2, 3);
  1535. ark_display_initialize_common();
  1536. rSYS_LVDS_CTRL_CFG = screen->lvds_cfg;
  1537. //printf("lvds pad unset: rSYS_LVDS_CTRL_CFG=0x%08x,rLCD_TIMING0=0x%08x,rLCD_TIMING1=0x%08x,rLCD_TIMING2=0x%08x,rLCD_OSD2_VP_REG_1=0x%08x \r\n",
  1538. //rSYS_LVDS_CTRL_CFG, rLCD_TIMING0,rLCD_TIMING1, rLCD_TIMING2,rLCD_OSD2_VP_REG_1);
  1539. }
  1540. #if ARK_DISPLAY_ALL_MODE
  1541. void ark_display_initialize_itu601(struct screen_info *screen)
  1542. {
  1543. int screen_id = screen->screen_id;
  1544. unsigned int val;
  1545. rSYS_PAD_CTRL00 = (1<<28) |(1<<24) |(1<<20) |(1<<16) |(1<<12) |(1<<8) | (1<<4) |(1<<0);
  1546. // lcd_de,lcd_clk,lcd_vsync,lcd_hsync
  1547. rSYS_PAD_CTRL03 = (1<<12) |(1<<8) | (1<<4) |(1<<0);
  1548. rSYS_PER_CLK_EN |= 1 << 4;
  1549. if(screen->clk_source == 0x02)
  1550. set_dds_freq(screen->clk_freq);
  1551. val = rSYS_LCD_CLK_CFG;
  1552. val &= ~((0x1F<<19) | 0x7FF);
  1553. val = (0<<31)
  1554. | (0x36<<25)
  1555. | (1<<23)
  1556. | (screen->clk_div1 << 19)//(6<<19) //srgb_clock div factor, which divided from lcd clock defined in bit7
  1557. | (screen->clk_source << 7)//(1<<7) //lcd clock select from system pll
  1558. | (screen->clk_div2 << 4) //(2<<4) //lcd clock div factor, which divided from srgb_clock,
  1559. | 6; //scaler clock div factor, it derived from lcd clock select switch defined in bit 7
  1560. rSYS_LCD_CLK_CFG = val;
  1561. //config video2 scaler clk
  1562. val = rSYS_DEVICE_CLK_CFG0;
  1563. val &= ~(0xF << 24);
  1564. val |= 4 << 24;
  1565. rSYS_DEVICE_CLK_CFG0 = val;
  1566. rSYS_CLK_DLY_REG &= ~(1 << 16);
  1567. rSYS_CLK_DLY_REG |= (screen->vclk_active << 16);
  1568. rLCD_CONTROL = (rLCD_CONTROL & (0xB << 6)) | ((screen->vfp? 3 : 0)<<21) | (screen->rgb_mode<<18) | (1<<0);
  1569. rLCD_TIMING0 = (screen->hsw<<20) | (screen->hbp<<10) | (screen->hfp<<0);
  1570. rLCD_TIMING1 = (screen->vfp<<19) | (screen->vsw<<13) | ((screen->width-1)<<0);
  1571. rLCD_TIMING2 = (screen->hsync_active << 22) | (screen->vsync_active << 21) |
  1572. (screen->de_active << 23) | ((screen->height-1)<<10) | screen->vbp;
  1573. rLCD_Y2R_COEF321 = 298<<0
  1574. |91<<10
  1575. |425<<20;
  1576. rLCD_Y2R_COEF654 = 96<<0
  1577. |184<<10
  1578. |465<<20;
  1579. rLCD_Y2R_COEF7 = (rLCD_Y2R_COEF7 & 0xffffcc00)
  1580. |41<<0
  1581. |1<<12
  1582. |0<<13;
  1583. rLCD_BACK_COLOR = (BLACK_Y<<16) | (BLACK_U<<8) | BLACK_V; //set lcd back color
  1584. ark_set_window_priority(4, 1, 2, 0, 3);
  1585. ark_set_window_priority_tvenc(0, 4, 1, 2, 3);
  1586. ark_display_initialize_common();
  1587. rLCD_CONTROL &=~(0x7<<2);
  1588. rLCD_CONTROL|=(0x3<<2);//Screen type: srgb
  1589. rLCD_CONTROL |=(0x1<<1); //Srgb_yuv_rgb: yuv
  1590. rLCD_EXCTRL2&=~((0x3<<16)|(0x7<<18)|(0x7<<21));
  1591. rLCD_EXCTRL2|=(0x2<<16)|(0x5<<18)|(0x5<<21);
  1592. rSYS_ANALOG_REG1 &=~(7<<3);
  1593. }
  1594. void ark_display_initialize_vga(struct screen_info *screen)
  1595. {
  1596. unsigned int val;
  1597. val = rSYS_LCD_CLK_CFG;
  1598. val &= ~0x3FF;
  1599. val |= (1 << 7) | 3;
  1600. rSYS_LCD_CLK_CFG = val;
  1601. //config video2 scaler clk
  1602. val = rSYS_DEVICE_CLK_CFG0;
  1603. val &= ~(0xF << 24);
  1604. val |= 4 << 24;
  1605. rSYS_DEVICE_CLK_CFG0 = val;
  1606. rLCD_BACK_COLOR_TV = (BLACK_Y<<16) | (BLACK_U<<8) | BLACK_V; //set tv back color
  1607. ark_set_window_priority_tvenc(4, 1, 2, 0, 3);
  1608. ark_display_initialize_common();
  1609. initializa_tvenc_vga(screen);
  1610. }
  1611. void ark_display_initialize_cvbs(struct screen_info *screen)
  1612. {
  1613. unsigned int val;
  1614. val = rSYS_LCD_CLK_CFG;
  1615. val &= ~0x3FF;
  1616. val |= (2 << 7) | 3;
  1617. rSYS_LCD_CLK_CFG = val;
  1618. //config video2 scaler clk
  1619. val = rSYS_DEVICE_CLK_CFG0;
  1620. val &= ~(0xF << 24);
  1621. val |= 2 << 24;
  1622. rSYS_DEVICE_CLK_CFG0 = val;
  1623. rLCD_BACK_COLOR_TV = (BLACK_Y<<16) | (BLACK_U<<8) | BLACK_V; //set tv back color
  1624. ark_set_window_priority_tvenc(4, 1, 2, 0, 3);
  1625. ark_display_initialize_common();
  1626. initializa_tvenc_cvbs(screen);
  1627. }
  1628. void ark_display_initialize_ypbpr(struct screen_info *screen)
  1629. {
  1630. unsigned int val;
  1631. val = rSYS_LCD_CLK_CFG;
  1632. val &= ~0x3FF;
  1633. val |= (1 << 7) | 3;
  1634. rSYS_LCD_CLK_CFG = val;
  1635. rLCD_BACK_COLOR_TV = (BLACK_Y<<16) | (BLACK_U<<8) | BLACK_V; //set tv back color
  1636. ark_set_window_priority_tvenc(4, 1, 2, 0, 3);
  1637. ark_display_initialize_common();
  1638. initializa_tvenc_ypbpr(screen);
  1639. }
  1640. void ark_display_initialize_itu656(struct screen_info *screen)
  1641. {
  1642. unsigned int val;
  1643. val = rSYS_LCD_CLK_CFG;
  1644. val &= ~(0xF << 7);//val &= ~0x3FF;
  1645. val |= (1 << 7);//val |= (1 << 7) | 3;
  1646. rSYS_LCD_CLK_CFG = val;
  1647. rLCD_BACK_COLOR_TV = (BLACK_Y<<16) | (BLACK_U<<8) | BLACK_V; //set tv back color
  1648. ark_set_window_priority_tvenc(4, 1, 2, 0, 3);
  1649. ark_display_initialize_common();
  1650. initializa_tvenc_itu656(screen);
  1651. }
  1652. #endif
  1653. void ark_display_initialize_port(struct screen_info *screen)
  1654. {
  1655. enum screen_type_id screen_type = screen->screen_type;
  1656. switch(screen_type) {
  1657. case SCREEN_TYPE_RGB:
  1658. ark_display_initialize_rgbif(screen);
  1659. break;
  1660. case SCREEN_TYPE_LVDS:
  1661. ark_display_initialize_lvdsif(screen);
  1662. break;
  1663. #if ARK_DISPLAY_ALL_MODE
  1664. case SCREEN_TYPE_ITU601:
  1665. ark_display_initialize_itu601(screen);
  1666. break;
  1667. case SCREEN_TYPE_VGA:
  1668. ark_display_initialize_vga(screen);
  1669. break;
  1670. case SCREEN_TYPE_CVBS:
  1671. ark_display_initialize_cvbs(screen);
  1672. break;
  1673. case SCREEN_TYPE_YPBPR:
  1674. ark_display_initialize_ypbpr(screen);
  1675. break;
  1676. case SCREEN_TYPE_ITU656:
  1677. ark_display_initialize_itu656(screen);
  1678. break;
  1679. #endif
  1680. default:
  1681. break;
  1682. }
  1683. }