@@ -701,6 +701,67 @@ static int starry_2082109qfh040022_50e_init(struct hx83102 *ctx)
701701 return dsi_ctx .accum_err ;
702702}
703703
704+ static int holitech_htf065h045_init (struct hx83102 * ctx )
705+ {
706+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx -> dsi };
707+
708+ msleep (50 );
709+
710+ hx83102_enable_extended_cmds (& dsi_ctx , true);
711+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPOWER , 0x22 , 0x44 , 0x27 , 0x27 , 0x32 ,
712+ 0x52 , 0x57 , 0x39 , 0x08 , 0x08 , 0x08 );
713+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETDISP , 0x00 , 0x00 , 0x06 , 0x40 , 0x00 ,
714+ 0x0e , 0xae , 0x38 , 0x00 , 0x00 , 0x00 , 0x00 , 0xf4 , 0xa0 );
715+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETCYC , 0x01 , 0x58 , 0x01 , 0x58 , 0x01 ,
716+ 0x58 , 0x03 , 0x58 , 0x03 , 0xff , 0x01 , 0x20 , 0x00 , 0xff );
717+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPANEL , 0x02 );
718+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETGIP0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
719+ 0x10 , 0x00 , 0x17 , 0x00 , 0x63 , 0x37 , 0x0e , 0x0e , 0x00 , 0x00 ,
720+ 0x32 , 0x10 , 0x08 , 0x00 , 0x08 , 0x32 , 0x16 , 0x4e , 0x06 , 0x4e );
721+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPWM , 0x04 , 0x0c , 0xb2 , 0x01 );
722+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETGIP1 , 0x24 , 0x25 , 0x18 , 0x18 , 0x19 ,
723+ 0x19 , 0x18 , 0x18 , 0x18 , 0x18 , 0x18 , 0x18 , 0x18 , 0x18 , 0x18 ,
724+ 0x18 , 0x18 , 0x18 , 0x06 , 0x07 , 0x04 , 0x05 , 0x18 , 0x18 , 0x18 ,
725+ 0x18 , 0x02 , 0x03 , 0x00 , 0x01 , 0x20 , 0x21 , 0x18 , 0x18 , 0x18 ,
726+ 0x18 , 0x18 , 0x18 , 0x18 , 0x18 , 0x18 , 0x18 , 0x18 , 0x18 );
727+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETGIP2 , 0x00 , 0x09 , 0x16 , 0x1f , 0x28 ,
728+ 0x4b , 0x65 , 0x6d , 0x74 , 0x70 , 0x89 , 0x8d , 0x91 , 0xa0 , 0x9e ,
729+ 0xa8 , 0xb2 , 0xc8 , 0xc9 , 0x65 , 0x6d , 0x78 , 0x7f , 0x00 , 0x09 ,
730+ 0x16 , 0x1f , 0x28 , 0x4b , 0x65 , 0x6d , 0x74 , 0x70 , 0x89 , 0x8d ,
731+ 0x91 , 0xa0 , 0x9e , 0xa8 , 0xb2 , 0xc8 , 0xc9 , 0x65 , 0x6d , 0x78 ,
732+ 0x7f );
733+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETTP1 , 0xff , 0x14 , 0x00 , 0x00 );
734+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x01 );
735+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETTP1 , 0x01 );
736+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x02 );
737+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETGIP3 , 0xff , 0xff , 0xff , 0xff , 0xff ,
738+ 0xf0 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xf0 );
739+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x03 );
740+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETGIP3 , 0xaa , 0xaa , 0xaa , 0xaa , 0xaa ,
741+ 0xa0 , 0xaa , 0xaa , 0xaa , 0xaa , 0xaa , 0xa0 , 0xaa , 0xaa , 0xaa ,
742+ 0xaa , 0xaa , 0xa0 , 0xaa , 0xaa , 0xaa , 0xaa , 0xaa , 0xa0 );
743+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x00 );
744+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETMIPI , 0x70 , 0x23 , 0xa8 , 0x93 , 0xb2 ,
745+ 0xc0 , 0xc0 , 0x01 , 0x10 , 0x00 , 0x00 , 0x00 , 0x0d , 0x3d , 0x82 ,
746+ 0x77 , 0x04 , 0x01 , 0x04 );
747+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x01 );
748+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETCLOCK , 0x01 );
749+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x00 );
750+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETCLOCK , 0x00 , 0x53 , 0x00 , 0x02 , 0x59 );
751+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPTBA , 0xfc , 0x00 , 0x04 , 0x9e , 0xf6 ,
752+ 0x00 , 0x5d );
753+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x02 );
754+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETCYC , 0x42 , 0x00 , 0x33 , 0x00 , 0x33 ,
755+ 0x88 , 0xb3 , 0x00 );
756+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x00 );
757+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPCTRL , 0x20 , 0x01 );
758+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x02 );
759+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETPOWER , 0x7f , 0x03 , 0xf5 );
760+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , HX83102_SETBANK , 0x00 );
761+
762+ return dsi_ctx .accum_err ;
763+ }
764+
704765static const struct drm_display_mode starry_mode = {
705766 .clock = 162680 ,
706767 .hdisplay = 1200 ,
@@ -833,6 +894,28 @@ static const struct hx83102_panel_desc starry_2082109qfh040022_50e_desc = {
833894 .init = starry_2082109qfh040022_50e_init ,
834895};
835896
897+ static const struct drm_display_mode holitech_htf065h045_default_mode = {
898+ .clock = 90720 ,
899+ .hdisplay = 720 ,
900+ .hsync_start = 720 + 40 ,
901+ .hsync_end = 720 + 40 + 40 ,
902+ .htotal = 720 + 40 + 40 + 40 ,
903+ .vdisplay = 1600 ,
904+ .vsync_start = 1600 + 186 ,
905+ .vsync_end = 1600 + 186 + 2 ,
906+ .vtotal = 1600 + 186 + 2 + 12 ,
907+ .type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED ,
908+ };
909+
910+ static const struct hx83102_panel_desc holitech_htf065h045_desc = {
911+ .modes = & holitech_htf065h045_default_mode ,
912+ .size = {
913+ .width_mm = 68 ,
914+ .height_mm = 151 ,
915+ },
916+ .init = holitech_htf065h045_init ,
917+ };
918+
836919static int hx83102_enable (struct drm_panel * panel )
837920{
838921 msleep (130 );
@@ -1069,6 +1152,9 @@ static const struct of_device_id hx83102_of_match[] = {
10691152 { .compatible = "starry,himax83102-j02" ,
10701153 .data = & starry_desc
10711154 },
1155+ { .compatible = "holitech,htf065h045" ,
1156+ .data = & holitech_htf065h045_desc
1157+ },
10721158 { /* sentinel */ }
10731159};
10741160MODULE_DEVICE_TABLE (of , hx83102_of_match );
0 commit comments