|
43 | 43 | #define HX83102_SETGIP1 0xd5 |
44 | 44 | #define HX83102_SETGIP2 0xd6 |
45 | 45 | #define HX83102_SETGIP3 0xd8 |
| 46 | +#define HX83102_UNKNOWN_D9 0xd9 |
46 | 47 | #define HX83102_SETGMA 0xe0 |
47 | 48 | #define HX83102_UNKNOWN_E1 0xe1 |
48 | 49 | #define HX83102_SETTP1 0xe7 |
@@ -291,6 +292,103 @@ static int boe_nv110wum_init(struct hx83102 *ctx) |
291 | 292 | return dsi_ctx.accum_err; |
292 | 293 | }; |
293 | 294 |
|
| 295 | +static int csot_pna957qt1_1_init(struct hx83102 *ctx) |
| 296 | +{ |
| 297 | + struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi }; |
| 298 | + |
| 299 | + msleep(60); |
| 300 | + |
| 301 | + hx83102_enable_extended_cmds(&dsi_ctx, true); |
| 302 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xc4); |
| 303 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_UNKNOWN_D9, 0xd2); |
| 304 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 305 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPOWER, 0x2c, 0xb3, 0xb3, 0x31, 0xf1, 0x33, |
| 306 | + 0xe0, 0x54, 0x36, 0x36, 0x3a, 0x3a, 0x32, 0x8b, 0x11, 0xe5, |
| 307 | + 0x98); |
| 308 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xd9); |
| 309 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPOWER, 0x8b, 0x33); |
| 310 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 311 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETDISP, 0x00, 0x47, 0xb0, 0x80, 0x00, 0x2c, |
| 312 | + 0x80, 0x3c, 0x9f, 0x22, 0x20, 0x00, 0x00, 0x98, 0x51); |
| 313 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETCYC, 0x41, 0x41, 0x41, 0x41, 0x64, 0x64, |
| 314 | + 0x40, 0x84, 0x64, 0x84, 0x01, 0x9d, 0x01, 0x02, 0x01, 0x00, |
| 315 | + 0x00); |
| 316 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETVDC, 0x1b, 0x04); |
| 317 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_UNKNOWN_BE, 0x20); |
| 318 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPTBA, 0xfc, 0xc4, 0x80, 0x9c, 0x36, 0x00, |
| 319 | + 0x0d, 0x04); |
| 320 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSTBA, 0x32, 0x32, 0x22, 0x11, 0x22, 0xa0, |
| 321 | + 0x31, 0x08, 0xf5, 0x03); |
| 322 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xcc); |
| 323 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETTCON, 0x80); |
| 324 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 325 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xc6); |
| 326 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETRAMDMY, 0x97); |
| 327 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 328 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPWM, 0x00, 0x1e, 0x13, 0x88, 0x01); |
| 329 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETCLOCK, 0x08, 0x13, 0x07, 0x00, 0x0f, |
| 330 | + 0x36); |
| 331 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPANEL, 0x02, 0x03, 0x44); |
| 332 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPCTRL, 0x07, 0x06, 0x00, 0x02, 0x04, 0x2c, |
| 333 | + 0xff); |
| 334 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP0, 0x06, 0x00, 0x00, 0x00, 0x40, 0x04, |
| 335 | + 0x08, 0x04, 0x08, 0x37, 0x07, 0x44, 0x37, 0x2b, 0x2b, 0x03, |
| 336 | + 0x03, 0x32, 0x10, 0x22, 0x00, 0x25, 0x32, 0x10, 0x29, 0x00, |
| 337 | + 0x29, 0x32, 0x10, 0x08, 0x00, 0x08, 0x00, 0x00); |
| 338 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP1, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, |
| 339 | + 0x18, 0x18, 0x18, 0x18, 0x07, 0x06, 0x07, 0x06, 0x05, 0x04, |
| 340 | + 0x05, 0x04, 0x03, 0x02, 0x03, 0x02, 0x01, 0x00, 0x01, 0x00, |
| 341 | + 0x18, 0x18, 0x25, 0x24, 0x25, 0x24, 0x1f, 0x1f, 0x1f, 0x1f, |
| 342 | + 0x1e, 0x1e, 0x1e, 0x1e, 0x20, 0x20, 0x20, 0x20); |
| 343 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP3, 0x0a, 0x2a, 0xaa, 0x8a, 0xaa, 0xa0, |
| 344 | + 0x0a, 0x2a, 0xaa, 0x8a, 0xaa, 0xa0); |
| 345 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGMA, 0x0a, 0x0e, 0x1a, 0x21, 0x28, 0x46, |
| 346 | + 0x5c, 0x61, 0x63, 0x5e, 0x78, 0x7d, 0x80, 0x8e, 0x89, 0x90, |
| 347 | + 0x98, 0xaa, 0xa8, 0x52, 0x59, 0x60, 0x6f, 0x06, 0x0a, 0x16, |
| 348 | + 0x1d, 0x24, 0x46, 0x5c, 0x61, 0x6b, 0x66, 0x7c, 0x7d, 0x80, |
| 349 | + 0x8e, 0x89, 0x90, 0x98, 0xaa, 0xa8, 0x52, 0x59, 0x60, 0x6f); |
| 350 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETTP1, 0xe0, 0x10, 0x10, 0x0d, 0x1e, 0x9d, |
| 351 | + 0x02, 0x52, 0x9d, 0x14, 0x14); |
| 352 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETBANK, 0x01); |
| 353 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPOWER, 0x01, 0x7f, 0x11, 0xfd); |
| 354 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xc5); |
| 355 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETMIPI, 0x4f); |
| 356 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 357 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETCLOCK, 0x86); |
| 358 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_UNKNOWN_D2, 0x64); |
| 359 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xc5); |
| 360 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP0, 0x00); |
| 361 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 362 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP3, 0x0a, 0x2a, 0xaa, 0x8a, 0xaa, 0xa0, |
| 363 | + 0x0a, 0x2a, 0xaa, 0x8a, 0xaa, 0xa0, 0x05, 0x15, 0x55, 0x45, |
| 364 | + 0x55, 0x50, 0x05, 0x15, 0x55, 0x45, 0x55, 0x50); |
| 365 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETTP1, 0x02, 0x00, 0x24, 0x01, 0x7e, 0x0f, |
| 366 | + 0x7c, 0x10, 0xa0, 0x00, 0x00); |
| 367 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETBANK, 0x02); |
| 368 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETCLOCK, 0x03, 0x07, 0x00, 0x10, 0x7b); |
| 369 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP3, 0x0f, 0x3f, 0xff, 0xcf, 0xff, 0xf0, |
| 370 | + 0x0f, 0x3f, 0xff, 0xcf, 0xff, 0xf0); |
| 371 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETTP1, 0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01, |
| 372 | + 0x00, 0x00, 0x00, 0x23, 0x00, 0x23, 0x81, 0x02, 0x40, 0x00, |
| 373 | + 0x20, 0x9d, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 374 | + 0x01, 0x00); |
| 375 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETBANK, 0x03); |
| 376 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETDISP, 0x66, 0x81); |
| 377 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xc6); |
| 378 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETCYC, 0x03, 0xff, 0xf8); |
| 379 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 380 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP3, 0x0a, 0x2a, 0xaa, 0x8a, 0xaa, 0xa0, |
| 381 | + 0x0a, 0x2a, 0xaa, 0x8a, 0xaa, 0xa0, 0x0f, 0x2a, 0xaa, 0x8a, |
| 382 | + 0xaa, 0xf0, 0x0f, 0x2a, 0xaa, 0x8a, 0xaa, 0xf0, 0x0a, 0x2a, |
| 383 | + 0xaa, 0x8a, 0xaa, 0xa0, 0x0a, 0x2a, 0xaa, 0x8a, 0xaa, 0xa0); |
| 384 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETBANK, 0x00); |
| 385 | + hx83102_enable_extended_cmds(&dsi_ctx, false); |
| 386 | + |
| 387 | + mipi_dsi_msleep(&dsi_ctx, 60); |
| 388 | + |
| 389 | + return dsi_ctx.accum_err; |
| 390 | +}; |
| 391 | + |
294 | 392 | static int ivo_t109nw41_init(struct hx83102 *ctx) |
295 | 393 | { |
296 | 394 | struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi }; |
@@ -440,6 +538,28 @@ static const struct hx83102_panel_desc boe_nv110wum_desc = { |
440 | 538 | .init = boe_nv110wum_init, |
441 | 539 | }; |
442 | 540 |
|
| 541 | +static const struct drm_display_mode csot_pna957qt1_1_default_mode = { |
| 542 | + .clock = 177958, |
| 543 | + .hdisplay = 1200, |
| 544 | + .hsync_start = 1200 + 124, |
| 545 | + .hsync_end = 1200 + 124 + 80, |
| 546 | + .htotal = 1200 + 124 + 80 + 40, |
| 547 | + .vdisplay = 1920, |
| 548 | + .vsync_start = 1920 + 88, |
| 549 | + .vsync_end = 1920 + 88 + 8, |
| 550 | + .vtotal = 1920 + 88 + 8 + 38, |
| 551 | + .type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, |
| 552 | +}; |
| 553 | + |
| 554 | +static const struct hx83102_panel_desc csot_pna957qt1_1_desc = { |
| 555 | + .modes = &csot_pna957qt1_1_default_mode, |
| 556 | + .size = { |
| 557 | + .width_mm = 147, |
| 558 | + .height_mm = 235, |
| 559 | + }, |
| 560 | + .init = csot_pna957qt1_1_init, |
| 561 | +}; |
| 562 | + |
443 | 563 | static const struct drm_display_mode ivo_t109nw41_default_mode = { |
444 | 564 | .clock = 167700, |
445 | 565 | .hdisplay = 1200, |
@@ -683,6 +803,9 @@ static const struct of_device_id hx83102_of_match[] = { |
683 | 803 | { .compatible = "boe,nv110wum-l60", |
684 | 804 | .data = &boe_nv110wum_desc |
685 | 805 | }, |
| 806 | + { .compatible = "csot,pna957qt1-1", |
| 807 | + .data = &csot_pna957qt1_1_desc |
| 808 | + }, |
686 | 809 | { .compatible = "ivo,t109nw41", |
687 | 810 | .data = &ivo_t109nw41_desc |
688 | 811 | }, |
|
0 commit comments