@@ -72,7 +72,7 @@ struct ili9881c_instr {
7272 }, \
7373 }
7474
75- static const struct ili9881c_instr ili9881c_init_0 [] = {//7-inch
75+ static const struct ili9881c_instr ili9881c_init_rev_a [] = {//7-inch rev_a
7676 ILI9881C_SWITCH_PAGE_INSTR (3 ),
7777 //ILI9881C_COMMAND_INSTR(0x01, 0x00),
7878 //ILI9881C_COMMAND_INSTR(0x02, 0x00),
@@ -272,7 +272,208 @@ static const struct ili9881c_instr ili9881c_init_0[] = {//7-inch
272272 ILI9881C_COMMAND_INSTR (0xD3 , 0x39 ),
273273};
274274
275- static const struct ili9881c_instr ili9881c_init_1 [] = {//10-inch
275+ static const struct ili9881c_instr ili9881c_init_rev_b [] = { //7inch rev b
276+ ILI9881C_SWITCH_PAGE_INSTR (3 ),
277+ ILI9881C_COMMAND_INSTR (0x01 , 0x00 ),
278+ ILI9881C_COMMAND_INSTR (0x02 , 0x00 ),
279+ ILI9881C_COMMAND_INSTR (0x03 , 0x73 ),
280+ ILI9881C_COMMAND_INSTR (0x04 , 0x00 ),
281+ ILI9881C_COMMAND_INSTR (0x05 , 0x00 ),
282+ ILI9881C_COMMAND_INSTR (0x06 , 0x0A ),
283+ ILI9881C_COMMAND_INSTR (0x07 , 0x00 ),
284+ ILI9881C_COMMAND_INSTR (0x08 , 0x00 ),
285+ ILI9881C_COMMAND_INSTR (0x09 , 0x61 ),
286+ ILI9881C_COMMAND_INSTR (0x0A , 0x00 ),
287+ ILI9881C_COMMAND_INSTR (0x0B , 0x00 ),
288+ ILI9881C_COMMAND_INSTR (0x0C , 0x01 ),
289+ ILI9881C_COMMAND_INSTR (0x0D , 0x00 ),
290+ ILI9881C_COMMAND_INSTR (0x0E , 0x00 ),
291+ ILI9881C_COMMAND_INSTR (0x0F , 0x61 ),
292+ ILI9881C_COMMAND_INSTR (0x10 , 0x61 ),
293+ ILI9881C_COMMAND_INSTR (0x11 , 0x00 ),
294+ ILI9881C_COMMAND_INSTR (0x12 , 0x00 ),
295+ ILI9881C_COMMAND_INSTR (0x13 , 0x00 ),
296+ ILI9881C_COMMAND_INSTR (0x14 , 0x00 ),
297+ ILI9881C_COMMAND_INSTR (0x15 , 0x00 ),
298+ ILI9881C_COMMAND_INSTR (0x16 , 0x00 ),
299+ ILI9881C_COMMAND_INSTR (0x17 , 0x00 ),
300+ ILI9881C_COMMAND_INSTR (0x18 , 0x00 ),
301+ ILI9881C_COMMAND_INSTR (0x19 , 0x00 ),
302+ ILI9881C_COMMAND_INSTR (0x1A , 0x00 ),
303+ ILI9881C_COMMAND_INSTR (0x1B , 0x00 ),
304+ ILI9881C_COMMAND_INSTR (0x1C , 0x00 ),
305+ ILI9881C_COMMAND_INSTR (0x1D , 0x00 ),
306+ ILI9881C_COMMAND_INSTR (0x1E , 0x40 ),
307+ ILI9881C_COMMAND_INSTR (0x1F , 0x80 ),
308+ ILI9881C_COMMAND_INSTR (0x20 , 0x06 ),
309+ ILI9881C_COMMAND_INSTR (0x21 , 0x01 ),
310+ ILI9881C_COMMAND_INSTR (0x22 , 0x00 ),
311+ ILI9881C_COMMAND_INSTR (0x23 , 0x00 ),
312+ ILI9881C_COMMAND_INSTR (0x24 , 0x00 ),
313+ ILI9881C_COMMAND_INSTR (0x25 , 0x00 ),
314+ ILI9881C_COMMAND_INSTR (0x26 , 0x00 ),
315+ ILI9881C_COMMAND_INSTR (0x27 , 0x00 ),
316+ ILI9881C_COMMAND_INSTR (0x28 , 0x33 ),
317+ ILI9881C_COMMAND_INSTR (0x29 , 0x03 ),
318+ ILI9881C_COMMAND_INSTR (0x2A , 0x00 ),
319+ ILI9881C_COMMAND_INSTR (0x2B , 0x00 ),
320+ ILI9881C_COMMAND_INSTR (0x2C , 0x00 ),
321+ ILI9881C_COMMAND_INSTR (0x2D , 0x00 ),
322+ ILI9881C_COMMAND_INSTR (0x2E , 0x00 ),
323+ ILI9881C_COMMAND_INSTR (0x2F , 0x00 ),
324+ ILI9881C_COMMAND_INSTR (0x30 , 0x00 ),
325+ ILI9881C_COMMAND_INSTR (0x31 , 0x00 ),
326+ ILI9881C_COMMAND_INSTR (0x32 , 0x00 ),
327+ ILI9881C_COMMAND_INSTR (0x33 , 0x00 ),
328+ ILI9881C_COMMAND_INSTR (0x34 , 0x04 ),
329+ ILI9881C_COMMAND_INSTR (0x35 , 0x00 ),
330+ ILI9881C_COMMAND_INSTR (0x36 , 0x00 ),
331+ ILI9881C_COMMAND_INSTR (0x37 , 0x00 ),
332+ ILI9881C_COMMAND_INSTR (0x38 , 0x3C ),
333+ ILI9881C_COMMAND_INSTR (0x39 , 0x00 ),
334+ ILI9881C_COMMAND_INSTR (0x3A , 0x00 ),
335+ ILI9881C_COMMAND_INSTR (0x3B , 0x00 ),
336+ ILI9881C_COMMAND_INSTR (0x3C , 0x00 ),
337+ ILI9881C_COMMAND_INSTR (0x3D , 0x00 ),
338+ ILI9881C_COMMAND_INSTR (0x3E , 0x00 ),
339+ ILI9881C_COMMAND_INSTR (0x3F , 0x00 ),
340+ ILI9881C_COMMAND_INSTR (0x40 , 0x00 ),
341+ ILI9881C_COMMAND_INSTR (0x41 , 0x00 ),
342+ ILI9881C_COMMAND_INSTR (0x42 , 0x00 ),
343+ ILI9881C_COMMAND_INSTR (0x43 , 0x00 ),
344+ ILI9881C_COMMAND_INSTR (0x44 , 0x00 ),
345+
346+
347+ ILI9881C_COMMAND_INSTR (0x50 , 0x10 ),
348+ ILI9881C_COMMAND_INSTR (0x51 , 0x32 ),
349+ ILI9881C_COMMAND_INSTR (0x52 , 0x54 ),
350+ ILI9881C_COMMAND_INSTR (0x53 , 0x76 ),
351+ ILI9881C_COMMAND_INSTR (0x54 , 0x98 ),
352+ ILI9881C_COMMAND_INSTR (0x55 , 0xBA ),
353+ ILI9881C_COMMAND_INSTR (0x56 , 0x10 ),
354+ ILI9881C_COMMAND_INSTR (0x57 , 0x32 ),
355+ ILI9881C_COMMAND_INSTR (0x58 , 0x54 ),
356+ ILI9881C_COMMAND_INSTR (0x59 , 0x76 ),
357+ ILI9881C_COMMAND_INSTR (0x5A , 0x98 ),
358+ ILI9881C_COMMAND_INSTR (0x5B , 0xBA ),
359+ ILI9881C_COMMAND_INSTR (0x5C , 0xDC ),
360+ ILI9881C_COMMAND_INSTR (0x5D , 0xFE ),
361+ ILI9881C_COMMAND_INSTR (0x5E , 0x00 ),
362+ ILI9881C_COMMAND_INSTR (0x5F , 0x0E ),
363+ ILI9881C_COMMAND_INSTR (0x60 , 0x0F ),
364+ ILI9881C_COMMAND_INSTR (0x61 , 0x0C ),
365+ ILI9881C_COMMAND_INSTR (0x62 , 0x0D ),
366+ ILI9881C_COMMAND_INSTR (0x63 , 0x06 ),
367+ ILI9881C_COMMAND_INSTR (0x64 , 0x07 ),
368+ ILI9881C_COMMAND_INSTR (0x65 , 0x02 ),
369+ ILI9881C_COMMAND_INSTR (0x66 , 0x02 ),
370+ ILI9881C_COMMAND_INSTR (0x67 , 0x02 ),
371+ ILI9881C_COMMAND_INSTR (0x68 , 0x02 ),
372+ ILI9881C_COMMAND_INSTR (0x69 , 0x01 ),
373+ ILI9881C_COMMAND_INSTR (0x6A , 0x00 ),
374+ ILI9881C_COMMAND_INSTR (0x6B , 0x02 ),
375+ ILI9881C_COMMAND_INSTR (0x6C , 0x15 ),
376+ ILI9881C_COMMAND_INSTR (0x6D , 0x14 ),
377+ ILI9881C_COMMAND_INSTR (0x6E , 0x02 ),
378+ ILI9881C_COMMAND_INSTR (0x6F , 0x02 ),
379+ ILI9881C_COMMAND_INSTR (0x70 , 0x02 ),
380+ ILI9881C_COMMAND_INSTR (0x71 , 0x02 ),
381+ ILI9881C_COMMAND_INSTR (0x72 , 0x02 ),
382+ ILI9881C_COMMAND_INSTR (0x73 , 0x02 ),
383+ ILI9881C_COMMAND_INSTR (0x74 , 0x02 ),
384+ ILI9881C_COMMAND_INSTR (0x75 , 0x0E ),
385+ ILI9881C_COMMAND_INSTR (0x76 , 0x0F ),
386+ ILI9881C_COMMAND_INSTR (0x77 , 0x0C ),
387+ ILI9881C_COMMAND_INSTR (0x78 , 0x0D ),
388+ ILI9881C_COMMAND_INSTR (0x79 , 0x06 ),
389+ ILI9881C_COMMAND_INSTR (0x7A , 0x07 ),
390+ ILI9881C_COMMAND_INSTR (0x7B , 0x02 ),
391+ ILI9881C_COMMAND_INSTR (0x7C , 0x02 ),
392+ ILI9881C_COMMAND_INSTR (0x7D , 0x02 ),
393+ ILI9881C_COMMAND_INSTR (0x7E , 0x02 ),
394+ ILI9881C_COMMAND_INSTR (0x7F , 0x01 ),
395+ ILI9881C_COMMAND_INSTR (0x80 , 0x00 ),
396+ ILI9881C_COMMAND_INSTR (0x81 , 0x02 ),
397+ ILI9881C_COMMAND_INSTR (0x82 , 0x14 ),
398+ ILI9881C_COMMAND_INSTR (0x83 , 0x15 ),
399+ ILI9881C_COMMAND_INSTR (0x84 , 0x02 ),
400+ ILI9881C_COMMAND_INSTR (0x85 , 0x02 ),
401+ ILI9881C_COMMAND_INSTR (0x86 , 0x02 ),
402+ ILI9881C_COMMAND_INSTR (0x87 , 0x02 ),
403+ ILI9881C_COMMAND_INSTR (0x88 , 0x02 ),
404+ ILI9881C_COMMAND_INSTR (0x89 , 0x02 ),
405+ ILI9881C_COMMAND_INSTR (0x8A , 0x02 ),
406+
407+
408+ ILI9881C_SWITCH_PAGE_INSTR (4 ),
409+ ILI9881C_COMMAND_INSTR (0x6C , 0x15 ),
410+ ILI9881C_COMMAND_INSTR (0x6E , 0x2A ),
411+ ILI9881C_COMMAND_INSTR (0x6F , 0x33 ),
412+ ILI9881C_COMMAND_INSTR (0x3B , 0x98 ), //PUMP SHIFT
413+ ILI9881C_COMMAND_INSTR (0x3A , 0x94 ), //POWER SAVING
414+ ILI9881C_COMMAND_INSTR (0x8D , 0x14 ),
415+ ILI9881C_COMMAND_INSTR (0x87 , 0xBA ),
416+ ILI9881C_COMMAND_INSTR (0x26 , 0x76 ),
417+ ILI9881C_COMMAND_INSTR (0xB2 , 0xD1 ),
418+ ILI9881C_COMMAND_INSTR (0xB5 , 0x06 ),
419+ ILI9881C_COMMAND_INSTR (0x38 , 0x01 ),
420+ ILI9881C_COMMAND_INSTR (0x39 , 0x00 ),
421+
422+ ILI9881C_SWITCH_PAGE_INSTR (1 ),
423+ ILI9881C_COMMAND_INSTR (0x22 , 0x0A ),
424+ ILI9881C_COMMAND_INSTR (0x31 , 0x00 ),
425+ ILI9881C_COMMAND_INSTR (0x53 , 0x7D ),
426+ ILI9881C_COMMAND_INSTR (0x55 , 0x8F ),
427+ ILI9881C_COMMAND_INSTR (0x40 , 0x33 ),
428+ ILI9881C_COMMAND_INSTR (0x50 , 0x96 ),
429+ ILI9881C_COMMAND_INSTR (0x51 , 0x96 ),
430+ ILI9881C_COMMAND_INSTR (0x60 , 0x23 ),
431+
432+
433+ ILI9881C_COMMAND_INSTR (0xA0 , 0x08 ), //GAMMA P
434+ ILI9881C_COMMAND_INSTR (0xA1 , 0x1D ),
435+ ILI9881C_COMMAND_INSTR (0xA2 , 0x2A ),
436+ ILI9881C_COMMAND_INSTR (0xA3 , 0x10 ),
437+ ILI9881C_COMMAND_INSTR (0xA4 , 0x15 ),
438+ ILI9881C_COMMAND_INSTR (0xA5 , 0x28 ),
439+ ILI9881C_COMMAND_INSTR (0xA6 , 0x1C ),
440+ ILI9881C_COMMAND_INSTR (0xA7 , 0x1D ),
441+ ILI9881C_COMMAND_INSTR (0xA8 , 0x7E ),
442+ ILI9881C_COMMAND_INSTR (0xA9 , 0x1D ),
443+ ILI9881C_COMMAND_INSTR (0xAA , 0x29 ),
444+ ILI9881C_COMMAND_INSTR (0xAB , 0x6B ),
445+ ILI9881C_COMMAND_INSTR (0xAC , 0x1A ),
446+ ILI9881C_COMMAND_INSTR (0xAD , 0x18 ),
447+ ILI9881C_COMMAND_INSTR (0xAE , 0x4B ),
448+ ILI9881C_COMMAND_INSTR (0xAF , 0x20 ),
449+ ILI9881C_COMMAND_INSTR (0xB0 , 0x27 ),
450+ ILI9881C_COMMAND_INSTR (0xB1 , 0x50 ),
451+ ILI9881C_COMMAND_INSTR (0xB2 , 0x64 ),
452+ ILI9881C_COMMAND_INSTR (0xB3 , 0x39 ),
453+
454+ ILI9881C_COMMAND_INSTR (0xC0 , 0x08 ), //GAMMA N
455+ ILI9881C_COMMAND_INSTR (0xC1 , 0x1D ),
456+ ILI9881C_COMMAND_INSTR (0xC2 , 0x2A ),
457+ ILI9881C_COMMAND_INSTR (0xC3 , 0x10 ),
458+ ILI9881C_COMMAND_INSTR (0xC4 , 0x15 ),
459+ ILI9881C_COMMAND_INSTR (0xC5 , 0x28 ),
460+ ILI9881C_COMMAND_INSTR (0xC6 , 0x1C ),
461+ ILI9881C_COMMAND_INSTR (0xC7 , 0x1D ),
462+ ILI9881C_COMMAND_INSTR (0xC8 , 0x7E ),
463+ ILI9881C_COMMAND_INSTR (0xC9 , 0x1D ),
464+ ILI9881C_COMMAND_INSTR (0xCA , 0x29 ),
465+ ILI9881C_COMMAND_INSTR (0xCB , 0x6B ),
466+ ILI9881C_COMMAND_INSTR (0xCC , 0x1A ),
467+ ILI9881C_COMMAND_INSTR (0xCD , 0x18 ),
468+ ILI9881C_COMMAND_INSTR (0xCE , 0x4B ),
469+ ILI9881C_COMMAND_INSTR (0xCF , 0x20 ),
470+ ILI9881C_COMMAND_INSTR (0xD0 , 0x27 ),
471+ ILI9881C_COMMAND_INSTR (0xD1 , 0x50 ),
472+ ILI9881C_COMMAND_INSTR (0xD2 , 0x64 ),
473+ ILI9881C_COMMAND_INSTR (0xD3 , 0x39 ),
474+ };
475+
476+ static const struct ili9881c_instr ili9881c_init_1 [] = {//5-inch
276477 ILI9881C_SWITCH_PAGE_INSTR (3 ),
277478 ILI9881C_COMMAND_INSTR (0x01 , 0x00 ),
278479 ILI9881C_COMMAND_INSTR (0x02 , 0x00 ),
@@ -549,9 +750,9 @@ static int ili9881c_enable(struct drm_panel *panel)
549750
550751 if (lcd_size_flag == 0 )
551752 {
552- for (i = 0 ; i < ARRAY_SIZE (ili9881c_init_0 ); i ++ )
753+ for (i = 0 ; i < ARRAY_SIZE (ili9881c_init_rev_b ); i ++ )
553754 {
554- const struct ili9881c_instr * instr = & ili9881c_init_0 [i ];
755+ const struct ili9881c_instr * instr = & ili9881c_init_rev_b [i ];
555756
556757 if (instr -> op == ILI9881C_SWITCH_PAGE )
557758 ret = ili9881c_switch_page (ctx , instr -> arg .page );
@@ -562,9 +763,21 @@ static int ili9881c_enable(struct drm_panel *panel)
562763 if (ret )
563764 return ret ;
564765 }
766+ } else if (lcd_size_flag == 3 ) {
767+ for (i = 0 ; i < ARRAY_SIZE (ili9881c_init_rev_a ); i ++ )
768+ {
769+ const struct ili9881c_instr * instr = & ili9881c_init_rev_a [i ];
770+
771+ if (instr -> op == ILI9881C_SWITCH_PAGE )
772+ ret = ili9881c_switch_page (ctx , instr -> arg .page );
773+ else if (instr -> op == ILI9881C_COMMAND )
774+ ret = ili9881c_send_cmd_data (ctx , instr -> arg .cmd .cmd ,
775+ instr -> arg .cmd .data );
776+
777+ if (ret )
778+ return ret ;
565779 }
566- else if (lcd_size_flag == 1 )
567- {
780+ } else if (lcd_size_flag == 1 ) {
568781 for (i = 0 ; i < ARRAY_SIZE (ili9881c_init_1 ); i ++ )
569782 {
570783 const struct ili9881c_instr * instr = & ili9881c_init_1 [i ];
@@ -695,7 +908,7 @@ static int ili9881c_get_modes(struct drm_panel *panel)
695908 struct drm_display_mode * mode ;
696909
697910 pr_info ("%s\n" , __func__ );
698- if ((lcd_size_flag == 1 ) || (lcd_size_flag == 0 ))
911+ if ((lcd_size_flag == 0 ) || ( lcd_size_flag == 1 ) || (lcd_size_flag == 3 ))
699912 {
700913 mode = drm_mode_duplicate (panel -> drm , & asus_ili9881c_default_mode_7inch );
701914 if (!mode )
0 commit comments