@@ -494,6 +494,96 @@ static int ivo_t109nw41_init(struct hx83102 *ctx)
494494 return dsi_ctx .accum_err ;
495495};
496496
497+ static int kingdisplay_kd110n11_51ie_init (struct hx83102 * ctx )
498+ {
499+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx -> dsi };
500+
501+ msleep (50 );
502+
503+ hx83102_enable_extended_cmds (& dsi_ctx , true);
504+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0xc4 );
505+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_UNKNOWN_D9 , 0xd1 );
506+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0x3f );
507+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPOWER , 0x2c , 0xb3 , 0xb3 , 0x31 , 0xf1 ,
508+ 0x33 , 0xe0 , 0x54 , 0x36 , 0x36 , 0x3a , 0x3a , 0x32 , 0x8b ,
509+ 0x11 , 0xe5 , 0x98 );
510+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0xd9 );
511+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPOWER , 0x8b , 0x33 );
512+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0x3f );
513+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETDISP , 0x00 , 0x47 , 0xb0 , 0x80 , 0x00 , 0x2c ,
514+ 0x80 , 0x3c , 0x9f , 0x22 , 0x20 , 0x00 , 0x00 , 0x98 , 0x51 );
515+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETCYC , 0x64 , 0x64 , 0x64 , 0x64 , 0x64 , 0x64 ,
516+ 0x40 , 0x84 , 0x64 , 0x84 , 0x01 , 0x9d , 0x01 , 0x02 , 0x01 , 0x00 ,
517+ 0x00 );
518+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETVDC , 0x1b , 0x04 );
519+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_UNKNOWN_BE , 0x20 );
520+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPTBA , 0xfc , 0xc4 , 0x80 , 0x9c , 0x36 , 0x00 ,
521+ 0x0d , 0x04 );
522+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSTBA , 0x32 , 0x32 , 0x22 , 0x11 , 0x22 , 0xa0 ,
523+ 0x31 , 0x08 , 0xf5 , 0x03 );
524+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0xcc );
525+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETTCON , 0x80 );
526+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0x3f );
527+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0xc6 );
528+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETRAMDMY , 0x97 );
529+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0x3f );
530+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPWM , 0x00 , 0x1e , 0x13 , 0x88 , 0x01 );
531+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETCLOCK , 0x08 , 0x13 , 0x07 , 0x00 ,
532+ 0x0f , 0x36 );
533+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPANEL , 0x02 , 0x03 , 0x44 );
534+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPCTRL , 0x07 , 0x06 , 0x00 , 0x02 ,
535+ 0x04 , 0x2c , 0xff );
536+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETGIP0 , 0x06 , 0x00 , 0x00 , 0x00 , 0x40 , 0x04 ,
537+ 0x08 , 0x04 , 0x08 , 0x37 , 0x07 , 0x44 , 0x37 , 0x2b , 0x2b , 0x03 ,
538+ 0x03 , 0x32 , 0x10 , 0x22 , 0x00 , 0x25 , 0x32 , 0x10 , 0x29 , 0x00 ,
539+ 0x29 , 0x32 , 0x10 , 0x08 , 0x00 , 0x08 , 0x00 , 0x00 );
540+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETGIP1 , 0x18 , 0x18 , 0x18 , 0x18 , 0x18 , 0x18 ,
541+ 0x18 , 0x18 , 0x18 , 0x18 , 0x07 , 0x06 , 0x07 , 0x06 , 0x05 , 0x04 ,
542+ 0x05 , 0x04 , 0x03 , 0x02 , 0x03 , 0x02 , 0x01 , 0x00 , 0x01 , 0x00 ,
543+ 0x18 , 0x18 , 0x25 , 0x24 , 0x25 , 0x24 , 0x1f , 0x1f , 0x1f , 0x1f ,
544+ 0x1e , 0x1e , 0x1e , 0x1e , 0x20 , 0x20 , 0x20 , 0x20 );
545+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETGIP3 , 0x0a , 0x2a , 0xaa , 0x8a , 0xaa , 0xa0 ,
546+ 0x0a , 0x2a , 0xaa , 0x8a , 0xaa , 0xa0 );
547+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETTP1 , 0xe0 , 0x10 , 0x10 , 0x0d , 0x1e , 0x9d ,
548+ 0x02 , 0x52 , 0x9d , 0x14 , 0x14 );
549+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x01 );
550+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPOWER , 0x01 , 0x7f , 0x11 , 0xfd );
551+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0xc5 );
552+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETMIPI , 0x4f );
553+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0x3f );
554+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETCLOCK , 0x86 );
555+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_UNKNOWN_D2 , 0x64 );
556+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0xc5 );
557+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETGIP0 , 0x00 );
558+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0x3f );
559+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETGIP3 , 0x0a , 0x2a , 0xaa , 0x8a , 0xaa , 0xa0 ,
560+ 0x0a , 0x2a , 0xaa , 0x8a , 0xaa , 0xa0 , 0x05 , 0x15 , 0x55 , 0x45 ,
561+ 0x55 , 0x50 , 0x05 , 0x15 , 0x55 , 0x45 , 0x55 , 0x50 );
562+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETTP1 , 0x02 , 0x00 , 0x24 , 0x01 , 0x7e , 0x0f ,
563+ 0x7c , 0x10 , 0xa0 , 0x00 , 0x00 );
564+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x02 );
565+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETCLOCK , 0x03 , 0x07 , 0x00 , 0x10 , 0x7b );
566+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETGIP3 , 0x0f , 0x3f , 0xff , 0xcf , 0xff , 0xf0 ,
567+ 0x0f , 0x3f , 0xff , 0xcf , 0xff , 0xf0 );
568+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETTP1 , 0xfe , 0x01 , 0xfe , 0x01 , 0xfe , 0x01 ,
569+ 0x00 , 0x00 , 0x00 , 0x23 , 0x00 , 0x23 , 0x81 , 0x02 , 0x40 , 0x00 ,
570+ 0x20 , 0x9d , 0x02 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
571+ 0x01 , 0x00 );
572+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x03 );
573+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETDISP , 0x66 , 0x81 );
574+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0xc6 );
575+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETCYC , 0x03 , 0xff , 0xf8 );
576+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETSPCCMD , 0x3f );
577+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETGIP3 , 0x0a , 0x2a , 0xaa , 0x8a , 0xaa , 0xa0 ,
578+ 0x0a , 0x2a , 0xaa , 0x8a , 0xaa , 0xa0 , 0x0f , 0x2a , 0xaa , 0x8a ,
579+ 0xaa , 0xf0 , 0x0f , 0x2a , 0xaa , 0x8a , 0xaa , 0xf0 , 0x0a , 0x2a ,
580+ 0xaa , 0x8a , 0xaa , 0xa0 , 0x0a , 0x2a , 0xaa , 0x8a , 0xaa , 0xa0 );
581+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x00 );
582+ hx83102_enable_extended_cmds (& dsi_ctx , false);
583+
584+ return dsi_ctx .accum_err ;
585+ }
586+
497587static const struct drm_display_mode starry_mode = {
498588 .clock = 162680 ,
499589 .hdisplay = 1200 ,
@@ -582,6 +672,28 @@ static const struct hx83102_panel_desc ivo_t109nw41_desc = {
582672 .init = ivo_t109nw41_init ,
583673};
584674
675+ static const struct drm_display_mode kingdisplay_kd110n11_51ie_default_mode = {
676+ .clock = 182750 ,
677+ .hdisplay = 1200 ,
678+ .hsync_start = 1200 + 124 ,
679+ .hsync_end = 1200 + 124 + 80 ,
680+ .htotal = 1200 + 124 + 80 + 80 ,
681+ .vdisplay = 1920 ,
682+ .vsync_start = 1920 + 88 ,
683+ .vsync_end = 1920 + 88 + 8 ,
684+ .vtotal = 1920 + 88 + 8 + 38 ,
685+ .type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED ,
686+ };
687+
688+ static const struct hx83102_panel_desc kingdisplay_kd110n11_51ie_desc = {
689+ .modes = & kingdisplay_kd110n11_51ie_default_mode ,
690+ .size = {
691+ .width_mm = 147 ,
692+ .height_mm = 235 ,
693+ },
694+ .init = kingdisplay_kd110n11_51ie_init ,
695+ };
696+
585697static int hx83102_enable (struct drm_panel * panel )
586698{
587699 msleep (130 );
@@ -809,6 +921,9 @@ static const struct of_device_id hx83102_of_match[] = {
809921 { .compatible = "ivo,t109nw41" ,
810922 .data = & ivo_t109nw41_desc
811923 },
924+ { .compatible = "kingdisplay,kd110n11-51ie" ,
925+ .data = & kingdisplay_kd110n11_51ie_desc
926+ },
812927 { .compatible = "starry,himax83102-j02" ,
813928 .data = & starry_desc
814929 },
0 commit comments