mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	drm/panel: sitronix-st7789v: add Inanbo T28CP45TN89 support
UNI-T UTi260b has a Inanbo T28CP45TN89 v17 panel. I could not find proper documentation for the panel apart from a technical drawing, but according to the vendor U-Boot it is based on a Sitronix st7789v chip. I generated the init sequence by modifying the default one until proper graphics output has been seen on the device. Reviewed-by: Michael Riesch <michael.riesch@wolfvision.net> Signed-off-by: Sebastian Reichel <sre@kernel.org> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20230714013756.1546769-14-sre@kernel.org
This commit is contained in:
		
							parent
							
								
									e4572f99f8
								
							
						
					
					
						commit
						a411558cc1
					
				
					 1 changed files with 25 additions and 0 deletions
				
			
		| 
						 | 
					@ -173,6 +173,21 @@ static const struct drm_display_mode default_mode = {
 | 
				
			||||||
	.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
 | 
						.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const struct drm_display_mode t28cp45tn89_mode = {
 | 
				
			||||||
 | 
						.clock = 6008,
 | 
				
			||||||
 | 
						.hdisplay = 240,
 | 
				
			||||||
 | 
						.hsync_start = 240 + 38,
 | 
				
			||||||
 | 
						.hsync_end = 240 + 38 + 10,
 | 
				
			||||||
 | 
						.htotal = 240 + 38 + 10 + 10,
 | 
				
			||||||
 | 
						.vdisplay = 320,
 | 
				
			||||||
 | 
						.vsync_start = 320 + 8,
 | 
				
			||||||
 | 
						.vsync_end = 320 + 8 + 4,
 | 
				
			||||||
 | 
						.vtotal = 320 + 8 + 4 + 4,
 | 
				
			||||||
 | 
						.width_mm = 43,
 | 
				
			||||||
 | 
						.height_mm = 57,
 | 
				
			||||||
 | 
						.flags = DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_NVSYNC,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct st7789_panel_info default_panel = {
 | 
					static const struct st7789_panel_info default_panel = {
 | 
				
			||||||
	.mode = &default_mode,
 | 
						.mode = &default_mode,
 | 
				
			||||||
	.invert_mode = true,
 | 
						.invert_mode = true,
 | 
				
			||||||
| 
						 | 
					@ -181,6 +196,14 @@ static const struct st7789_panel_info default_panel = {
 | 
				
			||||||
		     DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
 | 
							     DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const struct st7789_panel_info t28cp45tn89_panel = {
 | 
				
			||||||
 | 
						.mode = &t28cp45tn89_mode,
 | 
				
			||||||
 | 
						.invert_mode = false,
 | 
				
			||||||
 | 
						.bus_format = MEDIA_BUS_FMT_RGB565_1X16,
 | 
				
			||||||
 | 
						.bus_flags = DRM_BUS_FLAG_DE_HIGH |
 | 
				
			||||||
 | 
							     DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int st7789v_get_modes(struct drm_panel *panel,
 | 
					static int st7789v_get_modes(struct drm_panel *panel,
 | 
				
			||||||
			     struct drm_connector *connector)
 | 
								     struct drm_connector *connector)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -446,12 +469,14 @@ static void st7789v_remove(struct spi_device *spi)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct spi_device_id st7789v_spi_id[] = {
 | 
					static const struct spi_device_id st7789v_spi_id[] = {
 | 
				
			||||||
	{ "st7789v", (unsigned long) &default_panel },
 | 
						{ "st7789v", (unsigned long) &default_panel },
 | 
				
			||||||
 | 
						{ "t28cp45tn89-v17", (unsigned long) &t28cp45tn89_panel },
 | 
				
			||||||
	{ }
 | 
						{ }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
MODULE_DEVICE_TABLE(spi, st7789v_spi_id);
 | 
					MODULE_DEVICE_TABLE(spi, st7789v_spi_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct of_device_id st7789v_of_match[] = {
 | 
					static const struct of_device_id st7789v_of_match[] = {
 | 
				
			||||||
	{ .compatible = "sitronix,st7789v", .data = &default_panel },
 | 
						{ .compatible = "sitronix,st7789v", .data = &default_panel },
 | 
				
			||||||
 | 
						{ .compatible = "inanbo,t28cp45tn89-v17", .data = &t28cp45tn89_panel },
 | 
				
			||||||
	{ }
 | 
						{ }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
MODULE_DEVICE_TABLE(of, st7789v_of_match);
 | 
					MODULE_DEVICE_TABLE(of, st7789v_of_match);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue