Hi Marek,

Thanks for the patch.

On 05/09/25 02:26, Marek Vasut wrote:
Add configuration for the 5" Raspberry Pi 720x1280 DSI panel
based on ili9881. This uses 10px longer horizontal sync pulse
and 10px shorter HBP to avoid very short hsync pulse.

Is there a publicly available datasheet for the aforementioned ilitek controller used in the panel, also does the same document also mention the manufacturer specific DSC commands used in rpi_5inch_init[] ?

Also is there a separate document mentioning timing parameters for porch values and sync pulse widths that you are using here for Raspberry Pi 720x1280 DSI panel ?

Regards
Devarsh


Signed-off-by: Marek Vasut <[email protected]>
---
Cc: Conor Dooley <[email protected]>
Cc: Dave Stevenson <[email protected]>
Cc: David Airlie <[email protected]>
Cc: Jessica Zhang <[email protected]>
Cc: Krzysztof Kozlowski <[email protected]>
Cc: Maarten Lankhorst <[email protected]>
Cc: Maxime Ripard <[email protected]>
Cc: Neil Armstrong <[email protected]>
Cc: Rob Herring <[email protected]>
Cc: Simona Vetter <[email protected]>
Cc: Thomas Zimmermann <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
---
V2: Turn ILI9881C_COMMAND_INSTR() params lowercase
---
  drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 214 ++++++++++++++++++
  1 file changed, 214 insertions(+)

diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c 
b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
index fee10546c7c7f..7049e4d23f7f4 100644
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
@@ -1224,6 +1224,194 @@ static const struct ili9881c_instr am8001280g_init[] = {
        ILI9881C_COMMAND_INSTR(MIPI_DCS_WRITE_POWER_SAVE, 0x00),
  };
+static const struct ili9881c_instr rpi_5inch_init[] = {
+       ILI9881C_SWITCH_PAGE_INSTR(3),
+       ILI9881C_COMMAND_INSTR(0x01, 0x00),
+       ILI9881C_COMMAND_INSTR(0x02, 0x00),
+       ILI9881C_COMMAND_INSTR(0x03, 0x73),
+       ILI9881C_COMMAND_INSTR(0x04, 0x73),
+       ILI9881C_COMMAND_INSTR(0x05, 0x00),
+       ILI9881C_COMMAND_INSTR(0x06, 0x06),
+       ILI9881C_COMMAND_INSTR(0x07, 0x02),
+       ILI9881C_COMMAND_INSTR(0x08, 0x00),
+       ILI9881C_COMMAND_INSTR(0x09, 0x01),
+       ILI9881C_COMMAND_INSTR(0x0a, 0x01),
+       ILI9881C_COMMAND_INSTR(0x0b, 0x01),
+       ILI9881C_COMMAND_INSTR(0x0c, 0x01),
+       ILI9881C_COMMAND_INSTR(0x0d, 0x01),
+       ILI9881C_COMMAND_INSTR(0x0e, 0x01),
+       ILI9881C_COMMAND_INSTR(0x0f, 0x01),
+       ILI9881C_COMMAND_INSTR(0x10, 0x01),
+       ILI9881C_COMMAND_INSTR(0x11, 0x00),
+       ILI9881C_COMMAND_INSTR(0x12, 0x00),
+       ILI9881C_COMMAND_INSTR(0x13, 0x01),
+       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, 0xc0),
+       ILI9881C_COMMAND_INSTR(0x1f, 0x80),
+       ILI9881C_COMMAND_INSTR(0x20, 0x04),
+       ILI9881C_COMMAND_INSTR(0x21, 0x03),
+       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, 0x03),
+       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, 0x03),
+       ILI9881C_COMMAND_INSTR(0x35, 0x00),
+       ILI9881C_COMMAND_INSTR(0x36, 0x03),
+       ILI9881C_COMMAND_INSTR(0x37, 0x00),
+       ILI9881C_COMMAND_INSTR(0x38, 0x00),
+       ILI9881C_COMMAND_INSTR(0x39, 0x00),
+       ILI9881C_COMMAND_INSTR(0x3a, 0x00),
+       ILI9881C_COMMAND_INSTR(0x3b, 0x00),
+       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, 0x10),
+       ILI9881C_COMMAND_INSTR(0x5f, 0x09),
+       ILI9881C_COMMAND_INSTR(0x60, 0x08),
+       ILI9881C_COMMAND_INSTR(0x61, 0x0f),
+       ILI9881C_COMMAND_INSTR(0x62, 0x0e),
+       ILI9881C_COMMAND_INSTR(0x63, 0x0d),
+       ILI9881C_COMMAND_INSTR(0x64, 0x0c),
+       ILI9881C_COMMAND_INSTR(0x65, 0x02),
+       ILI9881C_COMMAND_INSTR(0x66, 0x02),
+       ILI9881C_COMMAND_INSTR(0x67, 0x02),
+       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, 0x02),
+       ILI9881C_COMMAND_INSTR(0x6f, 0x02),
+       ILI9881C_COMMAND_INSTR(0x70, 0x02),
+       ILI9881C_COMMAND_INSTR(0x71, 0x06),
+       ILI9881C_COMMAND_INSTR(0x72, 0x07),
+       ILI9881C_COMMAND_INSTR(0x73, 0x02),
+       ILI9881C_COMMAND_INSTR(0x74, 0x02),
+       ILI9881C_COMMAND_INSTR(0x75, 0x06),
+       ILI9881C_COMMAND_INSTR(0x76, 0x07),
+       ILI9881C_COMMAND_INSTR(0x77, 0x0e),
+       ILI9881C_COMMAND_INSTR(0x78, 0x0f),
+       ILI9881C_COMMAND_INSTR(0x79, 0x0c),
+       ILI9881C_COMMAND_INSTR(0x7a, 0x0d),
+       ILI9881C_COMMAND_INSTR(0x7b, 0x02),
+       ILI9881C_COMMAND_INSTR(0x7c, 0x02),
+       ILI9881C_COMMAND_INSTR(0x7d, 0x02),
+       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, 0x02),
+       ILI9881C_COMMAND_INSTR(0x85, 0x02),
+       ILI9881C_COMMAND_INSTR(0x86, 0x02),
+       ILI9881C_COMMAND_INSTR(0x87, 0x09),
+       ILI9881C_COMMAND_INSTR(0x88, 0x08),
+       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, 0x57),
+       ILI9881C_COMMAND_INSTR(0x3a, 0xa4),
+       ILI9881C_COMMAND_INSTR(0x8d, 0x1a),
+       ILI9881C_COMMAND_INSTR(0x87, 0xba),
+       ILI9881C_COMMAND_INSTR(0x26, 0x76),
+       ILI9881C_COMMAND_INSTR(0xb2, 0xd1),
+       ILI9881C_SWITCH_PAGE_INSTR(1),
+       ILI9881C_COMMAND_INSTR(0x22, 0x0a),
+       ILI9881C_COMMAND_INSTR(0x31, 0x00),
+       ILI9881C_COMMAND_INSTR(0x53, 0x35),
+       ILI9881C_COMMAND_INSTR(0x55, 0x50),
+       ILI9881C_COMMAND_INSTR(0x50, 0xaf),
+       ILI9881C_COMMAND_INSTR(0x51, 0xaf),
+       ILI9881C_COMMAND_INSTR(0x60, 0x14),
+       ILI9881C_COMMAND_INSTR(0xa0, 0x08),
+       ILI9881C_COMMAND_INSTR(0xa1, 0x1d),
+       ILI9881C_COMMAND_INSTR(0xa2, 0x2c),
+       ILI9881C_COMMAND_INSTR(0xa3, 0x14),
+       ILI9881C_COMMAND_INSTR(0xa4, 0x19),
+       ILI9881C_COMMAND_INSTR(0xa5, 0x2e),
+       ILI9881C_COMMAND_INSTR(0xa6, 0x22),
+       ILI9881C_COMMAND_INSTR(0xa7, 0x23),
+       ILI9881C_COMMAND_INSTR(0xa8, 0x97),
+       ILI9881C_COMMAND_INSTR(0xa9, 0x1e),
+       ILI9881C_COMMAND_INSTR(0xaa, 0x29),
+       ILI9881C_COMMAND_INSTR(0xab, 0x7b),
+       ILI9881C_COMMAND_INSTR(0xac, 0x18),
+       ILI9881C_COMMAND_INSTR(0xad, 0x17),
+       ILI9881C_COMMAND_INSTR(0xae, 0x4b),
+       ILI9881C_COMMAND_INSTR(0xaf, 0x1f),
+       ILI9881C_COMMAND_INSTR(0xb0, 0x27),
+       ILI9881C_COMMAND_INSTR(0xb1, 0x52),
+       ILI9881C_COMMAND_INSTR(0xb2, 0x63),
+       ILI9881C_COMMAND_INSTR(0xb3, 0x39),
+       ILI9881C_COMMAND_INSTR(0xc0, 0x08),
+       ILI9881C_COMMAND_INSTR(0xc1, 0x1d),
+       ILI9881C_COMMAND_INSTR(0xc2, 0x2c),
+       ILI9881C_COMMAND_INSTR(0xc3, 0x14),
+       ILI9881C_COMMAND_INSTR(0xc4, 0x19),
+       ILI9881C_COMMAND_INSTR(0xc5, 0x2e),
+       ILI9881C_COMMAND_INSTR(0xc6, 0x22),
+       ILI9881C_COMMAND_INSTR(0xc7, 0x23),
+       ILI9881C_COMMAND_INSTR(0xc8, 0x97),
+       ILI9881C_COMMAND_INSTR(0xc9, 0x1e),
+       ILI9881C_COMMAND_INSTR(0xca, 0x29),
+       ILI9881C_COMMAND_INSTR(0xcb, 0x7b),
+       ILI9881C_COMMAND_INSTR(0xcc, 0x18),
+       ILI9881C_COMMAND_INSTR(0xcd, 0x17),
+       ILI9881C_COMMAND_INSTR(0xce, 0x4b),
+       ILI9881C_COMMAND_INSTR(0xcf, 0x1f),
+       ILI9881C_COMMAND_INSTR(0xd0, 0x27),
+       ILI9881C_COMMAND_INSTR(0xd1, 0x52),
+       ILI9881C_COMMAND_INSTR(0xd2, 0x63),
+       ILI9881C_COMMAND_INSTR(0xd3, 0x39),
+};
+
  static const struct ili9881c_instr rpi_7inch_init[] = {
        ILI9881C_SWITCH_PAGE_INSTR(3),
        ILI9881C_COMMAND_INSTR(0x01, 0x00),
@@ -1806,6 +1994,23 @@ static const struct drm_display_mode 
am8001280g_default_mode = {
        .height_mm      = 151,
  };
+static const struct drm_display_mode rpi_5inch_default_mode = {
+       .clock          = 83333,
+
+       .hdisplay       = 720,
+       .hsync_start    = 720 + 110,
+       .hsync_end      = 720 + 110 + 12,
+       .htotal         = 720 + 110 + 12 + 95,
+
+       .vdisplay       = 1280,
+       .vsync_start    = 1280 + 100,
+       .vsync_end      = 1280 + 100 + 2,
+       .vtotal         = 1280 + 100 + 2 + 100,
+
+       .width_mm       = 62,
+       .height_mm      = 110,
+};
+
  static const struct drm_display_mode rpi_7inch_default_mode = {
        .clock          = 83330,
@@ -2000,6 +2205,14 @@ static const struct ili9881c_desc am8001280g_desc = {
                      MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_LPM,
  };
+static const struct ili9881c_desc rpi_5inch_desc = {
+       .init = rpi_5inch_init,
+       .init_length = ARRAY_SIZE(rpi_5inch_init),
+       .mode = &rpi_5inch_default_mode,
+       .mode_flags =  MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_LPM,
+       .lanes = 2,
+};
+
  static const struct ili9881c_desc rpi_7inch_desc = {
        .init = rpi_7inch_init,
        .init_length = ARRAY_SIZE(rpi_7inch_init),
@@ -2025,6 +2238,7 @@ static const struct of_device_id ili9881c_of_match[] = {
        { .compatible = "tdo,tl050hdv35", .data = &tl050hdv35_desc },
        { .compatible = "wanchanglong,w552946aba", .data = &w552946aba_desc },
        { .compatible = "ampire,am8001280g", .data = &am8001280g_desc },
+       { .compatible = "raspberrypi,dsi-5inch", &rpi_5inch_desc },
        { .compatible = "raspberrypi,dsi-7inch", &rpi_7inch_desc },
        { }
  };

Reply via email to