From 7209d2722c06641535136be81944a8f8304f344e Mon Sep 17 00:00:00 2001
From: The-going <48602507+The-going@users.noreply.github.com>
Date: Wed, 2 Feb 2022 19:34:55 +0300
Subject: drv:gpu:drm: panel-simple Add compability olinuxino lcd

---
 drivers/gpu/drm/panel/panel-simple.c | 125 ++++++++++++++++++++++++++-
 1 file changed, 121 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index cf9ab2d1f1d2..4ea9a1fe50de 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -3551,6 +3551,42 @@ static const struct panel_desc okaya_rs800480t_7x0gp = {
 	.bus_format = MEDIA_BUS_FMT_RGB666_1X18,
 };
 
+static const struct drm_display_mode olimex_vga_olinuxino_800_mode = {
+	.clock = 40000,
+	.hdisplay = 800,
+	.hsync_start = 800 + 40,
+	.hsync_end = 800 + 40 + 128,
+	.htotal = 800 + 40 + 128 + 88,
+	.vdisplay = 600,
+	.vsync_start = 600 + 5,
+	.vsync_end = 600 + 5 + 4,
+	.vtotal = 600 + 5 + 4 + 19,
+};
+
+static const struct drm_display_mode olimex_vga_olinuxino_1024_mode = {
+	.clock = 45000,
+	.hdisplay = 1024,
+	.hsync_start = 1024 + 16,
+	.hsync_end = 1024 + 16 + 10,
+	.htotal = 1024 + 16 + 10 + 150,
+	.vdisplay = 600,
+	.vsync_start = 600 + 2,
+	.vsync_end = 600 + 2 + 21,
+	.vtotal = 600 + 2 + 21 + 2,
+};
+
+static const struct drm_display_mode olimex_lcd_olinuxino_43_mode = {
+	.clock = 12000,
+	.hdisplay = 480,
+	.hsync_start = 480 + 8,
+	.hsync_end = 480 + 8 + 20,
+	.htotal = 480 + 8 + 20 + 23,
+	.vdisplay = 272,
+	.vsync_start = 272 + 4,
+	.vsync_end = 272 + 4 + 10,
+	.vtotal = 272 + 4 + 10 + 13,
+};
+
 static const struct drm_display_mode olimex_lcd_olinuxino_43ts_mode = {
 	.clock = 9000,
 	.hdisplay = 480,
@@ -3563,8 +3599,8 @@ static const struct drm_display_mode olimex_lcd_olinuxino_43ts_mode = {
 	.vtotal = 272 + 8 + 5 + 3,
 };
 
-static const struct panel_desc olimex_lcd_olinuxino_43ts = {
-	.modes = &olimex_lcd_olinuxino_43ts_mode,
+static const struct panel_desc olimex_lcd_olinuxino_43 = {
+	.modes = &olimex_lcd_olinuxino_43_mode,
 	.num_modes = 1,
 	.size = {
 		.width = 95,
@@ -3606,6 +3642,72 @@ static const struct panel_desc ontat_kd50g21_40nt_a1 = {
 	.connector_type = DRM_MODE_CONNECTOR_DPI,
 };
 
+static const struct drm_display_mode olimex_lcd_olinuxino_5_mode = {
+	.clock = 33300,
+	.hdisplay = 800,
+	.hsync_start = 800 + 210,
+	.hsync_end = 800 + 210 + 20,
+	.htotal = 800 + 210 + 20 + 26,
+	.vdisplay = 480,
+	.vsync_start = 480 + 22,
+	.vsync_end = 480 + 22 + 10,
+	.vtotal = 480 + 22 + 10 + 13,
+};
+
+static const struct panel_desc olimex_lcd_olinuxino_5 = {
+	.modes = &olimex_lcd_olinuxino_5_mode,
+	.num_modes = 1,
+	.size = {
+		.width = 154,
+		.height = 86,
+	},
+	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
+};
+
+static const struct drm_display_mode olimex_lcd_olinuxino_7_mode = {
+	.clock = 33300,
+	.hdisplay = 800,
+	.hsync_start = 800 + 210,
+	.hsync_end = 800 + 210 + 20,
+	.htotal = 800 + 210 + 20 + 26,
+	.vdisplay = 480,
+	.vsync_start = 480 + 22,
+	.vsync_end = 480 + 22 + 10,
+	.vtotal = 480 + 22 + 10 + 13,
+};
+
+static const struct panel_desc olimex_lcd_olinuxino_7 = {
+	.modes = &olimex_lcd_olinuxino_7_mode,
+	.num_modes = 1,
+	.size = {
+		.width = 154,
+		.height = 86,
+	},
+	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
+};
+
+static const struct drm_display_mode olimex_lcd_olinuxino_10_mode = {
+	.clock = 45000,
+	.hdisplay = 1024,
+	.hsync_start = 1024 + 16,
+	.hsync_end = 1024 + 16 + 1,
+	.htotal = 1024 + 10 + 6 + 160,
+	.vdisplay = 600,
+	.vsync_start = 600 + 1,
+	.vsync_end = 600 + 1 + 1,
+	.vtotal = 600 + 1 + 1 + 22,
+};
+
+static const struct panel_desc olimex_lcd_olinuxino_10 = {
+	.modes = &olimex_lcd_olinuxino_10_mode,
+	.num_modes = 1,
+	.size = {
+		.width = 222,
+		.height = 143,
+	},
+	.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
+};
+
 /*
  * 800x480 CVT. The panel appears to be quite accepting, at least as far as
  * pixel clocks, but this is the timing that was being used in the Adafruit
@@ -5067,8 +5169,23 @@ static const struct of_device_id platform_of_match[] = {
 		.compatible = "okaya,rs800480t-7x0gp",
 		.data = &okaya_rs800480t_7x0gp,
 	}, {
-		.compatible = "olimex,lcd-olinuxino-43-ts",
-		.data = &olimex_lcd_olinuxino_43ts,
+		.compatible = "olimex,olinuxino-vga-800x600",
+		.data = &olimex_vga_olinuxino_800_mode,
+	}, {
+		.compatible = "olimex,olinuxino-vga-1024x768",
+		.data = &olimex_vga_olinuxino_1024_mode,
+	}, {
+		.compatible = "olimex,lcd-olinuxino-4.3",
+		.data = &olimex_lcd_olinuxino_43,
+	}, {
+		.compatible = "olimex,lcd-olinuxino-5",
+		.data = &olimex_lcd_olinuxino_5,
+	}, {
+		.compatible = "olimex,lcd-olinuxino-7",
+		.data = &olimex_lcd_olinuxino_7,
+	}, {
+		.compatible = "olimex,lcd-olinuxino-10",
+		.data = &olimex_lcd_olinuxino_10,
 	}, {
 		.compatible = "ontat,kd50g21-40nt-a1",
 		.data = &ontat_kd50g21_40nt_a1,
-- 
2.35.3

