Skip to content

Commit 731d8cd

Browse files
singhomeleeasus-leslieyu
authored andcommitted
panel: the initial code for new powertip 7-inch panel.
Change-Id: I57dfe4a667e53cbaf4cebecb7406b802dcf49759
1 parent bf8485c commit 731d8cd

File tree

2 files changed

+235
-12
lines changed

2 files changed

+235
-12
lines changed

drivers/gpu/drm/panel/panel-asus-ili9881c.c

Lines changed: 220 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

drivers/misc/tinker_mcu_ili9881c.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ static int string_to_byte(const char *source, unsigned char *destination, int si
7171

7272
static int send_cmds(struct i2c_client *client, const char *buf)
7373
{
74-
int ret, size = strlen(buf);
74+
int ret, size = strlen(buf), retry = 5;
7575
unsigned char byte_cmd[size/2];
7676

7777
if ((size%2) != 0) {
@@ -83,11 +83,19 @@ static int send_cmds(struct i2c_client *client, const char *buf)
8383

8484
string_to_byte(buf, byte_cmd, size);
8585

86+
while(retry-- > 0) {
8687
ret = i2c_master_send(client, byte_cmd, size/2);
8788
if (ret <= 0) {
88-
LOG_ERR("send command failed, ret = %d\n", ret);
89+
LOG_ERR("send command failed, ret = %d, retry again!\n", ret);
90+
} else
91+
break;
92+
}
93+
94+
if(ret <= 0) {
95+
LOG_ERR("send command failed\n");
8996
return ret!=0 ? ret : -ECOMM;
9097
}
98+
9199
msleep(20);
92100
return 0;
93101
}
@@ -121,12 +129,14 @@ static int init_cmd_check(struct tinker_mcu_data *mcu_data)
121129
LOG_INFO("recv_cmds: 0x%X\n", recv_buf[0]);
122130
printk("****lcd size value is: 0x%X\n", recv_buf[0]);
123131

124-
if(recv_buf[0]==0x85)
132+
if(recv_buf[0] == 0x86) //7-inch rev_b
125133
lcd_size_flag = 0;
126-
else if(recv_buf[0]==0x89)
134+
else if(recv_buf[0] == 0x89) //5-inch
127135
lcd_size_flag = 1;
128-
else if(recv_buf[0]==0x8d)
136+
else if(recv_buf[0] == 0x8d) //10-inch
129137
lcd_size_flag = 2;
138+
else if((recv_buf[0] & 0xF0) == 0x80) //assign to 7-inch rev_a
139+
lcd_size_flag = 3;
130140

131141
return 0;
132142

0 commit comments

Comments
 (0)