* [PATCH 0/2] drm/panel: ilitek-ili9881c: add support for DCLTek DT300249
@ 2026-10-06 18:34 Marc-Olivier Champagne
2026-10-06 18:34 ` [PATCH 1/2] dt-bindings: display: panel: add compatible for DCLTek 300249 5.5in panel Marc-Olivier Champagne
2026-10-06 18:34 ` [PATCH 2/2] drm/panel: ilitek-ili9881c: Add DCLTek 300249 5.5in display Marc-Olivier Champagne
0 siblings, 2 replies; 5+ messages in thread
From: Marc-Olivier Champagne @ 2026-10-06 18:34 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang
Cc: David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Hugo Villeneuve, Marc-Olivier Champagne, dri-devel,
devicetree, linux-kernel, Jerome Oufella, Felix Boucher,
Quentin Lehoux
This series adds support for the DCLTek DT300249 5.5-inch MIPI DSI
panel based on the Ilitek ILI9881C controller.
It documents the new compatible string in the binding and adds the
panel descriptor with its initialization sequence to the driver.
Marc-Olivier Champagne (2):
dt-bindings: display: panel: add compatible for DCLTek 300249 5.5in
panel
drm/panel: ilitek-ili9881c: Add DCLTek 300249 5.5in display
.../display/panel/ilitek,ili9881c.yaml | 1 +
drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 216 ++++++++++++++++++
2 files changed, 217 insertions(+)
base-commit: 54e61ea6c492d69a1717018826d8340810c812eb
--
2.34.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] dt-bindings: display: panel: add compatible for DCLTek 300249 5.5in panel
2026-10-06 18:34 [PATCH 0/2] drm/panel: ilitek-ili9881c: add support for DCLTek DT300249 Marc-Olivier Champagne
@ 2026-10-06 18:34 ` Marc-Olivier Champagne
2026-10-07 10:00 ` Conor Dooley
2026-10-06 18:34 ` [PATCH 2/2] drm/panel: ilitek-ili9881c: Add DCLTek 300249 5.5in display Marc-Olivier Champagne
1 sibling, 1 reply; 5+ messages in thread
From: Marc-Olivier Champagne @ 2026-10-06 18:34 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang
Cc: David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Hugo Villeneuve, Marc-Olivier Champagne, dri-devel,
devicetree, linux-kernel, Jerome Oufella, Felix Boucher,
Quentin Lehoux
The DCLTek dt300249 is a panel using the Ilitek ILI9881C controller.
Add a new compatible for it.
Suggested-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
Signed-off-by: Marc-Olivier Champagne <marc-olivier.champagne@savoirfairelinux.com>
---
.../devicetree/bindings/display/panel/ilitek,ili9881c.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml b/Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml
index 42e35986fbf6..6bcfa67be854 100644
--- a/Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml
+++ b/Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml
@@ -19,6 +19,7 @@ properties:
- ampire,am8001280g
- bananapi,lhr050h41
- bestar,bsd1218-a101kl68
+ - dcltek,dt300249
- feixin,k101-im2byl02
- raspberrypi,dsi-5inch
- raspberrypi,dsi-7inch
--
2.34.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] drm/panel: ilitek-ili9881c: Add DCLTek 300249 5.5in display
2026-10-06 18:34 [PATCH 0/2] drm/panel: ilitek-ili9881c: add support for DCLTek DT300249 Marc-Olivier Champagne
2026-10-06 18:34 ` [PATCH 1/2] dt-bindings: display: panel: add compatible for DCLTek 300249 5.5in panel Marc-Olivier Champagne
@ 2026-10-06 18:34 ` Marc-Olivier Champagne
2026-10-07 13:15 ` Neil Armstrong
1 sibling, 1 reply; 5+ messages in thread
From: Marc-Olivier Champagne @ 2026-10-06 18:34 UTC (permalink / raw)
To: Neil Armstrong, Jessica Zhang
Cc: David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Hugo Villeneuve, Marc-Olivier Champagne, dri-devel,
devicetree, linux-kernel, Jerome Oufella, Felix Boucher,
Quentin Lehoux
The DCLTek dt300249 is an LCD panel using the Ilitek ILI9881C controller.
Add the panel to the driver.
Suggested-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
Signed-off-by: Marc-Olivier Champagne <marc-olivier.champagne@savoirfairelinux.com>
---
drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 216 ++++++++++++++++++
1 file changed, 216 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
index 7bf38e96678a..acc560dc5ea5 100644
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
@@ -2198,6 +2198,195 @@ static const struct ili9881c_instr waveshare_7inch_a_init[] = {
ILI9881C_COMMAND_INSTR(0x36, 0x00),
};
+static const struct ili9881c_instr dt300249_init[] = {
+ ILI9881C_SWITCH_PAGE_INSTR(3),
+ ILI9881C_COMMAND_INSTR(0x01, 0x00),
+ ILI9881C_COMMAND_INSTR(0x02, 0x00),
+ ILI9881C_COMMAND_INSTR(0x03, 0x72),
+ ILI9881C_COMMAND_INSTR(0x04, 0x00),
+ ILI9881C_COMMAND_INSTR(0x05, 0x00),
+ ILI9881C_COMMAND_INSTR(0x06, 0x09),
+ ILI9881C_COMMAND_INSTR(0x07, 0x00),
+ ILI9881C_COMMAND_INSTR(0x08, 0x00),
+ ILI9881C_COMMAND_INSTR(0x09, 0x01),
+ ILI9881C_COMMAND_INSTR(0x0a, 0x00),
+ ILI9881C_COMMAND_INSTR(0x0b, 0x00),
+ ILI9881C_COMMAND_INSTR(0x0c, 0x01),
+ ILI9881C_COMMAND_INSTR(0x0d, 0x00),
+ ILI9881C_COMMAND_INSTR(0x0e, 0x00),
+ ILI9881C_COMMAND_INSTR(0x0f, 0x00),
+ ILI9881C_COMMAND_INSTR(0x10, 0x00),
+ ILI9881C_COMMAND_INSTR(0x11, 0x00),
+ ILI9881C_COMMAND_INSTR(0x12, 0x00),
+ ILI9881C_COMMAND_INSTR(0x13, 0x00),
+ ILI9881C_COMMAND_INSTR(0x14, 0x00),
+ ILI9881C_COMMAND_INSTR(0x15, 0x00),
+ ILI9881C_COMMAND_INSTR(0x16, 0x00),
+ ILI9881C_COMMAND_INSTR(0x17, 0x00),
+ ILI9881C_COMMAND_INSTR(0x18, 0x00),
+ ILI9881C_COMMAND_INSTR(0x19, 0x00),
+ ILI9881C_COMMAND_INSTR(0x1a, 0x00),
+ ILI9881C_COMMAND_INSTR(0x1b, 0x00),
+ ILI9881C_COMMAND_INSTR(0x1c, 0x00),
+ ILI9881C_COMMAND_INSTR(0x1d, 0x00),
+ ILI9881C_COMMAND_INSTR(0x1e, 0x40),
+ ILI9881C_COMMAND_INSTR(0x1f, 0x80),
+ ILI9881C_COMMAND_INSTR(0x20, 0x05),
+ ILI9881C_COMMAND_INSTR(0x21, 0x02),
+ ILI9881C_COMMAND_INSTR(0x22, 0x00),
+ ILI9881C_COMMAND_INSTR(0x23, 0x00),
+ ILI9881C_COMMAND_INSTR(0x24, 0x00),
+ ILI9881C_COMMAND_INSTR(0x25, 0x00),
+ ILI9881C_COMMAND_INSTR(0x26, 0x00),
+ ILI9881C_COMMAND_INSTR(0x27, 0x00),
+ ILI9881C_COMMAND_INSTR(0x28, 0x33),
+ ILI9881C_COMMAND_INSTR(0x29, 0x02),
+ ILI9881C_COMMAND_INSTR(0x2a, 0x00),
+ ILI9881C_COMMAND_INSTR(0x2b, 0x00),
+ ILI9881C_COMMAND_INSTR(0x2c, 0x00),
+ ILI9881C_COMMAND_INSTR(0x2d, 0x00),
+ ILI9881C_COMMAND_INSTR(0x2e, 0x00),
+ ILI9881C_COMMAND_INSTR(0x2f, 0x00),
+ ILI9881C_COMMAND_INSTR(0x30, 0x00),
+ ILI9881C_COMMAND_INSTR(0x31, 0x00),
+ ILI9881C_COMMAND_INSTR(0x32, 0x00),
+ ILI9881C_COMMAND_INSTR(0x33, 0x00),
+ ILI9881C_COMMAND_INSTR(0x34, 0x04),
+ ILI9881C_COMMAND_INSTR(0x35, 0x00),
+ ILI9881C_COMMAND_INSTR(0x36, 0x2a),
+ ILI9881C_COMMAND_INSTR(0x37, 0x00),
+ ILI9881C_COMMAND_INSTR(0x38, 0x3c),
+ ILI9881C_COMMAND_INSTR(0x39, 0x00),
+ ILI9881C_COMMAND_INSTR(0x3a, 0x40),
+ ILI9881C_COMMAND_INSTR(0x3b, 0x40),
+ ILI9881C_COMMAND_INSTR(0x3c, 0x00),
+ ILI9881C_COMMAND_INSTR(0x3d, 0x00),
+ ILI9881C_COMMAND_INSTR(0x3e, 0x00),
+ ILI9881C_COMMAND_INSTR(0x3f, 0x00),
+ ILI9881C_COMMAND_INSTR(0x40, 0x00),
+ ILI9881C_COMMAND_INSTR(0x41, 0x00),
+ ILI9881C_COMMAND_INSTR(0x42, 0x00),
+ ILI9881C_COMMAND_INSTR(0x43, 0x00),
+ ILI9881C_COMMAND_INSTR(0x44, 0x00),
+ ILI9881C_COMMAND_INSTR(0x50, 0x01),
+ ILI9881C_COMMAND_INSTR(0x51, 0x23),
+ ILI9881C_COMMAND_INSTR(0x52, 0x45),
+ ILI9881C_COMMAND_INSTR(0x53, 0x67),
+ ILI9881C_COMMAND_INSTR(0x54, 0x89),
+ ILI9881C_COMMAND_INSTR(0x55, 0xab),
+ ILI9881C_COMMAND_INSTR(0x56, 0x01),
+ ILI9881C_COMMAND_INSTR(0x57, 0x23),
+ ILI9881C_COMMAND_INSTR(0x58, 0x45),
+ ILI9881C_COMMAND_INSTR(0x59, 0x67),
+ ILI9881C_COMMAND_INSTR(0x5a, 0x89),
+ ILI9881C_COMMAND_INSTR(0x5b, 0xab),
+ ILI9881C_COMMAND_INSTR(0x5c, 0xcd),
+ ILI9881C_COMMAND_INSTR(0x5d, 0xef),
+ ILI9881C_COMMAND_INSTR(0x5e, 0x11),
+ ILI9881C_COMMAND_INSTR(0x5f, 0x01),
+ ILI9881C_COMMAND_INSTR(0x60, 0x00),
+ ILI9881C_COMMAND_INSTR(0x61, 0x15),
+ ILI9881C_COMMAND_INSTR(0x62, 0x14),
+ ILI9881C_COMMAND_INSTR(0x63, 0x0e),
+ ILI9881C_COMMAND_INSTR(0x64, 0x0f),
+ ILI9881C_COMMAND_INSTR(0x65, 0x0c),
+ ILI9881C_COMMAND_INSTR(0x66, 0x0d),
+ ILI9881C_COMMAND_INSTR(0x67, 0x06),
+ ILI9881C_COMMAND_INSTR(0x68, 0x02),
+ ILI9881C_COMMAND_INSTR(0x69, 0x02),
+ ILI9881C_COMMAND_INSTR(0x6a, 0x02),
+ ILI9881C_COMMAND_INSTR(0x6b, 0x02),
+ ILI9881C_COMMAND_INSTR(0x6c, 0x02),
+ ILI9881C_COMMAND_INSTR(0x6d, 0x02),
+ ILI9881C_COMMAND_INSTR(0x6e, 0x07),
+ ILI9881C_COMMAND_INSTR(0x6f, 0x02),
+ ILI9881C_COMMAND_INSTR(0x70, 0x02),
+ ILI9881C_COMMAND_INSTR(0x71, 0x02),
+ ILI9881C_COMMAND_INSTR(0x72, 0x02),
+ ILI9881C_COMMAND_INSTR(0x73, 0x02),
+ ILI9881C_COMMAND_INSTR(0x74, 0x02),
+ ILI9881C_COMMAND_INSTR(0x75, 0x01),
+ ILI9881C_COMMAND_INSTR(0x76, 0x00),
+ ILI9881C_COMMAND_INSTR(0x77, 0x14),
+ ILI9881C_COMMAND_INSTR(0x78, 0x15),
+ ILI9881C_COMMAND_INSTR(0x79, 0x0e),
+ ILI9881C_COMMAND_INSTR(0x7a, 0x0f),
+ ILI9881C_COMMAND_INSTR(0x7b, 0x0c),
+ ILI9881C_COMMAND_INSTR(0x7c, 0x0d),
+ ILI9881C_COMMAND_INSTR(0x7d, 0x06),
+ ILI9881C_COMMAND_INSTR(0x7e, 0x02),
+ ILI9881C_COMMAND_INSTR(0x7f, 0x02),
+ ILI9881C_COMMAND_INSTR(0x80, 0x02),
+ ILI9881C_COMMAND_INSTR(0x81, 0x02),
+ ILI9881C_COMMAND_INSTR(0x82, 0x02),
+ ILI9881C_COMMAND_INSTR(0x83, 0x02),
+ ILI9881C_COMMAND_INSTR(0x84, 0x07),
+ ILI9881C_COMMAND_INSTR(0x85, 0x02),
+ ILI9881C_COMMAND_INSTR(0x86, 0x02),
+ ILI9881C_COMMAND_INSTR(0x87, 0x02),
+ ILI9881C_COMMAND_INSTR(0x88, 0x02),
+ ILI9881C_COMMAND_INSTR(0x89, 0x02),
+ ILI9881C_COMMAND_INSTR(0x8a, 0x02),
+ ILI9881C_SWITCH_PAGE_INSTR(4),
+ ILI9881C_COMMAND_INSTR(0x6c, 0x15),
+ ILI9881C_COMMAND_INSTR(0x6e, 0x2a),
+ ILI9881C_COMMAND_INSTR(0x6f, 0x33),
+ ILI9881C_COMMAND_INSTR(0x3a, 0x94),
+ ILI9881C_COMMAND_INSTR(0x8d, 0x1a),
+ ILI9881C_COMMAND_INSTR(0x87, 0xba),
+ ILI9881C_COMMAND_INSTR(0x26, 0x76),
+ ILI9881C_COMMAND_INSTR(0xb2, 0xd1),
+ ILI9881C_COMMAND_INSTR(0xb5, 0x06),
+ ILI9881C_SWITCH_PAGE_INSTR(1),
+ ILI9881C_COMMAND_INSTR(0x22, 0x0a),
+ ILI9881C_COMMAND_INSTR(0x31, 0x00),
+ ILI9881C_COMMAND_INSTR(0x53, 0x84),
+ ILI9881C_COMMAND_INSTR(0x55, 0x8f),
+ ILI9881C_COMMAND_INSTR(0x50, 0xae),
+ ILI9881C_COMMAND_INSTR(0x51, 0xae),
+ ILI9881C_COMMAND_INSTR(0x60, 0x28),
+ ILI9881C_COMMAND_INSTR(0xa0, 0x0f),
+ ILI9881C_COMMAND_INSTR(0xa1, 0x1b),
+ ILI9881C_COMMAND_INSTR(0xa2, 0x28),
+ ILI9881C_COMMAND_INSTR(0xa3, 0x12),
+ ILI9881C_COMMAND_INSTR(0xa4, 0x15),
+ ILI9881C_COMMAND_INSTR(0xa5, 0x28),
+ ILI9881C_COMMAND_INSTR(0xa6, 0x1b),
+ ILI9881C_COMMAND_INSTR(0xa7, 0x1e),
+ ILI9881C_COMMAND_INSTR(0xa8, 0x79),
+ ILI9881C_COMMAND_INSTR(0xa9, 0x1b),
+ ILI9881C_COMMAND_INSTR(0xaa, 0x27),
+ ILI9881C_COMMAND_INSTR(0xab, 0x69),
+ ILI9881C_COMMAND_INSTR(0xac, 0x19),
+ ILI9881C_COMMAND_INSTR(0xad, 0x18),
+ ILI9881C_COMMAND_INSTR(0xae, 0x4c),
+ ILI9881C_COMMAND_INSTR(0xaf, 0x21),
+ ILI9881C_COMMAND_INSTR(0xb0, 0x28),
+ ILI9881C_COMMAND_INSTR(0xb1, 0x52),
+ ILI9881C_COMMAND_INSTR(0xb2, 0x65),
+ ILI9881C_COMMAND_INSTR(0xb3, 0x3f),
+ ILI9881C_COMMAND_INSTR(0xc0, 0x04),
+ ILI9881C_COMMAND_INSTR(0xc1, 0x1b),
+ ILI9881C_COMMAND_INSTR(0xc2, 0x27),
+ ILI9881C_COMMAND_INSTR(0xc3, 0x13),
+ ILI9881C_COMMAND_INSTR(0xc4, 0x15),
+ ILI9881C_COMMAND_INSTR(0xc5, 0x28),
+ ILI9881C_COMMAND_INSTR(0xc6, 0x1c),
+ ILI9881C_COMMAND_INSTR(0xc7, 0x1e),
+ ILI9881C_COMMAND_INSTR(0xc8, 0x79),
+ ILI9881C_COMMAND_INSTR(0xc9, 0x1a),
+ ILI9881C_COMMAND_INSTR(0xca, 0x27),
+ ILI9881C_COMMAND_INSTR(0xcb, 0x69),
+ ILI9881C_COMMAND_INSTR(0xcc, 0x1a),
+ ILI9881C_COMMAND_INSTR(0xcd, 0x18),
+ ILI9881C_COMMAND_INSTR(0xce, 0x4c),
+ ILI9881C_COMMAND_INSTR(0xcf, 0x21),
+ ILI9881C_COMMAND_INSTR(0xd0, 0x27),
+ ILI9881C_COMMAND_INSTR(0xd1, 0x52),
+ ILI9881C_COMMAND_INSTR(0xd2, 0x65),
+ ILI9881C_COMMAND_INSTR(0xd3, 0x3f),
+};
+
static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel)
{
return container_of(panel, struct ili9881c, panel);
@@ -2493,6 +2682,23 @@ static const struct drm_display_mode waveshare_7inch_a_mode = {
.height_mm = 154,
};
+static const struct drm_display_mode dt300249_default_mode = {
+ .clock = 62000,
+
+ .hdisplay = 720,
+ .hsync_start = 720 + 10, /* HFP = 10 */
+ .hsync_end = 720 + 10 + 20, /* HSYNC = 20 */
+ .htotal = 720 + 10 + 20 + 20, /* HBP = 20, htotal = 770 */
+
+ .vdisplay = 1280,
+ .vsync_start = 1280 + 10, /* VFP = 10 */
+ .vsync_end = 1280 + 10 + 10, /* VSYNC = 10 */
+ .vtotal = 1280 + 10 + 10 + 20, /* VBP = 20, vtotal = 1320 */
+
+ .width_mm = 68,
+ .height_mm = 121,
+};
+
static int ili9881c_get_modes(struct drm_panel *panel,
struct drm_connector *connector)
{
@@ -2698,9 +2904,19 @@ static const struct ili9881c_desc waveshare_7inch_a_desc = {
.lanes = 2,
};
+static const struct ili9881c_desc dt300249_desc = {
+ .init = dt300249_init,
+ .init_length = ARRAY_SIZE(dt300249_init),
+ .mode = &dt300249_default_mode,
+ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
+ MIPI_DSI_MODE_LPM,
+ .lanes = 4,
+};
+
static const struct of_device_id ili9881c_of_match[] = {
{ .compatible = "bananapi,lhr050h41", .data = &lhr050h41_desc },
{ .compatible = "bestar,bsd1218-a101kl68", .data = &bsd1218_a101kl68_desc },
+ { .compatible = "dcltek,dt300249", .data = &dt300249_desc },
{ .compatible = "feixin,k101-im2byl02", .data = &k101_im2byl02_desc },
{ .compatible = "startek,kd050hdfia020", .data = &kd050hdfia020_desc },
{ .compatible = "tdo,tl050hdv35", .data = &tl050hdv35_desc },
--
2.34.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] dt-bindings: display: panel: add compatible for DCLTek 300249 5.5in panel
2026-10-06 18:34 ` [PATCH 1/2] dt-bindings: display: panel: add compatible for DCLTek 300249 5.5in panel Marc-Olivier Champagne
@ 2026-10-07 10:00 ` Conor Dooley
0 siblings, 0 replies; 5+ messages in thread
From: Conor Dooley @ 2026-10-07 10:00 UTC (permalink / raw)
To: Marc-Olivier Champagne
Cc: Neil Armstrong, Jessica Zhang, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Hugo Villeneuve, dri-devel,
devicetree, linux-kernel, Jerome Oufella, Felix Boucher,
Quentin Lehoux
[-- Attachment #1: Type: text/plain, Size: 75 bytes --]
Acked-by: Conor Dooley <conor.dooley@microchip.com>
pw-bot: not-applicable
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] drm/panel: ilitek-ili9881c: Add DCLTek 300249 5.5in display
2026-10-06 18:34 ` [PATCH 2/2] drm/panel: ilitek-ili9881c: Add DCLTek 300249 5.5in display Marc-Olivier Champagne
@ 2026-10-07 13:15 ` Neil Armstrong
0 siblings, 0 replies; 5+ messages in thread
From: Neil Armstrong @ 2026-10-07 13:15 UTC (permalink / raw)
To: Marc-Olivier Champagne, Jessica Zhang
Cc: David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Hugo Villeneuve, dri-devel, devicetree,
linux-kernel, Jerome Oufella, Felix Boucher, Quentin Lehoux
On 10/6/26 20:34, Marc-Olivier Champagne wrote:
> The DCLTek dt300249 is an LCD panel using the Ilitek ILI9881C controller.
> Add the panel to the driver.
>
> Suggested-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> Signed-off-by: Marc-Olivier Champagne <marc-olivier.champagne@savoirfairelinux.com>
> ---
> drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 216 ++++++++++++++++++
> 1 file changed, 216 insertions(+)
>
> diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> index 7bf38e96678a..acc560dc5ea5 100644
> --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
> @@ -2198,6 +2198,195 @@ static const struct ili9881c_instr waveshare_7inch_a_init[] = {
> ILI9881C_COMMAND_INSTR(0x36, 0x00),
> };
>
> +static const struct ili9881c_instr dt300249_init[] = {
> + ILI9881C_SWITCH_PAGE_INSTR(3),
> + ILI9881C_COMMAND_INSTR(0x01, 0x00),
> + ILI9881C_COMMAND_INSTR(0x02, 0x00),
> + ILI9881C_COMMAND_INSTR(0x03, 0x72),
> + ILI9881C_COMMAND_INSTR(0x04, 0x00),
> + ILI9881C_COMMAND_INSTR(0x05, 0x00),
> + ILI9881C_COMMAND_INSTR(0x06, 0x09),
> + ILI9881C_COMMAND_INSTR(0x07, 0x00),
> + ILI9881C_COMMAND_INSTR(0x08, 0x00),
> + ILI9881C_COMMAND_INSTR(0x09, 0x01),
> + ILI9881C_COMMAND_INSTR(0x0a, 0x00),
> + ILI9881C_COMMAND_INSTR(0x0b, 0x00),
> + ILI9881C_COMMAND_INSTR(0x0c, 0x01),
> + ILI9881C_COMMAND_INSTR(0x0d, 0x00),
> + ILI9881C_COMMAND_INSTR(0x0e, 0x00),
> + ILI9881C_COMMAND_INSTR(0x0f, 0x00),
> + ILI9881C_COMMAND_INSTR(0x10, 0x00),
> + ILI9881C_COMMAND_INSTR(0x11, 0x00),
> + ILI9881C_COMMAND_INSTR(0x12, 0x00),
> + ILI9881C_COMMAND_INSTR(0x13, 0x00),
> + ILI9881C_COMMAND_INSTR(0x14, 0x00),
> + ILI9881C_COMMAND_INSTR(0x15, 0x00),
> + ILI9881C_COMMAND_INSTR(0x16, 0x00),
> + ILI9881C_COMMAND_INSTR(0x17, 0x00),
> + ILI9881C_COMMAND_INSTR(0x18, 0x00),
> + ILI9881C_COMMAND_INSTR(0x19, 0x00),
> + ILI9881C_COMMAND_INSTR(0x1a, 0x00),
> + ILI9881C_COMMAND_INSTR(0x1b, 0x00),
> + ILI9881C_COMMAND_INSTR(0x1c, 0x00),
> + ILI9881C_COMMAND_INSTR(0x1d, 0x00),
> + ILI9881C_COMMAND_INSTR(0x1e, 0x40),
> + ILI9881C_COMMAND_INSTR(0x1f, 0x80),
> + ILI9881C_COMMAND_INSTR(0x20, 0x05),
> + ILI9881C_COMMAND_INSTR(0x21, 0x02),
> + ILI9881C_COMMAND_INSTR(0x22, 0x00),
> + ILI9881C_COMMAND_INSTR(0x23, 0x00),
> + ILI9881C_COMMAND_INSTR(0x24, 0x00),
> + ILI9881C_COMMAND_INSTR(0x25, 0x00),
> + ILI9881C_COMMAND_INSTR(0x26, 0x00),
> + ILI9881C_COMMAND_INSTR(0x27, 0x00),
> + ILI9881C_COMMAND_INSTR(0x28, 0x33),
> + ILI9881C_COMMAND_INSTR(0x29, 0x02),
> + ILI9881C_COMMAND_INSTR(0x2a, 0x00),
> + ILI9881C_COMMAND_INSTR(0x2b, 0x00),
> + ILI9881C_COMMAND_INSTR(0x2c, 0x00),
> + ILI9881C_COMMAND_INSTR(0x2d, 0x00),
> + ILI9881C_COMMAND_INSTR(0x2e, 0x00),
> + ILI9881C_COMMAND_INSTR(0x2f, 0x00),
> + ILI9881C_COMMAND_INSTR(0x30, 0x00),
> + ILI9881C_COMMAND_INSTR(0x31, 0x00),
> + ILI9881C_COMMAND_INSTR(0x32, 0x00),
> + ILI9881C_COMMAND_INSTR(0x33, 0x00),
> + ILI9881C_COMMAND_INSTR(0x34, 0x04),
> + ILI9881C_COMMAND_INSTR(0x35, 0x00),
> + ILI9881C_COMMAND_INSTR(0x36, 0x2a),
> + ILI9881C_COMMAND_INSTR(0x37, 0x00),
> + ILI9881C_COMMAND_INSTR(0x38, 0x3c),
> + ILI9881C_COMMAND_INSTR(0x39, 0x00),
> + ILI9881C_COMMAND_INSTR(0x3a, 0x40),
> + ILI9881C_COMMAND_INSTR(0x3b, 0x40),
> + ILI9881C_COMMAND_INSTR(0x3c, 0x00),
> + ILI9881C_COMMAND_INSTR(0x3d, 0x00),
> + ILI9881C_COMMAND_INSTR(0x3e, 0x00),
> + ILI9881C_COMMAND_INSTR(0x3f, 0x00),
> + ILI9881C_COMMAND_INSTR(0x40, 0x00),
> + ILI9881C_COMMAND_INSTR(0x41, 0x00),
> + ILI9881C_COMMAND_INSTR(0x42, 0x00),
> + ILI9881C_COMMAND_INSTR(0x43, 0x00),
> + ILI9881C_COMMAND_INSTR(0x44, 0x00),
> + ILI9881C_COMMAND_INSTR(0x50, 0x01),
> + ILI9881C_COMMAND_INSTR(0x51, 0x23),
> + ILI9881C_COMMAND_INSTR(0x52, 0x45),
> + ILI9881C_COMMAND_INSTR(0x53, 0x67),
> + ILI9881C_COMMAND_INSTR(0x54, 0x89),
> + ILI9881C_COMMAND_INSTR(0x55, 0xab),
> + ILI9881C_COMMAND_INSTR(0x56, 0x01),
> + ILI9881C_COMMAND_INSTR(0x57, 0x23),
> + ILI9881C_COMMAND_INSTR(0x58, 0x45),
> + ILI9881C_COMMAND_INSTR(0x59, 0x67),
> + ILI9881C_COMMAND_INSTR(0x5a, 0x89),
> + ILI9881C_COMMAND_INSTR(0x5b, 0xab),
> + ILI9881C_COMMAND_INSTR(0x5c, 0xcd),
> + ILI9881C_COMMAND_INSTR(0x5d, 0xef),
> + ILI9881C_COMMAND_INSTR(0x5e, 0x11),
> + ILI9881C_COMMAND_INSTR(0x5f, 0x01),
> + ILI9881C_COMMAND_INSTR(0x60, 0x00),
> + ILI9881C_COMMAND_INSTR(0x61, 0x15),
> + ILI9881C_COMMAND_INSTR(0x62, 0x14),
> + ILI9881C_COMMAND_INSTR(0x63, 0x0e),
> + ILI9881C_COMMAND_INSTR(0x64, 0x0f),
> + ILI9881C_COMMAND_INSTR(0x65, 0x0c),
> + ILI9881C_COMMAND_INSTR(0x66, 0x0d),
> + ILI9881C_COMMAND_INSTR(0x67, 0x06),
> + ILI9881C_COMMAND_INSTR(0x68, 0x02),
> + ILI9881C_COMMAND_INSTR(0x69, 0x02),
> + ILI9881C_COMMAND_INSTR(0x6a, 0x02),
> + ILI9881C_COMMAND_INSTR(0x6b, 0x02),
> + ILI9881C_COMMAND_INSTR(0x6c, 0x02),
> + ILI9881C_COMMAND_INSTR(0x6d, 0x02),
> + ILI9881C_COMMAND_INSTR(0x6e, 0x07),
> + ILI9881C_COMMAND_INSTR(0x6f, 0x02),
> + ILI9881C_COMMAND_INSTR(0x70, 0x02),
> + ILI9881C_COMMAND_INSTR(0x71, 0x02),
> + ILI9881C_COMMAND_INSTR(0x72, 0x02),
> + ILI9881C_COMMAND_INSTR(0x73, 0x02),
> + ILI9881C_COMMAND_INSTR(0x74, 0x02),
> + ILI9881C_COMMAND_INSTR(0x75, 0x01),
> + ILI9881C_COMMAND_INSTR(0x76, 0x00),
> + ILI9881C_COMMAND_INSTR(0x77, 0x14),
> + ILI9881C_COMMAND_INSTR(0x78, 0x15),
> + ILI9881C_COMMAND_INSTR(0x79, 0x0e),
> + ILI9881C_COMMAND_INSTR(0x7a, 0x0f),
> + ILI9881C_COMMAND_INSTR(0x7b, 0x0c),
> + ILI9881C_COMMAND_INSTR(0x7c, 0x0d),
> + ILI9881C_COMMAND_INSTR(0x7d, 0x06),
> + ILI9881C_COMMAND_INSTR(0x7e, 0x02),
> + ILI9881C_COMMAND_INSTR(0x7f, 0x02),
> + ILI9881C_COMMAND_INSTR(0x80, 0x02),
> + ILI9881C_COMMAND_INSTR(0x81, 0x02),
> + ILI9881C_COMMAND_INSTR(0x82, 0x02),
> + ILI9881C_COMMAND_INSTR(0x83, 0x02),
> + ILI9881C_COMMAND_INSTR(0x84, 0x07),
> + ILI9881C_COMMAND_INSTR(0x85, 0x02),
> + ILI9881C_COMMAND_INSTR(0x86, 0x02),
> + ILI9881C_COMMAND_INSTR(0x87, 0x02),
> + ILI9881C_COMMAND_INSTR(0x88, 0x02),
> + ILI9881C_COMMAND_INSTR(0x89, 0x02),
> + ILI9881C_COMMAND_INSTR(0x8a, 0x02),
> + ILI9881C_SWITCH_PAGE_INSTR(4),
> + ILI9881C_COMMAND_INSTR(0x6c, 0x15),
> + ILI9881C_COMMAND_INSTR(0x6e, 0x2a),
> + ILI9881C_COMMAND_INSTR(0x6f, 0x33),
> + ILI9881C_COMMAND_INSTR(0x3a, 0x94),
> + ILI9881C_COMMAND_INSTR(0x8d, 0x1a),
> + ILI9881C_COMMAND_INSTR(0x87, 0xba),
> + ILI9881C_COMMAND_INSTR(0x26, 0x76),
> + ILI9881C_COMMAND_INSTR(0xb2, 0xd1),
> + ILI9881C_COMMAND_INSTR(0xb5, 0x06),
> + ILI9881C_SWITCH_PAGE_INSTR(1),
> + ILI9881C_COMMAND_INSTR(0x22, 0x0a),
> + ILI9881C_COMMAND_INSTR(0x31, 0x00),
> + ILI9881C_COMMAND_INSTR(0x53, 0x84),
> + ILI9881C_COMMAND_INSTR(0x55, 0x8f),
> + ILI9881C_COMMAND_INSTR(0x50, 0xae),
> + ILI9881C_COMMAND_INSTR(0x51, 0xae),
> + ILI9881C_COMMAND_INSTR(0x60, 0x28),
> + ILI9881C_COMMAND_INSTR(0xa0, 0x0f),
> + ILI9881C_COMMAND_INSTR(0xa1, 0x1b),
> + ILI9881C_COMMAND_INSTR(0xa2, 0x28),
> + ILI9881C_COMMAND_INSTR(0xa3, 0x12),
> + ILI9881C_COMMAND_INSTR(0xa4, 0x15),
> + ILI9881C_COMMAND_INSTR(0xa5, 0x28),
> + ILI9881C_COMMAND_INSTR(0xa6, 0x1b),
> + ILI9881C_COMMAND_INSTR(0xa7, 0x1e),
> + ILI9881C_COMMAND_INSTR(0xa8, 0x79),
> + ILI9881C_COMMAND_INSTR(0xa9, 0x1b),
> + ILI9881C_COMMAND_INSTR(0xaa, 0x27),
> + ILI9881C_COMMAND_INSTR(0xab, 0x69),
> + ILI9881C_COMMAND_INSTR(0xac, 0x19),
> + ILI9881C_COMMAND_INSTR(0xad, 0x18),
> + ILI9881C_COMMAND_INSTR(0xae, 0x4c),
> + ILI9881C_COMMAND_INSTR(0xaf, 0x21),
> + ILI9881C_COMMAND_INSTR(0xb0, 0x28),
> + ILI9881C_COMMAND_INSTR(0xb1, 0x52),
> + ILI9881C_COMMAND_INSTR(0xb2, 0x65),
> + ILI9881C_COMMAND_INSTR(0xb3, 0x3f),
> + ILI9881C_COMMAND_INSTR(0xc0, 0x04),
> + ILI9881C_COMMAND_INSTR(0xc1, 0x1b),
> + ILI9881C_COMMAND_INSTR(0xc2, 0x27),
> + ILI9881C_COMMAND_INSTR(0xc3, 0x13),
> + ILI9881C_COMMAND_INSTR(0xc4, 0x15),
> + ILI9881C_COMMAND_INSTR(0xc5, 0x28),
> + ILI9881C_COMMAND_INSTR(0xc6, 0x1c),
> + ILI9881C_COMMAND_INSTR(0xc7, 0x1e),
> + ILI9881C_COMMAND_INSTR(0xc8, 0x79),
> + ILI9881C_COMMAND_INSTR(0xc9, 0x1a),
> + ILI9881C_COMMAND_INSTR(0xca, 0x27),
> + ILI9881C_COMMAND_INSTR(0xcb, 0x69),
> + ILI9881C_COMMAND_INSTR(0xcc, 0x1a),
> + ILI9881C_COMMAND_INSTR(0xcd, 0x18),
> + ILI9881C_COMMAND_INSTR(0xce, 0x4c),
> + ILI9881C_COMMAND_INSTR(0xcf, 0x21),
> + ILI9881C_COMMAND_INSTR(0xd0, 0x27),
> + ILI9881C_COMMAND_INSTR(0xd1, 0x52),
> + ILI9881C_COMMAND_INSTR(0xd2, 0x65),
> + ILI9881C_COMMAND_INSTR(0xd3, 0x3f),
> +};
> +
> static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel)
> {
> return container_of(panel, struct ili9881c, panel);
> @@ -2493,6 +2682,23 @@ static const struct drm_display_mode waveshare_7inch_a_mode = {
> .height_mm = 154,
> };
>
> +static const struct drm_display_mode dt300249_default_mode = {
> + .clock = 62000,
> +
> + .hdisplay = 720,
> + .hsync_start = 720 + 10, /* HFP = 10 */
> + .hsync_end = 720 + 10 + 20, /* HSYNC = 20 */
> + .htotal = 720 + 10 + 20 + 20, /* HBP = 20, htotal = 770 */
> +
> + .vdisplay = 1280,
> + .vsync_start = 1280 + 10, /* VFP = 10 */
> + .vsync_end = 1280 + 10 + 10, /* VSYNC = 10 */
> + .vtotal = 1280 + 10 + 10 + 20, /* VBP = 20, vtotal = 1320 */
> +
> + .width_mm = 68,
> + .height_mm = 121,
> +};
> +
> static int ili9881c_get_modes(struct drm_panel *panel,
> struct drm_connector *connector)
> {
> @@ -2698,9 +2904,19 @@ static const struct ili9881c_desc waveshare_7inch_a_desc = {
> .lanes = 2,
> };
>
> +static const struct ili9881c_desc dt300249_desc = {
> + .init = dt300249_init,
> + .init_length = ARRAY_SIZE(dt300249_init),
> + .mode = &dt300249_default_mode,
> + .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
> + MIPI_DSI_MODE_LPM,
> + .lanes = 4,
> +};
> +
> static const struct of_device_id ili9881c_of_match[] = {
> { .compatible = "bananapi,lhr050h41", .data = &lhr050h41_desc },
> { .compatible = "bestar,bsd1218-a101kl68", .data = &bsd1218_a101kl68_desc },
> + { .compatible = "dcltek,dt300249", .data = &dt300249_desc },
> { .compatible = "feixin,k101-im2byl02", .data = &k101_im2byl02_desc },
> { .compatible = "startek,kd050hdfia020", .data = &kd050hdfia020_desc },
> { .compatible = "tdo,tl050hdv35", .data = &tl050hdv35_desc },
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Thanks,
Neil
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-10-07 13:15 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-06 18:34 [PATCH 0/2] drm/panel: ilitek-ili9881c: add support for DCLTek DT300249 Marc-Olivier Champagne
2026-10-06 18:34 ` [PATCH 1/2] dt-bindings: display: panel: add compatible for DCLTek 300249 5.5in panel Marc-Olivier Champagne
2026-10-07 10:00 ` Conor Dooley
2026-10-06 18:34 ` [PATCH 2/2] drm/panel: ilitek-ili9881c: Add DCLTek 300249 5.5in display Marc-Olivier Champagne
2026-10-07 13:15 ` Neil Armstrong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®