Advertisement
Serg398

Untitled

Apr 5th, 2016
398
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 42.00 KB | None | 0 0
  1. /* Copyright Statement:
  2. *
  3. * This software/firmware and related documentation ("MediaTek Software") are
  4. * protected under relevant copyright laws. The information contained herein
  5. * is confidential and proprietary to MediaTek Inc. and/or its licensors.
  6. * Without the prior written permission of MediaTek inc. and/or its licensors,
  7. * any reproduction, modification, use or disclosure of MediaTek Software,
  8. * and information contained herein, in whole or in part, shall be strictly prohibited.
  9. */
  10. /* MediaTek Inc. (C) 2010. All rights reserved.
  11. *
  12. * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  13. * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  14. * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
  15. * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  16. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  18. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  19. * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  20. * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
  21. * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
  22. * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
  23. * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
  24. * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
  25. * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
  26. * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  27. * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  28. * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
  29. * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  30. *
  31. * The following software/firmware and/or related documentation ("MediaTek Software")
  32. * have been modified by MediaTek Inc. All revisions are subject to any receiver's
  33. * applicable license agreements with MediaTek Inc.
  34. */
  35.  
  36. /*****************************************************************************
  37. * Copyright Statement:
  38. * --------------------
  39. * This software is protected by Copyright and the information contained
  40. * herein is confidential. The software may not be copied and the information
  41. * contained herein may not be used or disclosed except with the written
  42. * permission of MediaTek Inc. (C) 2008
  43. *
  44. BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  45. * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  46. * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  47. * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  48. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  49. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  50. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  51. * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  52. * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  53. * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  54. * NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  55. * SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  56. *
  57. * BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  58. * LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  59. * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  60. * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  61. * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  62. *
  63. * THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  64. * WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  65. * LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  66. * RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  67. * THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  68. *
  69. *****************************************************************************/
  70.  
  71. #ifndef BUILD_LK
  72. #include <linux/string.h>
  73. #endif
  74. #include "lcm_drv.h"
  75.  
  76. #ifdef BUILD_LK
  77. #include <platform/mt_gpio.h>
  78. #elif defined(BUILD_UBOOT)
  79. #include <asm/arch/mt_gpio.h>
  80. #else
  81. #include <mach/mt_gpio.h>
  82. #endif
  83.  
  84.  
  85. // ---------------------------------------------------------------------------
  86. // Local Constants
  87. // ---------------------------------------------------------------------------
  88.  
  89. #define FRAME_WIDTH (720)
  90. #define FRAME_HEIGHT (1280)
  91.  
  92. #ifndef TRUE
  93. #define TRUE 1
  94. #endif
  95.  
  96. #ifndef FALSE
  97. #define FALSE 0
  98. #endif
  99.  
  100. //#define LCM_DSI_CMD_MODE 0
  101.  
  102. #define LCM_ID 0x1283
  103. #if 0//ined(LENOVO_PROJECT_SCOFIELD) || defined(LENOVO_PROJECT_SCOFIELDTD)
  104. #define LCM_BACKLIGHT_EN GPIO18
  105. #define LCM_ID_PIN GPIO114
  106. #define LCM_COMPARE_BY_SW 1
  107. #else
  108. #define LCM_BACKLIGHT_EN GPIO116
  109. #define LCM_ID_PIN GPIO92
  110. #define LCM_COMPARE_BY_SW 1
  111. #endif
  112.  
  113. // ---------------------------------------------------------------------------
  114. // Local Variables
  115. // ---------------------------------------------------------------------------
  116. static unsigned int lcm_esd_test = FALSE; ///only for ESD test
  117.  
  118. static LCM_UTIL_FUNCS lcm_util = {0};
  119.  
  120. #define SET_RESET_PIN(v) (lcm_util.set_reset_pin((v)))
  121.  
  122. #define UDELAY(n) (lcm_util.udelay(n))
  123. #define MDELAY(n) (lcm_util.mdelay(n))
  124.  
  125.  
  126. // ---------------------------------------------------------------------------
  127. // Local Functions
  128. // ---------------------------------------------------------------------------
  129.  
  130. #define dsi_set_cmdq_V2(cmd, count, ppara, force_update) lcm_util.dsi_set_cmdq_V2(cmd, count, ppara, force_update)
  131. #define dsi_set_cmdq_V4(pdata, queue_size, force_update) lcm_util.dsi_set_cmdq_V4(pdata, queue_size, force_update)
  132.  
  133. #define dsi_set_cmdq(pdata, queue_size, force_update) lcm_util.dsi_set_cmdq(pdata, queue_size, force_update)
  134. #define wrtie_cmd(cmd) lcm_util.dsi_write_cmd(cmd)
  135. #define write_regs(addr, pdata, byte_nums) lcm_util.dsi_write_regs(addr, pdata, byte_nums)
  136. #define read_reg(cmd) lcm_util.dsi_dcs_read_lcm_reg(cmd)
  137. #define read_reg_v2(cmd, buffer, buffer_size) lcm_util.dsi_dcs_read_lcm_reg_v2(cmd, buffer, buffer_size)
  138. static unsigned int lcm_cabcmode_index = 3;
  139.  
  140. static unsigned int lcm_compare_id(void);
  141.  
  142. // ---------------------------------------------------------------------------
  143. // LCM Driver Implementations
  144. // ---------------------------------------------------------------------------
  145.  
  146. static void lcm_set_util_funcs(const LCM_UTIL_FUNCS *util)
  147. {
  148. memcpy(&lcm_util, util, sizeof(LCM_UTIL_FUNCS));
  149. }
  150.  
  151.  
  152. static void lcm_get_params(LCM_PARAMS *params)
  153. {
  154. unsigned int div1 = 0;
  155. unsigned int div2 = 0;
  156. unsigned int pre_div = 0;
  157. unsigned int post_div = 0;
  158. unsigned int fbk_sel = 0;
  159. unsigned int fbk_div = 0;
  160. unsigned int lane_no = 0;//lcm_params->dsi.LANE_NUM;
  161.  
  162. unsigned int cycle_time;
  163. unsigned int ui;
  164. unsigned int hs_trail_m, hs_trail_n;
  165.  
  166.  
  167. memset(params, 0, sizeof(LCM_PARAMS));
  168.  
  169. params->type = LCM_TYPE_DSI;
  170.  
  171. params->width = FRAME_WIDTH;
  172. params->height = FRAME_HEIGHT;
  173.  
  174. // enable tearing-free
  175. params->dbi.te_mode = LCM_DBI_TE_MODE_VSYNC_ONLY;
  176. params->dbi.te_edge_polarity = LCM_POLARITY_RISING;
  177.  
  178. #if (LCM_DSI_CMD_MODE)
  179. params->dsi.mode = CMD_MODE;
  180. #else
  181. params->dsi.mode = BURST_VDO_MODE;
  182. #endif
  183.  
  184. // DSI
  185. /* Command mode setting */
  186. params->dsi.LANE_NUM = LCM_FOUR_LANE;
  187. //The following defined the fomat for data coming from LCD engine.
  188. params->dsi.data_format.color_order = LCM_COLOR_ORDER_RGB;
  189. params->dsi.data_format.trans_seq = LCM_DSI_TRANS_SEQ_MSB_FIRST;
  190. params->dsi.data_format.padding = LCM_DSI_PADDING_ON_LSB;
  191. params->dsi.data_format.format = LCM_DSI_FORMAT_RGB888;
  192.  
  193. // Highly depends on LCD driver capability.
  194. // Not support in MT6573
  195. params->dsi.packet_size=256;
  196.  
  197. // Video mode setting
  198. params->dsi.intermediat_buffer_num = 0;
  199.  
  200. params->dsi.PS=LCM_PACKED_PS_24BIT_RGB888;
  201.  
  202. params->dsi.vertical_sync_active = 2;
  203. params->dsi.vertical_backporch = 14;
  204. params->dsi.vertical_frontporch = 16;
  205. params->dsi.vertical_active_line = FRAME_HEIGHT;
  206.  
  207. params->dsi.horizontal_sync_active = 2;
  208. params->dsi.horizontal_backporch = 34;
  209. params->dsi.horizontal_frontporch = 34;
  210. params->dsi.horizontal_active_pixel = FRAME_WIDTH;
  211.  
  212. // Bit rate calculation
  213. params->dsi.pll_div1=0; // fref=26MHz, fvco=fref*(div1+1) (div1=0~63, fvco=500MHZ~1GHz)
  214. params->dsi.pll_div2=1; // div2=0~15: fout=fvo/(2*div2)
  215. params->dsi.fbk_div =16; //fref=26MHz, fvco=fref*(fbk_div+1)*2/(div1_real*div2_real)
  216.  
  217. // params->dsi.HS_PRPR = 4;
  218. // params->dsi.pll_select=1;
  219. params->dsi.hs_read = 1;//need hs read
  220. #if 1
  221. params->bl_app.min =1;
  222. params->bl_app.def =102;
  223. params->bl_app.max =255;
  224.  
  225. params->bl_bsp.min =5;
  226. params->bl_bsp.def =102;
  227. params->bl_bsp.max =255;
  228. #endif
  229.  
  230. #if 1
  231. div1 = params->dsi.pll_div1;
  232. div2 = params->dsi.pll_div2;
  233. fbk_div = params->dsi.fbk_div;
  234. switch(div1)
  235. {
  236. case 0:
  237. div1 = 1;
  238. break;
  239.  
  240. case 1:
  241. div1 = 2;
  242. break;
  243.  
  244. case 2:
  245. case 3:
  246. div1 = 4;
  247. break;
  248.  
  249. default:
  250. div1 = 4;
  251. break;
  252. }
  253.  
  254. switch(div2)
  255. {
  256. case 0:
  257. div2 = 1;
  258. break;
  259. case 1:
  260. div2 = 2;
  261. break;
  262. case 2:
  263. case 3:
  264. div2 = 4;
  265. break;
  266. default:
  267. div2 = 4;
  268. break;
  269. }
  270.  
  271. switch(pre_div)
  272. {
  273. case 0:
  274. pre_div = 1;
  275. break;
  276.  
  277. case 1:
  278. pre_div = 2;
  279. break;
  280.  
  281. case 2:
  282. case 3:
  283. pre_div = 4;
  284. break;
  285.  
  286. default:
  287. pre_div = 4;
  288. break;
  289. }
  290.  
  291. switch(post_div)
  292. {
  293. case 0:
  294. post_div = 1;
  295. break;
  296.  
  297. case 1:
  298. post_div = 2;
  299. break;
  300.  
  301. case 2:
  302. case 3:
  303. post_div = 4;
  304. break;
  305.  
  306. default:
  307. post_div = 4;
  308. break;
  309. }
  310.  
  311. switch(fbk_sel)
  312. {
  313. case 0:
  314. fbk_sel = 1;
  315. break;
  316.  
  317. case 1:
  318. fbk_sel = 2;
  319. break;
  320.  
  321. case 2:
  322. case 3:
  323. fbk_sel = 4;
  324. break;
  325.  
  326. default:
  327. fbk_sel = 4;
  328. break;
  329. }
  330. cycle_time=(1000*4*div2*div1)/(fbk_div*26)+0x01;
  331.  
  332. ui=(1000*div2*div1)/(fbk_div*26*0x2)+0x01;
  333. #define NS_TO_CYCLE(n, c) ((n) / (c))
  334.  
  335. hs_trail_m=1;
  336. hs_trail_n= NS_TO_CYCLE(((hs_trail_m * 0x4) + 0x60 - 75), cycle_time);
  337. // +3 is recommended from designer becauase of HW latency
  338. params->dsi.HS_TRAIL = ((hs_trail_m > hs_trail_n) ? hs_trail_m : hs_trail_n);
  339.  
  340. params->dsi.HS_PRPR = NS_TO_CYCLE((0x40 + 0x5 * ui + 25), cycle_time);
  341. // HS_PRPR can't be 1.
  342. if (params->dsi.HS_PRPR == 0)
  343. params->dsi.HS_PRPR = 1;
  344.  
  345. #endif
  346.  
  347. }
  348.  
  349.  
  350. static void lcm_init_register(void)
  351. {
  352. unsigned int data_array[16];
  353.  
  354. data_array[0] = 0x00023902;
  355. data_array[1] = 0x00000000;
  356. dsi_set_cmdq(&data_array, 2, 1);
  357. data_array[0] = 0x00043902; //EXTC=1
  358. data_array[1] = 0x018312FF;
  359. dsi_set_cmdq(&data_array, 2, 1);
  360.  
  361. data_array[0] = 0x00023902; //ORISE mode enable
  362. data_array[1] = 0x00008000;
  363. dsi_set_cmdq(&data_array, 2, 1);
  364. data_array[0] = 0x00033902;
  365. data_array[1] = 0x008312FF;
  366. dsi_set_cmdq(&data_array, 2, 1);
  367.  
  368. //enable inverse mode
  369. data_array[0] = 0x00023902;
  370. data_array[1] = 0x00008300;
  371. dsi_set_cmdq(&data_array, 2, 1);
  372. data_array[0] = 0x00023902;
  373. data_array[1] = 0x000041B3;
  374. dsi_set_cmdq(&data_array, 2, 1);
  375. //enable end
  376. data_array[0] = 0x00023902;
  377. data_array[1] = 0x00008000;
  378. dsi_set_cmdq(&data_array, 2, 1);
  379. data_array[0] = 0x000a3902; //10
  380. data_array[1] = 0x006400C0;//0x006400C0;
  381. data_array[2] = 0x6400110F;
  382. data_array[3] = 0x0000110F;
  383. dsi_set_cmdq(&data_array, 4, 1);
  384.  
  385. data_array[0] = 0x00023902;
  386. data_array[1] = 0x00009000;
  387. dsi_set_cmdq(&data_array, 2, 1);
  388. data_array[0] = 0x00073902; //07
  389. data_array[1] = 0x005C00C0;
  390. data_array[2] = 0x00040001;
  391. dsi_set_cmdq(&data_array, 3, 1);
  392.  
  393. data_array[0] = 0x00023902;
  394. data_array[1] = 0x0000A400;
  395. dsi_set_cmdq(&data_array, 2, 1);
  396. data_array[0] = 0x00023902;
  397. data_array[1] = 0x000000C0;
  398. dsi_set_cmdq(&data_array, 2, 1);
  399.  
  400. data_array[0] = 0x00023902;
  401. data_array[1] = 0x00008700;
  402. dsi_set_cmdq(&data_array, 2, 1);
  403. data_array[0] = 0x00023902;
  404. data_array[1] = 0x000018C4;
  405. dsi_set_cmdq(&data_array, 2, 1);
  406.  
  407. data_array[0] = 0x00023902;
  408. data_array[1] = 0x0000B300;
  409. dsi_set_cmdq(&data_array, 2, 1);
  410. data_array[0] = 0x00033902;
  411. data_array[1] = 0x005000c0; //0x005000c0
  412. dsi_set_cmdq(&data_array, 2, 1);
  413.  
  414. data_array[0] = 0x00023902;
  415. data_array[1] = 0x00008100;
  416. dsi_set_cmdq(&data_array, 2, 1);
  417. data_array[0] = 0x00023902;
  418. data_array[1] = 0x000066C1;//55=60Hz ;66=65Hz
  419. dsi_set_cmdq(&data_array, 2, 1);
  420.  
  421. data_array[0] = 0x00023902;
  422. data_array[1] = 0x00008100;
  423. dsi_set_cmdq(&data_array, 2, 1);
  424. data_array[0] = 0x00023902;
  425. data_array[1] = 0x000082C4;
  426. dsi_set_cmdq(&data_array, 2, 1);
  427.  
  428. data_array[0] = 0x00023902;
  429. data_array[1] = 0x00008200;
  430. dsi_set_cmdq(&data_array, 2, 1);
  431. data_array[0] = 0x00023902;
  432. data_array[1] = 0x000002C4;
  433. dsi_set_cmdq(&data_array, 2, 1);
  434.  
  435. data_array[0] = 0x00023902;
  436. data_array[1] = 0x00009000;
  437. dsi_set_cmdq(&data_array, 2, 1);
  438. data_array[0] = 0x00023902;
  439. data_array[1] = 0x000049C4;
  440. dsi_set_cmdq(&data_array, 2, 1);
  441.  
  442. data_array[0] = 0x00023902;
  443. data_array[1] = 0x0000C600;
  444. dsi_set_cmdq(&data_array, 2, 1);
  445. data_array[0] = 0x00023902;
  446. data_array[1] = 0x000003B0;
  447. dsi_set_cmdq(&data_array, 2, 1);
  448.  
  449. data_array[0] = 0x00023902;
  450. data_array[1] = 0x00009000;
  451. dsi_set_cmdq(&data_array, 2, 1);
  452. data_array[0] = 0x00053902; //5
  453. data_array[1] = 0x021102F5;
  454. data_array[2] = 0x00000011;
  455. dsi_set_cmdq(&data_array, 3, 1);
  456.  
  457. data_array[0] = 0x00023902;
  458. data_array[1] = 0x00009000;
  459. dsi_set_cmdq(&data_array, 2, 1);
  460. data_array[0] = 0x00023902;
  461. data_array[1] = 0x000050C5;
  462. dsi_set_cmdq(&data_array, 2, 1);
  463.  
  464. data_array[0] = 0x00023902;
  465. data_array[1] = 0x00009400;
  466. dsi_set_cmdq(&data_array, 2, 1);
  467. data_array[0] = 0x00023902;
  468. data_array[1] = 0x000055C5; //power ic frequence 650KHz
  469. dsi_set_cmdq(&data_array, 2, 1);
  470.  
  471. data_array[0] = 0x00023902;
  472. data_array[1] = 0x00009400;
  473. dsi_set_cmdq(&data_array, 2, 1);
  474. data_array[0] = 0x00023902;
  475. data_array[1] = 0x000002F5;
  476. dsi_set_cmdq(&data_array, 2, 1);
  477.  
  478. data_array[0] = 0x00023902;
  479. data_array[1] = 0x0000BA00;
  480. dsi_set_cmdq(&data_array, 2, 1);
  481. data_array[0] = 0x00023902;
  482. data_array[1] = 0x000003F5;
  483. dsi_set_cmdq(&data_array, 2, 1);
  484.  
  485. data_array[0] = 0x00023902;
  486. data_array[1] = 0x0000B200;
  487. dsi_set_cmdq(&data_array, 2, 1);
  488. data_array[0] = 0x00033902;
  489. data_array[1] = 0x000000F5;
  490. dsi_set_cmdq(&data_array, 2, 1);
  491.  
  492. data_array[0] = 0x00023902;
  493. data_array[1] = 0x0000B400;
  494. dsi_set_cmdq(&data_array, 2, 1);
  495. data_array[0] = 0x00033902;
  496. data_array[1] = 0x000000F5;
  497. dsi_set_cmdq(&data_array, 2, 1);
  498.  
  499. data_array[0] = 0x00023902;
  500. data_array[1] = 0x0000B600;
  501. dsi_set_cmdq(&data_array, 2, 1);
  502. data_array[0] = 0x00033902;
  503. data_array[1] = 0x000000F5;
  504. dsi_set_cmdq(&data_array, 2, 1);
  505.  
  506. data_array[0] = 0x00023902;
  507. data_array[1] = 0x0000B800;
  508. dsi_set_cmdq(&data_array, 2, 1);
  509. data_array[0] = 0x00033902;
  510. data_array[1] = 0x000000F5;
  511. dsi_set_cmdq(&data_array, 2, 1);
  512.  
  513. data_array[0] = 0x00023902;
  514. data_array[1] = 0x0000B400;
  515. dsi_set_cmdq(&data_array, 2, 1);
  516. data_array[0] = 0x00023902;
  517. data_array[1] = 0x0000C0C5;
  518. dsi_set_cmdq(&data_array, 2, 1);
  519.  
  520. data_array[0] = 0x00023902;
  521. data_array[1] = 0x0000B200;
  522. dsi_set_cmdq(&data_array, 2, 1);
  523. data_array[0] = 0x00023902;
  524. data_array[1] = 0x000040C5;
  525. dsi_set_cmdq(&data_array, 2, 1);
  526.  
  527. data_array[0] = 0x00023902;
  528. data_array[1] = 0x0000A000;
  529. dsi_set_cmdq(&data_array, 2, 1);
  530. data_array[0] = 0x000F3902; //15
  531. data_array[1] = 0x061005C4;
  532. data_array[2] = 0x10150502;
  533. data_array[3] = 0x02071005;
  534. data_array[4] = 0x00101505;
  535. dsi_set_cmdq(&data_array, 5, 1);
  536.  
  537. data_array[0] = 0x00023902;
  538. data_array[1] = 0x0000B000;
  539. dsi_set_cmdq(&data_array, 2, 1);
  540. data_array[0] = 0x00033902;
  541. data_array[1] = 0x000000C4;
  542. dsi_set_cmdq(&data_array, 2, 1);
  543.  
  544. data_array[0] = 0x00023902;
  545. data_array[1] = 0x00009100;
  546. dsi_set_cmdq(&data_array, 2, 1);
  547. data_array[0] = 0x00033902;
  548. data_array[1] = 0x005007C5;
  549. dsi_set_cmdq(&data_array, 2, 1);
  550.  
  551. data_array[0] = 0x00023902;
  552. data_array[1] = 0x00000000;
  553. dsi_set_cmdq(&data_array, 2, 1);
  554. data_array[0] = 0x00033902;
  555. data_array[1] = 0x00BCBCD8;
  556. dsi_set_cmdq(&data_array, 2, 1);
  557.  
  558. data_array[0] = 0x00023902;
  559. data_array[1] = 0x0000B000;
  560. dsi_set_cmdq(&data_array, 2, 1);
  561. data_array[0] = 0x00033902;
  562. data_array[1] = 0x000804C5; //vdd1_8 1.7v
  563. dsi_set_cmdq(&data_array, 2, 1);
  564.  
  565. data_array[0] = 0x00023902;
  566. data_array[1] = 0x0000BB00;
  567. dsi_set_cmdq(&data_array, 2, 1);
  568. data_array[0] = 0x00023902;
  569. data_array[1] = 0x000080C5;
  570. dsi_set_cmdq(&data_array, 2, 1);
  571.  
  572. data_array[0] = 0x00023902;
  573. data_array[1] = 0x00000000;
  574. dsi_set_cmdq(&data_array, 2, 1);
  575. data_array[0] = 0x00023902;
  576. data_array[1] = 0x000040D0;
  577. dsi_set_cmdq(&data_array, 2, 1);
  578.  
  579. data_array[0] = 0x00023902;
  580. data_array[1] = 0x00000000;
  581. dsi_set_cmdq(&data_array, 2, 1);
  582. data_array[0] = 0x00033902;
  583. data_array[1] = 0x000000D1;
  584. dsi_set_cmdq(&data_array, 2, 1);
  585.  
  586. data_array[0] = 0x00023902;
  587. data_array[1] = 0x00008000;
  588. dsi_set_cmdq(&data_array, 2, 1);
  589. data_array[0] = 0x000C3902; //12
  590. data_array[1] = 0x000000CB;
  591. data_array[2] = 0x00000000;
  592. data_array[3] = 0x00000000;
  593. dsi_set_cmdq(&data_array, 4, 1);
  594.  
  595. data_array[0] = 0x00023902;
  596. data_array[1] = 0x00009000;
  597. dsi_set_cmdq(&data_array, 2, 1);
  598. data_array[0] = 0x00103902; //16
  599. data_array[1] = 0x000000CB;
  600. data_array[2] = 0x00000000;
  601. data_array[3] = 0x00000000;
  602. data_array[4] = 0x00000000;
  603. dsi_set_cmdq(&data_array, 5, 1);
  604.  
  605. data_array[0] = 0x00023902;
  606. data_array[1] = 0x0000A000;
  607. dsi_set_cmdq(&data_array, 2, 1);
  608. data_array[0] = 0x00103902; //16
  609. data_array[1] = 0x000000CB;
  610. data_array[2] = 0x00000000;
  611. data_array[3] = 0x00000000;
  612. data_array[4] = 0x00000000;
  613. dsi_set_cmdq(&data_array, 5, 1);
  614.  
  615. data_array[0] = 0x00023902;
  616. data_array[1] = 0x0000B000;
  617. dsi_set_cmdq(&data_array, 2, 1);
  618. data_array[0] = 0x00103902; //16
  619. data_array[1] = 0x000000CB;
  620. data_array[2] = 0x00000000;
  621. data_array[3] = 0x00000000;
  622. data_array[4] = 0x00000000;
  623. dsi_set_cmdq(&data_array, 5, 1);
  624.  
  625. data_array[0] = 0x00023902;
  626. data_array[1] = 0x0000C000;
  627. dsi_set_cmdq(&data_array, 2, 1);
  628. data_array[0] = 0x00103902; //16
  629. data_array[1] = 0x050505CB;
  630. data_array[2] = 0x00050505;
  631. data_array[3] = 0x00000000;
  632. data_array[4] = 0x00000000;
  633. dsi_set_cmdq(&data_array, 5, 1);
  634.  
  635. data_array[0] = 0x00023902;
  636. data_array[1] = 0x0000D000;
  637. dsi_set_cmdq(&data_array, 2, 1);
  638. data_array[0] = 0x00103902; //16
  639. data_array[1] = 0x000000CB;
  640. data_array[2] = 0x05050000;
  641. data_array[3] = 0x05050505;
  642. data_array[4] = 0x00000505;
  643. dsi_set_cmdq(&data_array, 5, 1);
  644.  
  645. data_array[0] = 0x00023902;
  646. data_array[1] = 0x0000E000;
  647. dsi_set_cmdq(&data_array, 2, 1);
  648. data_array[0] = 0x000F3902; //15
  649. data_array[1] = 0x000000CB;
  650. data_array[2] = 0x00000000;
  651. data_array[3] = 0x00000000;
  652. data_array[4] = 0x00050500;
  653. dsi_set_cmdq(&data_array, 5, 1);
  654.  
  655. data_array[0] = 0x00023902;
  656. data_array[1] = 0x0000F000;
  657. dsi_set_cmdq(&data_array, 2, 1);
  658. data_array[0] = 0x000C3902; //12
  659. data_array[1] = 0xFFFFFFCB;
  660. data_array[2] = 0xFFFFFFFF;
  661. data_array[3] = 0xFFFFFFFF;
  662. dsi_set_cmdq(&data_array, 4, 1);
  663.  
  664. data_array[0] = 0x00023902;
  665. data_array[1] = 0x00008000;
  666. dsi_set_cmdq(&data_array, 2, 1);
  667. data_array[0] = 0x00103902; //16
  668. data_array[1] = 0x0D0B09CC;
  669. data_array[2] = 0x0003010F;
  670. data_array[3] = 0x00000000;
  671. data_array[4] = 0x00000000;
  672. dsi_set_cmdq(&data_array, 5, 1);
  673.  
  674. data_array[0] = 0x00023902;
  675. data_array[1] = 0x00009000;
  676. dsi_set_cmdq(&data_array, 2, 1);
  677. data_array[0] = 0x00103902; //16
  678. data_array[1] = 0x000000CC;
  679. data_array[2] = 0x2D2E0000;
  680. data_array[3] = 0x100E0C0A;
  681. data_array[4] = 0x00000402;
  682. dsi_set_cmdq(&data_array, 5, 1);
  683.  
  684. data_array[0] = 0x00023902;
  685. data_array[1] = 0x0000A000;
  686. dsi_set_cmdq(&data_array, 2, 1);
  687. data_array[0] = 0x000F3902; //15
  688. data_array[1] = 0x000000CC;
  689. data_array[2] = 0x00000000;
  690. data_array[3] = 0x00000000;
  691. data_array[4] = 0x002D2E00;
  692. dsi_set_cmdq(&data_array, 5, 1);
  693.  
  694. data_array[0] = 0x00023902;
  695. data_array[1] = 0x0000B000;
  696. dsi_set_cmdq(&data_array, 2, 1);
  697. data_array[0] = 0x00103902; //16
  698. data_array[1] = 0x0C0E10CC;
  699. data_array[2] = 0x0002040A;
  700. data_array[3] = 0x00000000;
  701. data_array[4] = 0x00000000;
  702. dsi_set_cmdq(&data_array, 5, 1);
  703.  
  704. data_array[0] = 0x00023902;
  705. data_array[1] = 0x0000C000;
  706. dsi_set_cmdq(&data_array, 2, 1);
  707. data_array[0] = 0x00103902; //16
  708. data_array[1] = 0x000000CC;
  709. data_array[2] = 0x2E2D0000;
  710. data_array[3] = 0x090B0D0F;
  711. data_array[4] = 0x00000103;
  712. dsi_set_cmdq(&data_array, 5, 1);
  713.  
  714. data_array[0] = 0x00023902;
  715. data_array[1] = 0x0000D000;
  716. dsi_set_cmdq(&data_array, 2, 1);
  717. data_array[0] = 0x000F3902; //15
  718. data_array[1] = 0x000000CC;
  719. data_array[2] = 0x00000000;
  720. data_array[3] = 0x00000000;
  721. data_array[4] = 0x002E2D00;
  722. dsi_set_cmdq(&data_array, 5, 1);
  723.  
  724. data_array[0] = 0x00023902;
  725. data_array[1] = 0x00008000;
  726. dsi_set_cmdq(&data_array, 2, 1);
  727. data_array[0] = 0x000D3902; //13
  728. data_array[1] = 0x00038FCE;
  729. data_array[2] = 0x8D00038E;
  730. data_array[3] = 0x038C0003;
  731. data_array[4] = 0x00000000;
  732. dsi_set_cmdq(&data_array, 5, 1);
  733.  
  734. data_array[0] = 0x00023902;
  735. data_array[1] = 0x00009000;
  736. dsi_set_cmdq(&data_array, 2, 1);
  737. data_array[0] = 0x000F3902; //15
  738. data_array[1] = 0x000000CE;
  739. data_array[2] = 0x00000000;
  740. data_array[3] = 0x00000000;
  741. data_array[4] = 0x00000000;
  742. dsi_set_cmdq(&data_array, 5, 1);
  743.  
  744. data_array[0] = 0x00023902;
  745. data_array[1] = 0x0000A000;
  746. dsi_set_cmdq(&data_array, 2, 1);
  747. data_array[0] = 0x000F3902; //15
  748. data_array[1] = 0x050B38CE;
  749. data_array[2] = 0x0A0A0000;
  750. data_array[3] = 0x01050A38;
  751. data_array[4] = 0x000A0A00;
  752. dsi_set_cmdq(&data_array, 5, 1);
  753.  
  754. data_array[0] = 0x00023902;
  755. data_array[1] = 0x0000B000;
  756. dsi_set_cmdq(&data_array, 2, 1);
  757. data_array[0] = 0x000F3902; //15
  758. data_array[1] = 0x050938CE;
  759. data_array[2] = 0x0A0A0002;
  760. data_array[3] = 0x03050838;
  761. data_array[4] = 0x000A0A00;
  762. dsi_set_cmdq(&data_array, 5, 1);
  763.  
  764. data_array[0] = 0x00023902;
  765. data_array[1] = 0x0000C000;
  766. dsi_set_cmdq(&data_array, 2, 1);
  767. data_array[0] = 0x000F3902; //15
  768. data_array[1] = 0x050738CE;
  769. data_array[2] = 0x0A0A0004;
  770. data_array[3] = 0x05050638;
  771. data_array[4] = 0x000A0A00;
  772. dsi_set_cmdq(&data_array, 5, 1);
  773.  
  774. data_array[0] = 0x00023902;
  775. data_array[1] = 0x0000D000;
  776. dsi_set_cmdq(&data_array, 2, 1);
  777. data_array[0] = 0x000F3902; //15
  778. data_array[1] = 0x050538CE;
  779. data_array[2] = 0x0A0A0006;
  780. data_array[3] = 0x07050438;
  781. data_array[4] = 0x000A0A00;
  782. dsi_set_cmdq(&data_array, 5, 1);
  783.  
  784. data_array[0] = 0x00023902;
  785. data_array[1] = 0x00008000;
  786. dsi_set_cmdq(&data_array, 2, 1);
  787. data_array[0] = 0x000F3902; //15
  788. data_array[1] = 0x000000CF;
  789. data_array[2] = 0x00000000;
  790. data_array[3] = 0x00000000;
  791. data_array[4] = 0x00000000;
  792. dsi_set_cmdq(&data_array, 5, 1);
  793.  
  794. data_array[0] = 0x00023902;
  795. data_array[1] = 0x00009000;
  796. dsi_set_cmdq(&data_array, 2, 1);
  797. data_array[0] = 0x000F3902; //15
  798. data_array[1] = 0x000000CF;
  799. data_array[2] = 0x00000000;
  800. data_array[3] = 0x00000000;
  801. data_array[4] = 0x00000000;
  802. dsi_set_cmdq(&data_array, 5, 1);
  803.  
  804. data_array[0] = 0x00023902;
  805. data_array[1] = 0x0000A000;
  806. dsi_set_cmdq(&data_array, 2, 1);
  807. data_array[0] = 0x000F3902; //15
  808. data_array[1] = 0x000000CF;
  809. data_array[2] = 0x00000000;
  810. data_array[3] = 0x00000000;
  811. data_array[4] = 0x00000000;
  812. dsi_set_cmdq(&data_array, 5, 1);
  813.  
  814. data_array[0] = 0x00023902;
  815. data_array[1] = 0x0000B000;
  816. dsi_set_cmdq(&data_array, 2, 1);
  817. data_array[0] = 0x000F3902; //15
  818. data_array[1] = 0x000000CF;
  819. data_array[2] = 0x00000000;
  820. data_array[3] = 0x00000000;
  821. data_array[4] = 0x00000000;
  822. dsi_set_cmdq(&data_array, 5, 1);
  823.  
  824. data_array[0] = 0x00023902;
  825. data_array[1] = 0x0000C000;
  826. dsi_set_cmdq(&data_array, 2, 1);
  827. data_array[0] = 0x000C3902; //12
  828. data_array[1] = 0x200101CF;
  829. data_array[2] = 0x01000020;
  830. data_array[3] = 0x08000002;
  831. dsi_set_cmdq(&data_array, 4, 1);
  832.  
  833. data_array[0] = 0x00023902;
  834. data_array[1] = 0x0000B500;
  835. dsi_set_cmdq(&data_array, 2, 1);
  836. data_array[0] = 0x00073902; //7
  837. data_array[1] = 0xFFF133C5;
  838. data_array[2] = 0x00FFF133;
  839. dsi_set_cmdq(&data_array, 3, 1);
  840.  
  841. data_array[0] = 0x00023902;
  842. data_array[1] = 0x00008700;
  843. dsi_set_cmdq(&data_array, 2, 1);
  844. data_array[0] = 0x00023902;
  845. data_array[1] = 0x000018C4;//
  846. dsi_set_cmdq(&data_array, 2, 1);
  847.  
  848.  
  849. data_array[0] = 0x00023902;
  850. data_array[1] = 0x0000C300;
  851. dsi_set_cmdq(&data_array, 2, 1);
  852. data_array[0] = 0x00023902;
  853. data_array[1] = 0x000081F5;//
  854. dsi_set_cmdq(&data_array, 2, 1);
  855.  
  856. /*
  857. data_array[0] = 0x00023902;
  858. data_array[1] = 0x00008200;
  859. dsi_set_cmdq(&data_array, 2, 1);
  860. data_array[0] = 0x00023902;
  861. data_array[1] = 0x000000F4;
  862. dsi_set_cmdq(&data_array, 2, 1);
  863. */
  864.  
  865.  
  866.  
  867. /*
  868. //GAMMA2.2
  869. //--Gamma-------------------------
  870. //E1
  871. data_array[0] = 0x00023902;
  872. data_array[1] = 0x00000000;
  873. dsi_set_cmdq(&data_array, 2, 1);
  874. data_array[0] = 0x00113902; //17
  875. data_array[1] = 0x0b0700E1;
  876. data_array[2] = 0x0c0e060c;
  877. data_array[3] = 0x0a06020b;
  878. data_array[4] = 0x0c120f06;
  879. data_array[5] = 0x00000000;
  880. dsi_set_cmdq(&data_array, 6, 1);
  881.  
  882.  
  883. //E2
  884. data_array[0] = 0x00023902;
  885. data_array[1] = 0x00000000;
  886. dsi_set_cmdq(&data_array, 2, 1);
  887. data_array[0] = 0x00113902; //25
  888. data_array[1] = 0x0c0700E2;
  889. data_array[2] = 0x0c0e060c;
  890. data_array[3] = 0x0a05020b;
  891. data_array[4] = 0x0c120f06;
  892. data_array[5] = 0x00000000;
  893. dsi_set_cmdq(&data_array, 6, 1);
  894.  
  895. */
  896.  
  897.  
  898. /*
  899. //GAMMA2.3
  900. //--Gamma-------------------------
  901. //E1
  902. data_array[0] = 0x00023902;
  903. data_array[1] = 0x00000000;
  904. dsi_set_cmdq(&data_array, 2, 1);
  905. data_array[0] = 0x00113902; //17
  906. data_array[1] = 0x0c0600E1;
  907. data_array[2] = 0x0c0f050d;
  908. data_array[3] = 0x0a06020b;
  909. data_array[4] = 0x0c120d06;
  910. data_array[5] = 0x00000000;
  911. dsi_set_cmdq(&data_array, 6, 1);
  912.  
  913.  
  914. //E2
  915. data_array[0] = 0x00023902;
  916. data_array[1] = 0x00000000;
  917. dsi_set_cmdq(&data_array, 2, 1);
  918. data_array[0] = 0x00113902; //25
  919. data_array[1] = 0x0c0600E2;
  920. data_array[2] = 0x0c0f050c;
  921. data_array[3] = 0x0a05020b;
  922. data_array[4] = 0x0c120d06;
  923. data_array[5] = 0x00000000;
  924. dsi_set_cmdq(&data_array, 6, 1);
  925.  
  926. */
  927.  
  928. /*
  929. //GAMMA2.4
  930. //--Gamma-------------------------
  931. //E1
  932. data_array[0] = 0x00023902;
  933. data_array[1] = 0x00000000;
  934. dsi_set_cmdq(&data_array, 2, 1);
  935. data_array[0] = 0x00113902; //17
  936. data_array[1] = 0x0c0600E1;
  937. data_array[2] = 0x0c0f050d;
  938. data_array[3] = 0x0a06020b;
  939. data_array[4] = 0x0b110d06;
  940. data_array[5] = 0x00000000;
  941. dsi_set_cmdq(&data_array, 6, 1);
  942.  
  943.  
  944. //E2
  945. data_array[0] = 0x00023902;
  946. data_array[1] = 0x00000000;
  947. dsi_set_cmdq(&data_array, 2, 1);
  948. data_array[0] = 0x00113902; //25
  949. data_array[1] = 0x0c0700E2;
  950. data_array[2] = 0x0c0f050c;
  951. data_array[3] = 0x0a05020b;
  952. data_array[4] = 0x0b110d06;
  953. data_array[5] = 0x00000000;
  954. dsi_set_cmdq(&data_array, 6, 1);
  955.  
  956. */
  957.  
  958. //GAMMA2.5
  959. //--Gamma-------------------------
  960. //E1
  961. data_array[0] = 0x00023902;
  962. data_array[1] = 0x00000000;
  963. dsi_set_cmdq(&data_array, 2, 1);
  964. data_array[0] = 0x00113902; //17
  965. data_array[1] = 0x0c0600E1;
  966. data_array[2] = 0x0c10050d;
  967. data_array[3] = 0x0906020b;
  968. data_array[4] = 0x0b110d06;
  969. data_array[5] = 0x00000000;
  970. dsi_set_cmdq(&data_array, 6, 1);
  971.  
  972.  
  973. //E2
  974. data_array[0] = 0x00023902;
  975. data_array[1] = 0x00000000;
  976. dsi_set_cmdq(&data_array, 2, 1);
  977. data_array[0] = 0x00113902; //25
  978. data_array[1] = 0x0c0700E2;
  979. data_array[2] = 0x0c10050c;
  980. data_array[3] = 0x0905020b;
  981. data_array[4] = 0x0b110d06;
  982. data_array[5] = 0x00000000;
  983. dsi_set_cmdq(&data_array, 6, 1);
  984. //
  985.  
  986. data_array[0] = 0x00023902;
  987. data_array[1] = 0x00000000;
  988. dsi_set_cmdq(&data_array, 2, 1);
  989. data_array[0] = 0x00023902;
  990. data_array[1] = 0x000078D9;
  991. dsi_set_cmdq(&data_array, 2, 1);
  992.  
  993.  
  994. ///////////////////////////////////////////////////// update by xuanquan.wang 2013/04/09
  995. #if 0
  996. data_array[0] = 0x00023902;
  997. data_array[1] = 0x0000A000;
  998. dsi_set_cmdq(&data_array, 2, 1);
  999.  
  1000. data_array[0] = 0x00023902;
  1001. data_array[1] = 0x000002C1;
  1002. dsi_set_cmdq(&data_array, 2, 1);
  1003. MDELAY(1);
  1004.  
  1005. //data_array[0] = 0x00023902;
  1006. //data_array[1] = 0x0000A200;
  1007. //dsi_set_cmdq(&data_array, 2, 1);
  1008. //data_array[0] = 0x00023902;
  1009. //data_array[1] = 0x000008C1;
  1010. //dsi_set_cmdq(&data_array, 2, 1);
  1011. //data_array[0] = 0x00023902;
  1012. //data_array[1] = 0x0000A400;
  1013. //dsi_set_cmdq(&data_array, 2, 1);
  1014. //data_array[0] = 0x00023902;
  1015. //data_array[1] = 0x0000F0C1;
  1016. //dsi_set_cmdq(&data_array, 2, 1);
  1017. data_array[0] = 0x00023902;
  1018. data_array[1] = 0x00008000;
  1019. dsi_set_cmdq(&data_array, 2, 1);
  1020. data_array[0] = 0x00023902;
  1021. data_array[1] = 0x000030C4;
  1022. dsi_set_cmdq(&data_array, 2, 1);
  1023. MDELAY(10);
  1024. data_array[0] = 0x00023902;
  1025. data_array[1] = 0x00008A00;
  1026. dsi_set_cmdq(&data_array, 2, 1);
  1027. data_array[0] = 0x00023902;
  1028. data_array[1] = 0x000040C4;
  1029. dsi_set_cmdq(&data_array, 2, 1);
  1030. MDELAY(10);
  1031. #else
  1032. data_array[0]=0x00023902;
  1033. data_array[1]=0x0000A000;
  1034. dsi_set_cmdq(&data_array, 2, 1);
  1035. MDELAY(2);
  1036.  
  1037. data_array[0]=0x00023902;
  1038. data_array[1]=0x000002C1;
  1039. dsi_set_cmdq(&data_array, 2, 1);
  1040. MDELAY(2);
  1041.  
  1042. data_array[0]=0x00023902;
  1043. data_array[1]=0x0000A200;
  1044. dsi_set_cmdq(&data_array, 2, 1);
  1045. MDELAY(2);
  1046.  
  1047. data_array[0]=0x00023902;
  1048. data_array[1]=0x0000FFC1;
  1049. dsi_set_cmdq(&data_array, 2, 1);
  1050. MDELAY(2);
  1051.  
  1052. data_array[0]=0x00023902;
  1053. data_array[1]=0x0000A400;
  1054. dsi_set_cmdq(&data_array, 2, 1);
  1055. MDELAY(2);
  1056.  
  1057. data_array[0]=0x00023902;
  1058. data_array[1]=0x0000FFC1;
  1059. dsi_set_cmdq(&data_array, 2, 1);
  1060. MDELAY(2);
  1061.  
  1062. data_array[0]=0x00023902;
  1063. data_array[1]=0x00009000;
  1064. dsi_set_cmdq(&data_array, 2, 1);
  1065. MDELAY(2);
  1066.  
  1067. data_array[0]=0x00103902;
  1068. data_array[1]=0xC0C0C0CB;
  1069. data_array[2]=0x00C0C0C0;
  1070. data_array[3]=0x00000000;
  1071. data_array[4]=0x00000000;
  1072. dsi_set_cmdq(&data_array, 5, 1);
  1073. MDELAY(2);
  1074.  
  1075. data_array[0]=0x00023902;
  1076. data_array[1]=0x0000A000;
  1077. dsi_set_cmdq(&data_array, 2, 1);
  1078. MDELAY(2);
  1079.  
  1080. data_array[0]=0x00103902;
  1081. data_array[1]=0x000000CB;
  1082. data_array[2]=0xC0C00000;
  1083. data_array[3]=0xC0C0C0C0;
  1084. data_array[4]=0x0000C0C0;
  1085. dsi_set_cmdq(&data_array, 5, 1);
  1086. MDELAY(2);
  1087.  
  1088. data_array[0]=0x00023902;
  1089. data_array[1]=0x0000B000;
  1090. dsi_set_cmdq(&data_array, 2, 1);
  1091. MDELAY(2);
  1092.  
  1093. data_array[0]=0x00103902;
  1094. data_array[1]=0x000000CB;
  1095. data_array[2]=0x00000000;
  1096. data_array[3]=0x00000000;
  1097. data_array[4]=0xC0C00000;
  1098. dsi_set_cmdq(&data_array, 5, 1);
  1099. MDELAY(2);
  1100. /*
  1101. data_array[0]=0x00023902;
  1102. data_array[1]=0x0000B400;
  1103. dsi_set_cmdq(&data_array, 2, 1);
  1104. MDELAY(2);
  1105.  
  1106. data_array[0]=0x00023902;
  1107. data_array[1]=0x000010C0;
  1108. dsi_set_cmdq(&data_array, 2, 1);
  1109.  
  1110. MDELAY(2);
  1111. */
  1112. #endif
  1113. ///////////////////////////////////////////////////////
  1114.  
  1115. //orise mode disable
  1116. data_array[0] = 0x00023902;
  1117. data_array[1] = 0x00000000;
  1118. dsi_set_cmdq(&data_array, 2, 1);
  1119. data_array[0] = 0x00043902; //EXTC=1
  1120. data_array[1] = 0x0FFFFFFF;
  1121. dsi_set_cmdq(&data_array, 2, 1);
  1122.  
  1123. data_array[0] = 0x00351500;//te on
  1124. dsi_set_cmdq(&data_array, 1, 1);
  1125.  
  1126. data_array[0] = 0x24531500;//bl mode
  1127. dsi_set_cmdq(&data_array, 1, 1);
  1128.  
  1129. data_array[0] = 0x03551500;//cabc 03:move 00:off
  1130. dsi_set_cmdq(&data_array, 1, 1);
  1131.  
  1132. data_array[0] = 0x00110500;
  1133. dsi_set_cmdq(&data_array, 1, 1);
  1134. MDELAY(150);
  1135.  
  1136. data_array[0] = 0x00290500;
  1137. dsi_set_cmdq(&data_array, 1, 1);
  1138. MDELAY(5);
  1139.  
  1140. // data_array[0] = 0x002C0500;
  1141. // dsi_set_cmdq(&data_array, 1, 1);
  1142. // MDELAY(20);
  1143.  
  1144. }
  1145. static void lcm_setbacklight(unsigned int level);
  1146.  
  1147.  
  1148. static void lcm_init(void)
  1149. {
  1150.  
  1151.  
  1152. SET_RESET_PIN(1);
  1153. MDELAY(5);
  1154. SET_RESET_PIN(0);
  1155. MDELAY(5);
  1156. SET_RESET_PIN(1);
  1157. MDELAY(10);
  1158.  
  1159.  
  1160. #ifdef BUILD_LK
  1161. printf("[wj]otm1283a init code.\n");
  1162. #endif
  1163. lcm_init_register();
  1164.  
  1165.  
  1166. mt_set_gpio_out(LCM_BACKLIGHT_EN, 1);
  1167.  
  1168.  
  1169. }
  1170.  
  1171.  
  1172. static void lcm_suspend(void)
  1173. {
  1174. unsigned int data_array[16];
  1175.  
  1176. #if defined(BUILD_LK) || defined(BUILD_UBOOT)
  1177. printf("%s, lcm_init \n", __func__);
  1178. #else
  1179. printk("%s, lcm_init \n", __func__);
  1180. #endif
  1181. //begin lenovo jixu add for power consume 20130131
  1182. mt_set_gpio_out(LCM_BACKLIGHT_EN, 0);//diable backlight ic
  1183. //end lenovo jixu add for power consume 20130131
  1184. data_array[0] = 0x00280500;
  1185. dsi_set_cmdq(&data_array, 1, 1);
  1186. MDELAY(20);
  1187. data_array[0] = 0x00100500;
  1188. dsi_set_cmdq(&data_array, 1, 1);
  1189. MDELAY(150);
  1190. //begin lenovo jixu add for power consume 20130206
  1191. // SET_RESET_PIN(0);
  1192. //end lenovo jixu add for power consume 20130206
  1193. }
  1194.  
  1195.  
  1196. static void lcm_resume(void)
  1197. {
  1198. int i;
  1199. unsigned int data_array[16];
  1200.  
  1201. #if defined(BUILD_LK) || defined(BUILD_UBOOT)
  1202. printf("%s, lcm_resume otm1283a\n", __func__);
  1203. #else
  1204. printk("%s, lcm_resume otm1283a\n", __func__);
  1205. #endif
  1206. #if 0
  1207. SET_RESET_PIN(1);
  1208. MDELAY(5);
  1209. SET_RESET_PIN(0);
  1210. MDELAY(10);
  1211. SET_RESET_PIN(1);
  1212. MDELAY(50);
  1213.  
  1214. lcm_init_register();
  1215.  
  1216. mt_set_gpio_out(LCM_BACKLIGHT_EN, 1);
  1217.  
  1218. #else
  1219. data_array[0] = 0x00110500;
  1220. dsi_set_cmdq(&data_array, 1, 1);
  1221. MDELAY(150);
  1222.  
  1223. data_array[0] = 0x00290500;
  1224. dsi_set_cmdq(&data_array, 1, 1);
  1225. MDELAY(5);
  1226. #endif
  1227. mt_set_gpio_out(LCM_BACKLIGHT_EN, 1);
  1228.  
  1229. }
  1230.  
  1231.  
  1232. static void lcm_update(unsigned int x, unsigned int y,
  1233. unsigned int width, unsigned int height)
  1234. {
  1235. unsigned int x0 = x;
  1236. unsigned int y0 = y;
  1237. unsigned int x1 = x0 + width - 1;
  1238. unsigned int y1 = y0 + height - 1;
  1239.  
  1240. unsigned char x0_MSB = ((x0>>8)&0xFF);
  1241. unsigned char x0_LSB = (x0&0xFF);
  1242. unsigned char x1_MSB = ((x1>>8)&0xFF);
  1243. unsigned char x1_LSB = (x1&0xFF);
  1244. unsigned char y0_MSB = ((y0>>8)&0xFF);
  1245. unsigned char y0_LSB = (y0&0xFF);
  1246. unsigned char y1_MSB = ((y1>>8)&0xFF);
  1247. unsigned char y1_LSB = (y1&0xFF);
  1248.  
  1249. unsigned int data_array[16];
  1250.  
  1251. data_array[0]= 0x00053902;
  1252. data_array[1]= (x1_MSB<<24)|(x0_LSB<<16)|(x0_MSB<<8)|0x2a;
  1253. data_array[2]= (x1_LSB);
  1254. data_array[3]= 0x00053902;
  1255. data_array[4]= (y1_MSB<<24)|(y0_LSB<<16)|(y0_MSB<<8)|0x2b;
  1256. data_array[5]= (y1_LSB);
  1257. data_array[6]= 0x002c3909;
  1258.  
  1259. dsi_set_cmdq(&data_array, 7, 0);
  1260.  
  1261. }
  1262.  
  1263. static void lcm_setbacklight(unsigned int level)
  1264. {
  1265. unsigned int data_array[16];
  1266.  
  1267. if(level > 255)
  1268. level = 255;
  1269.  
  1270. data_array[0] = 0x00023902;
  1271. data_array[1] = (0x51|(level<<8));
  1272.  
  1273. #ifdef BUILD_LK
  1274. dsi_set_cmdq_V4(&data_array, 2, 1);
  1275. #else
  1276. dsi_set_cmdq(&data_array, 2, 1);
  1277. #endif
  1278.  
  1279. }
  1280.  
  1281. static unsigned int lcm_esd_check(void)
  1282. {
  1283. unsigned char buffer[2],ret;
  1284.  
  1285. #ifndef BUILD_UBOOT
  1286. if(lcm_esd_test)
  1287. {
  1288. lcm_esd_test = FALSE;
  1289. return TRUE;
  1290. }
  1291.  
  1292. /// please notice: the max return packet size is 1
  1293. /// if you want to change it, you can refer to the following marked code
  1294. /// but read_reg currently only support read no more than 4 bytes....
  1295. /// if you need to read more, please let BinHan knows.
  1296. /*
  1297. unsigned int data_array[16];
  1298. unsigned int max_return_size = 1;
  1299.  
  1300. data_array[0]= 0x00003700 | (max_return_size << 16);
  1301.  
  1302. dsi_set_cmdq(&data_array, 1, 1);
  1303. */
  1304. read_reg_v2(0x0A, buffer,2);
  1305. #ifndef BUILD_LK
  1306. //printk("[JX] %s 0x0A 0=0x%x 1=0x%x \n",__func__,buffer[0],buffer[1]);
  1307. #endif
  1308. ret = buffer[0]==0x9C?0:1;
  1309. #ifndef BUILD_LK
  1310. //printk("[JX] %s ret=%d \n",__func__,ret);
  1311. #endif
  1312. if(ret){
  1313. return TRUE;
  1314. }
  1315.  
  1316. read_reg_v2(0x0E, buffer,2);
  1317. #ifndef BUILD_LK
  1318. //printk("[JX] %s 0x0E 0=0x%x 1=0x%x \n",__func__,buffer[0],buffer[1]);
  1319. #endif
  1320. ret = ((buffer[0])&(0xf0))==0x80?0:1;
  1321. #ifndef BUILD_LK
  1322. //printk("[JX] %s ret=%d \n",__func__,ret);
  1323. #endif
  1324. if(ret){
  1325. return TRUE;
  1326. }
  1327. else return FALSE;
  1328. #endif
  1329. }
  1330.  
  1331. static unsigned int lcm_esd_recover(void)
  1332. {
  1333. #ifndef BUILD_LK
  1334. printk("[JX]+ %s \n",__func__);
  1335. #endif
  1336. lcm_init();
  1337. #ifndef BUILD_LK
  1338. printk("[JX]- %s \n",__func__);
  1339. #endif
  1340.  
  1341. }
  1342.  
  1343. static unsigned int lcm_compare_id(void)
  1344. {
  1345. #if LCM_COMPARE_BY_SW
  1346. unsigned int id=0;
  1347. unsigned char buffer[4];
  1348. unsigned int data_array[16];
  1349. SET_RESET_PIN(1);
  1350. MDELAY(10);
  1351. SET_RESET_PIN(0);
  1352. MDELAY(10);
  1353. SET_RESET_PIN(1);
  1354. MDELAY(50);//Must over 6 ms
  1355.  
  1356. data_array[0] = 0x00023902;
  1357. data_array[1] = 0x00000000;
  1358. dsi_set_cmdq(&data_array, 2, 1);
  1359. data_array[0] = 0x00043902; //EXTC=1
  1360. data_array[1] = 0x018312FF;
  1361. dsi_set_cmdq(&data_array, 2, 1);
  1362.  
  1363. data_array[0] = 0x00023902; //ORISE mode enable
  1364. data_array[1] = 0x00008000;
  1365. dsi_set_cmdq(&data_array, 2, 1);
  1366. data_array[0] = 0x00033902;
  1367. data_array[1] = 0x008312FF;
  1368. dsi_set_cmdq(&data_array, 2, 1);
  1369.  
  1370. data_array[0] = 0x00023902; //ORISE mode enable
  1371. data_array[1] = 0x0000C600;
  1372. dsi_set_cmdq(&data_array, 2, 1);
  1373. data_array[0] = 0x00023902;
  1374. data_array[1] = 0x000003B0;
  1375. dsi_set_cmdq(&data_array, 2, 1);
  1376.  
  1377. data_array[0] = 0x00043700;
  1378. dsi_set_cmdq(&data_array, 1, 1);
  1379.  
  1380. read_reg_v2(0xA1, buffer, 4);
  1381. id = buffer[3]|(buffer[2]<<8); //we only need ID
  1382. // id = read_reg(0xDA);
  1383. #if defined(BUILD_LK) || defined(BUILD_UBOOT)
  1384. printf("%s, otm1283a id = 0x%08x\n", __func__, id);
  1385. #else
  1386. printk("%s, otm1283a id = 0x%08x\n", __func__, id);
  1387. #endif
  1388.  
  1389. return (LCM_ID == id)?1:0;
  1390. // return 1;
  1391. #else
  1392. unsigned int ret = 0;
  1393. mt_set_gpio_mode(GPIO92,GPIO_MODE_GPIO);
  1394. mt_set_gpio_dir(GPIO92,GPIO_DIR_IN);
  1395. mt_set_gpio_pull_enable(GPIO92,GPIO_PULL_DISABLE);
  1396.  
  1397. ret = mt_get_gpio_in(LCM_ID_PIN);
  1398. #if defined(BUILD_LK)
  1399. printf("%s, [jx]otm1283a LCM_ID_PIN = %d \n", __func__, ret);
  1400. #endif
  1401.  
  1402. return (ret == 0)?1:0;
  1403. #endif
  1404. }
  1405. static void lcm_setcabcmode(unsigned int mode)
  1406. {
  1407. unsigned int data_array[16];
  1408.  
  1409. #ifdef BUILD_LK
  1410. printf("%s mode=%d\n",__func__,mode);
  1411. #else
  1412. printk("%s mode=%d\n",__func__,mode);
  1413. #endif
  1414.  
  1415. switch(mode){
  1416. case 0:
  1417. lcm_cabcmode_index=0;
  1418. break;
  1419. case 1:
  1420. lcm_cabcmode_index=1;
  1421. break;
  1422. case 2:
  1423. lcm_cabcmode_index=3;
  1424. break;
  1425. default:
  1426. break;
  1427. }
  1428. data_array[0] = 0x00023902;
  1429. data_array[1] = (0x55|(lcm_cabcmode_index<<8));
  1430. dsi_set_cmdq(&data_array, 2, 1);
  1431.  
  1432. MDELAY(10);
  1433. }
  1434.  
  1435.  
  1436.  
  1437. static void lcm_getcabcstate(unsigned int * state)
  1438. {
  1439.  
  1440. if(lcm_cabcmode_index == 0){
  1441. *state = 0;
  1442. }else if(lcm_cabcmode_index == 1){
  1443. *state = 1;
  1444. }else{
  1445. *state = 2;
  1446. }
  1447. return;
  1448. }
  1449.  
  1450. static void lcm_set_inverse(unsigned int mode)
  1451. {
  1452. unsigned int data_array[16];
  1453.  
  1454. #ifdef BUILD_LK
  1455. printf("%s mode=%d\n",__func__,mode);
  1456. #else
  1457. printk("%s mode=%d\n",__func__,mode);
  1458. #endif
  1459.  
  1460. if(mode){
  1461. data_array[0] = 0x00210500;
  1462. dsi_set_cmdq(data_array, 1, 1);
  1463. }else
  1464. {
  1465. data_array[0] = 0x00200500;
  1466. dsi_set_cmdq(data_array, 1, 1);
  1467.  
  1468. }
  1469.  
  1470. MDELAY(10);
  1471. }
  1472.  
  1473.  
  1474. LCM_DRIVER otm1283a_hd720_dsi_vdo_boe_lcm_drv =
  1475. {
  1476. .name = "otm1283a_hd720_dsi_vdo_boe",
  1477. .set_util_funcs = lcm_set_util_funcs,
  1478. .get_params = lcm_get_params,
  1479. .init = lcm_init,
  1480. .suspend = lcm_suspend,
  1481. .resume = lcm_resume,
  1482. .compare_id = lcm_compare_id,
  1483. .esd_check = lcm_esd_check,
  1484. .esd_recover = lcm_esd_recover,
  1485. #if (LCM_DSI_CMD_MODE)
  1486. .update = lcm_update,
  1487. #endif
  1488. .set_backlight = lcm_setbacklight,
  1489. #ifdef LENOVO_LCD_BACKLIGHT_CONTROL_BY_LCM
  1490. .set_cabcmode = lcm_setcabcmode,
  1491. .get_cabcmode = lcm_getcabcstate,
  1492. #endif
  1493. .set_inversemode = lcm_set_inverse,
  1494.  
  1495. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement