import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / misc / mediatek / lcm / nt35520_hd720_dsi_cmd_tm / nt35520_hd720_dsi_cmd_tm.c
1 /* BEGIN PN:DTS2013053103858 , Added by d00238048, 2013.05.31*/
2 #ifndef BUILD_LK
3 #include <linux/string.h>
4 #endif
5 #include "lcm_drv.h"
6
7 #ifdef BUILD_LK
8 #include <platform/disp_drv_platform.h>
9
10 #elif defined(BUILD_UBOOT)
11 #include <asm/arch/mt_gpio.h>
12 #else
13 #include <linux/delay.h>
14 #include <mach/mt_gpio.h>
15 #endif
16 #include <cust_gpio_usage.h>
17 #ifdef BUILD_LK
18 #define LCD_DEBUG(fmt) dprintf(CRITICAL,fmt)
19 #else
20 #define LCD_DEBUG(fmt) printk(fmt)
21 #endif
22 static unsigned char lcd_id_pins_value = 0xFF;
23 const static unsigned char LCD_MODULE_ID = 0x00;
24 // ---------------------------------------------------------------------------
25 // Local Constants
26 // ---------------------------------------------------------------------------
27 #define LCM_DSI_CMD_MODE 1
28 #define FRAME_WIDTH (720)
29 #define FRAME_HEIGHT (1280)
30
31
32 #define REGFLAG_DELAY 0xFC
33 #define REGFLAG_END_OF_TABLE 0xFD // END OF REGISTERS MARKER
34
35
36 #ifndef TRUE
37 #define TRUE 1
38 #endif
39
40 #ifndef FALSE
41 #define FALSE 0
42 #endif
43 static unsigned int lcm_esd_test = FALSE; ///only for ESD test
44
45 //avoid 12.5% duty brightness value for TI backlight driver chip bug
46 static unsigned int MIN_VALUE_DUTY_ONE_EIGHT = 29;
47 static unsigned int MAX_VALUE_DUTY_ONE_EIGHT = 34;
48 //avoid 25% duty brightness value for TI backlight driver chip bug
49 static unsigned int MIN_VALUE_DUTY_ONE_FOUR = 59;
50 static unsigned int MAX_VALUE_DUTY_ONE_FOUR = 69;
51 //avoid 50% duty brightness value for TI backlight driver chip bug
52 static unsigned int MIN_VALUE_DUTY_ONE_TWO = 123;
53 static unsigned int MAX_VALUE_DUTY_ONE_TWO = 133;
54 // ---------------------------------------------------------------------------
55 // Local Variables
56 // ---------------------------------------------------------------------------
57
58 const static unsigned int BL_MIN_LEVEL =20;
59 static LCM_UTIL_FUNCS lcm_util = {0};
60
61 #define SET_RESET_PIN(v) (lcm_util.set_reset_pin((v)))
62
63 // ---------------------------------------------------------------------------
64 // Local Functions
65 // ---------------------------------------------------------------------------
66
67 #define dsi_set_cmdq_V2(cmd, count, ppara, force_update) lcm_util.dsi_set_cmdq_V2(cmd, count, ppara, force_update)
68 #define dsi_set_cmdq(pdata, queue_size, force_update) lcm_util.dsi_set_cmdq(pdata, queue_size, force_update)
69 #define wrtie_cmd(cmd) lcm_util.dsi_write_cmd(cmd)
70 #define write_regs(addr, pdata, byte_nums) lcm_util.dsi_write_regs(addr, pdata, byte_nums)
71 #define read_reg(cmd) lcm_util.dsi_dcs_read_lcm_reg(cmd)
72 #define read_reg_v2(cmd, buffer, buffer_size) lcm_util.dsi_dcs_read_lcm_reg_v2(cmd, buffer, buffer_size)
73
74 struct LCM_setting_table {
75 unsigned char cmd;
76 unsigned char count;
77 unsigned char para_list[64];
78 };
79 //update initial param for IC nt35520 0.01
80 static struct LCM_setting_table lcm_initialization_setting_tm[] = {
81 {0xFF, 4, {0xAA,0x55,0xA5,0x80}},
82 //f00208919 20130817 for boe flinker
83 {0x6F, 1, {0x13}},
84 {0xF7, 1, {0x00}},
85
86 {0xf0, 5, {0x55,0xaa,0x52,0x08,0x00}},
87 {0x6f, 1, {0x02}},
88 {0xb8, 1, {0x0c}},
89 {0xbb, 2, {0x11,0x11}},
90 {0xbc, 2, {0x00,0x00}},
91 {0xb6, 1, {0x01}},
92 {0xb1, 2, {0x7a,0x21}},
93
94 {0xf0, 5, {0x55,0xaa,0x52,0x08,0x01}},
95 {0xb0, 2, {0x09,0x09}},
96 {0xb1, 2, {0x09,0x09}},
97 {0xbc, 2, {0x98,0x00}},
98 {0xbd, 2, {0x98,0x00}},
99 {0xca, 1, {0x00}},
100 {0xc0, 1, {0x04}},
101 {0xb5, 2, {0x03,0x03}},
102
103 {0xb3, 2, {0x1b,0x1b}},
104 {0xb4, 2, {0x0f,0x0f}},
105 {0xb9, 2, {0x26,0x26}},
106 {0xba, 2, {0x24,0x24}},
107
108 {0xf0, 5, {0x55,0xaa,0x52,0x08,0x02}},
109 {0xee, 1, {0x01}},
110 {0xb0, 16, {0x00,0x20,0x00,0x69,0x00,0xac,0x00,0xce,0x00,0xe7,0x01,0x11,0x01,0x30,0x01,0x61}},
111 {0xb1, 16, {0x01,0x86,0x01,0xc2,0x01,0xef,0x02,0x37,0x02,0x6f,0x02,0x71,0x02,0xa5,0x02,0xde}},
112 {0xb2, 16, {0x03,0x01,0x03,0x2E,0x03,0x4B,0x03,0x6C,0x03,0x81,0x03,0x95,0x03,0xA0,0x03,0xB2}},
113 {0xb3, 4, {0x03,0xB7,0x03,0xFF}},
114
115 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x06}},
116
117 {0xb0, 2, {0x18,0x16}},
118 {0xb1, 2, {0x12,0x10}},
119 {0xb2, 2, {0x00,0x02}},
120 {0xb3, 2, {0x31,0x31}},
121 {0xb4, 2, {0x31,0x34}},
122 {0xb5, 2, {0x34,0x31}},
123 {0xb6, 2, {0x31,0x33}},
124 {0xb7, 2, {0x33,0x33}},
125 {0xb8, 2, {0x31,0x08}},
126 {0xb9, 2, {0x2E,0x2D}},
127 {0xba, 2, {0x2D,0x2E}},
128 {0xbb, 2, {0x09,0x31}},
129 {0xbc, 2, {0x33,0x33}},
130 {0xbd, 2, {0x33,0x31}},
131 {0xbe, 2, {0x31,0x34}},
132 {0xbf, 2, {0x34,0x31}},
133 {0xc0, 2, {0x31,0x31}},
134 {0xc1, 2, {0x03,0x01}},
135 {0xc2, 2, {0x11,0x13}},
136 {0xc3, 2, {0x17,0x19}},
137 {0xe5, 2, {0x31,0x31}},
138
139 {0xc4, 2, {0x11,0x13}},
140 {0xc5, 2, {0x17,0x19}},
141 {0xc6, 2, {0x03,0x01}},
142 {0xc7, 2, {0x31,0x31}},
143 {0xc8, 2, {0x31,0x34}},
144 {0xc9, 2, {0x34,0x31}},
145 {0xca, 2, {0x31,0x33}},
146 {0xcb, 2, {0x33,0x33}},
147 {0xcc, 2, {0x31,0x09}},
148 {0xcd, 2, {0x2D,0x2E}},
149 {0xce, 2, {0x2E,0x2D}},
150 {0xcf, 2, {0x08,0x31}},
151 {0xd0, 2, {0x33,0x33}},
152 {0xd1, 2, {0x33,0x31}},
153 {0xd2, 2, {0x31,0x34}},
154 {0xd3, 2, {0x34,0x31}},
155 {0xd4, 2, {0x31,0x31}},
156 {0xd5, 2, {0x00,0x02}},
157 {0xd6, 2, {0x18,0x16}},
158 {0xd7, 2, {0x12,0x10}},
159
160 {0xd8, 5, {0x00,0x00,0x00,0x00,0x00}},
161 {0xd9, 5, {0x00,0x00,0x00,0x00,0x00}},
162 {0xe7, 1, {0x00}},
163
164 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x05}},
165 {0xed, 1, {0x30}},
166
167 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x03}},
168 {0xb1, 2, {0x00,0x00}},
169 {0xb0, 2, {0x00,0x00}},
170
171 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x05}},
172 {0xe5, 1, {0x00}},
173
174 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x05}},
175 {0xb0, 2, {0x17,0x06}},
176 {0xb8, 1, {0x00}},
177
178 {0xbd, 5, {0x03,0x03,0x01,0x00,0x03}},
179 {0xb1, 2, {0x17,0x06}},
180 {0xb9, 2, {0x00,0x03}},
181 {0xb2, 2, {0x17,0x06}},
182 {0xba, 2, {0x00,0x00}},
183 {0xb3, 2, {0x17,0x06}},
184 {0xbb, 2, {0x00,0x00}},
185 {0xb4, 2, {0x17,0x06}},
186 {0xb5, 2, {0x17,0x06}},
187 {0xb6, 2, {0x17,0x06}},
188 {0xb7, 2, {0x17,0x06}},
189 {0xbc, 2, {0x00,0x03}},
190 {0xe5, 1, {0x06}},
191 {0xe6, 1, {0x06}},
192 {0xe7, 1, {0x06}},
193 {0xe8, 1, {0x06}},
194 {0xe9, 1, {0x06}},
195 {0xea, 1, {0x06}},
196 {0xeb, 1, {0x06}},
197 {0xec, 1, {0x06}},
198
199 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x05}},
200 {0xc0, 1, {0x0f}},
201 {0xc1, 1, {0x0d}},
202 {0xc2, 1, {0x0f}},
203 {0xc3, 1, {0x0d}},
204
205 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x03}},
206 {0xb2, 5, {0x05,0x00,0x00,0x00,0x00}},
207 {0xb3, 5, {0x05,0x00,0x00,0x00,0x00}},
208 {0xb4, 5, {0x05,0x00,0x00,0x00,0x00}},
209 {0xb5, 5, {0x05,0x00,0x00,0x00,0x00}},
210
211 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x05}},
212 {0xc4, 1, {0x14}},
213 {0xc5, 1, {0x14}},
214 {0xc6, 1, {0x14}},
215 {0xc7, 1, {0x14}},
216
217 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x03}},
218 {0xb6, 5, {0x05,0x00,0x00,0x00,0x00}},
219 {0xb7, 5, {0x05,0x00,0x00,0x00,0x00}},
220 {0xb8, 5, {0x05,0x00,0x00,0x00,0x00}},
221 {0xb9, 5, {0x05,0x00,0x00,0x00,0x00}},
222
223 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x05}},
224 {0xc8, 2, {0x0B,0x20}},
225 {0xc9, 2, {0x07,0x20}},
226 {0xca, 2, {0x0B,0x00}},
227 {0xcb, 2, {0x07,0x00}},
228
229 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x03}},
230 {0xba, 5, {0x53,0x00,0x00,0x00,0x00}},
231 {0xbb, 5, {0x53,0x00,0x00,0x00,0x00}},
232 {0xbc, 5, {0x53,0x00,0x00,0x00,0x00}},
233 {0xbd, 5, {0x53,0x00,0x00,0x00,0x00}},
234
235 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x05}},
236 {0xd1, 5, {0x00,0x05,0x04,0x07,0x10}},
237 {0xd2, 5, {0x00,0x05,0x08,0x07,0x10}},
238 {0xd3, 5, {0x00,0x00,0x0A,0x07,0x10}},
239 {0xd4, 5, {0x00,0x00,0x0A,0x07,0x10}},
240
241 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x05}},
242 {0xd0, 7, {0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
243 {0xd5, 11, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
244 {0xd6, 11, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
245 {0xd7, 11, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
246 {0xd8, 5, {0x00,0x00,0x00,0x00,0x00}},
247
248 {0xf0, 5, {0x55,0xAA,0x52,0x08,0x03}},
249 {0xc4, 1, {0x60}},
250 {0xc5, 1, {0x40}},
251 {0xc6, 1, {0x60}},
252 {0xc7, 1, {0x40}},
253
254 {0x35, 1, {0x00}},
255
256 {0x11, 1, {0x00}},
257 {REGFLAG_DELAY, 120, {}},
258
259 {0x29, 1, {0x00}},
260
261
262
263 };
264
265 #if 0
266 static struct LCM_setting_table lcm_set_window[] = {
267 {0x2A, 4, {0x00, 0x00, (FRAME_WIDTH>>8), (FRAME_WIDTH&0xFF)}},
268 {0x2B, 4, {0x00, 0x00, (FRAME_HEIGHT>>8), (FRAME_HEIGHT&0xFF)}},
269 {REGFLAG_END_OF_TABLE, 0x00, {}}
270 };
271 #endif
272 static struct LCM_setting_table lcm_sleep_out_setting[] = {
273 //Sleep Out
274 {0x11, 1, {0x00}},
275 {REGFLAG_DELAY, 120, {}},
276
277 // Display ON
278 {0x29, 1, {0x00}},
279 {REGFLAG_DELAY, 20, {}},
280 {REGFLAG_END_OF_TABLE, 0x00, {}}
281 };
282
283
284 static struct LCM_setting_table lcm_deep_sleep_mode_in_setting[] = {
285 // Display off sequence
286 {0x28, 1, {0x00}},
287 {REGFLAG_DELAY, 20, {}},
288
289 // Sleep Mode On
290 {0x10, 1, {0x00}},
291 {REGFLAG_DELAY, 120, {}},
292 {REGFLAG_END_OF_TABLE, 0x00, {}}
293 };
294
295 static void push_table(struct LCM_setting_table *table, unsigned int count, unsigned char force_update)
296 {
297 unsigned int i;
298
299 for(i = 0; i < count; i++)
300 {
301 unsigned cmd;
302 cmd = table[i].cmd;
303
304 switch (cmd) {
305
306 case REGFLAG_DELAY :
307 if(table[i].count <= 10)
308 mdelay(table[i].count);
309 else
310 msleep(table[i].count);
311 break;
312
313 case REGFLAG_END_OF_TABLE :
314 break;
315
316 default:
317 dsi_set_cmdq_V2(cmd, table[i].count, table[i].para_list, force_update);
318 }
319 }
320 }
321
322 // ---------------------------------------------------------------------------
323 // LCM Driver Implementations
324 // ---------------------------------------------------------------------------
325
326 static void lcm_set_util_funcs(const LCM_UTIL_FUNCS *util)
327 {
328 memcpy(&lcm_util, util, sizeof(LCM_UTIL_FUNCS));
329 }
330
331
332 static void lcm_get_params(LCM_PARAMS *params)
333 {
334 memset(params, 0, sizeof(LCM_PARAMS));
335
336 params->type = LCM_TYPE_DSI;
337
338 params->width = FRAME_WIDTH;
339 params->height = FRAME_HEIGHT;
340
341 #if (LCM_DSI_CMD_MODE)
342 params->dsi.mode = CMD_MODE;
343 #else
344 params->dsi.mode = SYNC_PULSE_VDO_MODE;
345 #endif
346
347 // DSI
348 /* Command mode setting */
349 params->dsi.LANE_NUM = LCM_FOUR_LANE;
350 //The following defined the fomat for data coming from LCD engine.
351 params->dsi.data_format.color_order = LCM_COLOR_ORDER_RGB;
352 params->dsi.data_format.trans_seq = LCM_DSI_TRANS_SEQ_MSB_FIRST;
353 params->dsi.data_format.padding = LCM_DSI_PADDING_ON_LSB;
354 params->dsi.data_format.format = LCM_DSI_FORMAT_RGB888;
355
356 // Highly depends on LCD driver capability.
357 params->dsi.packet_size=256;
358 //video mode timing
359
360 params->dsi.PS=LCM_PACKED_PS_24BIT_RGB888;
361
362 params->dsi.vertical_sync_active = 2;
363 params->dsi.vertical_backporch = 8;
364 params->dsi.vertical_frontporch = 10;
365 params->dsi.vertical_active_line = FRAME_HEIGHT;
366
367 params->dsi.horizontal_sync_active = 10;
368 params->dsi.horizontal_backporch = 20;
369 params->dsi.horizontal_frontporch = 40;
370 params->dsi.horizontal_active_pixel = FRAME_WIDTH;
371
372 /*BEGIN PN:DTS2013013101431 modified by s00179437 , 2013-01-31*/
373 //improve clk quality
374 params->dsi.PLL_CLOCK = 240; //this value must be in MTK suggested table
375 /*END PN:DTS2013013101431 modified by s00179437 , 2013-01-31*/
376
377 }
378 /*to prevent electric leakage*/
379 static void lcm_id_pin_handle(void)
380 {
381 mt_set_gpio_pull_select(GPIO_DISP_ID0_PIN,GPIO_PULL_DOWN);
382 mt_set_gpio_pull_select(GPIO_DISP_ID1_PIN,GPIO_PULL_DOWN);
383 }
384
385 static void lcm_init_tm(void)
386 {
387 //enable VSP & VSN
388 lcm_util.set_gpio_out(GPIO_LCD_BIAS_ENP_PIN, GPIO_OUT_ONE);
389 lcm_util.set_gpio_out(GPIO_LCD_BIAS_ENN_PIN, GPIO_OUT_ONE);
390 msleep(50);
391 //reset low to high
392 lcm_util.set_gpio_out(GPIO_DISP_LRSTB_PIN, GPIO_OUT_ONE);
393 mdelay(5);
394 lcm_util.set_gpio_out(GPIO_DISP_LRSTB_PIN, GPIO_OUT_ZERO);
395 mdelay(5);
396 lcm_util.set_gpio_out(GPIO_DISP_LRSTB_PIN, GPIO_OUT_ONE);
397 msleep(10);
398
399 lcm_id_pin_handle();
400 // when phone initial , config output high, enable backlight drv chip
401 lcm_util.set_gpio_out(GPIO_LCD_DRV_EN_PIN, GPIO_OUT_ONE);
402 push_table(lcm_initialization_setting_tm, sizeof(lcm_initialization_setting_tm) / sizeof(struct LCM_setting_table), 1);
403
404 LCD_DEBUG("uboot:tm_nt35520_lcm_init\n");
405
406 }
407
408
409 static void lcm_suspend(void)
410 {
411 /*BEGIN PN:DTS2013061501413 , Modified by s00179437 , 2013-6-15*/
412 //Back to MP.P7 baseline , solve LCD display abnormal On the right
413 // when phone sleep , config output low, disable backlight drv chip
414 lcm_util.set_gpio_out(GPIO_LCD_DRV_EN_PIN, GPIO_OUT_ZERO);
415 /*END PN:DTS2013061501413 , Modified by s00179437 , 2013-6-15*/
416 push_table(lcm_deep_sleep_mode_in_setting, sizeof(lcm_deep_sleep_mode_in_setting) / sizeof(struct LCM_setting_table), 1);
417 //reset low
418 lcm_util.set_gpio_out(GPIO_DISP_LRSTB_PIN, GPIO_OUT_ZERO);
419 mdelay(5);
420 //disable VSP & VSN
421 lcm_util.set_gpio_out(GPIO_LCD_BIAS_ENP_PIN, GPIO_OUT_ZERO);
422 lcm_util.set_gpio_out(GPIO_LCD_BIAS_ENN_PIN, GPIO_OUT_ZERO);
423 mdelay(5);
424
425 LCD_DEBUG("kernel:tm_nt35520_lcm_suspend\n");
426
427 }
428 static void lcm_resume_tm(void)
429 {
430
431 //enable VSP & VSN
432 lcm_util.set_gpio_out(GPIO_LCD_BIAS_ENP_PIN, GPIO_OUT_ONE);
433 lcm_util.set_gpio_out(GPIO_LCD_BIAS_ENN_PIN, GPIO_OUT_ONE);
434 msleep(50);
435
436 //reset low to high
437 lcm_util.set_gpio_out(GPIO_DISP_LRSTB_PIN, GPIO_OUT_ONE);
438 mdelay(5);
439 lcm_util.set_gpio_out(GPIO_DISP_LRSTB_PIN, GPIO_OUT_ZERO);
440 mdelay(5);
441 lcm_util.set_gpio_out(GPIO_DISP_LRSTB_PIN, GPIO_OUT_ONE);
442 msleep(10);
443
444 push_table(lcm_initialization_setting_tm, sizeof(lcm_initialization_setting_tm) / sizeof(struct LCM_setting_table), 1);
445 /*BEGIN PN:DTS2013061501413 , Modified by s00179437 , 2013-6-15*/
446 //Back to MP.P7 baseline , solve LCD display abnormal On the right
447 //when sleep out, config output high ,enable backlight drv chip
448 lcm_util.set_gpio_out(GPIO_LCD_DRV_EN_PIN, GPIO_OUT_ONE);
449 /*END PN:DTS2013061501413 , Modified by s00179437 , 2013-6-15*/
450 LCD_DEBUG("kernel:tm_nt35520_lcm_resume\n");
451 }
452 static void lcm_update(unsigned int x, unsigned int y,
453 unsigned int width, unsigned int height)
454 {
455 unsigned int x0 = x;
456 unsigned int y0 = y;
457 unsigned int x1 = x0 + width - 1;
458 unsigned int y1 = y0 + height - 1;
459
460 unsigned char x0_MSB = ((x0>>8)&0xFF);
461 unsigned char x0_LSB = (x0&0xFF);
462 unsigned char x1_MSB = ((x1>>8)&0xFF);
463 unsigned char x1_LSB = (x1&0xFF);
464 unsigned char y0_MSB = ((y0>>8)&0xFF);
465 unsigned char y0_LSB = (y0&0xFF);
466 unsigned char y1_MSB = ((y1>>8)&0xFF);
467 unsigned char y1_LSB = (y1&0xFF);
468
469 unsigned int data_array[16];
470
471 data_array[0]= 0x00053902;
472 data_array[1]= (x1_MSB<<24)|(x0_LSB<<16)|(x0_MSB<<8)|0x2a;
473 data_array[2]= (x1_LSB);
474 dsi_set_cmdq(data_array, 3, 1);
475
476 data_array[0]= 0x00053902;
477 data_array[1]= (y1_MSB<<24)|(y0_LSB<<16)|(y0_MSB<<8)|0x2b;
478 data_array[2]= (y1_LSB);
479 dsi_set_cmdq(data_array, 3, 1);
480 /*BEGIN PN:DTS2013013101431 modified by s00179437 , 2013-01-31*/
481 //delete high speed packet
482 //data_array[0]=0x00290508;
483 //dsi_set_cmdq(data_array, 1, 1);
484 /*END PN:DTS2013013101431 modified by s00179437 , 2013-01-31*/
485
486 data_array[0]= 0x002c3909;
487 dsi_set_cmdq(data_array, 1, 0);
488
489 }
490 /*BEGIN PN:DTS2013011703806, Added by y00213338 , 2013-01-13*/
491 /******************************************************************************
492 Function: lcm_set_pwm_level_XXX
493 Description: set different values for each LCD
494 Input: level
495 Output: NONE
496 Return: mapped_level
497 Others: none
498 ******************************************************************************/
499
500 static unsigned int lcm_set_pwm_level_tm(unsigned int level )
501 {
502 unsigned int mapped_level = 0;
503 if( 0 == level)
504 {
505 mapped_level = level;
506 }
507 else if(( 0 < level ) && ( BL_MIN_LEVEL > level ))
508 {
509 //Some 3rd APK will set values < 20 , set value(1-19) is 8
510 mapped_level = 8;
511 }
512 else
513 {
514 //Reduce brightness for power consumption , MAX value > 350cd/cm2
515 mapped_level = (unsigned int)((level-8) * 7 /10);
516 }
517 /*BEGIN PN:DTS2013042409674, Added by s00179437 , 2013-04-24*/
518 if((mapped_level >= MIN_VALUE_DUTY_ONE_EIGHT) && (mapped_level <= MAX_VALUE_DUTY_ONE_EIGHT )) //12.5% duty shanshuo
519 {
520 //avoid 12.5% duty brightness value for TI backlight driver chip bug
521 mapped_level = MIN_VALUE_DUTY_ONE_EIGHT-1;
522 }
523 else if((mapped_level >= MIN_VALUE_DUTY_ONE_FOUR) && (mapped_level <= MAX_VALUE_DUTY_ONE_FOUR))
524 {
525 //avoid 25% duty brightness value for TI backlight driver chip bug
526 mapped_level = MIN_VALUE_DUTY_ONE_FOUR-1;
527 }
528 else if((mapped_level >= MIN_VALUE_DUTY_ONE_TWO) && (mapped_level <= MAX_VALUE_DUTY_ONE_TWO))
529 {
530 //avoid 50% duty brightness value for TI backlight driver chip bug
531 mapped_level = MIN_VALUE_DUTY_ONE_TWO-1;
532 }
533
534 #ifdef BUILD_LK
535 dprintf(CRITICAL,"uboot:tm_nt35520_lcm_set_pwm mapped_level = %d,level=%d\n",mapped_level,level);
536 #else
537 printk("kernel:tm_nt35520_lcm_set_pwm mapped_level = %d,level=%d\n",mapped_level,level);
538 #endif
539 return mapped_level;
540 }
541 static unsigned int lcm_compare_id_tm(void)
542 {
543 /* BEGIN PN:SPBB-1229 ,Modified by b00214920, 2013/01/07*/
544 unsigned char module_id = which_lcd_module_triple();
545 return ((LCD_MODULE_ID == module_id )? 1 : 0);
546 /* END PN:SPBB-1229 ,Modified by b00214920, 2013/01/07*/
547 }
548 LCM_DRIVER nt35520_hd720_tm_lcm_drv =
549 {
550 .name = "nt35520_hd720_dsi_cmd_tm",
551 .set_util_funcs = lcm_set_util_funcs,
552 .get_params = lcm_get_params,
553 .init = lcm_init_tm,/*tianma init fun.*/
554 .suspend = lcm_suspend,
555 .resume = lcm_resume_tm,
556 .compare_id = lcm_compare_id_tm,
557 #if (LCM_DSI_CMD_MODE)
558 .update = lcm_update,
559 // .set_backlight = lcm_setbacklight,
560 //.set_pwm_level = lcm_set_pwm_level_tm,
561 // .set_pwm = lcm_setpwm,
562 // .get_pwm = lcm_getpwm,
563 // .esd_check = lcm_esd_check,
564 // .esd_recover = lcm_esd_recover,
565 #endif
566
567 };
568 /* END PN:DTS2013053103858 , Added by d00238048, 2013.05.31*/