|
24 | 24 | #define HX83102_SETPOWER 0xb1 |
25 | 25 | #define HX83102_SETDISP 0xb2 |
26 | 26 | #define HX83102_SETCYC 0xb4 |
| 27 | +#define HX83102_UNKNOWN_B6 0xb6 |
| 28 | +#define HX83102_UNKNOWN_B8 0xb8 |
27 | 29 | #define HX83102_SETEXTC 0xb9 |
28 | 30 | #define HX83102_SETMIPI 0xba |
29 | 31 | #define HX83102_SETVDC 0xbc |
@@ -584,6 +586,121 @@ static int kingdisplay_kd110n11_51ie_init(struct hx83102 *ctx) |
584 | 586 | return dsi_ctx.accum_err; |
585 | 587 | } |
586 | 588 |
|
| 589 | +static int starry_2082109qfh040022_50e_init(struct hx83102 *ctx) |
| 590 | +{ |
| 591 | + struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi }; |
| 592 | + |
| 593 | + msleep(50); |
| 594 | + |
| 595 | + hx83102_enable_extended_cmds(&dsi_ctx, true); |
| 596 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xc4); |
| 597 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_UNKNOWN_D9, 0xd1); |
| 598 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 599 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPOWER, 0x2c, 0xb5, 0xb5, 0x31, 0xf1, 0x33, |
| 600 | + 0xc3, 0x57, 0x36, 0x36, 0x36, 0x36, 0x1a, 0x8b, 0x11, 0x65, |
| 601 | + 0x00, 0x88, 0xfa, 0xff, 0xff, 0x8f, 0xff, 0x08, 0x3c, 0x33); |
| 602 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETDISP, 0x00, 0x47, 0xb0, 0x80, 0x00, 0x22, |
| 603 | + 0x70, 0x3c, 0xa1, 0x22, 0x00, 0x00, 0x00, 0x88, 0xf4); |
| 604 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETCYC, 0x14, 0x16, 0x14, 0x50, 0x14, 0x50, |
| 605 | + 0x0d, 0x6a, 0x0d, 0x6a, 0x01, 0x9e); |
| 606 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_UNKNOWN_B6, 0x34, 0x34, 0x03); |
| 607 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_UNKNOWN_B8, 0x40); |
| 608 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xcd); |
| 609 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETMIPI, 0x84); |
| 610 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 611 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETVDC, 0x1b, 0x04); |
| 612 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_UNKNOWN_BE, 0x20); |
| 613 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPTBA, 0xfc, 0xc4); |
| 614 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSTBA, 0x38, 0x38, 0x22, 0x11, 0x33, 0xa0, |
| 615 | + 0x61, 0x08, 0xf5, 0x03); |
| 616 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xcc); |
| 617 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETTCON, 0x80); |
| 618 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 619 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xc6); |
| 620 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETRAMDMY, 0x97); |
| 621 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 622 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPWM, 0x00, 0x1e, 0x30, 0xd4, 0x01); |
| 623 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETCLOCK, 0x08, 0x13, 0x07, 0x00, 0x0f, |
| 624 | + 0x16); |
| 625 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPANEL, 0x02, 0x03, 0x44); |
| 626 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xc4); |
| 627 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETCASCADE, 0x03); |
| 628 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 629 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPCTRL, 0x37, 0x06, 0x00, 0x02, 0x04, |
| 630 | + 0x2c, 0xff); |
| 631 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP0, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 632 | + 0x00, 0x00, 0x00, 0x3b, 0x03, 0x73, 0x3b, 0x21, 0x21, 0x03, |
| 633 | + 0x03, 0x98, 0x10, 0x1d, 0x00, 0x1d, 0x32, 0x17, 0xa1, 0x07, |
| 634 | + 0xa1, 0x43, 0x17, 0xa6, 0x07, 0xa6, 0x00, 0x00); |
| 635 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP1, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, |
| 636 | + 0x40, 0x40, 0x18, 0x18, 0x18, 0x18, 0x2a, 0x2b, 0x1f, 0x1f, |
| 637 | + 0x1e, 0x1e, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, |
| 638 | + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, |
| 639 | + 0x0a, 0x0b, 0x20, 0x21, 0x18, 0x18, 0x18, 0x18); |
| 640 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP3, 0x02, 0xaa, 0xea, 0xaa, 0xaa, 0x00, |
| 641 | + 0x02, 0xaa, 0xea, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 642 | + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 643 | + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); |
| 644 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETTP1, 0x07, 0x10, 0x10, 0x2a, 0x32, 0x9f, |
| 645 | + 0x01, 0x5a, 0x91, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x12, |
| 646 | + 0x05, 0x02, 0x02, 0x10, 0x33, 0x02, 0x04, 0x18, 0x01); |
| 647 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETBANK, 0x01); |
| 648 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPOWER, 0x01, 0x7f, 0x11, 0xfd); |
| 649 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETCLOCK, 0x86); |
| 650 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_UNKNOWN_D2, 0x3d); |
| 651 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xc5); |
| 652 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP0, 0x00, 0x00, 0x00, 0x80, 0x80, 0x0c, |
| 653 | + 0xa1); |
| 654 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 655 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP3, 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, |
| 656 | + 0x03, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 657 | + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 658 | + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); |
| 659 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETTP1, 0x02, 0x00, 0x2d, 0x01, 0x7f, 0x0f, |
| 660 | + 0x7c, 0x10, 0xa0, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00); |
| 661 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETBANK, 0x02); |
| 662 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETPTBA, 0xf2); |
| 663 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETCLOCK, 0x02, 0x00, 0x00, 0x10, 0x58); |
| 664 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_UNKNOWN_D2, 0x0a, 0x0a, 0x05, 0x03, 0x0a, |
| 665 | + 0x0a, 0x01, 0x03, 0x01, 0x01, 0x05, 0x0e); |
| 666 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xcc); |
| 667 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP0, 0x03, 0x1f, 0xe0, 0x11, 0x70); |
| 668 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 669 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP3, 0xab, 0xff, 0xff, 0xff, 0xff, 0xa0, |
| 670 | + 0xab, 0xff, 0xff, 0xff, 0xff, 0xa0); |
| 671 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETTP1, 0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01, |
| 672 | + 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x81, 0x02, 0x40, 0x00, |
| 673 | + 0x20, 0x9e, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 674 | + 0x00, 0x00); |
| 675 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETBANK, 0x03); |
| 676 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xc6); |
| 677 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETCYC, 0x03, 0xff, 0xf8); |
| 678 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 679 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETGIP3, 0xaa, 0xab, 0xea, 0xaa, 0xaa, 0xa0, |
| 680 | + 0xaa, 0xab, 0xea, 0xaa, 0xaa, 0xa0, 0xaa, 0xbf, 0xff, 0xff, |
| 681 | + 0xfe, 0xa0, 0xaa, 0xbf, 0xff, 0xff, 0xfe, 0xa0, 0xaa, 0xaa, |
| 682 | + 0xaa, 0xaa, 0xaa, 0xa0, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa0); |
| 683 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_UNKNOWN_E1, 0x00); |
| 684 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETBANK, 0x00); |
| 685 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xc4); |
| 686 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETMIPI, 0x96); |
| 687 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 688 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETBANK, 0x01); |
| 689 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xc5); |
| 690 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETMIPI, 0x4f); |
| 691 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 692 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETBANK, 0x02); |
| 693 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0xcc); |
| 694 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETMIPI, 0x84); |
| 695 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETSPCCMD, 0x3f); |
| 696 | + mipi_dsi_dcs_write_seq_multi(&dsi_ctx, HX83102_SETBANK, 0x00); |
| 697 | + hx83102_enable_extended_cmds(&dsi_ctx, false); |
| 698 | + |
| 699 | + mipi_dsi_msleep(&dsi_ctx, 110); |
| 700 | + |
| 701 | + return dsi_ctx.accum_err; |
| 702 | +} |
| 703 | + |
587 | 704 | static const struct drm_display_mode starry_mode = { |
588 | 705 | .clock = 162680, |
589 | 706 | .hdisplay = 1200, |
@@ -694,6 +811,28 @@ static const struct hx83102_panel_desc kingdisplay_kd110n11_51ie_desc = { |
694 | 811 | .init = kingdisplay_kd110n11_51ie_init, |
695 | 812 | }; |
696 | 813 |
|
| 814 | +static const struct drm_display_mode starry_2082109qfh040022_50e_default_mode = { |
| 815 | + .clock = 192050, |
| 816 | + .hdisplay = 1200, |
| 817 | + .hsync_start = 1200 + 160, |
| 818 | + .hsync_end = 1200 + 160 + 66, |
| 819 | + .htotal = 1200 + 160 + 66 + 120, |
| 820 | + .vdisplay = 1920, |
| 821 | + .vsync_start = 1920 + 115, |
| 822 | + .vsync_end = 1920 + 115 + 8, |
| 823 | + .vtotal = 1920 + 115 + 8 + 28, |
| 824 | + .type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, |
| 825 | +}; |
| 826 | + |
| 827 | +static const struct hx83102_panel_desc starry_2082109qfh040022_50e_desc = { |
| 828 | + .modes = &starry_2082109qfh040022_50e_default_mode, |
| 829 | + .size = { |
| 830 | + .width_mm = 147, |
| 831 | + .height_mm = 235, |
| 832 | + }, |
| 833 | + .init = starry_2082109qfh040022_50e_init, |
| 834 | +}; |
| 835 | + |
697 | 836 | static int hx83102_enable(struct drm_panel *panel) |
698 | 837 | { |
699 | 838 | msleep(130); |
@@ -924,6 +1063,9 @@ static const struct of_device_id hx83102_of_match[] = { |
924 | 1063 | { .compatible = "kingdisplay,kd110n11-51ie", |
925 | 1064 | .data = &kingdisplay_kd110n11_51ie_desc |
926 | 1065 | }, |
| 1066 | + { .compatible = "starry,2082109qfh040022-50e", |
| 1067 | + .data = &starry_2082109qfh040022_50e_desc |
| 1068 | + }, |
927 | 1069 | { .compatible = "starry,himax83102-j02", |
928 | 1070 | .data = &starry_desc |
929 | 1071 | }, |
|
0 commit comments